0x01 工具介绍
Chainsaw 是一款高效的 Windows 取证工具,专为快速识别和分析事件日志、MFT 文件及其他取证工件而设计。它集成了 Sigma 检测规则和自定义规则,支持字符串匹配和正则表达式搜索,能够迅速追踪威胁。此外,Chainsaw 提供了 Shimcache 和 SRUM 数据库分析功能,能够创建执行时间线,并以多种格式输出结果。该工具使用 Rust 编写,运行迅速,适用于 MacOS、Linux 和 Windows 平台,非常适合事件应急响应和威胁分析使用。
下载地址在末尾
0x02 功能简介
功能
🎯 使用 Sigma 检测规则和自定义的 Chainsaw 检测规则追踪威胁
🔍 通过字符串匹配和正则表达式模式搜索和提取取证工件
📅 通过分析 Shimcache 工件并使用 Amcache 数据丰富它们来创建执行时间线
💡 分析 SRUM 数据库并提供相关见解
⬇️ 转储取证工件(MFT、注册表配置单元、ESE 数据库)的原始内容
⚡ 闪电般快速,使用 Rust 编写,封装了 EVTX 解析器 库,由 @OBenamram 提供
🪶 干净且轻量级的执行和输出格式,没有不必要的冗余
🔥 文档标记(检测逻辑匹配)由 TAU Engine 库提供
📑 以多种格式输出结果,如 ASCII 表格格式、CSV 格式和 JSON 格式
💻 可在 MacOS、Linux 和 Windows 上运行
为什么选择 Chainsaw?
在 WithSecure Countercept,我们通过 EDR 代理从终端摄取广泛的遥测数据源,以提供我们的托管检测和响应服务。然而,在某些情况下,我们需要快速分析未被 EDR 捕获的取证工件,一个常见的例子是在我们的 EDR 未安装时进行的事件响应调查。Chainsaw 的创建是为了为我们的威胁猎人和事件响应顾问提供一个工具,以便在这些情况下对取证工件进行快速分类。
Windows 事件日志
Windows 事件日志为威胁追踪和事件响应调查提供了丰富的取证信息来源。不幸的是,处理和搜索事件日志可能是一个缓慢且耗时的过程,在大多数情况下需要周围基础设施的开销——如 ELK 堆栈或 Splunk 实例——以便高效地搜索日志数据并应用检测逻辑。这种开销通常意味着蓝队无法快速分类 Windows 事件日志,以提供推进调查所需的方向和结论。Chainsaw 解决了这个问题,因为它允许快速搜索和追踪 Windows 事件日志。
在撰写本文时,很少有开源的独立工具提供一种简单快速的方法来分类 Windows 事件日志,识别日志中的有趣元素,并应用检测逻辑规则格式(如 Sigma)来检测恶意活动的迹象。在我们的测试中,现有的工具在高效应用检测逻辑到大量事件日志方面存在困难,使其不适合需要快速分类的场景。
Windows 事件日志的追踪逻辑
Sigma 规则匹配
使用 --sigma 和 --mapping 参数,您可以指定一个包含 SIGMA 检测规则子集(或整个 SIGMA git 仓库)的目录,Chainsaw 将自动加载、转换并运行这些规则以对提供的事件日志进行匹配。映射文件告诉 Chainsaw 在事件日志中使用哪些字段进行规则匹配。默认情况下,Chainsaw 支持广泛的日志类型,包括但不限于:
事件类型 | 事件ID |
---|---|
进程创建 (Sysmon) | 1 |
网络连接 (Sysmon) | 3 |
图像加载 (Sysmon) | 7 |
文件创建 (Sysmon) | 11 |
注册表事件 (Sysmon) | 13 |
Powershell 脚本块 | 4104 |
进程创建 | 4688 |
计划任务创建 | 4698 |
服务创建 | 7045 |
有关用于规则检测的完整字段列表,请参阅映射文件,并根据需要自由扩展。
Chainsaw 检测规则
除了支持 Sigma 规则外,Chainsaw 还支持自定义规则格式。在仓库中,您会发现一个包含各种 Chainsaw 规则的 rules 目录,允许用户:
提取和解析 Windows Defender、F-Secure、Sophos 和 Kaspersky AV 警报
检测关键事件日志被清除或事件日志服务被停止
用户被创建或添加到敏感用户组
远程登录(服务、RDP、网络等)事件。这有助于猎手识别横向移动的来源
本地用户账户的暴力破解
0x03更新说明
该版本包含如下说明变更:
添加可用于从字符串中提取键值对的 Key/Value (kv) 容器。( #178 )
0x04 使用介绍
🔍 搜索
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
命令示例:
在所有 .evtx 文件中搜索不区分大小写的字符串“mimikatz”
./chainsaw search mimikatz -i evtx_attack_samples/
*在所有 .evtx 文件中搜索 powershell 脚本阻止事件 (事件 ID 4014)
./chainsaw search -t 'Event.System.EventID: =4104' evtx_attack_samples/
使用匹配的正则表达式模式在特定的 evtx 日志中搜索登录事件,以 JSON 格式输出
./chainsaw search -e "DC[0-9].insecurebank.local" evtx_attack_samples --json
📅获取取证
用法:
chainsaw hunt [FLAGS] [OPTIONS] [--] [path]...
命令:
--csv:以CSV格式输出结果。
--full:显示表格输出的完整值。
-h, --help:打印帮助信息。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地时间输出时间。
--log:以日志样式的格式输出结果。
--metadata:在表格输出中显示额外元数据。
-q:抑制信息输出。
--skip-errors:遇到错误时继续狩猎。
-V, --version:打印版本信息。
选项:
--column-width <column-width>:设置表格输出的列宽。
--extension <extension>...:仅通过提供的扩展名狩猎文件。
--from <from>:从指定的时间戳开始狩猎。丢弃较旧的文档。
--kind <kind>...:限制加载的规则到指定种类。
--level <level>...:限制加载的规则到指定级别。
-m, --mapping <mapping>...:一个映射文件,告诉Chainsaw如何使用第三方规则。
-o, --output <output>:输出结果的路径。
-r, --rule <rule>...:包含额外规则的路径,用于狩猎。
-s, --sigma <sigma>...:包含Sigma规则的路径,用于狩猎。
--status <status>...:限制加载的规则到指定状态。
--timezone <timezone>:使用指定的时区输出时间戳。
--to <to>:狩猎至指定的时间戳。丢弃更新的文档。
参数:
<rules>:使用来狩猎的一组规则的路径。
<path>...:包含事件日志的路径,用于加载和狩猎。
命令示例
使用 Sigma 规则搜索所有 evtx 文件以了解检测逻辑
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml
使用 Sigma 规则和 Chainsaw 规则搜索所有 evtx 文件以了解检测逻辑,并以 CSV 格式输出到结果文件夹
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml -r rules/ --csv --output results
使用 Sigma 规则搜索所有 evtx 文件以获取检测逻辑,仅在特定时间戳之间搜索,并以 JSON 格式输出结果
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml --from "2019-03-17T19:09:39" --to "2019-03-17T19:09:50" --json
输出:
🎯 取证分析
命令: analyse shimcache 创建一个执行时间线,该时间线基于shimcache,可选择使用amcache增强信息。
用法: chainsaw analyse shimcache [选项] <SHIMCACHE>
参数: <SHIMCACHE> 指向shimcache工件(SYSTEM注册表文件)的路径。
选项: -e, --regex <模式> 用于检测shimcache条目,其时间戳与插入时间匹配的字符串或正则表达式。-r, --regexfile <REGEX_FILE> 包含用于检测shimcache条目的正则表达式模式的文件路径,这些模式的时间戳与插入时间匹配。-o, --output <输出> 结果CSV文件的输出路径。-a, --amcache <AMCACHE> amcache工件(Amcache.hve)的路径,用于时间线丰富。-p, --tspair 启用近似时间对检测,在shimcache和amcache之间找到额外的插入时间。-h, --help 打印帮助信息。
--regexfile 参数的示例模式文件包含在[analysis/shimcache_patterns.txt]中。
正则表达式模式与shimcache条目中的路径匹配时,路径转换为小写处理。
命令示例:
使用提供的正则表达式模式分析 shimcache 工件,并使用启用了时间戳近对检测的 amcache 丰富功能。输出到 csv 文件。
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
0
使用提供的正则表达式模式(不使用 amcache 丰富)分析 shimcache 工件。输出到终端。
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
1
SRUM(系统资源使用情况监视器)
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
2
命令示例:
分析 SRUM 数据库(SOFTWARE 配置单元是必需的)
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
3
输出:
转储
使用方法: chainsaw dump [选项] <路径>
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
4
命令示例
用法:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
命令:
-h, --help:打印帮助信息。
-i, --ignore-case:搜索模式时忽略大小写。
--json:以JSON格式输出结果。
--load-unknown:允许Chainsaw尝试加载无法识别的文件。
--local:使用本地计算机的时间戳输出时间。
-q:抑制信息输出。
--skip-errors:遇到错误时继续搜索。
-V, --version:打印版本信息。
选项:
--extension <extension>...:仅通过提供的扩展名搜索文件。
--from <from>:从指定的时间戳开始搜索。丢弃较旧的文档。
-o, --output <output>:输出结果的路径。
-e, --regex <pattern>...:要搜索的字符串或正则表达式模式。
-t, --tau <tau>...:使用Tau表达式进行搜索。例如,'Event.System.EventID: =4104'。
--timestamp <timestamp>:包含时间戳的字段。
--timezone <timezone>:使用提供的时区输出时间戳。
--to <to>:搜索到指定的时间戳为止。丢弃更新的文档。
参数:
<pattern>:要搜索的字符串或正则表达式模式。当使用-e或-t时无效。
<path>...:包含事件日志的路径,用于加载和搜索。
5
0x05
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...