
사고 대응자가 잠재적인 공격자 지속성 메커니즘을 발견할 수 있도록 도와주는 PowerShell 스크립트입니다.
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, 서비스 또는 작업일 것입니다.
-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는 반환되는 결과를 잠재적인 공격자 지속성 메커니즘일 가능성이 있는 결과만으로 제한하려고 합니다. 따라서 공격자가 허용 목록에 있는 항목을 완전히 모방하는 경우 trawler에 오탐 가능성이 있습니다.
예를 들어, PersistenceSniper는 모든 '안전하지 않은' Windows 서비스를 반환하는 반면, trawler는 특정 감지 규칙과 일치하는 서비스만 반환합니다.
Trawler는 '스냅샷'에서 허용 목록을 로드하는 것을 지원합니다. 이를 위해서는 두 단계가 필요합니다.
그게 전부입니다. 그러면 모든 관련 감지가 스냅샷 파일을 허용 목록으로 사용하여 잡음을 줄이고 기본 이미지에 발생할 수 있는 잠재적 변경 사항을 식별합니다.
(허용 목록은 대부분의 검사에 대해 구현되었지만 일부는 아직 구현되지 않았습니다. 계속해서 적극적으로 구현 중입니다.)
조사 중 분석가는 이미징된 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 경로를 라이브 원격 장치에 매핑하는 것은 시스템 잠금으로 인해 해당 파일에 액세스할 수 없기 때문에 작동하지 않습니다. 라이브 원격 장치를 처리하는 방법을 연구 중이니 계속 지켜봐 주십시오.
대부분의 다른 검사는 레지스트리 하이브 또는 파일 기반 아티팩트를 읽는 데 전적으로 기반하거나(내장 cmdlet을 사용하는 대신 작업 XML을 직접 읽는 등으로 변환 가능) 정상적으로 작동합니다.
드라이브 재타겟팅 시 검사의 제한 사항은 GitHub Wiki에서 더 자세히 논의될 것입니다.