APT 침해사고 분석
아티팩트에 근거한 악성코드 감염 경로 분석이 필요하다. 예를 들어 공격자가 작성했던 Exploit 명령어, 트래픽 등을 추적하고, 악성코드 감염 과정에서 삭제된 파일 탐색 및 복구를 하거나 유출된 파일을 아티팩트에 근거하여 파악해야한다.
1. 공격자의 공격 기법
각종 Exploit 기법으로 브라우저나 문서파일 악성코드 형식으로 들어온다. 이 각 Exploit 과정에서 아티팩트를 추출하고 분석해야 한다. 트래픽 분석을 통해서 침입 경로도 파악할 수 있다.
Dll injectoin
최초 침투 과정에서 브라우저 Exploit을 하고, 스피어 피싱 과정에서 문서 파일 취약점 및 Exploit을 한다. 파일 다운로드 및 실행 권한을 획득하여 사용하게 된다.
권한 상승 과정에서 UAC Bypass 가 있고, LPE Exploit -> Normal User -> System Account(Administrator)을 한다
공격 행위를 유지하기 위해 추가적으로 계정을 생성하고, 드로퍼를 활용하여 파일을 다운로드 힌다. Backdoor, RAT 설치 및 기타 악성코드를 실행하여 공격행위를 유지한다.
Injection
- Process Spawning Point Injection : Process가 생성될 시점에 Injection 되는 것을 말한다
- Process Entry Point INjection : Process 메모리 시작 부분에 Injection하는 것으로 가장 많이 사용된다.
- True Process Injection : Process 구동 과정 중 Injection 된다
- 윈도우에서는 프로세스 마다 권한을 갖고 있기 때문에 프로세스마다 점유된 메모리를 침범하여 A프로세스가 가지고 있던 권한을 B가 그대로 사용할 수 있게된다.
Windows 10에 도입된 Process Exploitation 방지책
- CFG(Control Flow Guard)
- 컴파일에서 각각의 Call/JMP 명령을 _guard_check_incall()로 돌려 프로세스 자체의 유효성을 검증한다.
- 유효성은 모듈마다 존재하는 16 바이트 정렬 리스트에서 탐색한다
- 사용하려면 call 모듈로 call 되는 모듈 모두 CFG를 지원해야 한다.
- Dynamic Code Prevention
- PAGE_EXECUTE_가 있는 VirtualAlloc(), FILE_MAP_EXECUTE 옵션이 있는 MapViewOfFile(), PAGE_EXECUTE_가 있는 VirtualProtect()의 call 프로세스와, SetProcessValidCallTargets()를 통한 CFG 비트맵 조작을 방지한다.
- Binary Signature Policey
- Microsoft/Microsoft Store/WHQL에서 인증받은 모듈만 프로세스 메로리에 로드한다
- Extensions Point Disable Policy
- Process Space로 DLL을 로드하는 확장자들을 비활성한다.
Process Injection 기법 시험
- dll injection 은 다른 프로세스에 침투하는 방법으로 다른 프로세스에 특정 dll을 강제로 삽입시키는 것이다. 더 정확하게 표현하면 다른 프로세스에게 LoadLibrary() API를 호출하도록 명령하여 내가 원하는 DLL을 로딩 시키는 것이다. 로딩된 DLL은 프로세스 메모리에 대한 접근 권한이 생겼기 때문에 사용자가 원하는 어떤 일이라도 수행할 수 있다.
- Bypass Windows Protection Mechanism
- Target Process 임의 주소를 Write Listening(CFG 관점)하기 위해 SetProcessVaildCallTargets() API를 사용한다.
- Winodws 10 1803에서는 CFG를 제외한 다른 보안 방안들을 무력화 가능한 방법 존재
- MS는 Process 자체에 이런 기능들을 On/Off 할 수 있는 SetProcessMitigationPolicy() API 제공,
- SetProcessMitigationPolicy()는 파라미터 3개를 사용하는데, 이 API는 ntdll!NtQueueApcThread로 원격 작동시켜 CFG를 oFF 할 수 있다.
- 메모리 할당
- 메모리에 쓰기
- 실행 이 순서가 반드시 모두 실행되는 것이 아니며, 순서없이 실행되거나 여러번 실행될 수 있음
- Injection Exploit 기법
- WriteProcessMemory() write prijmitive : 가장 오래되었으나 가장 많이 사용된다. a. Target address 가 할당되어 있어야 한다. b. 메모리에 코드나 데이터를 Write 한다
- 사전 요구사항 없고, 한계도 없다. CFG/CIG 영향도 없고, 주소를 통제하고 안저적이다
- Class DLL Injection (과거에 많이 쓰였고, 현재는 거의 쓰지 않는다) a. DLL을 만들어 디스크에 작성 : DllMain에는 bootstap payload가 있어야 한다
b. Write primitive를 이용하여 DLL 경로 문자열을 메모리에 Write
c. CreateRemoteThread()를 이용하여 DLL Load/Execute
d. 변형1 : CreateRemoteThread() 대신 QueueUserAPC() 이용가능
e. 변형2 : Null-terminated 문자열을 찾아 그곳에 DLL을 넣어서 실행 - 사전요구사항은 디스크에 이미 존재하는 DLL, Memory write primitive
- CIG에서 MS 인증이 없는 DLL 실행 시 Error 메시지를 띄운다
- 레지스터에 대한 통제는 없지만 별 문제가 없다.
워터링홀
노조 홈페이지에 웹 쉘 업로드 후 메인 페이지에 악성 스크립트 삽입 (Active X 취약점을 이용한 워터링 홀 공격 )
pos 단말기 취약점
Refference