code coverage

Paimei - pstalker 모듈 소개

2013. 6. 19. 00:22


# PaiMei - Reversing Framework #



오늘은 꽤 오래되긴 했지만 여전히 유용한 paimei reversing framework 를 소개 하려고 한다.


pedram amini 라는 유명한 해커가 만든 framework 로, 리버싱에 필요한 몇가지 툴들을 모아놓은 것이다.


가장 유명한 것으로는 pydbg 가 있다. 2006년(저는 C언어도 모르던 시절...부끄러워라 *-_-*) 발표 이후 몇번 


버전업을 하여 현재는 몇가지 기능이 조금 더 있다. 어쨋든 오늘은 이 paimei 기능 중 하나인 pstalker 를


소개하려고 한다. 






# code coverage 


먼저 코드 커버리지가 무엇인지 알아보자.


☞ code coverage - 프로그램 전체 루틴중 실행중 코드들이 실제 실행되는 정도


프로그램 코드 내부에는 많은 루틴들이 존재한다. 하지만 여러 분기문 및 조건에 의해 거치지 않는 루틴들도 많이 있


을 것이다. 이해를 위해 간단히 예를 들어 보자.



 function foo(){

      취약함수1();

 }

 function bar(){

      취약함수2();

 }


 main() {

      int i = 1;     

      if (i == 1){ 

          foo();

      } else {

           bar();

      }

 }


이 소스에서는 실제 취약함수가 foo() 와 bar() 에 모두 존재 하나, 코드 구조상 실제론 foo() 내부의 취약함수1() 만


실행된다. 개념을 이해하기 위해 간단히 한 것이나, 실제 몇M, 몇십M 이상의 파일에서 취약점 분석을 할 때 실제론


거치지도 않는 함수를 역참조 분석을 해가며 분석하는건 시간 낭비일 것이다. 







# pstalker  - paimei code coverage tool


pstalker 는 paimei 에 포함된 code coverage tool 이다. 한번 직접 사용해 보면 바로 알 수 있을 것이다. 단점은 실행


을 위한 설치 절차가 매우 복잡하고 까다롭다. ㅠ_ㅠ 이에 대해선 다른 잘 정리된 문서를 읽어보도록 하고, 먼저 


paimei 를 한번 살펴보자. 킬빌에 나오는 간지나는 할아버님이 반겨준다.(-_-;;)






가장 아래에 있는 pstalker 를 선택해 보자. 아래 화면은 어느정도 진행이 된 화면이고 실제 실행해보면 덩그러니 빈칸


들만 있을 것이다. 가장먼저 ida pro 를 통해 .pida 파일을 생성해야 한다. 




먼저 ida 를 통해 target binary 를 로드한 뒤, ida python script 인 pida_dump 를 실행시킨다. 해당 파일은  paimei 


디렉토리에 존재한다. 이 스크립트는 바이너리를 분석한 뒤 함수에 관련된 정보와 코드조각들은 수집하므로 생각보다


시간이 꽤 오래 걸린다. 마음을 비우고 웹툰을 보면서 기다리자. -_-;;






스크립트가 한참 돌고 나면 아래와 같이 pida 파일이 생성될 것이다. 오류가 발생한다면 instruction() 파일을 수정해


야 하는데, 차후에 다시 올리도록 하겠다. 어쨌든 성공했다 치고, 넘어가자.




이제 pstalker 를 위한 사전준비는 끝났다. 먼저 할 일은 이 pida 파일을 로드하고, target 에 추가하는 것이다. 아래쪽


에 보이는 add module 을 선택해 방금 생성한 pida 파일을 선택하고, target 에 추가한 뒤 우클릭 메뉴중 Use for 


Stalking 을 선택하자.




그리고 나서 할 일은 이 바이너리를 실행하는 것이다. 우측 Data Capture 쪽에 보면 load 메뉴가 있다. Target


binary 를 선택 후, 원하는 Coverage Depth 를 선택한 뒤 Start Stalking 버튼을 누르자.






그러면 위와 같이 미리 분석된 함수를 거쳐가는지 자동으로 확인하게 된다. 또한 거쳐갈 때의 레지스터와 스택 정보 


등을 자동으로 같이 저장해 주므로, 분석시 도움이 된다.




이제 결과를 export 하자. 우클릭 후 export to idc 메뉴를 선택하고, 원하는 옵션을 적절히 선택한다.


아직 끝이 아니다!(헥헥...아까 로드한 ida 로 되돌아 가서, 방금 생성된 idc 파일을 선택하여 실행한다.


idc 는 ida script 파일로, 자체적인 문법을 가진 자동화 스크립트라 보면 된다.




두둥 이제 드디어 모든 사전 작업을 마쳤다. ida view 를 보면 실제 코드가 실행된 루틴은 아까 지정한 색으로 표시가


되어 있음을 알 수 있다. 





실행된 루틴이 보기좋게 표시된건 알겠는데, 어떻게 활용해야 할까? 


취약점을 찾을 때, 퍼징이 아닌 리버싱을 통해 찾는다면 어떤 식으로 접근해야 할까? 많은 방법들이 있겠지만, 당연히


취약하다고 알려진 취약함수들(strcpy, scanf 등)이 존재하는지 확인하고, 역참조 루틴들을 따라가며 입력값이 사용


자에 의해 조작될 수 있는지를 파악하게 될 것이다. 하지만, 처음에 설명했던 것처럼 수많은 루틴 중 실제 우리가 원


하는 루틴은 실행되는 루틴뿐이다. 아무리 취약한 코드더라도 실행조차 되지 않는다면 별 의미가 없기 때문이다.


취약한 함수중 하나인 sscanf 의 xref 그래프를 살펴보자.(ida의 기본 기능) 실제 실행된 코드들이 예쁘게 표시되어


있다. 이제 할일은 sub_410730 함수 내부의 동작과 main 함수에서 어떤 인자값을 통해 sub_410730 을 호출하는지


분석하는 것이다. 즉, 수십개의 루틴 중 단번에 분석해야 할 루틴을 상당수 줄일 수 있었다.





여기까지 code coverage tool 중 하나인 pstalker 에 대한 간략한 소개였다.  그럼 이만!

















+ Recent posts