Windows 지속성 발굴
무엇인가요?
Trawler는 Windows 호스트에서 잠재적 침해 지표를 발견하기 위해 설계된 PowerShell 스크립트입니다. 주로 예약된 작업, 서비스, 레지스트리 수정, 시작 항목, 바이너리 수정 등을 포함한 지속성 메커니즘에 중점을 둡니다.
현재 trawler는 MITRE 및 Atomic Red Team에서 특별히 언급한 대부분의 지속성 기술을 감지할 수 있으며, 정기적으로 더 많은 감지가 추가되고 있습니다.
주요 기능
어떻게 사용하나요?
관리자 PowerShell/cmd 프롬프트에서 trawler.ps1을 다운로드하여 실행하기만 하면 됩니다. 모든 감지는 콘솔에 표시될 뿐만 아니라 현재 작업 디렉터리의 CSV('detections.csv')에 기록됩니다. 생성된 CSV에는 감지 이름, 소스, 위험, 메타데이터 및 관련 MITRE 기술이 포함됩니다.
또는 관리자 PowerShell 터미널에서 다음 한 줄 명령을 사용하세요:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/joeavanzato/Trawler/main/trawler.ps1'))
특정 감지는 기본 Windows 구성(10/2016/2019/2022)의 잡음을 제거하는 데 도움이 되는 내장 허용 목록을 가지고 있습니다. 예상되는 예약 작업, 서비스 등이 포함됩니다. 물론 공격자가 이를 직접 하이재킹하고 기본 OS 프로세스로 매우 세밀하게 위장하는 것은 항상 가능하므로, 숙련된 적을 다룰 때는 여러 형태의 분석과 감지를 사용하도록 주의하십시오.
추가 감지에 대한 예시나 아이디어가 있다면 관련 기술 세부 사항/참고 자료와 함께 Issue 또는 PR을 자유롭게 제출해 주세요. 현재 코드베이스가 약간 지저분하지만 시간이 지남에 따라 정리될 것입니다.
또한 명백한 오탐지를 발견한 경우 GitHub에서 Issue 또는 PR을 열어 알려주십시오! 이러한 현상의 주된 원인은 비표준 COM, 서비스 또는 작업일 것입니다.
CLI 매개변수
-scanoptions : Tab-through for possible detections and select a sub-set using comma-delimited terms (eg. .\trawler.ps1 -scanoptions Services,Processes) or skip to do all detections
-quiet : Suppress Detection output to console
-snapshot : Path to a previous trawler JSON output to use as an allow-list.
-outpath : Define a custom file-path for saving detection output to (defaults to "$PSScriptRoot\detections.csv")
-drivetarget : Define the variable for a mounted target drive (eg. .\trawler.ps1 -targetdrive "D:") - (defaults to local system)
-daysago : Define how many 'days back' we want to take into consideration for time-based detections (defaults to 45)
-hashmode : Define which hashing algorithm we want to use for supported detections - supports sha1, md5 or sha256 (defaults to sha1)
-evtx : Enable creation of Event Log Source and Writing of Detections to Application event log under Source=trawler with EID=9001 (default is disabled)
이것이 PersistenceSniper와 다른 점은?
PersistenceSniper는 훌륭한 도구입니다. 과거에 많이 사용했지만, 이 도구들을 차별화하는 몇 가지 핵심 사항이 있습니다.
- trawler는 (현재) 로컬 유틸리티입니다. 하지만 루프로 감싸서 WinRM/PowerShell 세션을 사용하여 원격 호스트에서 실행하는 것은 매우 간단합니다.
- trawler는 Windows 기본 구성(10/2016/2019/2022)에서 예상되는 감지를 제거하는 데 도움이 되도록 많은 '잡음' 감지에 대해 허용 목록을 구현하며, 이는 지속적으로 업데이트됩니다(PersistenceSniper도 이 작업을 수행합니다).
PersistenceSniper는 (대부분의 경우) 어떠한 종류의 허용 목록도 포함하지 않습니다. 따라서 서비스, 예약 작업, 일반 COM DLL 스캔 등을 고려할 때 더 많은 잡음이 발생합니다.
- trawler의 출력은 단순화되었습니다. 각 감지에 대해 이름, 위험, 소스, MITRE 기술 및 메타데이터만 제공되어 분석가가 지속성 사냥 노력을 신속히 시작할 수 있도록 합니다. 이는 양날의 검입니다.
- 정규식은 다양한 중요한 영역(스캔된 파일 내용, 레지스트리 값 등)에서 '의심스러운' 키워드나 패턴을 감지하는 데 사용됩니다. 이는 약간 더 많은 유연성을 제공하지만 잠재적으로 더 높은 오탐률을 초래할 수 있습니다.
- trawler는 분석 기계에 마운트된 데드박스를 확인하기 위해 '드라이브 재타겟팅'을 지원합니다.
전반적으로 이 도구들은 매우 유사하지만 문제에 약간 다른 각도에서 접근합니다. PersistenceSniper는 분석가가 검토할 수 있도록 모든 정보를 반환하는 반면, Trawler는 반환되는 결과를 잠재적인 공격자 지속성 메커니즘일 가능성이 있는 결과만으로 제한하려고 합니다. 따라서 공격자가 허용 목록에 있는 항목을 완전히 모방하는 경우 trawler에 오탐 가능성이 있습니다.
예를 들어, PersistenceSniper는 모든 '안전하지 않은' Windows 서비스를 반환하는 반면, trawler는 특정 감지 규칙과 일치하는 서비스만 반환합니다.
환경에 맞게 조정
Trawler는 '스냅샷'에서 허용 목록을 로드하는 것을 지원합니다. 이를 위해서는 두 단계가 필요합니다.
- 환경의 서버를 대표하는 "골든 이미지"에서 '.\trawler.ps1 -snapshot'을 실행합니다. 완료되면 표준 'detections.csv' 외에 'snapshots.csv'라는 파일이 생성됩니다.
- 이 파일은 다른 호스트에서 실행할 때 trawler에 대한 입력으로 사용할 수 있으며, 데이터는 각 적절한 감지에 대해 동적으로 허용 목록으로 로드됩니다.
- '.\trawler.ps1' -loadsnapshot "path\to\snapshot.csv"
그게 전부입니다. 그러면 모든 관련 감지가 스냅샷 파일을 허용 목록으로 사용하여 잡음을 줄이고 기본 이미지에 발생할 수 있는 잠재적 변경 사항을 식별합니다.
(허용 목록은 대부분의 검사에 대해 구현되었지만 일부는 아직 구현되지 않았습니다. 계속해서 적극적으로 구현 중입니다.)
드라이브 재타겟팅
조사 중 분석가는 이미징된 Windows 장치를 나타내는 새 드라이브를 마운트하는 경우가 종종 있습니다. 이제 Trawler는 '-drivetarget' 매개변수를 사용하여 마운트된 드라이브 스캔을 부분적으로 지원합니다.
런타임에 Trawler는 파일 기반 아티팩트를 확인하는 데 사용하기 위해 임시 스크립트 수준 변수를 재타겟팅하고, 또한 HKLM/HKU 아래에 'ANALYSIS_' 접두사로 관련 레지스트리 하이브(HKLM\SOFTWARE, HKLM\SYSTEM, NTUSER.DATs, USRCLASS.DATs)를 로드하려고 시도합니다. Trawler는 스크립트 완료 시 이러한 임시 로드된 하이브를 언로드하려고 시도합니다.
예를 들어, NTFS 파일 시스템('F:\Test\Windows', 'F:\Test\User' 등)을 포함하는 'F:\Test'와 같은 위치에 이미지가 마운트된 경우 다음과 같이 trawler를 호출할 수 있습니다.
.\trawler.ps1 -drivetarget "F:\Test"
trawler는 해당 드라이브에서 레지스트리 하이브 파일을 로드하려고 시도하므로, UNC 경로를 라이브 원격 장치에 매핑하는 것은 시스템 잠금으로 인해 해당 파일에 액세스할 수 없기 때문에 작동하지 않습니다. 라이브 원격 장치를 처리하는 방법을 연구 중이니 계속 지켜봐 주십시오.
드라이브 재타겟팅 시 검사되지 않는 항목은 무엇인가요?
- 실행 중인 프로세스
- 네트워크 연결
- '팬텀' DLL
- WMI 소비자(작업 중)
- BITS 작업(작업 중)
- 인증서 파싱(작업 중)
대부분의 다른 검사는 레지스트리 하이브 또는 파일 기반 아티팩트를 읽는 데 전적으로 기반하거나(내장 cmdlet을 사용하는 대신 작업 XML을 직접 읽는 등으로 변환 가능) 정상적으로 작동합니다.
드라이브 재타겟팅 시 검사의 제한 사항은 GitHub Wiki에서 더 자세히 논의될 것입니다.
예제 이미지
무엇이 검사되나요?
- 예약된 작업
- 사용자
- 서비스
- 실행 중인 프로세스
- 네트워크 연결
- WMI 이벤트 소비자(명령줄/스크립트)
- 시작 항목 검색
- BITS 작업 검색
- Windows 접근성 기능 수정
- PowerShell 프로필 존재 여부
- Office 신뢰할 수 있는 문서
- 신뢰할 수 있는 위치의 Office 추가 기능
- SilentProcessExit 모니터링
- Winlogon 도우미 DLL 하이재킹
- 이미지 파일 실행 옵션 하이재킹
- RDP 섀도잉
- 원격 세션용 UAC 설정
- 인쇄 모니터 DLL
- LSA 보안 및 인증 패키지 하이재킹
- 시간 공급자 DLL
- 인쇄 프로세서 DLL
- 부트/로그온 활성 설정
- 사용자 초기화 로그온 스크립트 하이재킹
- 화면 보호기 실행 파일 하이재킹
- Netsh DLL
- AppCert DLL
- AppInit DLL
- 애플리케이션 쉐밍
- COM 개체 하이재킹
- LSA 알림 하이재킹
- 'Office test' 사용
- Office GlobalDotName 사용
- 터미널 서비스 DLL 하이재킹
- 자동 다이얼 DLL 하이재킹
- 명령 자동 실행 프로세서 남용
- Outlook OTM 하이재킹
- 신뢰 공급자 하이재킹
- LNK 대상 스캔(의심스러운 용어, 여러 확장자, 여러 EXE)
- 실행 중인 프로세스에 로드된 '팬텀' Windows DLL 이름(예: 서명되지 않은 WptsExtensions.dll)
- 중요 OS 디렉터리에서 서명되지 않은 EXE/DLL 스캔
- 따옴표 없는 서비스 경로 하이재킹
- PATH 바이너리 하이재킹
- 일반적인 파일 연결 하이재킹 및 의심스러운 키워드
- 의심스러운 인증서 사냥
- GPO 스크립트 검색/스캔
- NLP 개발 플랫폼 DLL 재정의
- AeDebug/.NET/스크립트/프로세스/WER 디버그 대체
- Explorer 'Load'
- Windows Terminal startOnUserLogin 하이재킹
- 앱 경로 불일치
- 서비스 DLL/ImagePath 불일치
- GPO 확장 DLL
- 잠재적 COM 하이재킹
- 비표준 LSA 확장
- DNSServerLevelPluginDll 존재
- Explorer\MyComputer 유틸리티 하이재킹
- 터미널 서비스 InitialProgram 확인
- RDP 시작 프로그램
- Microsoft 원격 분석 명령
- 비표준 AMSI 공급자
- 인터넷 설정 LUI 오류 DLL
- PeerDist\Extension DLL
- ErrorHandler.CMD 검사
- 기본 제공 진단 DLL
- MiniDumpAuxiliary DLL
- KnownManagedDebugger DLL
- WOW64 호환성 계층 DLL
- 이벤트 뷰어 MSC 하이재킹
- 제거 문자열 스캔
- PolicyManager DLL
- SEMgr Wallet DLL
- WER 런타임 예외 처리기
- HTML 도움말(.CHM)
- 원격 액세스 도구 아티팩트(파일, 디렉터리, 레지스트리 키)
- ContextMenuHandler DLL 검사
- Office AI.exe 존재 여부
- Notepad++ 플러그인
TODO
평가된 MITRE 기술
이 중 일부는 다른 것보다 더 많이 감지된다는 점에 유의하십시오. 예를 들어, 가능한 모든 레지스트리 수정을 감지하는 것이 아니라 특정 키의 명백한 변경 사항을 검사하고 다른 기술이 적용되지 않는 경우 일반 MITRE 기술 "레지스트리 수정"을 사용합니다. COM 하이재킹과 같은 다른 항목의 경우 관련 레지스트리 섹션의 모든 항목을 검사하고 '알려진 정상' 패턴과 대조하여 확인하며 알 수 없거나 일치하지 않는 값을 표면화하여 해당 특정 기술에 대해 훨씬 더 완전한 감지 표면을 제공합니다.
- T1037: 부트 또는 로그온 초기화 스크립트
- T1037.001: 부트 또는 로그온 초기화 스크립트: 로그온 스크립트(Windows)
- T1037.005: 부트 또는 로그온 초기화 스크립트: 시작 항목
- T1055.001: 프로세스 인젝션: 동적 링크 라이브러리 인젝션
- T1059: 명령 및 스크립팅 인터프리터
- T1071: 애플리케이션 계층 프로토콜
- T1098: 계정 조작
- T1112: 레지스트리 수정
- T1053: 예약된 작업/작업
- T1136: 계정 생성
- T1137.001: Office 애플리케이션 Office 템플릿 매크로
- T1137.002: Office 애플리케이션 시작: Office 테스트
- T1137.006: Office 애플리케이션 시작: 추가 기능
- T1176: 브라우저 확장
- T1197: BITS 작업
- T1505.005: 서버 소프트웨어 구성 요소: 터미널 서비스 DLL
- T1543.003: 시스템 프로세스 생성 또는 수정: Windows 서비스
- T1546: 이벤트 트리거 실행
- T1546.001: 이벤트 트리거 실행: 기본 파일 연결 변경
- T1546.002: 이벤트 트리거 실행: 화면 보호기
- T1546.003: 이벤트 트리거 실행: Windows 관리 계측 이벤트 구독
- T1546.007: 이벤트 트리거 실행: Netsh 도우미 DLL
- T1546.008: 이벤트 트리거 실행: 접근성 기능
- T1546.009: 이벤트 트리거 실행: AppCert DLL
- T1546.010: 이벤트 트리거 실행: AppInit DLL
- T1546.011: 이벤트 트리거 실행: 애플리케이션 쉐밍
- T1546.012: 이벤트 트리거 실행: 이미지 파일 실행 옵션 인젝션
- T1546.013: 이벤트 트리거 실행: PowerShell 프로필
- T1546.015: 이벤트 트리거 실행: 구성 요소 개체 모델 하이재킹
- T1547.002: 부트 또는 로그온 자동 시작 실행: 인증 패키지
- T1547.003: 부트 또는 로그온 자동 시작 실행: 시간 공급자
- T1547.004: 부트 또는 로그온 자동 시작 실행: Winlogon 도우미 DLL
- T1547.005: 부트 또는 로그온 자동 시작 실행: 보안 지원 공급자
- T1547.009: 부트 또는 로그온 자동 시작 실행: 바로 가기 수정
- T1547.012: 부트 또는 로그온 자동 시작 실행: 인쇄 프로세서
- T1547.014: 부트 또는 로그온 자동 시작 실행: 활성 설정
- T1553: 신뢰 제어 우회
- T1553.004: 신뢰 제어 우회: 루트 인증서 설치
- T1556.002: 인증 프로세스 수정: 암호 필터 DLL
- T1564.006: 아티팩트 숨기기: 가상 인스턴스 실행
- T1574: 실행 흐름 하이재킹
- T1574.007: 실행 흐름 하이재킹: PATH 환경 변수에 의한 경로 가로채기
- T1574.009: 실행 흐름 하이재킹: 따옴표 없는 경로에 의한 경로 가로채기
참고 문헌
이 도구는 놀라운 InfoSec 커뮤니티 없이는 존재할 수 없었습니다. 제가 사용한 가장 주목할 만한 참고 자료는 아래에 제공되어 있습니다.
추가 참고 자료