Anthropic-Cybersecurity-Skills 实战:基于 Windows Security Event Logs 与 python-evtx 检测 RDP 暴力破解攻击
2026/9/13 8:53:49 网站建设 项目流程

Anthropic-Cybersecurity-Skills 实战:基于 Windows Security Event Logs 与 python-evtx 检测 RDP 暴力破解攻击

【免费下载链接】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

导读

本文围绕 detecting-rdp-brute-force-attacks 技能的 API 参考文档展开,系统讲解如何通过解析 Windows 安全事件日志(EVTX 文件)检测针对 RDP(远程桌面协议)端点的暴力破解攻击。你将掌握 Event ID 4625/4624 等核心事件的含义、RDP 登录类型(Logon Type 3/10)与失败子状态码的判读、wevtutil 与 python-evtx 的取证级解析方法,以及基于阈值模型的暴力破解 / 密码喷洒 / 账户沦陷三类检测模式,并可直接复用仓库中 agent.py 的完整检测实现生成 JSON 检测报告。

为什么检测 RDP 暴力破解:攻击面与检测原点

RDP 是暴露在互联网上的 Windows 端点最常见的攻击面之一。攻击者通过对 RDP 服务进行高频凭据猜测(对应 MITRE ATT&CK 技术 T1110(Brute Force)),尝试撞库进入内网,成功后即获得远程交互式会话,为横向移动与后续提权(如 T1078 Valid Accounts、T1021.001 Remote Services: Remote Desktop Protocol)铺路。

Windows 原生会将每一次登录尝试写入安全事件日志,这构成了检测的天然数据源。检测的核心思路是:

  1. 捕获Event ID 4625(登录失败)事件,且仅关注 Logon Type 为 10(RemoteInteractive)或 3(Network,NLA 启用时的预认证阶段)的记录——这两类才真正对应 RDP 场景;
  2. 按源 IP 统计失败频率与目标用户分布,识别暴力破解与密码喷洒模式;
  3. 将失败事件与后续的Event ID 4624(登录成功)做关联,判断是否已有账户在暴力破解后沦陷。

该技能在仓库中映射了 NIST CSF 2.0 的 DE.CM-01、DE.AE-02、DE.AE-06、ID.RA-05 以及 MITRE ATT&CK 的 T1021.001、T1110.001、T1110.003、T1078(见 SKILL.md 的 frontmatter),适用于事件调查、SIEM 检测规则编写与安全监控覆盖验证三类场景。

Windows 安全事件 ID 速查表

检测的全部语义都建立在以下四个核心事件 ID 之上。解析 EVTX 日志时,System节中的EventID决定事件类型,EventData节中的字段则提供攻击者的来源与目标信息。

Event ID含义关键字段
4625登录失败(Failed logon attempt)TargetUserName、IpAddress、SubStatus、LogonType
4624登录成功(Successful logon)TargetUserName、IpAddress、LogonType
4776NTLM 凭据验证(Credential validation)TargetUserName、Workstation、Status
4771Kerberos 预认证失败(Pre-auth failed)TargetUserName、IpAddress、Status

需要说明:4625/4624 是 RDP 暴力破解检测的主干事件;4776 用于覆盖 NTLM 认证路径(例如针对 SMB/凭据验证的猜测),4771 用于覆盖 Kerberos 预认证失败。在 agent.py 的_extract_event_data实现中,正是从事件 XML 的System/EventIDSystem/TimeCreated节点提取事件编号与时间戳,再通过遍历EventData下所有带Name属性的Data节点,把TargetUserNameIpAddressSubStatusLogonType等字段统一装配成字典,供后续分析消费。

RDP 登录类型(Logon Type)判定

日志字段中的LogonType是区分"这是不是 RDP 登录"的第一道过滤器。攻击者流量与正常管理操作在登录类型上有明确区别,误把本地控制台登录(Type 2)或服务登录(Type 5)当作 RDP 会造成大量误报。

Type名称出现场景
3Network启用 NLA(网络级别认证)时的 RDP 预认证阶段
10RemoteInteractiveNLA 通过后的 RDP 远程交互式会话

在 agent.py 中,检测器用RDP_LOGON_TYPES = {"3", "10"}直接定义了关注集合,并在解析循环中仅将LogonType命中该集合的 4625 事件记入failed_logons、4624 事件记入successful_logons,其余登录类型一律忽略。这意味着你可以在不改动任何检测逻辑的情况下,通过修改这个集合来扩展或收窄监控范围。

