0x01 malware forensics2010. 8. 20. 09:08

11. Incident Response Tool Suites for Windows

침해사고 분석에 사용되는 툴킷은 여러가지 종류가 있습니다. 이런 툴 중 어떤 툴들은 침해당한 시스템에서 명령을 실행하고 침해당한 시스템 라이브러리를 사용하기도 합니다. 물론 침해당한 시스템 라이브러리를 사용하는 것이 증거 확보에 있어서 좋지 않다는 것은 다들 아실겁니다. 예를 들어 시스템콜을 후킹해서 자신의 흔적을 삭제하는 루트킷을 찾는 경우 침해당한 시스템 라이브러리를 사용하게 되면 못찾을 가능성이 99% 정도 됩니다.(1%는 재수 좋을 경우를 대비해서...-_-;;)

Helix Live CD는 휘발성 데이터를 수집하는데 유용한 툴입니다. 물론 윈도우 계열이나 유닉스 계열 시스템에서 모두 사용 가능합니다. Helix는 Chapter 1. #1에서 간단히 언급했었고 (http://malwarelab.tistory.com/4) Helix CD는 WFT를 포함하고 있습니다.


11.1 Windows Forensic Toolchest


WFT는 여러가지 툴들을 이용해서 일관된 정보를 수집하기 위한 프레임웍을 제공한다. 프로그램들은 자동으로 정해진 순서대로 실행됩니다. 그리고 MD5 해쉬값이나 감사 정보를 지원하기 위한 프로세스 정보 수집이나 원하는 데이터의 무결성 정보들을  문서화해줍니다. 하지만 삭제된 파일을 찾지 못합니다.

하지만 WFT의 가장 큰 단점은 침해당한 시스템의 운영체제에 의존적이라는 것입니다. 일부 악성코드들은 운영체제에 의존적인 침해사고 분석 툴로부터 자신들의 정보를 숨깁니다. 즉, 특정 프로그램이 실행될 때 사용되는 라이브러리(dll)들을 이미 침해당한 시스템의 것들을 사용한다는 것이죠..

예를 들어, HackerDefender와 같은 루트킷은 운영체제로부터 루트킷 파일들을 숨깁니다. 만약 루트킷이 설치되어 있다면 WFT에서 사용하는 명령어가 신뢰할 수 있는 명령어라 할지라도 잘못된 결과를 가져올 수 있습니다.


ProDiscoverIR

http://www.techpathways.com/ProDiscoverIR.htm

상용프로그램입니다. 비트 레벨에서 동작하기 때문에 숨겨진 파일들도 찾아낼 수 있습니다.
아래 그림은 ProDiscoverIR으로 HackerDefender 루트킷을 확인한 모습입니다.



하지만 몇몇 루트킷이나 안티포렌식 기법을 사용하면 ProDiscoverIR과 같은 원격 포렌식툴로부터 몇몇 정보나 숨겨진 프로세스들을 숨길 수 있습니다.

운영중인 시스템에서 분석툴을 사용하는 것은 중요한 증거들을 덮어쓰거나 프로그램 오류를 발생시킬 수 있습니다. 이런 프로그램 오류가 발생할 경우 디스크에 덤프파일을 생성하는데 이렇게 생성된 덤프파일에 의해 기존에 존재하던 덤프파일이나 악성코드와 관련 있는 다른 중요한 정보들을 덮어써버릴 가능성고 있습니다.

이러한 이유로 전체 메모리 덤프(full memory dump)를 떠서 분석하는 방법이 중요시되고 있습니다.


OnlineDFS/LiveWire

http://www.cyberstc.com/products_dfs.asp 
(책에 있는 링크가 바뀐걸 보니 다른 회사와 합병된 듯...)

OnlineDFS는 원격 윈도우 컴퓨터에서 휘발성 데이터를 수집하는 것이 가능하고 전체 메모리 덤프도 가능합니다.
이 툴은 원격 시스템에서 명령을 실행하기 위해 SMB 프로토콜을 이용합니다.



EnCase Enterprise로 전체 메모리 덤프를 뜰 수 있습니다. 그리고 원격 컴퓨터에서 휘발성 데이터를 점검하는데도 사용될 수 있습고 실행중인 프로세스나 네트워크 연결, 열인 포트, 열린 파일과 같은 중요한 정보를 보호하는데에도 사용될 수 있습니다.


Regimented Potential Incident Examination Report (RPIER)

http://sourceforge.net/projects/rpier/

RPIER은 분석 대상 시스템에서 휘발성 및 비휘발성 데이터를 자동으로 수집하는 프레임웍이나 엔진으로 제공됩니다.
특별한 경우에는 RPIER 프레임웍을 운영중인 시스템의 외장 저장장치(USB와 같은)에서 실행하는 것을 고려해봐야 합니다. RPIER이 실행되는 동안에 여러가지 모듈들이 실행되고 분석 대상 시스템에서 정보를 수집한다. 수집된 정보는 중앙 저장소에  업로드되거나 로컬에 있는 외부 저장장치에 저장됩니다. RPIER은 .NET framework 1.1 이상이 설치되어 있어야 합니다.

RPIER은 3가지 스캐닝 모드를 가지고 있습니다. Fast, Slow, Special.
3가지 모드에 대한 자세한 사항은 아래 URL을 참고하시기 바랍니다.

http://www.first.org/conference/2006/papers/mancini-steve-papers.pdf
http://www.first.org/conference/2006/papers/mancini-steve-slides.pdf
http://www.first.org/conference/2006/program/rapier_-_a_1st_responders_info_collection_tool.html
http://code.google.com/p/rapier/downloads/list



제 시스템이 이상한건지 아니면 환경이 잘못된건지 프로그램 종료시 정상 종료가 안됩니다. -_-;;
깜박깜박이다가 멈추도 CPU 사용량로 50%까지 올라가길래 강제로 종료를 했습니다. 일단 참고만 하시는게 좋을듯 합니다.


Nigilant32

이 툴은 GUI 기반 툴로 운영중인 윈도우 시스템에서(Windows 2000, XP, 2003) 휘발성 정보를 수집합니다. Nigilant32는 Helix CD에 포함되어 있습니다. 이 툴이 제공하는 정보는 다음과 같습니다.

  • System Snapshot : 실행중인 프로세스, 서비스, 사용자 계정, 스케줄 작업, 네트워크 연결 등등
  • Filesystem Review : 숨겨진 파일 및 폴더, 최근에 삭제된 컨텐츠
  • Active Memory Imaging

그 밖에 Live Response Tool Suites









정말 오랜만에 Malware Forensic 요약 글 씁니다..(1년 넘었다...어쩔꺼냐...-_-;;)

게으른탓에 Chapter 1이 1년이 넘어선 후에야 끝나게 됐군요..

앞으로 더 열심히하겠다는 약속은 드리겠지만...ㅜ.ㅜ

나태해져가는 제 모습이 저도 안타깝습니다.


마지막은 툴에 대한 언급이 많아 일단 적당히 적었습니다.

나중에 기회가 된다면 여러가지 툴 사용법이나 활용법(요게 더 낫겠네요)에 대해서 포스팅하는게 나을 듯 합니다.


Chapter 10까지 있는데...








Posted by demantos
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
0x01 malware forensics2009. 3. 2. 20:39

3. Collecting Process Information

대부분의 악성코드들은 프로세스에서 확인할 수 있다. 공격자들이 발각되지 않고 감염된 시스템을 제어할려고 하는 것처럼 악성코드 프로세스들도 위장된 이름을 사용하거나 "scvhost"와 같이 애매한 프로세스 이름을 사용하여 자신들을 은닉시키려고 한다. scvhost라는 프로세스 이름(파일명)도 사용하지만 svch0st나 suvhost와 같은 이름도 사용한다. 즉, 분석자들은 프로세스 이름을 대충 보아서는 안되고 세심하게 살펴 보아야 한다.

