
파일리스 Remcos RAT 변종의 Native API 호출을 통해 svchost.exe에 인젝션하는 리버스 엔지니어링 분석입니다. 난독화된 페이로드 추출, 레지스트리 지속성, 클립보드 모니터링, API 후킹 및 UAC 우회 기법을 다룹니다.
다음 Binary Ninja 스니펫은 Remcos가 svchost.exe에 페이로드를 주입하는 데 사용하는 핵심 인젝션 메커니즘을 보여줍니다.
CreateProcessW 와 CREATE_SUSPENDED 플래그를 사용하여 중단된 상태의 새 svchost 프로세스를 시작합니다.VirtualAlloc 은 MEM_COMMIT 및 PAGE_READWRITE 플래그를 사용하여 대상 프로세스 내에 메모리를 할당하므로 페이로드를 프로세스 메모리에 직접 쓸 수 있습니다.WriteProcessMemory 는 중단된 svchost 프로세스의 할당된 메모리 영역에 페이로드를 씁니다.ReadProcessMemory 는 대상 프로세스의 메모리를 읽어 원래 진입점을 검색하거나 인젝션을 검증합니다.TerminateProcess 는 인젝션이 실패할 경우 중단된 svchost 프로세스를 종료하여 불안정한 상태로 방치되는 것을 방지합니다.
Native API를 사용하는 Remcos의 인젝션 루틴에 대한 Binary Ninja 뷰로, MEM_COMMIT, PAGE_READWRITE, ReadProcessMemory 및 TerminateProcess를 보여줍니다.
Remcos는 시스템에 영구적인 존재를 확립하기 위해 Windows 레지스트리에 키를 추가합니다. 이 키는 시스템이 시작될 때마다 멀웨어가 다시 실행되도록 합니다.
HKEY_USERS\S-1-5-21-3807688912-2840792520-522192237-1001\Software\kamolprf-CFKPWC
exepath 값이 REG_BINARY로 저장되므로 직접 읽을 수 없습니다. 이로 인해 탐지가 더 어려워집니다.UID 및 licence 값을 통해 공격자는 피해자를 식별하고 라이선스 검사를 수행할 수 있습니다.time 값은 멀웨어가 설치되거나 마지막으로 실행된 시점에 대한 정보를 제공합니다.
레지스트리 키와 그 안의 exepath, licence, time, UID 값.
다음 WinDbg 스니펫은 주입된 svchost.exe 프로세스 내에서 발견된 트램펄린 함수를 보여줍니다. 이 코드는 Remcos의 API 후킹 또는 페이로드 실행 메커니즘의 일부로 보입니다.
jmp qword ptr [svchost+0x9758] – API 또는 함수로 점프하는 후크 또는 트램펄린일 가능성이 높습니다.mov / movdqa 명령어 – 호출 컨텍스트를 보존하기 위해 레지스터(xmm0-xmm3, rcx, rdx, r8, r9)를 저장하고 복원합니다.call svchost+0x3e50 – 페이로드 또는 후크 핸들러의 일부일 수 있는 핵심 함수를 호출합니다.jmp rax – 원래 함수 또는 다음 단계로의 최종 점프입니다.INT3 트랩 – 디버거가 연결된 경우 실행을 중단시키는 안티 디버깅 명령어입니다.이 구조는 API 후킹 또는 디투어 함수의 전형적인 형태로, Remcos가 중요한 Windows API 호출을 가로채는 데 사용합니다. xmm 레지스터(부동 소수점 또는 SIMD 연산용)의 사용은 이 후크가 SSE 명령어를 사용하는 함수에 배치되었을 수 있음을 시사합니다.
INT3 트랩과 함께 jmp 및 call 명령어를 보여주는 svchost.exe 내부 트램펄린 함수의 WinDbg 뷰.
다음 16진수 덤프는 주입된 svchost.exe 프로세스 내부의 PAGE_READWRITE 메모리 영역에서 추출되었습니다. 이 영역에는 직접적인 call 또는 jmp 명령어가 포함되어 있지 않으므로, 이 데이터는 실행 가능한 코드가 아니라 난독화되거나 암호화된 페이로드임을 확인할 수 있습니다.
RPC Control 및 PC- 와 같은 인식 가능한 문자열이 데이터 내에 포함되어 있습니다.ctk, m, mafasakaaam 과 같은 추가 조각은 구조화된 구성의 일부로 보이며, 암호화 키, API 이름 또는 레지스트리 경로를 포함할 수 있습니다.
svchost.exe의 PAGE_READWRITE 영역에서 추출한 난독화된 16진수 덤프의 Binary Ninja 뷰로, RPC Control 및 PC-와 같은 포함된 문자열을 보여줍니다.
PAGE_READWRITE 영역에서 추출된 난독화된 16진수 페이로드는 Binary Ninja의 문자열 뷰를 사용하여 추가로 분석되었습니다. 심한 난독화에도 불구하고 몇 가지 읽을 수 있는 문자열과 패턴이 나타났습니다.
PC- 접두사가 붙은 문자열 (예: PC-475ce3d749612b, PC-4a757962f31b84) – 피해자 추적에 사용되는 MachineGuid 또는 고유 시스템 식별자일 가능성이 높습니다.svchost.exe – 대상 프로세스 이름으로, 인젝션 벡터를 확인합니다..dll 확장자 – Remcos가 특정 DLL을 로드하거나 검색함을 나타내며, API 후킹 또는 지속성에 사용될 수 있습니다.ontroll\ – 레지스트리 경로(Control\)의 일부로 보이며, 지속성 또는 구성 저장을 나타냅니다.EEF931 및 1AA81C6FD0CF04A816B – GUID 또는 암호화 키로 보이며, 페이로드의 XOR/AES 복호화에 사용될 수 있습니다.TEMP – 임시 파일 생성 또는 임시 디렉토리에서의 실행을 암시합니다.
난독화된 16진수 페이로드의 Binary Ninja 문자열 뷰로, PC-, svchost.exe, .dll, EEF931와 같은 읽을 수 있는 조각을 보여줍니다.
이 분석은 Remcos RAT의 매우 정교한 파일리스 변종을 발견했습니다. 이 변종은 최소한의 디스크 사용량과 고급 회피 기술로 작동합니다. 멀웨어는 ZwCreateSection 및 ZwMapViewOfSection과 같은 Native API 호출을 사용하여 핵심 페이로드를 svchost.exe에 주입하여 지속성과 은폐성을 보장합니다.
PC-, svchost.exe, .dll, EEF931와 같은 단편적인 문자열만 드러냅니다.HKEY_USERS\...\Software\kamolprf-CFKPWC 아래의 레지스트리 키를 통해 지속성을 유지하며, 암호화된 exepath, licence, time, UID 값을 저장합니다.PAGE_READWRITE)에 대해 svchost.exe를 모니터링합니다.Software\kamolprf-CFKPWC 아래의 레지스트리 키를 추적합니다.ZwCreateSection 및 ZwMapViewOfSection 호출을 찾습니다.PC- 및 EEF931와 같은 난독화된 문자열에 대해 프로세스 메모리를 분석합니다.이 Remcos 변종은 높은 수준의 전문성을 보여주며 기존 보안 솔루션을 회피하도록 명확하게 설계되었습니다. 파일리스 실행, 프로세스 인젝션 및 레지스트리 기반 지속성의 조합은 고급 탐지 전략을 필요로 하는 심각한 위협입니다.
사용된 도구: Ghidra, Binary Ninja, WinDbg, Process Hacker
분석된 Remcos RAT 샘플은 MalwareBazaar에서 제공되며, 자체 분석을 원하는 경우 다운로드할 수 있습니다:
| API | Remcos에서의 용도 |
|---|
| CreateProcessW | 인젝션을 위해 svchost를 중단된 상태로 시작합니다. |
| VirtualAlloc | MEM_COMMIT 및 PAGE_READWRITE를 사용하여 페이로드용 메모리를 할당합니다. |
| WriteProcessMemory | 할당된 메모리에 페이로드를 씁니다. |
| ReadProcessMemory | 대상 프로세스 메모리를 읽습니다(검증 또는 진입점 검색에 사용됨). |
| TerminateProcess | 인젝션이 실패하면 중단된 프로세스를 종료합니다. |
| 값 이름 | 유형 | 값 | 설명 |
|---|
| exepath | REG_BINARY | 암호화된 바이너리 데이터 | Remcos 또는 주입된 페이로드의 암호화된 파일 경로. XOR 또는 AES로 보호될 가능성이 높습니다. |
| licence | REG_SZ | DA8E22D4CD8D349953DF1FAD364CAB05 | Remcos 라이선스 키. 크랙되거나 데모 버전에서는 고정 값일 수 있습니다. |
| time | REG_DWORD | 0x6a53ac27 (1783868455) | Unix 타임스탬프 형식의 설치 또는 마지막 실행 시간. |
| UID | REG_DWORD | 0xfeb60bd4 (4273343444) | 고유 사용자 ID. 피해자 식별에 사용됩니다. |