Chainsaw 提供强大的“第一响应”能力,可快速识别 Windows 取证痕迹(如事件日志和 MFT 文件)中的威胁。Chainsaw 提供了一种通用且快速的方法,通过关键词搜索事件日志,并利用内置的 Sigma 检测规则支持以及自定义 Chainsaw 检测规则来识别威胁。
更多信息可在该工具的 Wiki 中找到:https://github.com/WithSecureLabs/chainsaw/wiki
在 WithSecure Countercept,我们通过 EDR 代理从端点摄取广泛的遥测源,以提供托管检测和响应服务。然而,在某些情况下,我们需要快速分析 EDR 未捕获的取证痕迹,一个常见的例子是在妥协时未安装 EDR 的环境中进行的的事件响应调查。Chainsaw 的创建是为了给我们的威胁狩猎者和事件响应顾问提供一个工具,在这些情况下对取证痕迹进行快速分类。
Windows 事件日志为威胁狩猎和事件响应调查提供了丰富的取证信息来源。不幸的是,处理和搜索事件日志可能是一个缓慢且耗时的过程,在大多数情况下需要周围基础设施的开销——例如 ELK 堆栈或 Splunk 实例——以高效地狩猎日志数据并应用检测逻辑。这种开销通常意味着蓝队无法快速分类 Windows 事件日志,以提供推进调查所需的方向和结论。Chainsaw 解决了这个问题,因为它允许快速搜索和狩猎 Windows 事件日志。
在撰写本文时,很少有开源、独立的工具能够提供简单快速的方法来分类 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 |
有关用于规则检测的完整字段列表,请参阅映射文件,并随时根据您的需求进行扩展。
除了支持 sigma 规则外,Chainsaw 还支持自定义规则格式。在仓库中,您会找到一个 rules 目录,其中包含各种 Chainsaw 规则,允许用户:
随着 Chainsaw v2 的发布,我们决定不再将 Sigma Rules 和 EVTX-Attack-Samples 仓库作为 Chainsaw 的子模块包含。我们建议您单独克隆这些仓库,以确保您拥有最新版本。
如果您仍然需要一个包含 Chainsaw 二进制文件、Sigma 规则和示例事件日志的一体化包,您可以从这个 GitHub 仓库的发布部分下载。在发布部分,您还可以找到适用于各种平台和架构的预编译纯二进制版本的 Chainsaw。
如果您想自己编译 Chainsaw,可以克隆 Chainsaw 仓库:
git clone https://github.com/WithSecureLabs/chainsaw.git
并通过运行以下命令自行编译代码: cargo build --release。构建完成后,您将在 target/release 文件夹中找到编译后的二进制文件副本。
确保使用 --release 标志进行构建,因为这将确保显著更快的执行时间。
如果您想快速了解 Chainsaw 运行时的样子,可以克隆 Sigma Rules 和 EVTX-Attack-Samples 仓库:``` git clone https://github.com/SigmaHQ/sigma git clone https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES.git
然后使用以下参数运行 Chainsaw:```
./chainsaw hunt EVTX-ATTACK-SAMPLES/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml
├───devShells │ └───x86_64-linux │ └───default: development environment 'nix-shell' ├───formatter │ └───x86_64-linux: package 'alejandra-3.1.0' └───packages └───x86_64-linux ├───chainsaw: package 'chainsaw-2.10.1' └───default: package 'chainsaw-2.10.1'
Chainsaw 作为一个软件包,可通过 [nixpkgs](https://search.nixos.org/packages?query=chainsaw) 获取。
如果你使用的是 NixOS,只需将 `chainsaw` 添加到你的系统配置文件中即可。
不过,如果你没有使用 NixOS,你仍然可以通过 Nix 安装 Chainsaw。推荐的方式是使用 `nix-shell`,它会临时修改你的 $PATH 环境变量。
为此,请运行以下命令:```
nix-shell -p chainsaw
你也可以利用这个仓库是一个 flake 这一事实,并运行以下命令:``` nix profile install github:WithSecureLabs/chainsaw
不过,如果你想自己构建 chainsaw,使用 Nix,你可以再次利用本仓库提供的 `flake.nix`。
要构建二进制文件,请在克隆仓库的根目录下运行以下命令```
nix build .#
这将创建 ./result 目录,chainsaw 二进制文件位于 ./result/bin/chainsaw 下。
在下载和运行 chainsaw 时,您可能会发现本地 EDR / 防病毒引擎将 Chainsaw 检测为恶意软件。您可以在以下 GitHub issue 中看到相关示例:示例1、示例2。
这些警告通常是由于示例事件日志和/或 Sigma 规则中包含对恶意字符串(例如 "mimikatz")的引用。我们还看到过 Chainsaw 二进制文件被少数防病毒引擎检测到的情况,这可能是由于某种形式的启发式检测。
2022 年 7 月,我们发布了 Chainsaw 的第 2 版,这是对 Chainsaw 运行方式的重大改造。Chainsaw v2 包含多项重大改进,包括以下亮点列表:
如果您仍希望使用 Chainsaw 第 1 版,可以在 releases 部分找到编译好的二进制文件,或者您可以在 v1.x.x 分支中访问源代码。请注意,Chainsaw v1 已不再维护,所有用户都应考虑迁移到 Chainsaw v2。
非常感谢 @AlexKornitzer,他将 Chainsaw v1 的 "Christmas Project" 代码库打造成了 v2 中的精良产品。
USAGE:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
FLAGS:
-h, --help Prints help information
-i, --ignore-case Ignore the case when searching patterns
--json Print the output in json format
--load-unknown Allow chainsaw to try and load files it cannot identify
--local Output the timestamp using the local machine's timestamp
-q Suppress informational output
--skip-errors Continue to search when an error is encountered
-V, --version Prints version information
OPTIONS:
--extension <extension>... Only search through files with the provided extension
--from <from> The timestamp to search from. Drops any documents older than the value provided
-o, --output <output> The path to output results to
-e, --regex <pattern>... A string or regular expression pattern to search for
-t, --tau <tau>... Tau expressions to search with. e.g. 'Event.System.EventID: =4104'
--timestamp <timestamp> The field that contains the timestamp
--timezone <timezone> Output the timestamp using the timezone provided
--to <to> The timestamp to search up to. Drops any documents newer than the value provided
ARGS:
<pattern> A string or regular expression pattern to search for. Not used when -e or -t is specified
<path>... The paths containing event logs to load and hunt through
在所有 .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