발자취

악성코드 05. Anti-역공학 2 본문

3-2/악성코드

악성코드 05. Anti-역공학 2

해린 2023. 9. 29. 05:06

1. Disassembler

*디스어셈블러: 컴파일한 실행 파일(기계어로 이루어짐)을 해석하는 프로그램
 

1. Disassembler들의 가정과 한계점을 이용함

- 선형 디스어셈블리
- 흐름 기반 디스어셈블리
 
 

2. 선형 디스어셈블리

- 선형적으로 한번에 하나의 명령어를 디스어셈블함
- 디버거들에 의해 광범위하게 사용됨
- 코드와 데이터를 구분하기 어려운 문제점이 있음
- GDB와 같은 디버거들에 의해 사용됨
 
 

3-1. 흐름 기반 디스어셈블리

- 상업용 디스어셈블러(IDA Pro)들에 의해 사용됨
- 맹목적으로 디스어셈블을 수행하지 않음- 각각의 명령어를 검사하여 디스어셈블 할 수 있는 위치들의 리스트를 구축함
 
 

3-2. 흐름 기반 디스어셈블리의 조건부 분기 처리방법

- 참(true) 분기(branch)와 거짓(false) 분기의 순서- 대부분의 흐름 기반 디스어셈블러들은 거짓 분기를 먼저 처리하고 참 분기를 그 다음에 처리함


4. Anti-Disassembly 기법 예시

1. 흐름 기반 디스어셈블러 조건부 분기의 의도되지 못한 처리와 의도된 처리

- 의도되지 못한 처리


위의 경우, 첫줄에서 loc_4011CA+1로 이동하도록 해석이 되었는데, 실제로 해당 주소에 가면 실행할 코드가 없어서 에러가 발생한다.

해당 코드를 제대로 해석하면 “hello”라는 문자를 가리키는 주소 A를 스택에서 pop하는 행위를 해야 한다.

- 의도된 처리

 
의도대로 해석되게 하기 위해서는 68 65 6C 6C 6F 00이 한번에 해석되도록 해야한다.
‘의도되지 않은 처리’ 그림과 같이 잘못 해석된 이유는 0x68이 가리키는 문자는 ‘h’이지만, opcode에서는 ‘push’ 명령어를 가리키기 때문이다. “hello” 문자열 뒤에 널문자가 함쎄 해석되었다면 디스어셈블러가 문자열로 인식했겠지만, ‘push’를 나타내는 0x68 뒤의 4바이트까지만 함께 해석되어 ‘push [주소]’ 형태로 해석된 것이다.
00은 널문자이므로, “hello”문자열의 뒤에 붙어 문자열이 제대로 해석되도록 하면 올바른 해석을 할 수 있다.


2. 같은 타겟을 갖는 jump 명령어 사용

- 의도되지 않은 처리

해당 코드도 jump 명령어로 이동할 주소가 실제로 존재하지 않아 에러가 발생한다.
0xE8의 opcode는 ‘call’이다.

- 의도된 처리

해결방안은 다음과 같다. E8 바이트를 ‘코드’가 아닌 ‘데이터’로 바꾸어 해석하면 된다. ‘IDA Pro’와 같은 흐름 기반 디스어셈블러에서는 특정 opcode 바이트를 코드나 데이터로 바꿀 수 있는 기능이 있다. 해당 기능으로 ‘데이터’로 바꿔 해석해주면, loc_4011C5라는 주소가 존재하게 되어 jump해도 에러가 발생하지 않고 정상 실행된다.


3. 상수 조건을 갖는 jump 명령어 사용

- 의도되지 않은 처리

역시 위의 경우도 점프할 주소가 존재하지 않아 에러가 발생한다.
‘E9’는 ‘jump’ 명령어이다.

- 의도된 처리

위의 경우도 역시 E9 부분을 ‘데이터’로 해석해주면 된다.
다만, 원래의 코드가 jump를 하도록 의도된 코드이기 때문에 데이터로 해석한 뒤, 다시 jump 명령어로 바꿔 분석해줘야 한다.

 

2. Anti-Virtual Machine 기법

1. Anti-Virtual Machine 기법의 원리

- Malware 탐지 시스템이 가상 머신 상에서 동작할 수 있다는 사실에 착안함- 특히 가상 머신 기반의 동적 분석 방어기법에 적용될 수 있음
 
 

2. 가상 머신 탐지

- 다양한 artifact에 기반을 둔 탐지- 가상 머신 탐지시 malware는 다르게 행동하거나 동작을 멈출 수 있음- 최근에는 가상 머신이 malware 탐지 뿐만 아니라 다양한 가상화 환경에 사용되게 돼서 Anti-Virtual Machine 기법의 사용은 감소하는 추세임
 
 

3. VMware Artifacts를 이용한 VMware 탐지

- VMware 환경(특히 VMware Tools)은 많은 artifact들을 시스템상에 남김
- 파일 시스템, 레지스트리, 프로세스 리스트에 나타나는 artifact들을 VMware 탐지에 이용함
 
 

4. VMware Artifacts

- 윈도우 작업관리자에서 VMware 문자열을 갖는 프로세스
- VMware 설치 디렉토리
- 00:0C:29는 VMware와 연관된 MAC 시작 주소