Sysmon ( System Monitor ) 是一种 Windows 系统服务和设备驱动程序,一旦安装在系统上,它就会在系统重启后继续驻留,以监视系统活动并将其记录到 Windows 事件日志中。Sysmon 记录的事件日志非常详细,提供了进程执行、文件系统活动、网络级事件、Windows 注册表事件和其他 Windows 特定进程(如命名管道)的可视化。
部署Sysmon
部署 Sysmon 非常简单。我们将从 Microsoft 网站下载软件包,然后为 sysmon 下载一个非常好的配置文件。
Sysmon 下载链接:https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
Sysmon 需要一个配置文件,这样它才知道如何以及在系统上监控什么。我们也可以创建自己的 sysmon 配置,但有一些非常知名的配置是专门针对安全事件量身定制的,并且也映射到 Mitre 技术。
这里直接使用 olaf hartongs sysmon 配置:
https://github.com/olafhartong/sysmon-modular
先从微软官网下载 sysmon。然后解压存档并以管理员身份打开 powershell 并导航到 sysmon 目录。我们建议将 sysmon 文件解压到「C:\Windows\」下,这样 sysmon 路径就变成了「C:\Windows\sysmon」。
Invoke-WebRequest -Uri https://raw.githubusercontent.com/olafhartong/sysmon-modular/master/sysmonconfig.xml -OutFile C:\Windows\\Sysmon\config.xml.\Sysmon64.exe -accepteula -i config.xmlGet-Service -name Sysmon64
sysmon日志文件位置
cmd打开eventvwr找到
应用程序和服务日志 > Microsoft > Windows > Sysmon > Operational
对应的文件的位置为
%SystemRoot%\System32\Winevt\Logs\
利用进程执行追踪恶意软件
Sysmon 不仅会显示正在运行的进程,还会显示进程何时结束,以及有关可执行文件或二进制文件本身的大量信息。它还为系统上运行的所有二进制文件提供哈希值,并列出它们是否已签名,从而可以轻松查看恶意代码是否试图模仿合法程序(例如 PowerShell 或其他内置 Microsoft 工具)。
Event ID 1: 进程创建
Sysmon 事件 ID 1 表示进程执行。每当内存中生成新进程时,Sysmon 中都会记录 ID 为 1 的事件。此事件对于安全事件非常重要,因为了解哪些程序或恶意软件在内存中运行可以为分析提供更多重要背景信息。
这里模拟执行黑客工具mimikatz抓取明文密码。
在sysmon的日志中查询事件ID1可以看到已经记录了mimikatz的执行记录。
在上面的例子中,我们可以看到一些在分析阶段提供价值的重要字段:
可以尝试将mimikatz重命名并移动到其他位置执行,对比sysmon的记录。
修改文件名后重新运行,sysmon仍然记录了修改前的原始文件名。可以在 Windows 文件夹中看到一个名为 WinSvc 的文件。通常攻击者喜欢将他们的工具设置在合法的文件系统位置以逃避防御。
在上面的例子中,文件元数据立即表明生成的进程实际上是 mimikatz。攻击者经常制作自己的自定义工具或剥离已知的默认元数据,就像在上面的例子中,它显示公司名称、工具描述等。
其次假设没有文件元数据被篡改,并使该工具看起来像合法的工具。在这种情况下,我们可以利用威胁情报供应商的哈希值。不同的威胁行为者可能在不同的活动中使用同一个工具,并且它是已知的恶意工具。
狩猎恶意 C2 IP 和 域名
Event ID 3: 网络连接
Sysmon 事件 ID 3 事件日志 TCP 和 UDP 连接。每个网络事件都映射有一个进程 ID 和 ProcessGUID(为了方便关联)。
这些事件对于检测命令和控制流量(这可能表明攻击者正在发送窃取数据、传播恶意软件等的命令)以及了解哪些应用程序正在访问某些互联网资源非常有用。
可以看到记录了文件的完整路径、建立连接的源计算机的 IP 地址、目标 IP 地址和端口信息。
Event ID 22: DNS 查询
事件 ID 22用于与 DNS 相关的事件。当进程执行 DNS 查询时,无论结果成功还是失败都会生成此事件。记录 DNS 流量有很多好处,例如查找恶意远程访问工具、安全错误配置以及命令和控制流量。
事件22显示了DNS 查询的域名以及发起DNS查询的进程文件完整路径,对于排查定位非常方便。
真实的恶意软件经常使用 DNS 与 C2 服务器通信,DNS 也用于 DNS 隧道技术。如果我们看到进程对某个域及其随机子域的大量异常请求,那么绝对是 DNS 隧道的标志。
追踪文件系统变更
Event ID 11 : 文件创建
事件 ID 11 记录文件创建事件。创建或覆盖文件时会记录文件创建操作。此事件对于监视自动启动位置(例如启动文件夹)以及临时目录和下载目录非常有用,这些目录是初始感染期间恶意软件落地的常见位置。
我们还可以利用此事件 ID 来监视奇怪的命名文件、不常见位置的文件等。例如,如果我们看到由奇怪的命名文件创建的文件,我们还可以使用此事件 ID 来关联这些文件之间的关系并创建时间线。
Event ID 15 : 文件创建流hash
该事件主要记录使用浏览器下载文件的记录。
此事件记录创建命名文件流的时间,并生成记录分配到该流的文件(未命名流)内容的哈希值以及命名流内容的事件。有些恶意软件变体会通过浏览器下载来删除其可执行文件或配置设置,此事件的目的是根据附加 Zone.Identifier「网络标记」流的浏览器捕获该变体。
使用Chrome下载文件时,在下载完成之前会先在文件名前加上 Zone.Identifier。ZoneId=3表示从互联网上下载的文件。
文件下载完成后再次看到目标文件名是记录事件的文件的完整路径,还看到了哈希值。如果没有 Zone.Identifier 关键字,则正确的哈希值表示这是原始文件,没有任何其他数据流。
追踪注册表变更
Event ID 12:注册表对象创建和删除
注册表项和值创建和删除操作映射到此事件 ID,这对于监视注册表自动启动位置的更改或特定恶意软件注册表修改非常有用。
每当在注册表中的任何位置创建或删除键值对时,都会在此处记录。因为攻击者经常篡改和操纵注册表以实现持久性、防御规避等。
使用msf的getsystem提权后,首先看到一个服务被创建,然后被删除。
Event ID 13:设置注册表值
为了分析为什么这是一个恶意事件,打开之前的事件 id 13 事件。
可以看到服务的执行被重定向到命名管道。上面的命令行参数是可疑的,这是 Metasploit 的行为。每当在 Metasploit 中使用 getsystem进行权限升级时,都会创建这类事件。
狩猎恶意命名管道
Event ID 17:命名管道创建
创建命名管道时会生成此事件。恶意软件通常使用命名管道进行进程间通信。它类似于网络套接字,可用于在主机和进程之间发送和接收信息。
例如,如果一个进程想要与另一个进程通信,它可以通过网络或使用文件发送消息,其中一个进程将消息写入该文件,另一个进程读取该消息。这使得它成为被恶意行为者和工具滥用的有价值的目标。
上面msf生成的reverse.exe执行过程中创建的管道。
我们可以使用 sysmon 事件 ID 17 来监视任何管道创建。管道创建是 Windows 中的合法用例,因为 Microsoft 和许多其他第三方应用程序经常使用它们。因此,我们需要监视由我们不希望创建管道的程序创建的任何命名管道。
Sysmon事件ID汇总
ID |
标签 |
事件 |
1 |
进程创建 |
进程创建 |
2 |
文件创建时间 |
文件创建时间 |
3 |
网络连接 |
检测到网络连接 |
4 |
无 |
Sysmon 服务状态变化(无法过滤) |
5 |
进程终止 |
进程终止 |
6 |
驱动程序负载 |
驱动程序已加载 |
7 |
图像加载 |
图片已加载 |
8 |
创建远程线程 |
检测到 CreateRemoteThread |
9 |
原始访问读取 |
检测到 RawAccessRead |
10 |
进程访问 |
访问的进程 |
11 |
文件创建 |
文件已创建 |
12 |
注册事件 |
添加或删除了注册表对象 |
十三 |
注册事件 |
注册表值设置 |
14 |
注册事件 |
注册表对象已重命名 |
15 |
文件创建流哈希 |
文件流已创建 |
16 |
无 |
Sysmon 配置变更(无法过滤) |
17 |
管道事件 |
已创建命名管道 |
18 |
管道事件 |
命名管道已连接 |
19 |
事件 |
WMI 筛选器WMI Filter |
20 |
事件 |
WMI 消费者 |
21 |
事件 |
WMI 消费者过滤器 |
22 |
DNS查询 |
DNS 查询 |
23 |
文件删除 |
文件删除已归档 |
24 |
剪贴板更改 |
剪贴板中的新内容 |
25 |
流程篡改 |
处理图像变化 |
26 |
检测到文件删除 |
文件删除已记录 |
27 |
文件块可执行文件 |
文件块可执行文件 |
28 |
文件块粉碎 |
文件块粉碎 |
29 |
检测到可执行文件 |
检测到可执行文件 |