프로세스에 대한 정보와 그 프로세스들이 다른 정보들과 어떤 연관성이 있는지 알아야 한다. 프로세스와 관련된 정보 수집에서는 다음과 같은 세부사항들을 수집한다.

  - 프로세스 이름과 PID
  - Temporal Context
  - 메모리 사용량
  - 프로세스를 실행 중인 프로그램
  - 프로세스를 실행 중인 사용자
  - 자식 프로세스
  - 불려진 라이브러리(dll)와 종속된 파일
  - 프로세스 실행에 사용된 명령줄 인자
  - 연관된 핸들
  - 프로세스의 메모리 내용
  - 시스템의 상태와 다른 정보들과 연관성 있는 문맥


3.1 Process Name and Process Identification(PID)

프로세스 정보를 수집하는 첫번째 단계는 어떤 프로세스들이 실행되고 있는지 파악하는 것이다. 일반적으로 이름이나 PID에 대해서 먼저 파악한다.
프로세스 정보를 확인하는 다양한 툴들이 있다. 비록 이런 툴들이 중복되는 기능들이 있긴 하지만 여러가지 툴들을 같이 사용하는 것이 좋다. 똑똑한 악성코드들은 시스템의 실행중인 프로세스들을 스캔하여 안티바이러스 프로세스나 방화벽, 침해사고대응 툴들이 실행중인지 확인해서 이런 프로세스들을 죽일려고 할 것이다.

가장 간단하게 프로세스에 대한 정보를 수집하는 방법은 tlist를 사용하는 것이다. tlist는 Windows Debugging Tool 패키지 안에 포함되어 있다.

Debugging Tools for Windows 32-bit

http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a



-t 옵션을 사용하면 트리형태로 보여준다. tlist /? 명령을 실행하면 사용 가능한 옵션들을 더 볼 수 있다.

그리고 비슷한 기능을 하는 PRCView가 있다. PRCView는 http://www.teamcti.com/pview/prcview.htm 에서 다운 받을 수 있다.



필자는 process explorer에 익숙해져 있어서 PRCView를 그리 자주 사용하지 않을 것 같다. 하지만 PRCView도 많은 기능들을 제공하고 있다. 특히 마음에 드는 기능은 Process Monitor 기능이다. Tools --> Process Monitor를 선택하면 프로세스 모니터를 실행시킨 이후에 실행되는 프로세스들을 순서대로 보여준다.



tlist만으로는 분석자에게 약간 정보가 부족할 수 있다. 분석자에게 프로세스가 실행중인 시간 또한 중요하다. tlist는 프로세스 실행 시간에 관련된 정보가 없다. 물론 PRCView에서는 Start Time과 End Time이 있긴 하지만...
프로세스 지속 시간은 시스템 uptime이나 프로세스가 연결된 타임라인과 같은 다른 의미있는 시스템 정보와 비교될 수 있다. 그리고 새로운 서비스의 추가라던지 네트워크 연결, 의심가는 이벤트 뷰어 로그, Prefetch 파일 엔트리와 같은 시스템 이벤트와도 비교될 수 있다.

이런 프로세스의 실행 시간은 pslist 명령을 통해서 확인할 수 있다. pslist는 PsTools suite에서 구할 수 있다.



그리고 우리는 특정 프로세스가 사용 중인 시스템 리소스를 알고 싶어할 수 있다. 종종 악성코드들은이 활성화되면 눈에 띄게 리소스를 소비한다. 특히, 램 용량이 2기가 미만인 경우에...
메모리 사용량을 확인할 수 있는 툴도 여러가지가 있는데 그 중에서 특히 다재다능한(^^) 툴이 윈도우에 기본으로 내장된 tasklist라는 툴이다. tasklist는 우리가 흔히 알고 있는 작업관리자(taskmgr)의 CLI 버전이라고 생각하면 되겠다.



위 명령들보다 좀 더 세부적인 내용을 보여주는 툴로 pmon, pstat, memsnap 과 같은 툴들이 있다. 모두 Windows XP Service Pack 2 Support Tools 패키지에서 구할 수 있다. http://www.microsoft.com/downloads/details.aspx?FamilyID=49ae8576-9bb9-4126-9761-ba8011fabf38&displaylang=en


3.2 Process to Executable Program Mapping: Full System Path to Executable File

실행중인 프로세스를 확인하고 나면 프로세스 타임라인이나 모메리 소묘량 같은 부가적인 정보를 획득하고 나면 어떤 프로세스가 악의적인 프로세스인지 판단해야 한다. 이런 프로세스에 대한 정확한 정보를 획득하기 위해서 각각의 프로세스들의 실행 이미지가 어느 위치에 존재하고 있는지(즉, 실행 파일이 어느 폴더에 있는지) 알아야 한다. 실행 중인 프로세스에 대한 개요와 실행 파일의 위치 정보를 획득하려면 PRCView를 사용하면 된다.

PRCView는 위에서 확인했었다. PRCView 폴더에 보면 pv.exe라는 명령이 있는데 -e 옵션을 사용하면 PRCView와 비슷한 결과를 확인할 수 있다.




실행 중인 프로세스에 대한 좀 더 자세한 정보를 얻고 싶다면 CurrProcess라는 프로그램을 사용할 것을 추천한다. CLI 모드에서 사용하려면 /stext 옵션과 결과를 저장한 파일경로와 파일명을 써주면 된다.

http://www.nirsoft.net/utils/cprocess.html

 

그리고 특정 프로세스에 대한 정보를 텍스트 파일로 저장할 수 있다.



의심이 가는 파일이 있다면 선택한 후 내용을 저장해서 확인할 수 있다.



svchost.exe 프로세스의 프로덕트 네임이나 회사명을 보면 mIRC라고 되어 있는 것을 확인할 수 있고 숨겨진 윈도우가 2개 있다는 것도 확인할 수 있다. 또한 파일의 속성이 보관파일(A), 읽기전용(R), 숨김파일(H), 시스템파일(S)의 속성을 가지고 있는 것도 확인할 수 있다.


Process to User Mapping
프로세스를 시작한 실행 파일을 찾는 과정에서 해당 프로세스의 소유자를 알아야 한다. 정상적이지 않은 사용자나 권한이 상승된 사용자가 실행 중인 프로세스는 악의적인 프로세스라는 것을 의미한다. 그렇다면 특정 프로세스가 어떤 사용자에 의해 실행되고 있는지 확인하려면 tasklist -V 명령을 사용하면 된다. 이 명령을 통해 프로세스, 프로그램이름, PID, 메모리 사용량, 프로그램 상태, 사용자이름 등을 확인할 수 있다.


 
여기서 한자기 문제점은 해당 프로세스를 실행하고 있는 사용자가 정상적인 사용자인지 정확히 구분할 수 있어야 한다는 것이다. 우리가 최소한 알아두어야 할 것은 시스템 계정에 의해서 실행되는 프로세스가 어떤 것이 있는지이다. 악성코드들이 자신의 존재를 숨기기 위해 가장 많이 사용되는 방법이 시스템 프로세스와 동일한 이름을 사용하거나 비슷한 이름을 사용하는 것이다(언뜻 봐서는 잘 구분이 안가는 비슷한 이름).