失败子状态码(Sub-Status)判读

4625 事件的SubStatus字段揭示了攻击者失败的具体原因,是区分"撞库无效用户名""密码错误""账户已被锁定/禁用"等不同攻击阶段的关键依据。

Sub-Status含义
0xC0000064用户不存在
0xC000006A密码错误
0xC0000234账户已锁定
0xC0000072账户已禁用
0xC0000193账户已过期
0xC0000071密码已过期

仓库实现更进一步: agent.py 内置了FAILURE_SUBSTATUS映射表,在 0xC0000064/0x6A/0x72/0x6F/0x70/0x71/0x234/0x193 之外,还补充了 0xC000006F(非登录时段登录)与 0xC0000070(工作站限制),把十六进制状态码归一化为user_does_not_existwrong_passwordaccount_lockedaccount_disabled等可读标签。分析阶段会对全部失败事件的子状态码做Counter统计,使报告能直接给出"失败原因分布",例如某次攻击中wrong_password占比 92%、夹杂少量user_does_not_exist,即可推断攻击者在用有效用户名列表试密码,而非盲目撞库。

日志导出:wevtutil 命令行操作

获取 EVTX 文件是检测的起点。既可以在目标主机的 Windows 事件查看器中手动导出 Security 日志,也可以在命令行用wevtutil完成导出、筛选与计数。

# 导出 Security 日志为 EVTX 文件 wevtutil epl Security C:\logs\security.evtx # 查询 RDP 登录失败事件(EventID=4625 且 LogonType=10) wevtutil qe Security /q:"*[System[(EventID=4625)] and EventData[Data[@Name='LogonType']='10']]" /f:text # 统计最近 100 条登录失败事件(按时间倒序) wevtutil qe Security /q:"*[System[(EventID=4625)]]" /c:100 /rd:true /f:text

三条命令各有分工:epl(Export Log)把完整 Security 日志固化为 EVTX 取证副本,适合离线分析;qe(Query Events)配合 XPath 过滤器直接在目标机上做实时研判,/c:100限制返回条数、/rd:true表示按时间倒序(最新的在前);/f:text输出人类可读文本。在企业环境中,EVTX 文件通常由 WEF(Windows Event Forwarding)集中收集后统一离线分析,这与 python-evtx 的离线解析路径完全吻合。

EVTX 离线解析:python-evtx 库用法

拿到 EVTX 文件后,Python 侧使用python-evtx逐条还原事件记录为 XML,再抽取结构化字段:

import Evtx.Evtx as evtx with evtx.Evtx("Security.evtx") as log: for record in log.records(): xml_str = record.xml()

安装依赖:pip install python-evtx lxmllxml用于后续 XML 解析)。

从源码实现看,agent.py 的parse_events方法将这段基本用法封装成了健壮的解析循环:逐条调用record.xml()并用try/except跳过无法解析的损坏记录,随后通过_extract_event_data抽取EventIDSystemTime与全部EventData字段,最终按事件类型分别进入failed_logonssuccessful_logons两个列表。若环境中未安装 python-evtx,检测器会在构造阶段抛出明确的RuntimeError提示安装命令,避免静默失败。

检测阈值模型与三类攻击模式

api-reference.md 给出了开箱即用的阈值模型,它们与 agent.py 的参数默认值一一对应:

模式阈值指示的攻击行为
暴力破解(Brute force)单个 IP 在 15 分钟内失败次数 > 10针对单一目标的凭据猜测
密码喷洒(Password spray)单个 IP 尝试的用户数 > 5多用户单密码的低慢攻击
账户沦陷(Compromise)同一 IP 先出现 4625 后出现 4624暴力破解已成功

