Mitre ATT&CK 매트릭스의 세 가지 프로세스 주입 기술: 클래식 프로세스 주입, Process Hollowing
및 Process Doppelgänging
. Process Hollowing
和Process Doppelgänging
。
恶意软件使用进程注入的主要目的大致是为了躲避杀软的检测或者进行提权操作。这里我们将主要针对第一种情况下的3种手段进行详细的讨论。
一:经典的进程注入(DLL注入)
这是最为经典的手段,流程也十分简洁明了即:
OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread
이것은 가장 고전적인 방법이며 프로세스도 매우 간단하고 명확합니다. #🎜 🎜#
OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread
#🎜 🎜# 2: Process Hollowing
이것은 매우 오래된 방법으로 중국어에서는 일반적으로 "꼭두각시 프로세스 만들기"로 번역됩니다. 이 방법을 사용하여 생성된 프로세스는 어떠한 법적으로도 위장될 수 있습니다. 예를 들어 IE로 위장한 경우 메모리에 있는 프로세스 해커를 사용하여 보면 아이콘 리소스, 설명, 디지털 서명이 모두 IE의 값이 됩니다. 이는 긴급 구조대원이 조사 중에 감지하기 어려울 수 있습니다.이 기법을 간결하게 표현하자면, 악성 프로세스는 먼저 정지 상태의 프로세스를 생성한 후, 원래의 메모리 매핑을 취소하고 미리 준비된 악성 코드로 대체한 후, 악성 프로세스를 처리합니다. 수정된 이미지. 파일이 리디렉션된 후 프로세스의 실행 상태가 복원됩니다.
구현 아이디어:
1. CreateProcess를 통해 대상 프로세스를 생성하고 CREATE_SUSPENDED 매개변수를 전달하여 프로세스를 일시 중지합니다.
# 🎜🎜 #
2. NtQueryProcessInformation을 통해 대상 프로세스 메모리에 있는 이미지 파일의 기본 주소를 얻습니다. (PEB 블록 데이터 구조)
3. 들어오는 매개변수는 프로세스 핸들과 NtUnmapViewOfSection을 통해 대상 프로세스의 메모리 데이터(섹션)를 지웁니다. 기본 주소
4. VirtualAllocEx를 통해 새 메모리를 신청합니다. (시작 주소는 이전 이미지의 기본 주소입니다. 파일이며 크기는 페이로드 크기)
5. WriteProcessMemory
6을 통해 메모리에 페이로드를 씁니다. 🎜#
7. GetThreadContext를 통해 대상 스레드의 컨텍스트를 가져오고 컨텍스트의 eax 레지스터를 올바른 코드 진입점 8로 수정합니다. SetThreadContext #🎜를 통해 진입점을 설정합니다. 🎜#9. ResumeThread 프로세스를 통해 깨어나 페이로드를 실행합니다
대결 아이디어: 구현 아이디어에서 볼 수 있듯이 1, 4, 5단계 , 6, 7, 8 및 9는 프로세스를 생성하는 데 일반적입니다. 그런 다음 프로세스는 자체 수단을 주입합니다. 2단계와 3단계만 특별합니다. Hook Key 기능 등 기존의 탐지 방법을 이용하여 탐지할 수 있습니다.
3: Process Doppelgänging2017년 유럽 블랙햇 컨퍼런스에서 처음 제안된 비교적 새로운 주입 방식입니다. 이 방법은 Process Doppelgänging으로 생성된 프로세스를 프로세스 해커를 이용하여 메모리에서 보면 Process Hollowing과 원리 및 성능이 유사하며 해당 아이콘 리소스, 설명, 디지털 서명이 모두 지정된 대상 프로그램입니다.
이 방법은 Windows 트랜잭션(TxF)의 특성을 이용하여 악성 파일을 사용하여 트랜잭션에서 합법적인 파일을 덮어쓰게 됩니다. 이때 트랜잭션이 제출되지 않습니다(즉, 덮어쓰기가 되지 않습니다. 디스크에서 발생) 섹션이 생성됩니다(현재 트랜잭션의 복사본). 섹션 핸들을 얻은 후에는 악성 파일이 실제로 디스크의 합법적인 파일을 덮어쓰는 것을 방지하기 위해 트랜잭션이 롤백됩니다. 그 후, 메모리에 있는 섹션의 핸들을 사용하여 프로세스를 생성합니다. 생성된 프로세스에는 합법적인 실행 파일에 대한 정보가 있습니다.
보시다시피 트랜잭션에서 파일을 덮어써야 하기 때문에 이 방법을 사용하려면 대상 파일에 대한 쓰기 권한이 필요합니다.
구현 아이디어:
1. TxF 트랜잭션 객체 생성(NtCreateTransaction) 2 , 트랜잭션 API로 합법적인 실행 파일을 엽니다. 즉, 트랜잭션 개체(CreateFileTransacted)에 파일을 추가합니다.3 악성 파일을 엽니다. Space(CreateFile, GetFileSizeEx -> NtAllocateVirtualMemory -> ReadFile)
4 트랜잭션(WriteFile)의 합법적인 실행 파일을 메모리 #🎜🎜의 악성 파일로 덮어씁니다. ## 🎜🎜#
5. 현재 트랜잭션의 섹션(NtCreateSection)을 만듭니다.
#🎜🎜##🎜🎜#6. 트랜잭션을 롤백하고 방금 덮어쓴 파일을 합법적인 실행 파일로 복원합니다(NtRollbackTransaction).
7. 메모리의 섹션을 사용하여 프로세스 개체를 만듭니다(NtCreateProcessEx). 악성 파일 진입점을 탐색하고 프로세스 매개변수 블록을 생성한 후 프로세스 메모리에 프로세스 블록을 작성합니다(NtQueryInformationProcess -> RtlInitUnicodeString -> RtlCreateProcessParametersEx)
9. PEB에서 프로세스 매개변수 블록을 업데이트하고 스레드를 생성합니다.
대책: 단계를 살펴보면 Hook 키 기능(예: NtCreateThreadEx)을 통해 이 기법을 탐지할 수 있습니다.요약
위 세 가지 기술의 발전에서 몇 가지 추세를 볼 수 있습니다.첫 번째 포인트는 기억 속의 은폐 능력이 점점 더 강해지고 있다는 점입니다. 처음에는 은폐가 전혀 없었으나 지금은 기억 속에서 법적인 프로그램에 따라 행동할 수 있습니다.
두 번째로, 페이로드를 메모리에 릴리스하는 방법은 점점 더 탐지하기 어려워지고 있습니다. 처음에는 페이로드가 메모리에 직접 복사되었습니다. 이제 공격자는 릴리스 프로세스를 추가로 숨기기 위해 TxF와 같은 일부 기능을 사용할 수 있습니다. 세 번째 포인트는 최종 단계의 주요 기능에는 거의 변화가 없다는 점입니다. 페이로드 해제가 점점 더 숨겨지더라도 여전히 메모리에 해제되어 실행을 요청하게 됩니다. 제한된 수의 핵심 기능을 후킹하여 최종 페이로드를 덤프해야 합니다. 추가 관련 튜토리얼 권장 사항:웹 서버 보안
위 내용은 Mitre ATT&CK 매트릭스의 세 가지 프로세스 주입 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!