constWORLDant

코드 가상화 개인 공부 [0x01] 본문

0x03 Reversing Theory

코드 가상화 개인 공부 [0x01]

data type ConS_tanT 2017.12.20 19:21

코드 가상화 공부를 이어가보자.

해당 글은 코드 가상화 기법이 적용된 악성코드 분석 방법 연구 위탁과제 최종보고서 라는 파일명을 지닌 PDF문서를 기반으로 공부하고 복습하기 위해 작성하였다.


우선 사람들이 잘 아는 Themida Protector에 대한 내용이다.


Themida는 주로 게임 및 상용프로그램에 사용되는 프로텍터이다. 


더미다는 여러가지 기능이 내포되어 있다.


Anti-Debugger Detection

커널 디버거 및 소프트웨어 디버거의 탐지 시 어플리케이션을 보호 할 수 있다.


Anti Dumper

프로그램은 메모리안에 상주하게 된다. 그렇다면, 우리는 메모리를 들여다 보면 프로그램의 정보를 볼 수도 있다는 말이 된다.

크래커는 보통 메모리 덤퍼를 이용하여 메모리 내용을 디스크로 덤프하여 보호코드를 제거하고 타인의 프로그램을 훔쳐본다.

더미다는 이러한 덤퍼를 탐지하고 회피 할 수 있는 방법을 지니고 있다.


EntryPoint Obfuscation

EntryPoint란 프로그램의 시작점을 일컫는다.

프로그램의 시작점을 찾았다면, 이제 느낌이 가는대로 여기저기 트레이싱을 할 수 있다.

하지만, 시작점이 숨어있다면? 분석가 혹은 크래커는 프로그램 공격이 어려워 진다.

이러한 기능을 이용하는 것이 더미다의 EntryPoint Obfuscation이다.


Resource Encryption

프로그램에는 소스파일과 헤더파일 뿐 만 아니라 리소스라는 여러가지 자원을 삽입할 수 있는 영역이 있다. 

일반적인 리소스파일은 노출이 쉽다. 하지만 더미다를 사용하게 되면 리소스를 사용하기 전 영역부터 리소스를 필요로 하는 영역까지 특정한 암호화를 적용시켜 보관한다. 그러다가 프로그램이 리소스를 사용해야하는 코드로 접근하게 되면 잠시 복호화해서 사용할 수 있게 해준다. 

즉, 런타임에서는 디버깅을 하지 않고 모든 소스코드를 훑고 내려와야 하기 때문에 "실행"을 위해서만 복호화를 시키겠다 라는 의미도 되겠다.


VMWare / Virtual PC

프로그램은 보통 일반적인 CPU에 의해서만 제어된다. 그런데 이 상식을 깨뜨리게 되면 분석가나 크래커에게 지옥을 선사할 수 있다.

그 기능은 바로 가상의 CPU를 설계하여 일반 CPU와 매핑을 시키는 것이다.

가상 CPU는 일반 CPU에서 사용하는 INTEL 명령어의 Opcode와는 사뭇 다르다. 


Anti-Patching

OllyDbg나 IDA와 같은 디스어셈블리 프로그램은 Instruction을 분석가가 수정을 할 수 있다. 

하지만, 더미다는 프로그램 패치가 된 부분이 탐색되면 그 즉시 수행을 중지 시키는 기능을 가지고있다.


Advanced Debugger Monitors(Debugger Guard)

메모리 상의 동작 중인 강력한 커널 디버거를 비롯하여 대부눈의 디버거를 탐지해 낼 수가 있다. 

핵심적 요소는 "우회가 불가능" 이라는 것이다. 

개인적으로 어떻게 구현하는지 상당히 궁금한 내용이다.


Compression

코드 및 리소스의 압축을 위한 알고리즘을 삽입한다.


Monitor Blockers

파일 및 레지스트리 사용에 대한 모니터링을 무력화 하는 기능을 가지고 있다.

즉, 분석가가 악성코드를 분석할 때 사용하는 Process Explorer와 같은 동적 툴이 탐지 되면 더미다는 즉시 종료를 시켜버린다.

동적 툴은 해당 프로세스의 상태를 들여다 볼 수 있기 때문이다.


Delphi / BCB form protection

델파이 및 볼랜드 사의 C++ 등의 컴파일러를 통하여 생성 된 실행파일을 숨겨준다.


When Debugger Found

디버거가 탐지 되면, 메시지 박스를 띄워 디버거를 사용하지 마라고 알려주는 친절한 어플리케이션들이 있다.

크래커나 분석가에게 이러한 한줄 한줄은 엄청난 정보로 사용할 수 있다. 

가령 웹 취약점을 분석할 때 이상해보이는 로그가 잔뜩 출력되었다고 가정하자. 일반인은 이것은 도대체 무엇인가? 라고 생각하고 대수롭지 않게 무시할것이고, 개발자는 내가 작성한 코드가 잘못되었나? 이런 생각을 할 것인데 크래커나 분석가는 이 로그에서 얻을 수 있는 약점은 무엇인지 꼼꼼하게 살펴 볼 수 있는 과제를 부여받은 셈이다. 

더미다는 이러한 과제를 주지 않기 위해 디버거가 탐지 되었을 때 알려주지도 않는다. 즉 MessageBox의 팝업 여부를 임의로 조정할 수 있다.


Metamorphic Security

원본 코드의 특정 구역을 쉽게 알아 내지 못하도록 하는 기법이다.

코드의 명령어를 같은 기능을 하는 비슷한 명령어로 변형시켜서 눈속임을 하는 것이다.









0 Comments
댓글쓰기 폼