통제된 환경에서 분석
- 별도의 네트워크 구축
- 가상 머신 활용
분석 툴 준비
- Filemon, Regmon, TDImon, TCPView, Wireshark
- Process Explorer
- Winalysis
- ImportREC, Revival
- Strings, BinText
피해 시스템을 분석하는 과정에서 크래킹에 사용된 프로그램(악성코드)을 발견하였다면 악성코드을 분석하여 공격자의 의도(?)를 파악하고 대처할 수 있다. 악성코드 분석은 동적 분석과 정적 분석으로 나눌수 있는데 여기서는 동적 분석에 대하여 설명할 것이다. (정적 분석은 (2)에서 하도록하겠습니다.)
VMware를 이용하여 통제된 환경을 구성하고 shadowbot 이라는 악성코드를 분석하는 과정을 통하여 해킹 프로그램 분석 과정을 이해하도록 하겠다.
① 통제된 환경 구성
먼저 shadowbot을 분석하기 위한 통제된 환경을 구성하는 방법에 대해서 알아보도록 하겠다. 악성코드가 실행될 머신은 외부와 연결이 되지 않아야 한다. (네트워크 연결을 Host-only로 설정한다.) 그리고 게스트 운영체제에서 네트워크 설정을 다음과 같이 설정한다.
Host-only 모드는 게스트 운영체제가 호스트 운영체제하고만 통신이 가능한 모드이다. 게스트 운영체제에서 shadowbot이 실행되고 어떤 패킷을 보내게 된다면 이것을 캡쳐하기 위해 게스트 운영체제의 게이트웨이와 DNS를 호스트 운영체제로 설정하는 것이다.
② 모니터링 및 분석 툴 준비
shadowbot 실행시 프로세스는 어떠한 것들이 생기는지, 파일을 어떤 것을 생성하고 접근하는지, 네트워크를 통해 어떤 패킷을 보내는지를 확인하기 위한 모니터링 툴이 필요하다.
호스트 운영체제 준비 툴
Wireshark
게스트 운영체제 준비 툴
Filemon : 실시간으로 현재 사용되는 파일들에 대한 정보를 볼 수 있다.
Regmon : 실시간으로 현재 레지스트리에 대한 정보를 볼 수 있다.
TDImon : 실시간으로 현재 모든 TCP/UDP 입출력 상황을 보여준다.
TCP View : 현재 네트워크 연결 정보를 확인할 수 있다.
Process Explorer : 현재 실행중인 프로세스 정보와 해당 프로세스에 관련된 DLL 이나 핸들링 정보 제공
Winalysis : 현재 시스템의 상황을 스냅샷을 뜬다.
BinText : 바이너리 파일에서 스트링을 추출해 준다.
Ollydbg, PEiD, ImportREC
모니터링 툴들은 동적 분석시 사용된다. 악성코드를 실행하고 어떤 행동들을 하는지 확인하기 위함이다. 그리고 호스트 운영체제는 게스트 운영체제에서 혹시 외부로 패킷을 보내게 되면 이 패킷을 캡쳐하기 위해 Wireshark 나 Ethereal 같은 패킷 캡쳐 프로그램을 실행할 것이다.
③ 초기 분석 - 패킹 여부 확인
초기 분석 단계에서는 패킹 여부를 확인하고 만약 패킹이 되어 있다면 언패킹을 해야 한다. 물론 동적 분석시에는 언패킹을 하지 않아도 상관없지만 정적 분석시에는 언패킹을 한 후에 디버거를 통해서 분석을 해야 한다.
패킹 여부는 PeiD를 통해서 확인할 수 있다. 또는 IDA를 이용하여 확인할 수 있는데 패킹된 파일을 IDA로 열면 경고창이 뜨고 코드의 사이즈가 작고 데이터 사이즈가 크다는 점을 통해서 패킹 여부를 확인할 수 있다. 여기서는 PEiD, Stud_PE, PEvoyeur를 이용하여 패킹 여부를 확인해 보겠다.
UPX 0.89.6 - v1.02 /v1.05 -v.1.24(2)로 나왔다. UPX로 패킹되어 있는 것을 확인할 수 있다. 그럼 언패킹을 해보자.
UPX로 패킹된 파일은 upx 프로그램을 이용하여 패킹 여부를 확인할 수도 있고 언패킹하는 것이 가능하다. 만약 UPX가 아닌 다른 패커로 패킹되었다면 그에 맞는 언패커로 패킹을 풀어야 할 것이고 또는 직접 메뉴얼 언패킹을 해도 상관 없다.
언패킹해서 shadowbot_unpack.exe라는 파일로 저장하였다. 동적 분석을 마친 후 정적 분석시 이 언패킹된 파일을 가지고 분석을 하도록 할 것이다.
④ 초기 분석 - 스트링 추출
이번에는 BinText를 이용하여 읽을 수 있는 스트링을 추출한다. 여기서 주의할 것은 패킹된 파일을 BinText에 읽어 와서 스트링 추출하면 모든 스트링을 다 확인할 수 없다는 것이다. 따라서 언패킹했던 파일을 대상으로 스트링을 추출한다.
Brose를 눌러 파일을 선택하고 Go를 누르면 파일 내에 읽을 수 있는 스트링을 보여준다. 위에 보이는 것처럼 함수들의 이름을 확인할 수 있는데 이렇게 임포트되는 함수들의 이름을 보고 이 파일이 실행되면 어떠한 행동들을 하는지 짐작할 수 있다. 오른쪽 하단에 Save를 눌러서 텍스트 파일로 저장한 후 확인하도록 하자. 확인 결과 다음과 같은 함수들과 특이한 문자열들을 확인할 수 있었다.
WriteProcessMemory // Load 할 DLL 이름
CreateToolhelp32Snapshot // snapshot을 찍는다.
CreateRemoteThread // DLL Injection 4번째 파라미터가 LoadLibrary 인가?
RegSetValueExA // 레지스트리 등록
RegCreateKeyExA // 아마도 재부팅 후에도 적용 받게 설정
CoInitialize // com 오브젝트와 관련된 것들
CloseClipboard // 클립보드 관련
OpenClipboard // 열고 닫고 복사와 관련된 것들
CloseServiceHandle // 서비스 닫기, 혹 바이러스 백신을 닫을 수도 있다.
EnumServicesStatusA // 서비스 관련
OpenSCManagerA // 서비스 관련 무슨 작업을 기대
InternetReadFile // 인터넷에서 파일 다운 후 실행
InternetOpenUrlA // http://~~, ftp://~~
CreateMutexA // 반복 실행 방지
Explorer.exe // 인젝션을 할 정상적인 파일 일수도
PRIVMSG %s :pstore %s %s:%s \n // private message 의 약자
darkjester.xplosionirc.net // irc server 일수도 있다.
lol lol lol :shadowbot // 이름의 유래가 된 스트링
PING, PING, JOIN, PRIVMSG // IRCBot 일 가능성이 높다.
rdshost.dll // 인젝션 되는 dll 일까?
\\photo album.zip // 압축 파일은 뭘까?
위 내용을 토대로 shadowbot에 대한 가정은 IRCBot으로 DLL Injection 을 할 것이다. DLL Injection 은 아마도 explorer.exe 에 시도를 할 것이고 COM Object 관련 작업과 서비스 매너저를 이용해서 어떤 행동들을 할 것이다. 그리고 이 때 사용되는 파일은 rdshost.dll 일 것이다. 아직까지는 이런 가설만 세울 수 있다. 좀 더 세부적인 분석을 통해서 이 가설을 확인할 것이다.
⑤ 초기 분석 - 해쉬값 비교 계산
초기 분석의 마지막으로 실행 파일인 shadowbot.exe와 shadowbot_unpack.exe에 대한 해쉬값을 계산한다. 이것은 악성코드 중 실행이 되면 자기 자신을 변경하는 악성코드들도 있기 때문이다. 해쉬값을 계산해 놓은 후 실행하고 후에 이 해쉬값을 비교해 보면 변경이 되었는지 확인 할 수 있다.
md5sum.exe 프로그램을 이용해서 해쉬값을 계산해서 파일에 저장해 둔다. 비교할 때는 -c 옵션을 사용하면 된다. 자, 이제 초기 분석이 끝났고 동적 분석에 들어가 보도록 하자.
⑥ 동적 분석
Filemon 이나 Regmon은 실행 직후 갑자기 많은 정보들이 출력되는 것을 볼 수 있는데 원활한 분석을 위해서는 Exclude Process를 이용해서 필요없는 프로세스를 지워주는 것이 좋다.
Regmon 도 Filemon에서와 동일하게 모든 프로세스를 Exclude Process로 없앤다.
Winalysis 르 실행하고 Snapshot을 누른다.
Start 버튼을 눌러 FIle부터 시작해서 Service 나 System 등 여러가지 정보에 대한 스냅샷을 찍는다.
여러 가지 정보들이 스냅샷 되었다.
이제 동적 분석을 위한 준비가 끝났다. shadowbot을 실행해서 어떤 행동들을 하는지 확인하면 되는데 shadowbot을 실행하기 전에 VMware에서 Snapshot을 만들도록 하자.
마지막으로 호스트 운영체제에서 패킷 캡쳐 프로그램을 실행시킨다. 이것은 악성코드(shadowbot)가 외부로 패킷을 보내는지 확인하기 위함이다. 여기서는 Wireshark 를 사용하겠다.
캡쳐는 처음에 설정했던 게스트 운영체제의 게이트웨이를 사용하면 된다. 만약 shadowbot이 패킷을 외부로 보낸다면 분명 게이트웨이를 통해서 보낼 것이고 여러분은 그 패킷을 잡을 수 있을 것이다. 그럼 start 를 눌러 캡쳐를 시작한다.
⑦ 분석
이제 shadowbot을 실행해보도록 하자. 예상치 못했던 일이 발생했다. 실행 중이던 모니터링 프로그램들이 전부 사라졌다. 이것은 shadowbot이 explore.exe의 자식 프로세스를 죽이는 것이다. 이렇게 되면 동적인 분석이 어려울 수 있지만 방법은 있다.
조금전에 만들어 두었던 VMware 스냅샷으로 돌아가도록 하자. 모니터링 툴을 모두 실행한 상태에서 Process Explore에서 explorer.exe 프로세스를 죽이고 새롭게 explorer.exe를 실행하면 모니터링 툴들이 explorer.exe 의 자식 프로세스가 아니기 때문에 정상적으로 모니터링이 가능하다.
explorer.exe 프로세스를 죽인 후 메뉴에서 File -> Run 을 통해 explore.exe를 실행한다.
explorer.exe를 실행하면 다음과 같이 procexp.exe 프로세스의 자식 프로세스로써 explorer.exe가 실행된다. 이제 shadowbot이 실행되더라도 모니터링 툴들이 죽는 일은 없을 것이다. 이 상태에서 Wmware 스냅샷을 만들어 두는 것을 추천한다. (악성코드 분석 작업은 한치 앞을 내다볼 수 없기 때문에 항상 최악의 상황을 고려하는 것이 좋다.)
다시 shadowbot을 실행시켜보겠다. 실행시키자 shadowbot.exe 가 프로세스 익스플로러에 보였다가 사라졌다.
먼저 Winalysis 의 내용을 확인해보도록 하겠다. 동적 분석 준비를 하면서 스냅샷을 떠 놓았고 shadowbot을 실행한 후에는 Test를 눌러 스냅샷과 현재를 비교해야 한다. Start를 누르면 스냅샷과 비교하여 변경된 부분이 있는지 확인한다. 확인 결과 다음에 보이는 것과 같이 File부분과 registry 부분, 서비스부분이 변경된 것을 볼 수 있다.
Filemon과 Regmon 의 결과도 살펴 보자. 일단 새롭게 생성하거나 변경한 파일이나 레지스트리가 있는지 확인해보도록 하겠다.
Filemon의 결과 중 파일을 생성하거나(CREATE) 파일에 쓰기(Write)하는 부분을 찾아보았다.
(아 네이버.... 탭기능제공(스페이스 8칸..)을 이상하게 해서(탭을 스페이스 1칸으로 인식..) 밑에 수작업 완전 귀찮...ㅠㅠ)
CREATE C:\WINDOWS\photo album.zip SUCCESS Options: OverwriteIf Access: 00120196
|
C:\WINDOWS에 "photo album.zip"이라는 파일을 생성한 후 shadowbot.exe 파일에서 조금씩 읽어와 "photo album.zip" 파일에 쓰는 것을 볼 수 있다. 그리고 C:\WINDOWS\system32 에 rdshost.dll 이라는 파일을 생성했다. 이 파일들은 초기 분석 당시 스트링을 추출했을 때 보였던 파일명들이다.
이번에는 Regmon의 결과에서 Filemon 에서 찾아낸 rdshost.dll 과 photo album.zip 파일을 중심으로 찾아보니 다음과 같은 내용을 찾았다.
SetValue HKLM\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\rdshost SUCCESS |
rdshost.dll을 레지스트리에 등록하고 있다.
Filemon과 Regmon 의 결과를 통해 shadowbot.exe가 c:\WINDOWS\photo album.zip과 C:\WINDOWS\system32\rdshost.dll 을 생성한다는 것을 알수 있었다.
그리고 호스트 운영체제의 Wireshark 에서 패킷이 캡쳐 되었다.
darkjester.xplosionirc.net 도메인에 대한 질의를 하고 있는 것을 알 수 있다. DNS 쿼리를 보낸다는 것은 해당 서버에 접속하기 위해 IP를 받아 오기 위함이다. 따라서 이 URL로 접속을 하게 되면 좀 더 구체적인 행동들을 할 수 있다. DNS 설치 대신 게스트 운영체제의 hosts파일에 이 도메인을 추가해서 다시 실행시켜 보겠다.
게스트 운영체제의 hosts 파일을 수정하고 다시 호스트 운영체제에서 Wireshark로 패킷을 캡쳐해보니 이번에는 8080포트로 접속하려고 하는 것을 확인할 수 있다.
8080포트로 접속을 시도하였지만 현재 호스트 운영체제는 8080 포트를 열고 있지 않기 때문에 계속 RST가 되는것을 볼 수 있다. 그렇다면 만약 호스트 운영체제가 8080 포트를 열고 연결을 기다리면 뭔가 또 다른 행동들을 볼 수 있을 것이다. 8080 포트를 열고 연결을 기다려야 하기 때문에 netcat(nc)을 사용하도록 하겠다.
nc를 통해 포트를 열고 기다렸더니 위와 같은 메시지를 만날 수 있었다. IRC에서 사용하는 명령어가 보인다. 패킷 캡쳐를 통한 결론은 shadowbot에 감염이 되면 darkjester.xplosionirc.net 이라는 IRC 서버에 test 라는 방에 접속하려고 한다는 것이다.
그렇다면 실제 IRC 서버를 구축해서 실제로 접속을 하는지 확인해보자. IRC서버는 UnrealIRCD를 이용하여 설치한다. 설치 후 unrealircd.conf(첨부) 라는 파일을 unrealIRCD가 설치된 디렉토리에 복사한다. 그리고 분석자도 IRC에 접속해보자.
이러면 게스트 운영체제에서 [KOR][0H]XXXXXX 아디로 접속이 되서 아까 뒤에서 nc로 받은거 처럼 test 라는 메시지를 남기는것인데...
IRC 로그에서 처럼 접속시도는 하는데 어찌 접속이 잘 안됐는지 disconnect 된다..
혹시나 해서 [KOR]OH]가 접속할때 Wireshark로 패킷을 잡아봤다.
[KOR][0H]ruitihrq 라는 아디로 접속하는거 같다...
하지만 여기서 밑에쪽에 Looking up your hostname... Couldn't resolve your hostname 등등 에러메세지를 받나 봅니다.
근데 이 메시지는 게스트 운영체제에서 telnet darkjester.xplosionirc.net 8080 으로 접속해도 볼수있다.
......................
정상적이지 못했지만 들어와서 test라는 메시지를 남겼다고 가정하고 다음으로 넘어가겠다.
shadowbot에 감염된 에이전트가 IRC서버에 접속되어 있는 것이 보인다. shadowbot에 감염된 호스트들은 모두 이 IRC 서버에 접속을 하게 될 것이고 공격자는 특정 명령을 실행하여 감염된 좀비 컴퓨터들을 제어하는 것이 가능할 것이다.
앞서 Filemon과 Regmon을 통해 확인했던 rdshost.dll는 스스로 동작하지 않고 어떤 프로그램과 함께 실행되는 파일이다. 초기 분석에서 스트링 추출 후 내렸던 가설이 rdshost.dll 이라는 파일이 explorer.exe 에 DLL Injection 을 시도한다는 것이었다. 이 가설이 점점 명확해지고 있다.
dll 파일들이 어떤 프로세스와 함께 사용되고 있는지 Process Explorer 에서 검색하면 찾을 수 있다. 메뉴에서 Find -> FindHandle or DLL을 클릭한다. 그리고 rdshost.dll 을 검색하면 다음과 같다.
rdshost.dll 은 explorer.exe 프로세스와 함께 동작하고 있다. 원래 explorer.exe 는 rdshost.dll 을 임포트해서 실행하지 않는다. 그런데 현재 explorer.exe 가 rdshost.dll 을 임포트해서 사용하고 있다. 즉, shadowbot이 rdshost.dll 파일을 생성하고 explorer.exe에 DLL Injection 을 하고 있다는 의미이다.
DLL Injection은 몇 가지 특정 함수들을 사용한다.
- CreateRemoteThread
- WriteProcessMemory
- VirtualAllocEx
- OpenProcess
- LoadLibraryA
이런 함수들이 사용이 되면 항상 그런 것은 아니지만 DLL Injection 의 가능성이 있다는 것을 의미한다. 따라서 정적 분석을 할 때 위 함수들을 주시하면서 분석을 해야할 것이다.
[출처] 해킹 프로그램 분석 - (1)동적분석|작성자 bestheroz
'OLD_posting' 카테고리의 다른 글
모바일 페이지를 PC 로 보기 (0) | 2013.08.27 |
---|---|
Cisco 명령어 (0) | 2013.07.22 |
포렌식 도구 모음 (Digital Forensics Tools) (0) | 2013.04.28 |
포인터 pointer 정리 (0) | 2013.03.10 |
파일구리 검색어제한 해제패치 소스 (0) | 2013.03.09 |