Trawler 是一个 PowerShell 脚本,旨在帮助事件响应者在 Windows 主机上发现潜在的安全入侵指标,主要关注持久化机制,包括计划任务、服务、注册表修改、启动项、二进制文件修改等。
目前,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)产生的噪声 – 例如预期的计划任务、服务等。当然,攻击者总是有可能直接劫持这些项,并以高度细节伪装成默认操作系统进程 – 在面对精明对手时,请务必使用多种分析与检测手段。
如果您有额外检测的示例或想法,请随时提交 Issue 或 PR,附上相关技术细节/参考 – 代码库目前略显混乱,后续会逐步清理。
此外,如果您发现明显的误报,请在 GitHub 上通过打开 Issue 或 PR 告知我!最常见的误报来源是非标准的 COM、服务或任务。
-scanoptions : 通过 Tab 浏览可能的检测项,并使用逗号分隔的术语选择子集(例如 .\trawler.ps1 -scanoptions Services,Processes),或跳过以执行所有检测
-quiet : 抑制控制台输出检测结果
-snapshot : 先前 trawler JSON 输出的路径,用作允许列表
-outpath : 定义保存检测输出的自定义文件路径(默认为 "$PSScriptRoot\detections.csv")
-drivetarget : 定义已挂载目标驱动器的变量(例如 .\trawler.ps1 -targetdrive "D:")–(默认为本地系统)
-daysago : 定义我们考虑基于时间检测的“往回天数”(默认为 45)
-hashmode : 定义用于支持的检测的哈希算法 – 支持 sha1、md5 或 sha256(默认为 sha1)
-evtx : 启用创建事件日志源,并将检测写入应用程序事件日志,源为 trawler,事件 ID 为 9001(默认禁用)
PersistenceSniper 是一个很棒的工具 – 过去我经常使用它 – 但这两个工具有几个关键区别:
总体而言,这些工具非常相似,但从稍有不同的角度处理问题 – PersistenceSniper 将所有信息返回给分析师审查,而 Trawler 试图限制返回的结果只包含可能为潜在对手持久化机制的条目。因此,如果攻击者完全模仿允许列表中的项目,trawler 可能会出现漏报。
例如 – PersistenceSniper 会返回所有“非安全”的 Windows 服务,而 trawler 仅返回那些匹配特定检测规则的服务。
Trawler 支持从“快照”加载允许列表 – 这需要两个步骤:
就是这样 – 所有相关检测随后将从快照文件中提取数据作为允许列表,以减少噪声并识别可能对基础镜像发生的任何更改。
(大多数检查已实现允许列表,但并非全部 – 仍在积极实施中)
在调查过程中,分析师经常需要挂载代表已镜像 Windows 设备的新驱动器 – Trawler 现在部分支持通过 '-drivetarget' 参数扫描这些已挂载的驱动器。
在运行时,Trawler 将重新定向脚本级别的临时变量,用于检查基于文件的工件,并尝试在 HKLM/HKU 下加载相关的注册表配置单元(HKLM\SOFTWARE、HKLM\SYSTEM、NTUSER.DAT、USRCLASS.DAT),并以 'ANALYSIS_' 为前缀。Trawler 还会在脚本完成后尝试卸载这些临时加载的配置单元。
例如,如果您的镜像挂载在 'F:\Test' 位置,其中包含 NTFS 文件系统('F:\Test\Windows'、'F:\Test\User' 等),则可以像下面这样调用 trawler:
.\trawler.ps1 -drivetarget "F:\Test"
请注意,由于 trawler 尝试从目标驱动器加载注册表配置单元文件,因此将 UNC 路径映射到远程活动设备将不起作用,因为系统锁将阻止访问这些文件。我正在研究处理远程活动设备的方法,敬请期待。
大多数其他检查将正常运行,因为它们完全基于读取注册表配置单元或基于文件的工件(或可以转换为类似操作,例如直接读取任务 XML 而不是使用内置命令)。
在驱动器重定时中检查的任何限制将在 GitHub Wiki 中更详细地讨论。
待办事项
请注意,有些技术的检测程度自然高于其他技术 – 例如,我们没有检测所有可能的注册表修改,而是检查某些键值以发现明显变化,并在没有其他适用技术时使用通用 MITRE 技术“修改注册表”。对于其他项目(如 COM 劫持),我们检查相关注册表部分中的所有条目,对照“已知良好”模式进行核对,并报告未知或不匹配的值,从而对该特定技术实现更全面的检测覆盖。
如果没有令人惊叹的信息安全社区,这个工具将不会存在 – 以下是我使用的最重要的参考资料。