본문 바로가기

etc/Technical Documents

Vera를 이용한 Visual unpacking

소개

-------

프로그램 시각화 분석도구인 VERA를 이용한 visual unpacking

 

 

참고

-------

http://sinun.tistory.com/154 

해킹의 비밀을 푸는 key 15 - p.234

 

 

개요

-------

대부분의 악성코드들이 packing된 형태로 배포되고 있으며, 이를 분석해야 하는 리버서들은 얼마나 빠르게 OEP를 찾아내느냐가 악성코드 분석의 분석시간을 좌우할것이다.

Unpacking에는 수많은 노하우가 존재한다.

내가 여기서 소개할 것은 VERA라는 프로그램 시각화 도구를 이용한, Unpacking방법에 대해서 소개할 것이다.

 

 

상세내용

------

VERA는 시각화 분석도구로써, 컴파일된 코드의 흐름을 시각화 시켜주는 유용한 도구이다.

 

[+]VERA 다운로드 링크 http://csr.lanl.gov/vera/

 

VERA를 사용하기 이전에 trace파일을 생성해야 하는데 이는 VERA를 설치하면 같이 생성되는 Intel의 PIN monitoring Framewark을 이용하여 trace파일을 생성한다.

 

trace파일은 실제로 파일을 실행하여 생성하기 때문에, 이는 가상환경에서 하는것이 안전하며 다음과 같은 명령어를 사용한다.

 

pin.exe -t veratrace -- [file path]

 


아래 그림과 같이 파일명-[PID].trace파일이 생성된다.


 

이렇게 생성된 trace파일은 가상머신에서 바로 사용해도 되지만, 가상머신의 그래픽 환경이 좋지않기 때문에 실제 host컴퓨터에 가져와서 열어보는 것이 더 낫다.

 

 

자, 이제 VERA를 실행시켜보자

 

다음과 같은 화면이 나타나는데, 각 버튼은 다음과 같다.


①파일열기

②IDA랑 연동버튼

③연동하기위한 IP와 포트지정

④About VERA

 

 

일단 파일을 열어보자.

파일열기 버튼을 누르면 파일선택창이 나타나고, 아까 생성한 trace파일을 선택해주면 된다.

 

그런다음 열기버튼을 누르면 다음과 같은 화면이 나오는데

 


Original executable file은 원래 실행파일인 NOTEPAD.EXE를 지정해준다.

GML파일은 그래픽데이터에 대해서 상호 교환 가능한 표준의 포멧을 만들기 위하여 XML Scheme형태로 저장되는 데이터이다. 저장하고 싶은 위치와 파일명을 지정해주면 된다.

 

그런뒤 Finish를 누르면 파일의 실행흐름이 시각화되서 나타난다.

 


 

그림에서 보이는 파란색 큰 네모가 시작지점이며,

색깔별로 다음과 같은 의미를 지닌다.

 

[+]노란색 : 디스크와 메모리상에 둘 다 존재하는 부분, 패킹되지 않은 정상적인 부분을 나타낸다.

[+]빨간색 : 높은 엔트로피를 가진 부분 (엔트로피의 개념은 뒤에 설명 하겟다)

[+]초록색 : 코드섹션에 존재하지 않는데 실행되는 부분, 외부 dll 라이브러리에 존재하는 API를 뜻한다.

[+]연보라색 : 디스크에는 존재하지만 실제 실행 시에는 존재하지 않는 부분. 패킹이 풀린 지점을 나타내는 경우가 많은데, 이는 디스크에는 해당 섹션을 사용하지 않거나 패킹 된 상태로 있다가 패킹이 풀리면서 원래 코드가 복구되어 실행되기 때문에 원래 디스크에 있던 데이터들은 실행 시에 존재하지 않게 된다.

[+]형광색 : 메모리와 파일에 존재하는 명령어가 차이가 나는 경우.

 

 

[+]엔트로피란?

엔트로피는 처음 열역학에서 쓰던 용어인데, 우리가 여기서 말하는 엔트로피는 정보엔트로피로 다음에 나올 내용이 예측이 어느정도로 가능한지로 그 값을 매깁니다. 후에 나올 데이터가 예측가능하도록 한쪽으로 치우친 패턴이라면 엔트로피가 낮지만, 패턴이 고르게 분포되어 있다면 엔트로피는 높아집니다. 이로 생각해 봤을때, packing을 하면 데이터를 압축시키기 때문에 데이터의 분포가 전체적으로 비교적 균등해지고, 이는 다음에 나올 데이터가 다양해진다는 의미가 됩니다. 이는 엔트로피의 증가로 이어집니다.

 

 

위 글을 읽다보면, 다음과 같은 생각을 할 수가 있을 것이다.

"그럼 OEP는 빨간색에서 연보라색으로 바뀌는 부분인걸까?"

꼭 그렇게 나타나는건 아니지만 OEP가 맞다. 이 부분을 찾으면 된다. 그럼 실제로 UPX로 패킹된 NOTEPAD.EXE를 VERA를 통해 시각화 시켜보자.

 


보이는가? 파란색인 시작지점을 지나면 바로 빨간색 부분이 나타난다. 이는 언패킹 루틴이며 끝나는 시점을 찾아보면,



0100739d가 OEP인것을 확인할수 있는데, 한번 맞는지 Ollydbg로 보자.



POPAD가 나오는것으로 보아 언패킹 루틴의 끝인것을 알수 있으며 step into해보면 OEP인것을 알 수 있다.

 

그럼 이제 IDA와 어떻게 연동하는지 한번 보자.

일단 VERA의 버튼중 톱니바퀴 모양을 누르고 IP와 포트를 설정해준다. 

그런뒤 VERA폴더의 vera_ida.plw파일을 ida가 설치된 폴더의 plugins로 옴겨준다.

 

그런뒤 VERA의 ida아이콘을 클릭해 피눈물 흘리는것처럼 만들어준다.



이는 ida와 연결을 허용하겟다는 활성화 된 표시이며 이제 ida를 켜서

 

메인메뉴의 [Edit]-[Plugins]-[Vera_ida]를 클릭한다.

 


클릭하면 다음과 같은 창이 나타나는데, defualt로 port에는 2005번이 입력되어있고, server만 localhost를 적어준다.



 

그리고 ok를 누르면 Output window에 다음과 같은 글이 뜬다.

이 글씨가 보이면 정상적인 연결이 된 것이다. 이제 VERA에서 원하는 주소를 클릭하면 IDA에서 바로 그 주소로 jump한다.



 


 

IDA에서 바로 Unpacking루틴의 끝으로 jump하는것을 볼 수 있다.

 

[+]추가 - ASPACK으로 packing한 NOTEPAD.EXE 시각화



'etc > Technical Documents' 카테고리의 다른 글

[Metasploit] android meterpreter 분석  (0) 2014.10.13
peda 유용한 명령어 정리  (0) 2014.09.14
ret to libc  (0) 2014.06.07
.dtors overwrite  (0) 2014.05.23
Fake ebp  (2) 2014.04.24