
직접적인 Syscall 기반 Reflective Process Hollowing을 통해 Chromium의 App-Bound Encryption을 우회합니다. Chrome, Edge, Brave 및 Avast에서 쿠키, 비밀번호, 결제 수단 및 토큰을 추출합니다 - 파일리스(fileless), 사용자 모드(user-mode), 관리자 권한 불필요.
Chrome App-Bound Encryption Decryption)Chromium의 **App-Bound Encryption(ABE)**을 완전히 인메모리로 우회하는 것을 입증하는 사후 침투 도구입니다. 이 프로젝트는 Direct Syscall 기반 Reflective Process Hollowing을 활용하여 정상적인 브라우저 프로세스를 일시 중단된 상태로 실행하고, 그 정체성과 보안 컨텍스트를 가로채기 위해 페이로드를 은밀하게 주입합니다. 이 Living-off-the-Land(LOTL) 기법은 브라우저 자체의 보안 모델을 무력화합니다. 파일리스 방식 덕분에 이 도구는 메모리에서만 완전히 작동하며, 사용자 영역 API 후킹을 우회하여 최신 Chromium 브라우저에서 민감한 사용자 데이터(쿠키, 비밀번호, 결제 정보)를 복호화하고 유출할 수 있습니다.
이 연구가 가치 있다고 생각하신다면 커피 한 잔을 사주시면 감사하겠습니다:
이 도구의 효과는 현대적이고 회피에 초점을 맞춘 기법들의 조합에서 비롯됩니다:
Direct Syscall 기반 회피: 표준 WinAPI 함수에 대한 EDR/AV 사용자 영역 후킹을 우회하기 위해 커널 함수를 직접 호출합니다. 엔진은 Hell's Gate 기법과 해시 기반 함수 매칭을 사용하여 런타임에 syscall 번호를 동적으로 해석합니다(바이너리에 평문 syscall 이름이 없음).
Direct Syscall 기반 프로세스 할로잉: 은밀한 프로세스 생성 및 주입 기법입니다. 트래픽이 많고 감시 가능성이 높은 프로세스에 주입하는 대신, 일시 중단된 상태의 새 호스트 프로세스를 생성합니다. 모든 메모리 조작이 프로세스가 정상적으로 실행되기 전에 발생하므로 탐지 가능성이 크게 줄어듭니다.
파일리스 인메모리 페이로드: 페이로드 DLL은 대상 머신의 디스크에 기록되지 않습니다. 컴파일 타임 파생 키를 사용하는 ChaCha20 암호화 컴파일 타임 바이트 배열로 내장되어, 메모리에서 복호화된 후 리플렉티브하게 로드되어 포렌식 발자국을 최소화하고 정적 파일 기반 스캐너를 우회합니다.
Reflective DLL Injection(RDI): LoadLibrary를 사용하지 않고 메인 페이로드를 주입하는 은밀한 프로세스 주입 방법으로, 모듈 로드를 모니터링하는 탐지 메커니즘을 회피합니다. 자체 포함형 부트스트랩 로더는 PE 섹션을 매핑하고, 리로케이션을 수행하며, 메모리에서 임포트를 해석합니다.
대상 컨텍스트 COM 호출: App-Bound Encryption을 무력화하는 핵심 요소입니다. 신뢰할 수 있는 브라우저 프로세스 내부에서 코드를 실행함으로써 해당 프로세스의 정체성과 보안 컨텍스트를 상속받아, ABE COM 서버에 정당한 호출처럼 보이는 요청을 보내고 경로 검증 보안 검사를 통과할 수 있습니다.
Nt*/Zw* 함수 이름 없음 — 컴파일 타임 DJB2 해시 사용.LoadLibrary 호출 없이 페이로드를 은밀하게 로드.--kill 플래그 제공.
| 브라우저 | 테스트된 버전 (x64 & ARM64) |
|---|---|
| Google Chrome | 144.0.7559.133 |
| Google Chrome Beta | 145.0.7632.18 |
| Brave | 1.86.148 (144.1.86.148) |
| Microsoft Edge | 145.0.3800.36 |
| Avast Secure Browser | 143.0.33371.147 |
참고: Chrome/Brave/Edge 144+는 새로운
IElevator2COM 인터페이스를 사용합니다. 이 도구는 가능한 경우IElevator2를 자동으로 사용하고, 이전 버전에서는IElevator로 대체합니다. Avast Secure Browser는 확장된 vtable(12개 메서드, 오프셋 104의 DecryptData)을 가진 사용자 지정IElevatorChrome인터페이스를 사용합니다.
이 매트릭스는 지원되는 각 브라우저의 추출 기능을 설명합니다.
| 기능 | Google Chrome | Microsoft Edge | Brave | Avast Secure Browser |
|---|---|---|---|---|
| 쿠키 | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| 비밀번호 | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| 결제 수단 | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| IBAN | ✅ ABE | ❌ N/A | ✅ ABE | ✅ ABE |
| 인증 토큰 | ❌ N/A | ❌ N/A | ❌ N/A |
이 도구의 실행은 은밀성과 효율성에 중점을 두며, Direct Syscall 기반 Reflective Hollowing 프로세스를 중심으로 구축되었습니다. 이 접근 방식은 상위 수준 API 호출을 거의 수행하지 않고, 페이로드가 정상적이고 새로 생성된 브라우저 프로세스 내에서 작동하도록 보장합니다.
chromelevator.exe)ntdll.dll을 동적으로 파싱하고, 해시 기반 매칭을 사용하여 syscall 번호(SSN)를 해석하고 커널 전환 가젯(syscall/ret 또는 svc/ret)을 찾습니다. --kill 플래그가 지정된 경우 NtGetNextProcess 및 NtTerminateProcess syscall을 사용하여 대상 브라우저의 실행 중인 모든 인스턴스를 종료하고 SQLite 데이터베이스의 파일 잠금을 해제합니다.CreateProcessW를 사용하여 CREATE_SUSPENDED 상태로 대상 브라우저의 새 인스턴스를 생성합니다. 이 깨끗하고 일시 중단된 프로세스가 페이로드의 호스트 역할을 합니다.NtAllocateVirtualMemory(직접 syscall)를 사용하여 메모리를 할당합니다.NtWriteVirtualMemory로 할당된 공간에 복호화된 페이로드 DLL을 기록합니다.NtProtectVirtualMemory(직접 syscall)를 사용하여 메모리 영역의 권한을 실행 가능으로 변경합니다.NtCreateThreadEx를 사용하여 대상 프로세스에 새 스레드가 생성됩니다. 스레드 시작 주소는 페이로드의 Bootstrap 내보내기를 직접 가리키며, 인자로 원격 파이프 이름의 주소가 전달됩니다. 브라우저의 원래 메인 스레드는 일시 중단된 상태로 유지되며 다시 실행되지 않습니다. 그런 다음 인젝터는 페이로드가 파이프로 다시 연결될 때까지 대기합니다.Bootstrap reflective 로더가 실행되어 향상된 은밀성을 갖춘 사용자 정의 인메모리 PE 로더 역할을 합니다:
NtAllocateVirtualMemory에 대한 직접 syscall을 사용하여 페이로드를 위한 새 메모리를 할당합니다(후킹된 VirtualAlloc 우회).NtProtectVirtualMemory를 사용하여 섹션 권한을 설정합니다.DllMain을 호출합니다.DllMain은 새 스레드를 생성하고 즉시 인젝터가 전달한 명명된 파이프 핸들에 연결합니다. 인젝터가 보낸 출력 경로를 포함한 구성을 읽습니다. 이후의 모든 로그와 상태 업데이트는 이 파이프를 통해 다시 전달됩니다.IElevator2, 이전 버전의 경우 IElevator, Edge의 경우 IEdgeElevatorFinal, Avast Secure Browser의 경우 IAvastElevator)를 인스턴스화합니다. 호출이 신뢰할 수 있는 프로세스 경로에서 발생하므로 서버의 모든 보안 검사가 통과됩니다.Local State 파일에서 읽은 app_bound_encrypted_key를 제공하면서 COM 인터페이스에서 DecryptData 메서드를 호출합니다. COM 서버는 키를 복호화하고 평문 AES-256 마스터 키를 페이로드에 반환합니다.Default, Profile 1 등)을 열거합니다. 각 프로필에 대해 관련 SQLite 데이터베이스(Cookies, Login Data, Web Data)를 쿼리하고 AES-256-GCM을 사용하여 데이터 블롭을 복호화한 후 비밀을 JSON으로 형식화합니다. 결과는 인젝터가 지정한 출력 디렉터리에 직접 기록됩니다.FreeLibraryAndExitThread를 호출하여 정리합니다. 인젝터는 신호를 수신하면 NtTerminateProcess로 부모 호스트 프로세스를 종료합니다.이 프로젝트는 모든 컴파일 및 페이로드 임베딩을 자동으로 처리하는 간단하고 견고한 빌드 스크립트를 사용합니다.
이 저장소를 클론합니다.
VS용 개발자 명령 프롬프트(또는 MSVC를 지원하는 모든 셸)를 엽니다.
프로젝트 루트에서 빌드 스크립트 make.bat를 실행합니다.