Windows 2000 기본 프로세스(http://support.microsoft.com/kb/263201/ko)에 대해서 잠깐 언급을 하고 가겠다. Windows 2000뿐만 아니라 Windows XP에서도 거의 동일하다.

 프로세스 이름  설 명  소유자 
 csrss.exe 이 프로세스는 Win32 하위 시스템의 사용자 모드 부분이다(Win32.sys는 커널 모드 부분임). Csrss는 클라이언트/서버 런타임 하위 시스템(Client/Server Run-time Subsystem)을 나타내며 항상 실행되어야 하는 필수적인 하위 시스템이다. Csrss는 콘솔 창, 스레드 생성과 삭제 및 16비트 가상 MS-DOS 환경의 일부를 담당한다.  NT AUTHORITY\SYSTEM
 explorer.exe 이 프로세스는 친숙한 작업 표시줄, 바탕 화면 등으로 표시되는 사용자 셸이다. 이 프로세스는 생각하는 것만큼 Windows를 실행하는 데 필수적이지는 않으며 대개 시스템에 부정적인 영향을 미치지 않고 작업 관리자에서 중지하고 다시 시작할 수 있다.  HOSTNAME\Administrator
 internat.exe Internat.exe는 시동 시에 실행되어 사용자가 지정한 다양한 입력 로캘을 로드한다. 다음 레지스트리 키에서 현재 사용자에 대해 로드할 로캘을 가져온다.
    HKEY_CURRENT_USER\Keyboard Layout\Preload
Internat.exe는 시스템 트레이로 "EN" 아이콘을 로드하여 사용자가 로캘을 쉽게 전환할 수 있도록 한다. 이 아이콘은 프로세스가 중지되면 사라지지만 제어판을 통해 로캘을 변경할 수 있다.

참고 "시스템"에 대한 로캘이 다음에서 로드된다.
    HKEY_USERS\.DEFAULT\Keyboard Layout\Preload
이러한 로캘은 로그온한 사용자가 없는 경우(예: 로그온 프롬프트에서)나 로컬 시스템 계정에서 실행 중인 시스템 서비스에서 사용된다.
 HOSTNAME\Administrator
 lsass.exe 로컬 보안 인증 서버인 이 프로세스는 Winlogon 서비스에 대해 사용자를 인증하는 프로세스를 생성한다. 이 프로세스는 기본 Msgina.dll 같은 인증 패키지를 사용하여 수행된다. 인증에 성공하면 Lsass는 초기 셸을 시작하는 데 사용되는 사용자의 액세스 토큰을 생성한다. 사용자가 시작하는 다른 프로세스는 이 토큰을 상속한다.  NT AUTHORITY\SYSTEM
 mstask.exe 이 프로세스는 사용자가 미리 정한 시간에 작업을 실행하는 일을 담당하는 작업 스케줄러 서비스이다.  NT AUTHORITY\SYSTEM
 smss.exe 이것은 사용자 세션의 시작을 담당하는 세션 관리자 하위 시스템이다. 이 프로세스는 시스템 스레드에서 시작되며 Winlogon 및 Win32(Csrss.exe) 프로세스의 시작과 시스템 변수 설정을 비롯한 다양한 작업을 수행한다. Smss.exe는 이러한 프로세스를 시작한 후 Winlogon이나 Csrss가 끝나기를 기다린다. 이것이 "정상적으로" 이루어지면 시스템이 종료되지만 예기치 않은 동작이 일어나면 Smss.exe는 시스템이 응답을 중지하도록 한다.  NT AUTHORITY\SYSTEM
 spoolsv.exe 이 스풀러 서비스는 스풀링된 인쇄/팩스 작업 관리를 담당한다.  NT AUTHORITY\SYSTEM
 svchost.exe 이것은 DLL에서 실행되는 다른 프로세스의 호스트 역할을 하는 일반 프로세스이므로 이 프로세스 항목은 둘 이상 표시될 수 있다. Svchost.exe를 사용 중인 프로세스를 확인하려면 Windows 2000 CD-ROM에서 Tlist.exe를 사용하면 된다. 명령줄 프롬프트에서의 구문은 tlist -s이다.
http://support.microsoft.com/kb/250320/
 NT AUTHORITY\SYSTEM
 NT AUTHORITY\NETWORK SERVICE
 NT AUTHORITY\LOCAL SERVICE
 services.exe 이 프로세스는 시스템 서비스의 시작, 중지 및 시스템 서비스와의 상호 작용을 담당하는 서비스 제어 관리자이다.  NT AUTHORITY\SYSTEM
 system 대부분의 시스템 커널 모드 스레드가 System 프로세스로 실행된다.  NT AUTHORITY\SYSTEM
 system idle
 process
이 프로세스는 각 프로세서에서 실행되는 단일 스레드로 시스템이 다른 스레드를 처리하지 않을 때의 프로세서 시간을 나타내는 일만 한다. 일반적으로 작업 관리자에서 이 프로세스가 프로세서 시간의 대부분을 차지한다.  NT AUTHORITY\SYSTEM
 winlogon.exe 이것은 사용자 로그온과 로그오프를 관리하는 프로세스이다. Winlogon은 사용자가 Ctrl+Alt+Del을 누를 때만 활성화되어 보안 대화 상자를 표시한다.  NT AUTHORITY\SYSTEM
 winmgmt.exe Winmgmt.exe는 Windows 2000에서 클라이언트 관리의 핵심 구성 요소이다. 이 프로세스는 첫 번째 클라이언트 응용 프로그램이 연결되거나 관리 응용 프로그램이 서비스를 요청할 때 지속적으로 초기화한다.  NT AUTHORITY\SYSTEM

주의할 점은 파일명이 같다고 해서 꼭 시스템에서 실행 중인 정상적인 프로세스라고 단정지을 수 없다는 것이다.


Child Process
악성코드들은 종종 자식 프로세스를 만들어낸다. 분석 도중 의심스러운 프로세스를 발견하면 그 프로세스에 대한 부모 프로세스와 자식 프로세스에 대해서 분석하려고 할 것이다. 이런 경우 pslist -t 명령을 통해 리눅스의 pstree와 같이 트리 형태로 프로세스를 볼 수 있다. 혹은 tlist -t 명령이나 pv -t(PRCView의 CLI) 명령을 통해서도 확인할 수 있다.

개인적으로 프로세스를 트리 형태로 확인하는 경우 process explorer를 추천한다.



 
Command-line Parameters
악성 프로세스에 대한 정보가 이미 있다면 해당 프로세스에서 사용하고 있는 command-line parameter에 대한 정보는 상당히 유요할 수 있다. DiamondCS에서 개발한 cmdline이라는 프로그램을 사용하면 특정 프로세스에서 사용중인 명령줄 인자값을 확인하는데 좋은 프로그램이다. http://www.diamondcs.com.au/consoletools.php



이 프로그램은 PID, 절대경로, 각각의 프로세스와 연관된 실행 파일을 보여준다. -pid 옵션을 사용하면 특정 프로세스에 대한 정보만 보여준다. 이와 유사한 명령으로는 tlist -c 나 pv -l 명령이 있다. 그리고 process explorer의 컬럼을 지정하는 옵션에서 command line 항목을 체크해주면 process explorer에서도 동일한 결과를 확인할 수 있다.




File Handles
파일이나 쓰레드, 그래픽 이미지와 같은 시스템 리소스는 일반적으로 객체(object)로 여겨지는 데이터 구조이다. 프로그램들은 객체 데이터에 직접적으로 접근할 수 없고 객체 핸들(object handle)에 의해서 접근할 수 있다. 각각의 핸들은 핸들 테이블에 의해 내부적으로 관리되는 엔트리를 가지고 있다. 핸들 테이블은 리소스 타입을 의미하는 리소스의 주소를 가지고 있다.

어떤 프로세스가 어떤 핸들을 사용하고 있는지에 대한 정보는 handle 명령을 통해서 확인할 수 있다. 이 명령은 Sysinternals 패키지에 포함되어 있다.
실행 중인 모든 프로세스에 대한 핸들은 -a 옵션을 사용해서 모든 핸들의 정보를 얻을 수 있다.

 spoolsv (PID 1600)  spoolsv (PID 864)
<excerpt>
spoolsv.exe pid: 1000 NT AUTHORITY\SYSTEM
C: File (RW-) C:\WINDOWS\system32
10: Section
14: Directory \Windows
18: Port
1C: Key HKLM
20: Directory \BaseNamedObjects
24: Mutant \Windows\WindowStations\WinSta0
38: Event
3C: Semaphore
40: Semaphore
44: Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
48: Event \BaseNamedObjects\DINPUTWINMM
4C: File (---) \Device\KsecDD
50: Event
54: Event
58: Event
5C: Semaphore \BaseNamedObjects\shell.{A48F1A32-A340-11D1-BC6B-00A0C90312E1}
60: File (---) \Device\NamedPipe\net\NtControlPipe7
A8: File (---) \Device\NamedPipe\spoolss
AC: File (---) \Device\NamedPipe\spoolss
 <excerpt>
spoolsv.exe pid: 864 demantos\r00t
C: File (RW-) C:\WINDOWS\Temp\spoolsv
614: Port
618: Event
624: File (---) \Device\Afd\Endpoint
628: File (---) \Device\Tcp
630: File (---) \Device\Tcp
634: Event
638: File (---) \Device\Tcp
63C: Event
640: File (---) \Device\Tcp
644: Event
648: Event
64C: Port
650: Event
654: Token NT AUTHORITY\NETWORK SERVICE:3e4
658: Event
65C: Port
660: File (---) \Device\Tcp
664: File (---) \Device\Tcp
668: File (---) \Device\NetBT_Tcpip_{2DC00E6E-AD51-4E04-85A1-101876F63F96}
670: Event
78C: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\NameSpace_Catalog5
790: Event
794: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\Protocol_Catalog9


위 예제는 정상적인 spoolsv 프로세스와 악성코드로 동작하는 spoolsv의 핸들을 비교한 것이다. 의심스러운 spoolsv는 네트워크와 관련된 리소스에 접근하고 있는 것을 확인할 수 있다.

그리고 핸들 정보를 수집하는 다른 프로그램으로 Microsoft에서 배포하는 Open Handles(oh.exe)라는 프로그램이 있다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=275D9F7A-83B2-4FB1-9B6A-DE8D28F72329&displaylang=en 


3.3 Dependencies Loaded by Running Processes

동적으로 링크된 실행 프로그램들이 제대로 실행되려면 공유 라이브러리들이 필요하다. 윈도우 프로그램에서 이런 공유 라이브러리는 DLL(Dynamic Link Labraries)이라 불리며 프로그램이 실행될 때 운영체제를 통해서 가져온다. DLL들이 불려질 때 정적으로(statically) 링킹되는 것보다 동적으로(dynamically) 링키되는 것이 훨씬 더 작고 시스템 메모리의 소모량도 더 적다.

실행 중인 프로세스에 의해 로드된 DLL을 확인하는 좋은 프로그램은 listdlls이다. listdlls는 Sysinternals 패키지에 포함되어 있다. listdlls 명령을 통해 각각의 모듈의 절대 경로를 확인할 수 있다.



프로세스에 의해 로딩된 DLL을 찾아내는 것은 분석에 아주 유용하다. 많은 악성코드들이 스스로를 실행시키기 보다는 DLL 형태로 제작되어 주요 시스템 프로세스에 Injection 되어 실행된다(DLL Injection). 이 공격 기법이 적용된 대표적인 루트킷이 Vanquish이다(rootkit.com에서 찾을 수 있다).

tlist나 PRCView, tasklist, WinInterrogate와 같은 프로그램에서도 실행 중인 프로세스에 의해 로딩된 DLL들을 확인할 수 있다.

WinInterrogate.exe
http://sourceforge.net/project/shownotes.php?release_id=122552&group_id=15870


Exported DLLs
listdlls에 의해 각각의 프로세스들이 사용하고 있는 DLL들을 확인하였다면(import) 해당 DLL들이 어떤 함수를 특정 프로세스에게 제공하고 있는지(export) DLLExportViewer로 확인해 볼 수 있다.

http://www.nirsoft.net/utils/dll_export_viewer.html


4. Correlate Open Ports with Running Processes and Programs

앞에서 우리는 로그인한 사용자, 활성화된 네트워크 연결 정보, 실행 중인 프로세스에 대한 정보 수집 방법에 대해서 알아보았다. 이번에는 열려진 포트와 실행 중인 포트를 확인하고 연결이 성립되었거나 포트를 열고 LISTEN하고 있는 실행 프로그램이 시스템의 어느 위치에 있는지 확인할 것이다. 다음과 같은 절보들을 수집해야 한다.

  - 로컬 IP와 포트
  - 원격 IP와 포트
  - 원격 호스트네임
  - 프로토콜
  - 연결 상태
  - 프로세스 이름과 PID
  - 프로세스와 연관된 실행 가능 프로그램
  - 실행 가능 프로그램의 경로
  - 프로세스/프로그램과 연관된 사용자 이름

Windows XP SP2 이상의 시스템에서는 netstat -anb라는 옵션을 사용하여 현재 열려있는 포트나 리슨하고 있는 포트와 해당 포트를 열고 있는 프로세스의 PID와 프로세스를 실행하고 있는 프로그램의 이름과 링크된 DLL의 경로를 확인할 수 있다.



이 명령은 결과가 생각보다 늦게 나오니 참고 기다리길 바란다. -_-


Openports
netstat와 비슷한 결과를 확인할 수 있는 프로그램으로 DiamondCS에서 개발한 openports라는 프로그램이 있다. 
-path 옵션과 -lines 옵션을 같이 사용하면 프로세스를 실행하고 있는 프로그램의 절대경로를 보여주고 각 프로세스별로 라인을 그려줘서 보기 쉽게 해준다. 옵션을 사용하지 않을 경우 프로그램의 절대경로가 아닌 프로그램 이름만 출력된다.




CurrPorts
openports로 프로세스와 포트의 매핑 정보를 확인한 후 좀 더 세부적인 정보를 확인하기 위해서 CurrPorts라는 프로그램을 사용한다. NirSoft에서 개발한 프로그램이다. (NirSoft 홈페이지에서 여러가지 휘발성 데이터 수집 프로그램을 찾을 수 있다.)
http://www.nirsoft.net/utils/cports.html



현재 192.168.245.1의 9999 포트로 연결된 것을 확이할 수 있다. 악성코드에 의한 원격지의 공격자에게 연결된 것이라면 Product Name이나 File Description, Product Version과 같은 실행 파일의 정보가 없는 경우도 있었지만 최근에 전파되고 있는 악성코드들은 정상적인 프로그램과 동일한 정보들을 가지고 있는 경우가 있다. 따라서 이런 정보들만으로는 구분하기 어려운데 한가지 확인해야 할 컬럼은 가장 마지막에 위치한 Module Filename 컬럼이다.



192.168.245.1:9999로 연결한 svchost.exe 프로세스가 사용하고 있는 모듈(dll)은 bitsex.dll이다. 특히 svchost는 DLL에서 실행되는 다른 프로세스의 호스트 역할을 하는 일반 프로세스여서 DLL Injection이 많이 발생한다. 즉, bitsex.dll은 인젝션된 DLL일 가능성이 크다는 것이다.

그렇다면 어떤 DLL이 정상 DLL이고 악성 DLL인지 구분할 수 있어야 하는데 솔직히 DLL 파일들이 너무 많아 전부 기억하는 것은 거의 불가능에 가깝다. 주로 사용되는 DLL들에 대해서 기억하거나 http://www.windll.com/ 사이트에서 윈도우 DLL 목록을 제공하니 찾아보는 수밖에 없다.

Sysinternal에 포함된 tcpvcon도 비슷한 정보들을 보여준다.


5. Identifying Services and Drivers

윈도우 서비스는 사용자의 실행이나 상호 작용이 필요하지 않은 윈도우 세션이 시작될 때 실행되는 어플리케이션을 의미한다. 이런 서비스들은 컴퓨터가 부팅될 때 자동적으로 실행하는게 가능하고 멈추거나 재시작하는 것도 가능하다. 사용자들 모르게 백그라운드에서 실행하는 것도 가능하다. 악성코드들은 공격 대상 시스템에서 자기 자신을 서비스로 등록하여 컴퓨터가 매번 부팅될 때마다 실행되게 할 수 있다. 사용자들 모르게...

악성코드들은 일반적으로 설명이나 상태, 시작 유형과 같은 정보들이 없기 때문에 실행 중인 서비스에 대한 정보를 수집하는 과정에서 다음과 같은 정보들을 확인하면 된다.

  - 서비스 이름
  - 표시 이름
  - 상태
  - 시작 유형
  - 서비스 설명
  - 종속성(의존성)
  - 서비스와 연관된 실행 파일
  - PID
  - 실행 프로그램 경로
  - 서비스와 연관된 사용자 이름

하지만 앞에서도 언급했듯이 최근에 전파되는 악성코드들은 이런 정보들이 정상 프로그램과 동일하게 입력된 경우가 있기 때문에 눈에 보이는 이런 정보들을 맹신해서는 안된다.

서비스에 대한 개요 정도만 확인한다면 tasklist /svc 명령을 통해서 확인할 수 있다.



좀 더 자세한 내용을 보고자 한다면 psservice나 ServiWin, servicelist와 같은 프로그램을 활용하면 된다.
psservice : Sysinternals Suite
ServiWin : http://www.nirsoft.net/utils/serviwin.html
servicelist : http://www.pathsolutions.com/download/ServiceList.zip

개인적으로 이런 프로그램들은 크게 도움이 안될 수도 있다는 생각이 든다. 왜냐하면 정상 서비스와 비슷하게 꾸며 놓는다면(decaration~) 서비스에 대한 지식이 다소 부족할 경우 지나칠 수 있다는 것이다. 결국 분석자가 주의를 기울려 분석하는 수밖에 없다. 실제로 bitsex.dll은 Netbot Attacker VIP 4.6 버전에서 사용하는 파일이다. 서비스를 아무리 봐도 정상 서비스처럼 보인다.




IceSword나 gmer와 같은 루트킷을 점검하는 프로그램을 실행해봐도 악성코드로 잡아내질 못한다. 물론 프로그램마다 특징이 있기 때문에 탐지 가능한 부분과 그렇지 않은 부분이 있을 수 있다. 필자가 말하고 싶은 것은 이런 경우도 있기 때문에 분석자가 주의를 기울여야 한다는 것이다. 하지만 이런 서비스들을 아주 못찾는 것은 아니다. 다른 정보를 토대로 서비스를 찾아낼 수도 있고 서비스에서는 못찾았지만 다른 정보를 확인하는 과정에서 악성코드를 찾아낼 수도 있기 때문이다.

서비스를 분석하는 다른 툴이나 윈도우 기본 명령들은 다음과 같다.
Net : net start
Tlist : tlist -s (Microsoft Debugging Tool)
Srvinfo : Windows 2003 Server Resource Kit Tools http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en
Sclist : Windows 2000 Server Resource Kit에 있다고 하는데 안보임(2000 RK이나 2003 RK이나 거의 동일)
SvcUtil : http://www.joeware.net/freetools/tools/svcutil/index.htm

그리고 시스템이 설치된 드라이버에 대한 정보 수집도 필요하다. 드라이버 정보를 수집하는 프로그램은 다음과 같다.
drivers : Windows 2000 Server Resource Kit Tools http://support.microsoft.com/kb/927229
DriverView : http://www.nirsoft.net/utils/driverview.html
ListLoadedDrivers : http://download.microsoft.com/download/win2000platform/drivers/1.0/nt5/en-us/drivers.exe

2003 RK에서는 printdriverinfo.exe 이라는 프로그램이 있는데 drivers.exe와 실행 결과가 다르다.


5.1 Determining Open Files

열려진 파일들을 확인함으로써 의심가는 프로세스들을 찾는 것이 가능하다. 다른 프로세스에 끼워진(embedded, 아무래도 인젝션을 의미하는 듯) 악성코드들은 공격자들이 공격 대상 시스템으로 접근하는 것이 가능하게 하고 공격자는 공격 대상 시스템에 연결하는 동안 어떤 파일을 오픈할 것이다. 이런 경우 열려진 파일을 확인하는 것은 공격의 목적을 알 수 있게 해준다(금융 데이터베이스 내용이나 민감한 기업 정보나 시스템의 다른 특별한 자원의 수집과 같은 목적).

내부적으로 중요한 파일이 있다는 가정하에 이런 파일의 정보가 악성코드에 의해 네트워크를 통해 외부로 유출될 수도 있기 때문에 공격자가 내부에 있는지 외부에 있는지도 확인할 필요가 있다.

여기서는 분석 대상 시스템에서 열려진 파일을  로컬과 원격으로 구분할 것다.


Identifying Files Opened Locally
로컬에서 열려진 파일을 확인하는 프로그램으로는 Nirsoft의 OpenFilesView가 있다. OpenFilesView는 파일을 열고 있는 프로세스나 핸들과 연관되거나 접근시간에 대해 read/write/delete하거나 파일의 위치 등 현재 사용 중인 파일에 대한 부가적인 정보를 보여준다.

OpenFilesView : http://www.nirsoft.net/utils/opened_files_view.html




Identifying Files Opened Locally
원격에서 열려진 파일은 net file 명령이나 psfile 프로그램에 의해서 확인 가능하다.






5.2 Collecting the Command History

침입자가 언제 접근했고 어떤 명령을 실행했었는지 확인하기 위해 명령어의 히스토리를 확인해야 한다. 단, 히스토리 로그가 변경되지 않았다는 가정하에..
분석자는 doskey /history 라는 명령을 통해 메모리에 저장된 명령어들을 확인할 수 있다. 단, 이 명령은 최대 61,900 바이트만큼만 저장할 수 있다.
이런 명령어 히스토리들은 침입자가 실행한 명령어 중에 폴더나 파일이 이름이나 도메인 네임, IP주소, 공유폴더 이름과 같은 정보들을 가지고 있기 때문에 분석자에게 유용한 정보가 될 수 있다.


5.3 Identifying Shares

일부 악성코드들은 네트워크 공유를 통해서 자신을 증식시키는데 현재 분석 대상 시스템의 공유 폴더 상태를 확인할 필요가 있다. net share 명령을 통해서 확인할 수 있다.




6. Determining Scheduled Tasks

어떤 악성코드들은 event-driven 한다. 이 말의 의미는 특정 날짜나 특정 이벤트가 발생하면 악성코드가 실행된다는 것이다. 이런것은 논리폭탄과 연관이 있다.
WORM_SOHANAD.FM과 같은 웜은 숙주사이트에서 파일을 다운로드하고 세개의 추가적인 악성코드를 설치한 다음 Windows Task Scheduler를 이용해서 파일을 실행할 수 있는 스케줄 작업을 생성한다.

WORM_SOHAND.FM : http://www.trendmicro.com/vinfo/virusencyclo/default5.asp?VName=WORM_SOHANAD.FM

스케줄 작업은 at 명령이나 schtasks /Query 명령을 통해서 확인할 수 있다. schtasks는 Windows XP, 2003, Vista에서 기본 명령이다.

C:\> schtasks /Query

추가적인 정보를 보려면 /FO LIST 와 /V 옵션을 사용하면 된다.

C:\> schtasks /Query /FO LIST /V


7. Collecting Clipboard Contents

공격자가 내부자일 경우 텍스트 비트를 복사하고 툴에 입력하거나 공격 문자열을 입력하는 경우 필요가 있다. 도메인 네임이나 IP주소, 이메일주소, 사용자이름, 패스워드, 호스트네임, 메신저 채팅 내용, 공격 명령 등이 클립보드에서 발견될 수 있다. 클립보드 내용을 확인할 수 있는 명령으 pclip이 있다. pclip은 UnxUtils 패키지에 포함되어 있다.

http://nchc.dl.sourceforge.net/sourceforge/unxutils/UnxUtils.zip









드디어 윈도우 휘발성 데이터 수집 두번째를 마무리했습니다.
약간 부족한 감이 없지 않습니다.
좀 더 채워졌으면 하는 내용이나 궁금하신 내용은 댓글을 이용해주세요~

오늘은 집에 가서 푹~ 쉬어야 겠군요..
원피스 391화를 보면서....^^;


Posted by demantos
0x01 malware forensics2009. 2. 25. 11:54

 
1. Building Your Live Response Toolkit
 
라이브 시스템 분석시에는 잘알려진 신뢰할 수 있는 툴들을 사용해서 데이터를 수집해야 한다.
분석 대상 시스템의 파일들을 공격자가 변경했을 가능성이 있으니 대상 시스템의 원본 프로그램에 의지하지 말고 자신만의 CD를 만들고 그 툴들을 통해서 데이터를 수집하는 것이 좋다. 파일(또는 툴)을 확인하는데 Dependency Walker(depends.com)나 PEView를 사용하는 것이 좋다.
 
Dependency Walker : http://www.dependencywalker.com/
PEView : http://www.magma.ca/~wjr/
 
침해 대응에 사용되는 많은 툴들은 공격자들에 의해서도 사용되기 때문에 구분 지을 수 있어야 한다. 예를 들면 파일명을 바꾼다든지 파일명 끝에 자신의(you!!) 이니셜 같은 것을 붙여도 된다. 또는 Hex 에디터로 바이너리를 열어서 특정 문자열을 넣어 두어서 공격자가 사용하는 바이너리와 구분지으면 된다. Hex 에디터로 바이너리를 열어서 PE 헤더 바로 뒤쪽의 오프셋 0x600 만큼 떨어진 위치에 구별할 수 있는 약간의 바이트를 추가한다. 그리고 정확한 식별을 위해서 해쉬값을 생성해 놓는다.
 
PE 헤더 다음에는 Section Table이 나오는데 cmd.exe는 Section Table의 위치가 0x1d0이다.
0x1d0 + 0x600 = 0x7d0의 내용을 33 31 33 33 37 (31337)로 변경 후 다른 이름으로 저장하고 실행 잘 되는지 확인하면 된다.

<원본>



<수정본>


<md5 해쉬값 비교> 


But!! 이런 마킹이 어떤 경우에는 잘 동작하지 않을 수 있다. 특히 상용 소프트웨어에서는...
이런 신뢰할 수 있는 툴킷을 만들면 보통 CD에 담아서 사용하는데 그것보다 수집한 데이터를 저장하기 위해서 thumb drive(손가락 크기만한 저장매체)나 외장 하드를 더 선호한다. 예를 들면 고용량 thumb drive(4G ~ 8G)나 외장 하드는 전체 시스템 메모리 덤프 이미지와 같은 큰 데이터까지 저장할 수 있다.

결국 로컬이냐 원격이냐 하는 문제점에 직면하게 되는데
로컬은 대상 시스템의 미디어에 접근해서 수집된 결과들을 저장할 수 있다는 것을 의미하고
원격은 일반적으로 netcat이나 cryptcat을 통해 연결해서 수집된 결과들을 수집 서버에 전송한다는 것을 의미한다.

원격에서 데이터를 수집하는 것은 상호작용을 줄일 수 있지만 네트워크를 통해서 연결해야 한다는 단점이 있다.



대상시스템                                       ----->       수집시스템(172.16.131.32)
pv.exe -e | nc 172.16.131.32 13579                  nc -l -p 13579 > pv-e-20090108-host1.txt

 
어떤 경우에는 대상 네트워크가 엄격한 방화벽을 가지고 있는데 이런 경우 원격 수집 저장소에 연결하는 것이 까다롭다. 게다가 대상 시스템의 물리적 메모리를 수집하는 동안 몇 기가 바이트의 데이터가 생길 수도 있다. 이런 경우 가장 좋은 방법은 자신이 만든 Live Response Toolkit을 다루기 쉽게 만드는 것이다.(어쩌라는거냐 -_-)

Chapter 1.에서는 계속 악성코드 분석에 대한 시나리오를 통해 여러가지 툴들에 대해서 논의할 것이고 이 장이 끝나는 시점에서 우리는 Incident Response Tools Suite를 찾을 수 있을 것이다. 결국 이 책에서 언급하는 툴들을 한번씩 다 써보고 자신에게 잘 맞는 툴을 선택해서 툴킷을 만들어야 한다.
 
여담) 필자는 IRTK(Incident Response ToolKit)이라는 이름으로 만들 생각이다. 물론 USB에...
1기가 USB는 두개 있는데 이건 좀 부족할 듯 하고 요즘 USB가 똥값이니 8기가짜리 하나 사야겠다. ㅎㅎ
 

