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

2017. 12. 20. 19:210x03 Reversing Theory

728x90

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

해당 글은 코드 가상화 기법이 적용된 악성코드 분석 방법 연구 위탁과제 최종보고서 라는 파일명을 지닌 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

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

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