BLOG ARTICLE taint analysis | 1 ARTICLE FOUND

  1. 2012.09.06 Pin Tool을 이용한 빌드 및 사용 예제 3

Pin Tool을 이용한 빌드 및 사용 예제

Taint Analysis/Pin Tool 2012. 9. 6. 14:11 Posted by 알 수 없는 사용자


Pin Tool은 다들 아시다시피 Intel에서 제작한 Dynamic Binary Instrumentation Tool입니다. 대표적인 DBI Tool에는 Pin Tool뿐만 아니라 DynamoRIO와 리눅스 기반의 Valgrind 등이 있습니다. DBI Tool을 이용하면 실행 중인 프로세스에 임의의 코드를 삽입하는 것이 가능합니다.


이러한 DBI Tool을 사용함으로써 얻을 수 있는 유용성에는 Recompile과 Relink가 필요 없기 때문에 작업의 효율성을 높일 수 있고, 실행 중에 특정 코드를 발견하거나 동적으로 생성된 코드를 처리할 수 있습니다. 또한 기존에 실행 중인 프로세스를 Attach하여 분석할 수 도 있습니다.


따라서 DBI Tool을 이용하면 프로그램 또는 쓰레드를 분석할 수 있습니다. 프로그램 분석에는 Code Coverage, Call-graph generation, Memory-leak detection, Instruction profiling 등을 수행할 수 있고, 쓰레드 분석에는 Thread profiling, Race detection 등이 가능합니다[1].


그렇다면 지금부터 윈도우에서 Pin Tool을 이용하여 빌드하는 방법과 사용하는 방법을 간단한 예제로 알아보겠습니다[2].


1. Pin Tool 설치 및 수정사항


먼저, 윈도우 버전의 본인의 컴파일러 Kit에 맞는 Pin Tool을 다운받습니다. 그리고 압축을 해제하면 Pin Tool 설치는 끝입니다. 그리고 Visual Studio 명령 프롬프트를 실행시켜 설치한 Pin Tool 폴더로 이동합니다.


샘플 파일을 빌드하기 이전에 먼저 해야할 일이 있습니다. Pin Tool에서는 빌드하기 위해 nmake.bat 파일을 사용하는데요. 위치는 "..\source\tools"에 있습니다. nmake.bat 파일과 함께 Nmakefile이라는 파일이 존재합니다. 이 파일의 142라인에 다음과 같이 Pin Tool이 설치된 폴더의 pin.bat 파일을 확인하고 있습니다.



Pin Tool이 설치 된 폴더에는 'pin_bat.bat'라는 이름의 배치파일만 있을 뿐 'pin.bat'라는 파일은 없습니다. 왜 이렇게 되어있는지는 잘 모르겠지만 아무튼 둘 중 하나를 수정하면 되겠습니다. Nmakefile의 내용을 바꾸시던지 Pin Tool 폴더의 'pin_bat.bat'파일을 'pin.bat'파일로 이름을 수정하시면 됩니다. 저는 편하게 파일 이름을 바꾸었습니다.


2. 소스 코드 빌드 및 실행


다음으로 샘플 모듈로 제공된 Instruction Address Trace 모듈인 itrace.dll 파일을 빌드하고 실행하는 방법입니다. 빌드와 실행 방법은 매우 간단합니다.


D:\Pin> cd source\tools\ManualExamples

D:\Pin\source\tools\ManualExamples> ..\nmake.bat itrace.dll

// ...

// build complete!

D:\Pin\source\tools\ManualExamples> ..\..\..\pin.bat -t obj-ia32\itrace.dll -- calc


보시다시피 nmake.bat를 이용하여 빌드한 결과 DLL 파일이 동일한 위치에 'obj-ja32'라는 폴더 아래 생성됩니다. 이렇게 실행 된 calc.exe를 확인해 보면 다음과 같이 itrace.dll 파일이 잘 로드된 것을 확인할 수 있습니다.



하지만 Pin Tool을 통해서 calc.exe가 에뮬레이션 되기 때문에 상당히 느리다는 단점이 있습니다. 그리고 그 결과물은 "D:\Pin\source\tools\ManualExamples" 위치에 'itrace.out'이라는 이름의 파일로 나오게 되는데 그 용량이 1.5GB나 되는 양으로 매우 큽니다.


3. 실행 결과


지금 저에게 대용량 에디터가 없는 관계로 일단 리눅스의 head 명령으로 앞에 몇 줄만 읽어보면 다음과 같이 Instruction Address Trace 결과가 나오게 됩니다.



4. Nmakefile


Pin Tool에서 많은 예제 코드들이 존재하고, 이것들은 빌드하기 위해 Nmakefile이 필요합니다. 어떤 예제 소스 코드들은 nmake.bat를 이용하여 빌드가 잘 될 것이고, 어떤 것들은 잘 되지 않을 것입니다. 그 이유는 해당 위치에 Nmakefile이 존재하지 않거나, Nmakefile이 존재하더라도 빌드하려고 하는 대상 코드의 이름이 Nmakefile 내에 지정되어 있지 않기 때문입니다.


따라서 빌드가 되지 않는 파일이나 개인적으로 만든 소스코드 파일을 빌드하기 위해서는 Nmakefile을 새로 만들어 주거나 수정해 주어야 합니다. 해당 소스코드 파일이 위치하는 곳에 Nmakefile을 만들어서 다음과 같이 수정해 줍니다. 이 때 Nmakefile은 기존에 있던 파일을 복사해 와서 수정하면 되겠습니다.


COMMON_TOOLS= my_source_code_1.dll  my_source_code_2.dll my_source_code_3.dll


이런식으로 추가한 뒤에 nmake.bat를 이용하여 빌드하면 잘 될 것입니다.


5. 마치며...


글이 길었지만 매우 간단한 내용들이었습니다. Pin Tool을 이용해서 악성코드를 분석하거나 취약점 분석을 하기 위해 API를 익히고, 활용하기까지는 상당히 오래 걸릴 것 같습니다. 또한 성능 문제나 결과물을 활용하는 방법도 고민해 봐야할 것입니다. 사실 Pin Tool을 써보기 전에 DynamoRIO를 먼저 시도했지만 얕은 저의 기술로는 사용하기조차 힘들더군요...ㅜ_ㅜ


혹시 DynamoRIO를 사용해 보신 분이 계시다면 관련 링크나 조언 좀 부탁드립니다. 물론 Pin Tool에 관련한 노하우도 알려주시면 감사하겠습니다. 그리고 글에서 잘못 되거나 이상한 부분이 있다면 정정 부탁드리겠습니다. 감사합니다. ^^


6. 참고문헌


[1] Taint Analysis 연구분석보고서, http://teamcrak.tistory.com/328, 2011.

[2] Pin Tool Manual, http://software.intel.com/sites/landingpage/pintool/docs/49306/Pin/html/


AND