티스토리 뷰
Windows Process Injection - Evaluating Process injection techinque(Part2)
Oth 2020. 6. 18. 14:25Windows 보호기법의 우회
MS 는 SetProcessValidCallTargets 라는 API를 process 에 있는 arbitrary address 를 화이트리스팅하기 위해서 사용한다. SetProcessValidCallTargets 는 내부적으로 ntdll!NtSetInformationVirtualMemory 를 VmInformationClass=VmCfgCallTargetInformation 으로 실행한다.
1
2
3
4
5
6
7
|
//Whitelisting an arbitrary address
HANDLE p = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION, FLASE, process_id) MEMORY_BASIC_INFORMATION meminfo;
VirtualQueryEx(p, target, &meminfo, sizeof(meminfo));
CFG_CALL_TARGET_INFO cfg;
cfg.Offset = ((DWORD64)target) - (DWORD64)meminfo.AllcationBase;
cfg.Flags = CFG_CALL_TARGET_VALID;
SetProcessValidCallTargets(p, meminfo.allocationBase, meminfo.RegionSize, 1, &cfg)
|
cs |
우리는 Windows 10 version 1803 에서 CFG 이외의 윈도우즈 보호기법을 비활성하는 방법을 찾았다. MS 는 SetProcessMitigationPolicy 라는 API를 제공하는데 이를 통해 프로세스의 보호기법을 ON/OFF 가능하다. 이 함수는 타겟 프로세스에서 실행이되야하고 3가지 인자 값이 필요하다. 이 인자 값을 맞춰주고 ntdll!NtQueueApcThread를 사용해서 타겟프로세스에서 SetProcessMitigationPolicy를 실행한다.
1
2
3
|
//NtQueueApcthread를 이용한 우회
HANDLE th = OpenThread(THREAD_SET_CONTEXT, FALSE, thread_id); ntdll!NtQueueApcThread(th, SetProcessMitigationPolicy, (void*)ProcessDynamicCodePolicy, ((char*)GetModuleHandle("ntdll")) + 0x20, sizeof(PROCESS_MITIGATION_DYNAMIC_CODE_POLICY));
|
cs |
이 기법은 Windows 10 version 1809 에서 막혔다. 위와 같은 방식을 사용하면 ERROR_ACCESS_DENIED 를 반환한다.
process Injection 과정
일반적인 프로세스 인젝션은 다음 3 단계로 이루어진다.
1. 메모리 할당
2. 할당한 메모리에 원하는 코드 쓰기
3. 쓴 코드를 실행
가끔 메모리 할당과 쓰기가 같은 단계에 이루어지는 경우도 있다. ( 같은 API에서 두 가지를 전부 하는 경우)
메모리 할당
메모리에 쓰려면 그 전에 메모리 할당이 필요하며 이 과정은 다음 두 가지 방법으로 이루어질 수 있다.
1. Injector 프로세스가 VirtualAllocEx 를 호출해서 새로운 메모리 영역을 타겟 프로세스에 생성한다.
2. Injector 프로세스가 이미 존재하는 메모리 영역을 덮어쓴다. 덮어쓰는 영역에는 다음과 같은 선택지가 있다.
- Stack - stack 은 RW 이다. 하지만 stack에 쓰는 것은 프로세스에서 해당 메모리를 덮어써버릴 수 있기 때문에 유의해야한다.
- Image - 몇몇 DLL은 여분의 Data Section을 남겨놓는데 이 부분을 RW 권한 이기 때문에 쓰기가 가능하다.
- Heap - 이 부분도 RW 이기 때문에 쓰기가 가능하다.
VirtualProtectEx 는 메모리 영역의 권한 변경을 위해서 사용될 수 있다.
참고자료 : Windows Process Injection in 2019 - Amit Klein, Itzik Kotler Safebreach Labs
'시스템 보안 > 취약점' 카테고리의 다른 글
Windows Process Injection - Introduction(Part1) (0) | 2020.06.18 |
---|---|
Heap Chunk (0) | 2018.02.27 |
powershell empire 설치법(ubuntu) (0) | 2017.02.10 |
유형별 정리 (0) | 2017.02.05 |
Format String Bug(포멧 스트링 버그) (0) | 2017.01.14 |
- Total
- Today
- Yesterday
- 디바이스
- vmware cannot connect to the virtual machine
- VMware
- gdb명령어
- 루트킷
- gdb intel
- Intel
- 레거시 드라이버
- LKM
- module
- IRP
- backdoor
- PNP 드라이버
- vmware 오류
- DriverEntry
- breakpoint
- gdb 명령어
- gdb intel 변환
- 모듈
- rootkit
- 드라이버
- BP
- 리눅스 모듈
- 백도어
- 변환
- GDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |