일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- pwnable
- Toddler's Bottle
- Rookiss
- Read
- writeup
- shellcode
- pico
- picoCTF
- 2018
- shellcraft
- Bottle
- anti
- reversing
- CANARY
- ASM
- pwn
- Leak
- string
- FSB
- BOF
- pwnable.kr
- Reverse
- TUCTF
- CTF
- practicalmalwareanalysis
- rev
- Bug
- toddler
- format
- PMA
- Today
- Total
제리의 블로그
위장 악성코드 실행 (실행기(로더), 프로세스 인젝션) 본문
위장 악성코드 실행
위장 악성코드의 유래는 간단하게 프로세스 목록을 통해 악성코드를 확인할 수 있기 때문에
악성코드 제작자는 이를 은닉하는 기법을 개발하게 됬다.
위장 실행 기법(covert launching technique)이라고 부른다.
실행기(로더, Loader)
자신이나 다른 악성코드를 설정하는 악성코드의 유형이다.
가장 일반적인 예로 실행 파일이나 DLL을 자신의 리소스 섹션에 갖고 있다.
리소스 섹션에 있는 악성코드를 실행시키기 전에 실행기는 FindResource, LoadReasource, SizeofResource, LockResource 같은 리소스 처리 API를 사용한다.
악성코드 실행기는 관리자 권한으로 실행되거나 관리자 권한으로 권한상승을 해야한다. 일반 사용자 권한으로는 모든 기법을 적용할 수 없을 것이다.
프로세스 인젝션(Process Injection)
가장 대중적인 위장 실행 기법이다.
이 기법은 코드를 실행 중인 프로세스에 인젝션하고, 그 코드를 실행하는 것이다.
호스트 기반 방화벽과 프로세스에 특화된 보안 메커니즘을 우회하고자 할 때 이 기법을 사용한다.
다음은 인젝션에 호출될 수 있는 API 이다.
VirtualAllocEx 는 원격 프로세스의 메모리에 공간을 할당하기 위해 사용되며,
WriteProcessMemory 는 할당된 공간에 데이터를 쓸 때 사용된다.
DLL 인젝션
가장 흔히 사용되는 위장 실행 기법이다.
LoadLibrary 로 DLL 을 원격 프로세스에 삽입한다.
DLL 이 로드되면 운영체제는 DLL 의 DllMain 함수를 실행 중인 프로세스와 동일한 권한으로 호출한다.
DllMain 함수는 악성코드 제작자가 악의적인 코드를 넣어놓았을 것이다.
DllMain 함수 외에 다른 내용이 없는 경우 악의적인 DLL 로 의심할 수 있다.
원격 프로세스에 인젝션하기 위해 프로세스의 핸들을 우선 획득해야 한다.
가장 일반적인 방법으로 CreateToolhelp32Snapshot, Process32First, Process32Next 를 사용하여 PID를 구한다.
그 후 OpenProcess 로 핸들을 획득한다.
CreateRemoteThread 함수는 원격 프로세스에 새로운 스레드를 생성하고 실행한다.
원격 프로세스? 행위를 하고 있는 프로세스 자기자신이 아닌 제 3의 프로세스를 말함. 주로 제 3의 프로세스의 권한을 얻기 위해 이용된다.
호스트 기반 방화벽?