1.1 Testing and Validating Your Tools

Winalysis : google에서 검색하면 많이 나옴

  - 시스템 설정 snapshot : file, registry, users, local and global group, rights policy, services, scheduler, volumes, shares

InstallSpy : http://www.2brightsparks.com/freeware/freeware-hub.html
  - 시스템 무결성 모니터링 :  프로그램이 설치되거나 실행될 때 발생하는 레지스트리의 변화나 파일 시스템, 레코드의 변화를 모니터링

좀 더 자세한 시스템의 변화를 보고자 한다면
FileMon : http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx
RegMon : http://technet.microsoft.com/en-us/sysinternals/bb896652.aspx
Process Monitor : http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
* 모두 SysinternalsSuite에 포함되어 있음(툴킷에 기본적으로 들어가야할 프로그램이라 생각된다)

그외 System Monitoring Tools
Regshot : http://sourceforge.net/projects/regshot
InCtrl5 : http://www.pcmag.com/article2/0,1759,25126,00.asp
InstallWatch : http://www.epsilonsquared.com/installwatch.htm
InstallSpy : http://www.2brightsparks.com/freeware/freeware-hub.html
FingerPrint v.2.1.3 : http://www.2brightsparks.com/freeware/freeware-hub.html
PCLogger : http://www.soft-trek.com.au/prjPCLogger.asp
GFI LANguard System Integrity Monitor : http://kbase.gfi.com/showarticle.asp?id=KBID001573
http://www.net-security.org/software.php?id=483
DirMonitor : http://www.evarest.be/DirMonitor/index.html
Microsoft Installation Monitor : http://www.microsoft.com/downloads/details.aspx?FamilyID=48427471-0901-4505-b715-cc3b3ead9ad6&DisplayLang=en
Microsoft Change Analysis Diagnostic Tool : http://support.microsoft.com/kb/924732