在代码层面,这三类模式分别对应analyze方法中的三段逻辑(agent.py):

  • 暴力破解:对failed_logons按源 IP 做Counter统计,失败数 ≥threshold(默认 10,可通过命令行--threshold调整)且非-占位值的 IP 被标记为brute_force_ips。注意代码注释与默认值均将时间窗口预设为 15 分钟,而当前实现以整份日志为统计范围,因此 15 分钟窗口适合在 SIEM 侧用流式查询实现;离线批处理可理解为"日志覆盖周期内每 IP 失败 ≥ 10 次"。
  • 密码喷洒:以源 IP 为键收集去重后的目标用户集合,用户数 ≥ 5 的 IP 被标记为spray_ips——这一指标在低慢型喷洒攻击中尤其有效,因为喷洒攻击的单用户失败次数通常很低,无法触发暴力破解阈值。
  • 账户沦陷:取brute_force_ips与成功登录 IP 集合的交集,并回溯该 IP 的成功登录用户,产出potential_compromises列表(包含 IP、沦陷用户、失败次数),直接对应"4625 之后出现 4624"的关联规则。

端到端检测流程

综合 SKILL.md 的四步工作流与 API 参考文档,完整检测链路如下:

Step 1:导出安全事件日志。使用wevtutil epl Security C:\logs\security.evtx或事件查看器将 Security 日志固化为 EVTX 文件。

Step 2:解析失败登录事件。用 python-evtx 解析 Event ID 4625,提取源 IP、目标用户名、失败原因(SubStatus)与登录类型字段。

Step 3:分析攻击模式。按时间窗口统计每个源 IP 的失败次数;检测单 IP 多用户的用户名喷洒;将 4625 失败与同一 IP 后续的 4624 成功登录做关联。

Step 4:生成检测报告。输出 JSON 报告,包含 Top 攻击 IP、被针对的账户、基于时间维度的分析与沦陷指示器。

运行仓库检测器

仓库提供了开箱即用的命令行入口,无需二次开发即可完成上述四步:

python scripts/agent.py /path/to/Security.evtx --threshold 10 --output-dir ./rdp_brute_force_report

参数说明:evtx_file(必填)为 Security.evtx 路径;--threshold为标记暴力破解的最小失败次数,默认 10;--output-dir为报告输出目录,默认./rdp_brute_force_report。执行后检测器会解析日志、执行分析,将完整报告打印到终端并写入rdp_brute_force_report.json

检测报告结构解读

报告的 JSON 骨架在 agent.py 与generate_report方法(agent.py)中定义,包含以下区块:

  • 元信息report_date(UTC 生成时间)、evtx_file(数据来源)、detection_threshold(所用阈值);
  • 总量指标total_failed_logonstotal_successful_logonsunique_source_ips
  • 攻击者视角top_attacking_ips(按失败次数排名的 Top 20 源 IP)、targeted_users(被针对的 Top 20 用户名)、failure_reasons(子状态码分布);
  • 攻击模式brute_force_ips(命中暴力破解阈值的 IP)、password_spray_ips(命中喷洒阈值的 IP);
  • 沦陷指示potential_compromises(暴力破解后出现成功登录的 IP 与账户列表)。

这份报告既可用于 SOC 告警研判,也可作为 SIEM 检测规则的离线验证基准——将规则跑在同一份 EVTX 上,比对命中 IP 是否与报告的brute_force_ips一致。

前置条件与适用边界

  • 环境:Python 3.9+,安装python-evtxlxml;需要 Windows Security EVTX 日志文件(事件查看器导出或 WEF 集中收集)。
  • 知识准备:理解 Windows 认证事件 ID(4624/4625/4776),熟悉 RDP 登录类型(NLA 对应 Type 3、RemoteInteractive 对应 Type 10)。
  • 场景边界:该方案基于端点安全日志的离线/集中分析,适用于蓝队监控、事件响应与 SIEM 规则建设;在线实时告警需要将同样的事件筛选逻辑下沉到 SIEM 查询(如 Splunk/Elastic)或 WEF 管道中,并叠加 15 分钟时间窗口的流式统计。
  • 合规说明:仓库以 Apache-2.0 授权(见 LICENSE),agent.py 明确标注"仅供授权的安全监控与蓝队使用"。

小结

RDP 暴力破解检测的本质,是把 Windows 原生安全日志转化为可量化、可关联的攻击画像:用LogonType 3/10锁定 RDP 流量,用SubStatus还原失败原因,用源 IP 频率识别暴力破解与密码喷洒,用 4625→4624 的时序关联定位已沦陷账户。本文所引用的 API 参考、技能流程 与 检测实现 三份文件相互印证,构成了一个从日志采集、离线解析、模式识别到报告产出的完整可运行闭环,可直接应用于 SIEM 规则编写、事件调查与监控覆盖验证。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询