[Tool] Procdot

Analysis 2017. 9. 25. 00:24





  • ProcDOT


악성코드를 분석하다 보면 전체적인 실행 흐름을 파악해야 할 때가 많다. 빠르게 전체적인 동작을 파악하고 실제 상세분석에 참고하기 위해서이다. 그럴 때 쉽게 도움 받을 수 있는 툴이  Sysinternals 의 "procmon.exe" 이다. procmon 은 상당히 강력한 툴이지만 동작이 많을 경우 한눈에 보기 힘들다는 단점이 있다.


ProcDOT procmonWindump/Tcpdump 의 로그파일을 읽고, 오픈소스 GraphViz 를 사용하여 프로세스의 입/출력 동작을 한눈에 보기 쉽게 그려준다. 설치와 사용법이 어렵진 않지만 몇 가지 기본적인 설정 값 수정이 필요하여 관련내용을 포스팅 한다.





  • 다운로드


- ProcDOT


다운로드 경로는 ProcDOT 을 개발한 Cert.at 홈페이지와 전용 홈페이지, 두 군데서 내려 받을 수 있다.


Cert.at 의 ProcDOT 웹 페이지다운로드

ProcDOT 공식 다운로드 웹 페이지다운로드


해당 경로에서 자신의 OS 버전에 맞게 다운 받으면 된다. zip 파일 형태로 받아지게 되며 압축을 풀고 바로 실행 가능하다.



- GraphViz


관계도를 그래프 형식으로 그려주는 오픈소스 모듈이며 ProcDOT 은 GraphViz 를 사용하여 그래프를 그리기 때문에 GraphViz 가 설치되어 있어야 한다. GraphViz 역시 공식 홈페이지가 존재하며 현재 2.38 버전까지 있다. 사용하는 OS에 맞춰 다운 받으면 된다.


GraphViz 공식 웹 페이지 : 다운로드


Window 의 경우 msi 설치 파일로 받아 설치한다.



- Procmon 과 Windump/Tcpdump


프로그램의 로그를 수집하는데 사용되며 ProcDOT 구동에 있어 필수 프로그램이다. 둘 다 필요한 것은 아니며 둘 중 하나만 있어도 관계 그래프는 그릴 수 있다. 


Procmon 공식 다운로드 웹페이지 : 다운로드

Windump 공식 다운로드 웹페이지 : 다운로드



* 다운로드 링크의 경우 변경되어 접속하지 못 할 수도 있다.





  • 설치 및 설정


프로그램 설치 순서는 상관은 없다. Procmon 과 ProcDOT 경우 다운로드 후 즉시 실행 가능하며, GraphViz 역시 설치에 특별한 과정은 없다. 다만, ProcDOT 에서 추후에 GraphViz 의 설치 경로를 지정 해 주어야 하기때문에 설치 시 경로를 기억해주는 것이 좋다.



< Graphviz 의 기본설치 경로 >




설치 완료 후 ProcDot 실행 시, 옵션 화면이 보여지며, 필수적으로 설정해야 하는 것은 "Path to dot(Graphviz)" 부분이다. 해당 부분에 GraphViz 설치 시 생성된 "dot.exe" 의 경로를 적어준다. 해당 파일은 기본적으로 "GraphViz 설치경로\bin\dot.exe" 으로 되어 있다.


< Path to dot 위치에 dot.exe 경로 지정 >




ProcDOT 설정은 모두 끝이 났고, Procmon 의 세팅을 바꿔주어야 한다. Procmon 을 실행시켜 아래 3가지 설정을 바꿔준다.


    • "Options" 에서 "Show Resolved Network Address" 값을 해제한다. 

    • 열 값 메뉴 설정 창을 오른쪽 클릭으로 열고 Event Details 의 "Sequence Number" 를 해제한다. 

    • 마찬가지로 Process Management 에서 "Thread ID" 에 체크 한다. 







  • 실행


- 동작 방법


ProcDOT 을 이용하기 위해서는 우선 procmon 으로 로그 값을 얻어야 한다. procmon 을 실행시켜 실행 흐름을 보고싶은 프로그램을 실행 시킨다. 동작이 끝났으면 캡쳐를 중지하고 로그파일을 저장한다. 이때, All Events 옵션에 체크하고, 파일은 .csv 포멧으로 저장해야 한다.





이제, ProcDOT 으로 돌아와서 "Procmon-CSV:" 란에 방금 전에 procmon.exe 에서 저장했던 로그 파일을 지정해 준다. 그리고 "Launcher:" 란의 "..." 버튼을 누르면 Procmon 에서 로그를 기록한 프로세스들의 목록을 볼 수 있다. 

정상적으로 리스트가 나왔다면, 원하는 프로세스를 선택하고 "Refresh" 버튼을 누른다. 해당 프로세스에 대한 흐름 그래프가 그려진다.


만약 Launcher 버튼을 눌렀을 때 포멧에 관한 경고 창이 뜬다면 Procmon 파일 설정이 제대로 이루어지지 않은 것이다. 상기의 과정 중 잘못 설정하거나 빠진 부분이 있는지 확인하자.


!! procmon 에서의 정상적인 설정이 이뤄지지 않은 채 파일을 저장하면 제대로 로드되지 않을 수 있다.)




procDot 에서는 쓰레드 단위로 프로세스의 동작을 파악하기 때문에 파일 입출력과 레지스트리 쓰기/읽기 같은 동작을 한눈에 확인하기에 편리하다. 


그림에서 화살표의 색깔이나 상자의 모양에 각각 의미가 있는데 "F1" 키를 눌러 도움말 창을 열면 각 도형의 의미에 대해 확인이 가능하다.





테스트를 위해, iexplore.exe 를 실행 시켜 www.naver.com 에 접속했을 뿐인데 내부적으로는 상당히 복잡한 동작을 수행한다. 따라서 도식화한 그림 역시 크기가 커질 수 밖에 없다. 이는 상세한 동작을 확인하기에는 좋으나 한눈에 보이지는 않는다.


< iexeplore.exe 의 전체 동작 흐름의 일부분. 동작이 많아 한눈에 보이지 않는다. >




더욱 간단한 그림으로 보고싶다면 추가적인 옵션을 체크하여 간략화 하는 방법도 있다. 좌측 상단에 있는 "no paths", "compressed" 옵션은 화면을 좀더 간단히 요약하여 보여 준다. 다른 상세한 옵션도 설정하여 불필요한 내용은 제거하고 볼 수 있다.


< 옵션 체크 후 한층 간략히 보이는 동작흐름 >








Last update ::

- 2016.07.01

- 2017.09.25 (설명 내용 변경)

- 2017.10.25 (그림 재연결, 설명 변경)


Keywords ::

- Tool

- ProcDOT


References ::

http://www.procdot.com/onlinedocumentation.htm




블로그 이미지

Elfmfl

,