위 프로그램들을 모두 다 사용할 필요는 없다. 대신 한번씩 사용해보고 자신에게 가장 잘 맞는 프로그램을 선택하는 것이 좋다.
분석자가 원하는 기능을 가지고 있고 분석자가 사용하기 편한 프로그램을 선택하면 된다.


2. Volatile Data Collection Methodology

 - 감염된 머신에서는 Incident Response Toolkit에 있는 신뢰할 수 있는 명령어 쉘을 실행
 - 시스템 날짜와 시간을 기록하고 믿을 수 있는 시간과 비교
 - 물리적 메모리의 내용 획득
 - 호스트네임, 사용자 및 운영체제 세부 정보 수집
 - 시스템 상태와 환경 세부 정보 수집
 - 시스템에 로그인한 사용자 확인
 - 네트워크 연결과 열려진 포트 검사
 - DNS 쿼리와 연결된 호스트네임 검사
 - 실행중인 프로세스 검사
 - 열려진 포트와 연관된 프로세스와 프로그램
 - 서비스와 드라이버 검사
 - 열려진 파일 검사
 - 명령어 히스토리 검사
 - 매핑된 드라이브와 공유 확인
 - 권한이 없는 계정, 그룹, 공유 그리고 다른 시스템 리소스와 윈도우 "net" 명령어를 사용하는 설정 확인
 - 스케쥴 작업 결정
 - 클립보드 내용 수집
 - 감사 정책 결정


