
Rogue Assembly Hunter는 실행 중인 프로세스에서 '흥미로운' .NET CLR 모듈을 발견하기 위한 유틸리티입니다.
__________ _____ . .
_____ \ ____ ____ __ __ ____ / _ \ ______ ______ ____ _ | | | ..
| // _ \ / __| | _/ __ \ / /\ \ / // __// __ \ / | __ | |< | |
| | ( <> ) // > | /\ / / | \ \ _ \ /| Y Y \ _\ \ |_ |
|| /_/_ /|/ _ > _| /____ >____ >___ >|| / /____/ |
/ // / / / / / / / /
___ ___ __
/ | \ __ __ / | ___________
/ ~ \ | / \ __/ __ _ __
\ Y / | / | \ | \ /| | /
_| /|/|| /| _ >|
/ / /
Rogue Assembly Hunter는 실행 중인 프로세스에서 '흥미로운' .NET CLR 모듈을 발견하기 위한 유틸리티입니다.
.NET은 .NET 관리 애플리케이션을 구축하고 실행하기 위한 매우 강력하고 유능한 개발 플랫폼이자 런타임 프레임워크입니다. 지난 몇 년 동안 Red Team(및 유사 조직)은 공격 작전을 지원하기 위한 도구를 구현하기 위해 .NET을 채택했습니다. 특히, PowerShell v5+에서 증가된 가시성과 기회적 가시성으로 인해 많은 사람들이 공격적인 PowerShell에서 .NET으로 전환하는 것은 논리적인 도약이었습니다. 따라서 .NET 공격 도구와 기법은 호스트 기반 방어 기능을 회피하고, 애플리케이션 제어를 우회하며, 악성 코드를 빌드/스테이징/전달/실행하는 데 성공적으로 사용되었습니다(PowerShell과 유사).
예방 관점에서 Microsoft는 .NET을 사용한 위협에 대응하고 전반적인 .NET 공격 표면을 최소화하기 위해 더 많은 노력을 기울이고 있습니다. 예를 들어, Microsoft는 .NET Framework 4.8에 AMSI 검사 기능을 추가했으며, WDAC/WLDP 메커니즘은 매우 효과적입니다. 탐지/대응 관점에서 .NET 생태계에 대한 추가적인 가시성과 내부 조사는 .NET 중심 위협에 대응하는 새로운 방법을 발견하는 데 항상 유리합니다.
2017년, Joe Desimone(@dez_)은 Hunting For In-Memory .NET Attacks이라는 훌륭한 기사를 작성했습니다. 오늘날에도 여전히 유효한 이 기사는 현대 .NET 공격 벡터와 탐지를 위한 온디맨드 및 이벤트 기반 기술을 설명합니다. 기사와 함께 Joe는 디스크 참조가 없는 메모리 내 .NET CLR 모듈을 사전에 탐지(및 검색)하는 도구(Get-ClrReflection)를 출시했습니다. Joe의 작업에서 영감을 받고 CLRMD 런타임 진단 라이브러리(+ 이후 mscordacwks.dll의 데이터 액세스 기능)의 내부 조사 기능을 활용하여 Rogue Assembly Hunter는 다음과 같은 목적으로 만들어졌습니다:
[*] 매개변수:
--mode=<.> : 필수 | 분석 모드를 선택합니다. 옵션: sweep, process, watch.
--hunt=<.> : 선택 사항 | 흥미로운 CLR 모듈을 찾기 위한 헌트 스캔 유형을 선택합니다. all(기본값), memory-only, unusual-dir,
sig-status, imposter-file 또는 list를 지정합니다.
--export=<.> : 선택 사항, 실험적 | 메모리 내 헌트 스캔 및 가짜 파일 헌트 스캔을 위해 로드된 CLR 모듈을 내보낼 파일 경로를 지정합니다.
(예: --hunt=memory-only/imposter-file/all).
--pid=<.> : 선택 사항 | PID로 대상 프로세스를 지정합니다. --mode=process 매개변수/값과 함께 사용해야 합니다.
--checks=<.> : 선택 사항 | 스캔 주기 값을 지정합니다. 이는 스캔 중 경쟁 조건 누락을 줄이는 데 도움이 될 수 있지만 결과 출력이 반복될 수도 있습니다.
기본값은 1입니다.
--sleep=<.> : 선택 사항 | 절전 시간(초) 값을 지정합니다. 이는 검사 주기를 지연시켜 스캔 중 경쟁 조건 누락을 줄이는 데 도움이 될 수 있습니다.
기본값은 0초입니다.
--debug : 선택 사항 | 예외 정보를 표시합니다(예: 프로세스 연결 오류).
--nobanner : 선택 사항 | 표시 배너를 표시하지 않습니다. PowerShell 스크립트로 실행하거나 자동화를 활용하는 사용 사례에 유용합니다.
--suppress : 선택 사항 | --mode=sweep 또는 --mode=watch 중에 RogueAssemblyHunter 프로세스를 스캔하지 않습니다.
--help : 선택 사항 | 이 도움말을 표시합니다. 이는 다른 모든 명령줄 매개변수를 재정의하고 애플리케이션을 종료합니다. *매개변수 없이 실행 시 기본값입니다.
[*] 모드 (--mode=)
- sweep : 모든 프로세스를 스캔/반복합니다(참고: 동일한 아키텍처/'비트'의 프로세스만 성공적으로 스캔됩니다. x86/x64 등에 맞게 컴파일하십시오).
- process : 단일 프로세스를 스캔합니다. --pid=<PID>와 함께 사용합니다.
- watch : 새 프로세스가 생성될 때 스캔합니다. --checks 및 --sleep로 스캔 속성을 조정합니다. (참고: 실험적입니다. 경쟁 조건이 발생할 가능성이 높습니다.)
[*] 헌트 (--hunt=)
- all : 기본값입니다. 모든 헌트 옵션으로 분석합니다('list' 제외).
- memory-only : 메모리 헌트. 디스크에 백업되지 않은 CLR 모듈을 분석합니다.
- unusual-dir : 비정상 디렉토리 헌트. '정상' 디렉토리 외부에서 로드된 CLR 모듈을 분석합니다.
사용자 정의하려면 '_huntUnusualDirectoryFilter'를 편집하십시오.
- sig-status : 파일 서명 헌트. 비정상적인 서명 상태(예: 서명되지 않음)의 CLR 모듈을 분석합니다. 참고: 실험적입니다. 가양성이 발생할 수 있습니다.
사용자 정의하려면 '_huntSigExclusionsFilter'를 편집하십시오.
- imposter-file : 예상치 못한 CLR 모듈 헌트. 의심스러운 디스크 파일 백업이 있는 CLR 모듈을 분석합니다. 실험적입니다.
- list : 모든 CLR 모듈을 반복하고 그에 따라 나열합니다.
[*] 사용 예시
- 예시 1 : 프로세스 스캔 및 액세스 가능한 64비트 프로세스에 대해 모든 헌트 실행('list' 제외) -
RogueAssemblyHunter_x64.exe --mode=sweep
- 예시 2 : 프로세스 스캔, 액세스 가능한 32비트 관리 프로세스의 모든 CLR 모듈 나열, 오류 정보 표시 -
RogueAssemblyHunter_x86.exe --mode=sweep --hunt=list --debug
- 예시 3 : 새 프로세스 감시, 모든 CLR 모듈 스캔(관리 및 64비트인 경우), RogueAssemblyHunter 프로세스 스캔하지 않음, 2회 검사에 3초 지연 -
RogueAssemblyHunter_x64.exe --mode=watch --suppress --checks=2 --sleep=3
- 예시 4 : PID로 단일 프로세스 스캔, 메모리 내 CLR 모듈만 나열, CLR 모듈을 지정된 경로로 내보내기 -
RogueAssemblyHunter_x86.exe --mode=process --pid=4650 --hunt=memory-only --export=c:\evilassemblies\
- 예시 5 : 프로세스 스캔, 액세스 가능한 64비트 프로세스에 대해 메모리 내 CLR 모듈만 나열, RogueAssemblyHunter 프로세스 스캔하지 않음, 제목 배너 표시하지 않음 -
RogueAssemblyHunter_x64.exe --mode=sweep --hunt=memory-only --suppress --nobanner
편의를 위해 PowerShell 스크립트와 두 개의 컴파일된 바이너리(RogueAssemblyHunter_x64.exe 및 RogueAssemblyHunter_x86.exe)가 \Release 폴더에 포함되어 있습니다. 사용 사례(예: 배포, 임베딩, 검사, 절전 등)에 맞게 자유롭게 수정하십시오.
사용 예시:
스윕 모드에서 Invoke-RogueAssemblyHunter 실행 및 모든 헌트 옵션 확인
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter
감시 모드에서 Invoke-RogueAssemblyHunter 실행 및 모든 헌트 옵션 확인
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter -ScanMode watch
SHA256 해시:
e804711a8b6469f1b13b388de47dfa6dde1c85279d365db7b6e19e1644990fa6 Invoke-RogueAssemblyHunter.ps1
cc985d918e566671aa209142abc55bd798ca6c1a18730b785ac8c18d489736c3 RogueAssemblyHunter_x64.exe
ae3aead43871e263cd8465d5356c4daaae0635714321f872c931ec825008287a RogueAssemblyHunter_x86.exe