2.1 Preservation of Volatile Data

휘발성 데이터는 실행중인 프로세스, 열려진 파일, 네트워크 연결 정보들이 있다. 어떤 경우에는 비휘발성 데이터를 분석 대상 시스템에서 가져와야 하는 경우도 있고 전체 디스크에 대한 복사본(forensic duplicate)를 만들어야 한다. 그리고 이렇게 수집된 데이터들은 모두 MD5 해쉬값을만들고 다른 속성들이 문서화되야 한다. 분석자의 실수를 줄이기 위해서 휘발성 데이터를 수집하는 절차를 자동화하는 것도 좋다.(즉, 스크립트를 작성해서 돌려라~)

pslist를 통해서 현재 실행중인 프로세스를 확인할 수 있다.



간혹 rootkit이 설치된 경우에는 프로세스가 숨겨져서 프로세스 목록에 나오지 않는 경우도 있다. 이러한 이유때문에 메모리 전체를 덤프 뜨는 것을 고려해봐야 한다.
물리적 메모리을 캡쳐하는 가장 간단한 방법은 dd 명령을 이용하는 것이다.


dd.exe if=\\.\\PhysicalMemory of="E:\images\memoryimage.dd" conv=sync,noerror --md5sum --verifymd5 --md5out="E:\images\memoryimage.dd.md5" --log="E:\images\memoryimage.dd.log"


이 명령과 옵션은 Windows Server 2003 SP1이나 그 후 버전에서는 동작하지 않는다. GUI 환경에서 메모리를 캡쳐하고자 한다면 HELIX 그래픽 유저 인터페이스를 사용하면 된다.
http://helix.e-fense.com/Download.php

현재는 HELIX 3 버전이고 이메일 주소만 정확히 적으면 다운로드 링크를 받을 수 있고 또는 아래 링크에서도 받을 수 있다.
http://ftp.ntua.gr/pub/linux/helix/Helix2008R1.iso


HELIX와 비슷한 프로그램으로 nigilant32라는 프로그램이 있다.
http://www.agilerm.net/publications_4.html

상용 원격 포렌식 툴은 다음과 같은 제품들이 있다. 모두 전체 메모리를 캡쳐할 수 있다.
ProDiscoverIR - http://www.techpathways.com/prodiscoverir.htm
OnlineDFS - http://www.cyberstc.com/
LiveWire - http://www.wetstonetech.com/
 
책에서는 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보들을 분석하기 위해서 메모리 전체를 덤프하는 방법만 언급하고 있지만 메모리 전체를 덤프한다는 것이 그리 쉬운 일은 아니다. 게다가 원격에서 점검하고 악성코드 바이너리 파일을 획득해야 한다면 더더욱 어려울 것이다. 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보등은 개인적으로 IceSword나  gmer를 이용해서 분석하는 것을 추천한다.
 
둘다 프리웨어이고 상당히 강력한 기능들을 가지고 있어 필자도 자주 사용하고 있다.
IceSword : http://pjf.blogcn.com/index.shtml
gmer : http://www.gmer.net/index.php


2.2 Collecting Subject System Details

분석 대상 시스템의 세부적인 항목들을 먼저 수집하는데 이런 데이터들은 차후 분석 단계에서 유용하게 사용될 수 있기 때문이다.



System Date and Time
날짜와 시간은 분석에 상당히 중요한 역할을 한다. 날짜와 시간을 확인하는 방법은 여러가지가 있다.



now 명령은 Windows Server 2003 Resource Kit Tools에서 찾을 수도 있고 다음 URL에서 다운 받아서 사용할 수도 있다. 이 명령은 time 명령과 date 명령의 결과를 모두 보여준다. time이나 date 명령을 쓰느니 차라리 now를 쓰는게 더 낫지 않을까..
http://support.microsoft.com/kb/927229
http://download.microsoft.com/download/win2000platform/now/1.00.0.1/nt5/en-us/now_setup.exe


System Identifiers
시스템을 식별하기 위해 호스트네임, 현재 사용자 그리고 운영체제 버전을 확인한다.



ipconfig /all 명령을 실행하면 IP주소외 여러가지 정보를 확인할 수 있는데 이와 유사한 기능을 하는 DiamondCS의 iplist도 있다.
그런데! 현재는 없는 듯 하다. 대안으로 DiamonCS 사이트에서 제공하는 유용한 Freeware가 있는데 특히 콘솔툴킷을 사용하면 여러가지 정보들을 획득할 수 있을 것이다.
http://www.diamondcs.com.au/freeutilities.php
http://www.diamondcs.com.au/consoletools.php (콘솔툴킷)


Network Configuration
합법적이지 않은 VPN 아답터에 대한 설정도 확인해봐야 한다. 복잡한 악성코드들은 원격 C&C 노드로 연결하는 경우가 있다. 이런 VPN을 통한 통신 내용들은 IDS나 모니터링 툴에 의해 탐지되는 것이 어렵기 때문에 주의를 요한다.
그리고 분석 대상 시스템의 네트워크 카드가 promiscuous 모드로 동작하고 있는지 확인해야 한다. 즉, 스니퍼가 실행중인지 확인해야 한다는 것이다.

promiscdetect나 마이크로소프트사의 promqry를 활용하여 분석 대상 시스템에서 스니퍼가 실행중인지 확인할 수 있다.
http://www.ntsecurity.nu/toolbox/promiscdetect/
http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=4DF8EB90-83BE-45AA-BB7D-1327D06FE6F5&displaylang=en

테스트를 위해 Cain을 실행한 후 promiscdetect와 promqry를 실행한 화면이다.






Enabled Protocols
현재 시스템에서 사용중인 프로토콜을 확인한다. URLProtocolView을 사용해서 확인할 수 있다.
http://www.nirsoft.net/utils/url_protocol_view.html



결과는 파일로 저장이 가능하다. 아래 예제를 하나 보도록 하자.
==================================================
URL Name          : irc
Status            : Enabled
Type              : Executable
Description       : URL:IRC Protocol
Command-Line      : "C:\WINDOWS\temp\spoolsv\spoolsv.exe" -noconnect
Product Name      : mIRC
Company Name      : mIRC Co. Ltd.
Modified Time     : 2008-11-06 오전 8:01:54
==================================================
command-line 명령은 spoolsv.exe인데 서비스는 IRC로 나오고 있다. 즉, 프로세스를 확인하면 spoolsv라는 프로세스로 보이겠지만 실제로는 IRC로 사용되고 있다는 것이다. spoolsv.exe가 변조된 경우도 있겠지만 위 예제의 경우 spoolsv.exe가 다른 경로에 새롭게 생성되어 실행되고 있다는 것을 확인할 수 있다.


System Uptime
시스템이 살아있었던 시간을 확인한다. DiamondCS console 툴킷 중 uptime과 PsTools 패키지에 있는 psuptime으로 확인한다.




System Environment
시스템의 기본 정보를 확인한다. 운영체제 버전이나 패치레벨, 하드웨어 정보와 같은 기초 정보들을 수집한다.

psinfo는 SysInternals 툴킷에 포함되어 있다.



systeminfo는 윈도우에서 기본적으로 제공하는 명령으로 운영체제 정보와 하드웨어 정보 및 Hotfix에 대한 정보까지 수집할 수 있다.

dumpwin은 psinfo나 systeminfo보다 더 많은 정보들을 제공한다. 서비스라던지, 사용자/그룹 계정, 계정 정책, ACL, 실행중인 프로세스 등 더 많은 정보를 수집하는 것이 가능하다.
http://www.niiconsulting.com/innovation/tools.html




2.3 Identifying Users Logged into the System

시스템에 로그인한 사용자를 가려내는 이유는 감염 가능성이 있는 시스템으로 로그인 하려는 잠재적인 침입자를 찾아내고 추가적인 감염 가능성이 존재하는 시스템을 확인하기 위해서이다. 그리고 내부에서 발생하는 악성코드 감염 사고에 대한 통찰력(insight)을 제공하기도 한다.


분석자는 다음과 같은 정보를 획득해야 한다.
  - 사용자 이름
  - 연결 지점(로컬인지 원격인지)
  - 로그인 세션 기간
  - 사용자가 접근하고 있는 공유, 파일 또는 다른 시스템 자원
  - Processed Associated with the user(사용자와 연관된 처리??)
  - 사용자에 의해 발생하는 네트워크 행동


psloggedon
pslooggedon은 PsTools에 포함된 프로그램이다.




quser(query user utility)
quser는 마이크로소프트에서 제공하는 프로그램으로 로그인 사용자, 로그온 시간과 날짜 그리고 세션의 타입과 상태 등의 정보를 표시해 준다. quser는 c:\windows\system32\dllcache에 위치하고 있다.




netusers
http://www.systemtools.com/free.htm에 가면 구할 수 있다. 그 외에 여러가지 프리웨어들이 많으니 한번씩 사용해 보시길..



netusers 명령은 /history 스위치를 사용하면 각 사용자들이 가장 마지막에 로그인한 날짜와 시간을 보여준다. 리눅스의 lastlog와 비슷한 역할을 하는 명령이다.


logonsessions
logonsessions는 PsTools와 SysInternals Suite에 포함된 명령이다. 이 명령은 -p 옵션을 사용하면 해당 로그온 세션이 실행 중인 프로세스 목록을 같이 보여준다.



 

2.4 Inspect Network Connections and Activity

네트워크 연결 검사, 최근 DNS 질의, NetBIOS 이름 테이블, ARP 캐시, 내부 라우팅 테이블, 열려진 포트와 연관된 프로세스 등의 정보를 확인한다.


2.5 Current and Recent Network Connections

분석자가 현재와 최근 네트워크 연결을 확인해야 하는 중요한 이유가 두가지 있다.

첫번째는 공격자가 분석 대상 시스템에 연결되었는지 확인하고 시스템을 역으로 감시하기 위해서이다. 만약 공격자가 공격 대상 시스템의 취약점을 제거하려고 하는 것을 눈치챈다면 로그와 같은 증거들을 제거함으로써 그들의 흔적을 지우거나 시스템에 더 큰 손상을 입힐 것이다. 즉, 공격자가 어디에서 연결되었는지 확인만 하되 정확한 데이터 수집이 이루어지기 전까지는 섣불리 행동해서는 안된다는 것이다.

두번째 이유는 분석 대상 시스템의 악성코드가 봇넷 C&C에 연결하기 위해 공격자에게 어떤 신호를 보내는지 확인하기 위해서이다. 만약 이런 정보를 알 수 있다면 분석자는 훨씬 더 수월하게 분석을 할 수 있을 것이고 추후 발생할 수 있는 유사한 공격에 대응하는데 도움이 될 것이기 때문이다.
실제로 봇이나 웜, 트로이목마 같은 악성코드들은 내장된 명령이 존재한다. 이런 명령들은 도메인 네임이나 URL, IP 주소와 같은 정보를 통해 공격자에게 연결을 하게 되고 공격자로부터 명령을 기다리게 된다.


분석자는 다음과 같은 정보들을 수집해야 한다.

  - 활성화된 네트워크 연결
  - 분석 대상 시스템에서 발생한 DNS 질의
  - ARP 캐시
  - NetBIOS 이름 테이블 캐시
  - 내부 라우팅 테이블 점검


Netstat

netstat는 너무 잘 알려진 명령이라 별다른 설명은 하지 않겠다. 여기서는 옵션에 대해서만 이야기하도록 하자.
보통 -an이라는 옵션을 많이 사용하는데 -ano라는 옵션을 쓸 것을 권장한다. -ano 옵션은 현재 네트워크 연결 상태와 해당 연결을 실행하고 있는 프로세스의 PID를 보여준다. PID를 보여준다는 것은 분석자가 좀 더 쉽게 공격자와 연결된 프로세스를 찾을 수 있게 해준다. 물론 PID를 확인한 후에는 process explorer와 같은 프로그램을 통해서 해당 프로세스를 확인해야 할 것이다.



위 화면에서는 현재 로컬 시스템(192.168.245.10)이 192.168.245.1의 9999포트로 연결한 것을 볼 수 있는데 이 연결을 실행하고 있는 프로세스의 PID는 1032번이라는 것이다. 즉, PID 1032번을 확인해서 어떤 프로그램이 실행되고 있는지 확인하면 된다.


DNS Queries from the Host System
많은 악성코드들은 하드 코딩된(바이너리 파일에 이미 정의된) 도메인 네임을 가지고 있다. 이것은 감염 후 공격자에게 연결하기 위함인데 IP를 사용하면 바뀔 가능성이 있기 때문에 도메인을 주로 사용한다. 분석 대상 시스템에서 최근에 질의한 DNS 쿼리는 ipconfig /displaydns 명령을 통해서 확인 할 수 있다.




NetBIOS Connections
W32/Deborm, worm.gen과 같은 웜들은 윈도우 파일 공유를 통해서 전하된다. 그들은 다른 시스템의 접근 가능한 파일 공유에 자기 스스로를 복제하고 네트워크 연결을 성립시키고 대상 시스템에 파일을 전송한다. 이런 경우 어떤 컴퓨터가 최근에 접속했었는지 어떤 파일을 전송했었는지에 대한 휘발성 데이터가 존재할 것이다.

윈도우 네트워킹은 NetBIOS 프로토콜을 사용한다. NetBIOS는 파일이나 프린터 공유와 같은 다양한 서비스를 제공한다. NetBIOS로 설정된 컴퓨터들은 각각 고유한 이름을 가지고 다른 컴퓨터들과 통신하게 된다.

NetBIOS 이름과 IP주소를 가지고 있는 NetBIOS 이름 캐시가 있는데 이것은 메모리상에 있으며 휘발성 데이터이기 수집하는데 시간적 제한이 있다. 윈도우 command-line에서 nbtstat라는 명령을 통해서 NetBIOS 이름 캐시 정보를 수집할 수 있다.

nbtstat -c 는 NetBIOS 이름 캐시를 보여준다.



nbtstat -S 나 net session 명령은 현재 연결된 NetBIOS 세션을 보여준다.



또는 시작 --> 모든프로그램 --> 관리도구 --> 컴퓨터 관리 --> 공유폴더 --> 세션에서 확인할 수도 있다. 단, 컴퓨터 관리에서 확인하면 자신의 컴퓨터에 연결된 정보만 확인할 수 있다. 즉, 위 명령을 통한 결과는 자신에게 연결한 시스템의 정보를 확인할 수 있다.



NetBIOS를 통해 전송된 파일은 net file이라는 명령을 통해서 확인할 수 있다.




ARP Cache
ARP는 IP 주소를 MAC 주소로 변경해주는 프로토콜이다. 이런 매핑 주소를 가지고 있는 것을 ARP 캐시 또는 ARP 테이블이라고 부른다. ARP 캐시는 현재 분석 대상 시스템과 연결되어 있거나 또는 최근에 연결되었었던 시스템들을 확인할 수 있게 해준다.



두개의 연결을 확인할 수 있는데 이것만으로는 이런 연결들이 악의적인 목적을 가진 연결인지 확인할 수는 없다.
따라서 앞서 살펴보았던 NetBIOS 정보들을 같이 점검하고 검토하면서 악의적인 연결들을 찾아내야 할 것이다.



지금까지 윈도우 휘발성 데이터 수집하는 일부 방법에 대해서 살펴보았습니다.
내용이 좀 많은 느낌이 들어 각 Chapter들을 여러개로 분할하여 글을 작성할 생각입니다.
1장은 총 4개로 나눠질 예정입니다.

다음 글에서는 프로세스와 관련된 데이터와 서비스와 드라이버, 스케줄 작업, 클리보드 데이터 수집에 대해서 살펴보도록 하겠습니다.




Posted by demantos
0x01 malware forensics2009. 2. 25. 09:43




Table of Contents

Ch. 1 Malware Incident Response: Volatile Data Collection and Examination on a Live Windows System
Ch. 2 Malware Incident Response: Volatile Data Collection and Examination on a Live Linux System
Ch. 3 Memory Forensics: Analyzing Physical and Process Memory Dumps for Malware Artifacts
Ch. 4 Post-Mortem Forensics: Discovering and Extracting Malware and Associated Artifacts from Windows Systems
Ch. 5 Post-Mortem Forensics: Discovering and Extracting Malware and Associated Artifacts from Linux Systems
Ch. 6 Legal Considerations
Ch. 7 File Identification and Profiling: Initial Analysis of a Suspect File on a Windows System
Ch. 8 File Identification and Profiling: Initial Analysis of a Suspect File On a Linux System
Ch. 9 Analysis of a Suspect Program: Windows
Ch. 10 Analysis of a Suspect Program: Linux

Phases

Phase 1: Forensic preservation and examination of volatile data (Chapter 1 and 2)
Phase 2: Examination of memory (Chapter 3)
Phase 3: Forensic Analysis: Examination os hard drives (Chapter 4 and 5)
Phase 4: Static analysis of malware (Chapter 7 and 8)
Phase 5: Dynamic analysis of malware *Chapter 9 and 10)



ZIZIHACKER 형님이 주신 책이다.
책 다 보면 돌려보라시는데 솔직히 내 책 다른사람 줄 맘은 없고
여기에 정리해 놔야겠다.
누구나 볼 수 있게...

혹시나 틀린 내용이나 잘못된 내용이 있다면 말씀해주시길...

 

Posted by demantos