news 2026/9/11 21:18:59

基于 Apache/Nginx 访问日志的入侵检测:Anthropic-Cybersecurity-Skills 技能实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Apache/Nginx 访问日志的入侵检测:Anthropic-Cybersecurity-Skills 技能实战指南

基于 Apache/Nginx 访问日志的入侵检测:Anthropic-Cybersecurity-Skills 技能实战指南

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

导读

本文以 analyzing-web-server-logs-for-intrusion 技能为主线,讲解如何解析 Apache/Nginx 访问日志,通过正则签名匹配识别 SQL 注入(SQLi)、本地文件包含(LFI)、目录穿越、XSS、Web 扫描器指纹与暴力破解模式,并结合 GeoIP 做来源归属富化、基于请求频率与响应大小的统计异常检测。读完本文,你将掌握一套可直接运行的日志入侵检测流程,能独立产出带攻击类型、严重级别与攻击者画像的 JSON 报告,并可将其落地为 SOC 的检测规则或威胁狩猎查询。


技能定位与适用场景

在 Anthropic-Cybersecurity-Skills 仓库的 817 个结构化安全技能中,该技能归属于security-operations子域,遵循 agentskills.io 开放标准,以机器可读的 frontmatter 元数据(namedescriptiondomaintagsversion)描述触发条件与能力边界,便于 Claude Code、GitHub Copilot、Codex CLI、Cursor、Gemini CLI 等 20+ 平台上的 AI Agent 按需加载。

官方标注的适用场景包括:

  • 调查安全事件时需要分析 Web 服务器日志定位入侵行为;
  • 为入侵检测域构建检测规则或威胁狩猎查询;
  • SOC 分析人员需要结构化的分析流程;
  • 校验相关攻击技术在既有监控体系中的覆盖度。

该技能同时映射了多套安全框架(见 SKILL.md frontmatter):

  • MITRE ATT&CK:T1190(利用面向公众的应用)、T1059.007(JavaScript 命令解释执行)、T1110(暴力破解)、T1595.002(主动扫描)、T1505.003(Web Shell);
  • NIST CSF 2.0:DE.CM-01(持续监控)、DE.AE-02(异常活动分析)、RS.MA-01(事件响应管理)、GV.OV-01(资产与漏洞视图)。

这意味着该技能在仓库的跨框架能力矩阵中,覆盖的是"初始访问 → 暴力破解 → 主动侦察 → Web 后门驻留"这一条 Web 攻击链路的日志侧检测视角。

前置条件

  • 具备安全运营(SecOps)概念与常用工具的使用经验;
  • 拥有可安全执行分析的测试或实验环境,并已获得相应授权(任何测试活动都必须取得明确授权,详见 SECURITY.md);
  • Python 3.8+ 环境;
  • 安装依赖:pip install geoip2 user-agents

其中geoip2用于日志来源 IP 的地理位置富化;user-agents库可用于辅助解析与规整 User-Agent 字段。

日志格式基础:Combined Log Format 与 Nginx 默认格式

分析的第一步是理解输入数据的结构。本技能处理 Apache 的 Combined Log Format(组合日志格式)与 Nginx 默认访问日志格式。其字段布局(见 references/api-reference.md):

<ip> <ident> <authuser> [<date>] "<method> <uri> <proto>" <status> <size> "<referer>" "<user-agent>"

各字段含义:

字段含义示例
ip客户端源 IP192.168.1.100
ident客户端标识(通常为--
authuser认证用户名(通常为--
date请求时间戳15/Jan/2024:10:30:45 +0000
methodHTTP 方法GETPOST
uri请求的资源路径与参数/products?id=1' UNION SELECT ...
proto协议版本HTTP/1.1
statusHTTP 状态码200403500
size响应体字节数(可能为-4532
referer来源页面-或 URL
user-agent客户端标识串Nikto/2.1.6

注意:Nginx 默认格式与 Combined Log Format 高度兼容,因此同一套解析正则可以直接复用。若日志中响应大小为-(如无响应体),解析时应将其归一化为0(源码parse_log_line中即做了该处理,见 scripts/agent.py)。

日志解析:正则提取结构化字段

使用 Python 标准库re模块即可完成字段提取。api-reference 与 agent.py 中共用的核心正则如下:

import re pattern = re.compile( r'(?P<ip>\S+) \S+ \S+ \[(?P<time>[^\]]+)\] ' r'"(?P<method>\S+) (?P<uri>\S+) (?P<proto>[^"]*)" ' r'(?P<status>\d+) (?P<size>\S+) "(?P<referer>[^"]*)" "(?P<ua>[^"]*)"' ) match = pattern.match(line) data = match.groupdict()

该正则通过命名捕获组((?P<name>...))一次性提取 9 个字段。从源码实现看,parse_log_line 在拿到字典后还会做两项类型归一化:

  • size字段若为-转为整数0
  • status字段转为整数。

这为后续的统计与阈值比较(如按状态码过滤、按响应大小做离群检测)提供了统一的数据类型。parse_log_file 会逐行读取日志文件,忽略解析失败的畸形行,并输出Parsed N log entries from <path>的进度日志,便于在大文件上观察处理进度。

攻击检测规则:四类签名匹配

1. SQL 注入(SQLi)——严重级 Critical

detect_attacks会对每条请求的 URI 依次执行各类签名正则匹配。SQLi 签名覆盖了从基础到进阶的多种手法(SQLI_PATTERNS):

正则模式检测描述
(union\s+(all\s+)?select)UNION SELECT 注入
(or\s+1\s*=\s*1)OR 1=1 恒真永真
('\s*or\s*')基于字符串的 OR 注入
(;\s*drop\s+table)DROP TABLE 注入
(sleep\s*\(\d+\))基于时间的盲注(SLEEP)
(benchmark\s*\(\d+)基于时间的盲注(BENCHMARK)
(0x[0-9a-f]{8,})十六进制编码载荷
(concat\s*\(|group_concat)数据提取函数
(information_schema)库结构枚举
(load_file\s*\(|into\s+outfile)通过 SQL 读写文件

示例命中日志:

192.168.1.100 - - [15/Jan/2024:10:30:45 +0000] "GET /products?id=1' UNION SELECT username,password FROM users-- HTTP/1.1" 200 4532

该请求 URI 中同时包含UNION SELECT(命中第 1 条)与'引号构造(命中第 3 条的变体),会被标记为 critical 级别。所有模式均带(?i)忽略大小写标志,以避免攻击者大小写混合绕过。

2. 本地文件包含 / 目录穿越(LFI)——高危 High

正则模式检测描述
(\.\./){2,}目录穿越
(/etc/passwd|/etc/shadow)Linux 口令文件访问
(/proc/self|/proc/version)proc 文件系统访问
(php://filter|php://input|data://)PHP 流包装器
(c:\\windows|c:/windows)Windows 路径穿越
(%00|%2500)空字节注入

3. XSS(跨站脚本)——高危 High

正则模式检测描述
(<script[^>]*>)Script 标签注入
(javascript\s*:)JavaScript URI
(onerror\s*=|onload\s*=|onmouseover\s*=)事件处理器注入
(alert\s*\(|prompt\s*\(|confirm\s*\())JS 对话框函数

4. 扫描器指纹(User-Agent 签名)——中危 Medium

XSS 与扫描器签名均匹配 URL 编码与非编码形式,其中扫描器检测针对 User-Agent 字段,覆盖面远超 SKILL.md 正文列出的四种工具(SCANNER_UA_PATTERNS):

工具UA 特征说明
NiktoNikto/2.x综合漏洞扫描器
sqlmapsqlmap/1.xSQL 注入自动化工具
DirBusterDirBuster-1.0目录爆破工具
Gobustergobuster/3.x目录/子域爆破工具
WfuzzWfuzz/3.xWeb 模糊测试工具
Nmapnmap端口扫描引擎
Masscanmasscan高速端口扫描器
ZGrabzgrab应用层扫描器
脚本化客户端python-requestspython-urllibgo-http-client常见脚本化 HTTP 客户端

api-reference 中的签名表(references/api-reference.md)与源码逐一对应,示例命中:

Nikto/2.1.6, sqlmap/1.7, DirBuster-1.0-RC1, gobuster/3.1.0

5. 暴力破解检测——高危 High

暴力破解不依赖正则,而是统计维度。detect_brute_force 的实现逻辑:

  • 默认监控的登录端点:/login/wp-login/admin/login/api/auth/signin
  • 统计同一 IP 对这些端点发起的POST 请求总数
  • 阈值默认50(可通过 CLI 参数覆盖);
  • 命中后记录{"ip": ..., "post_count": ..., "severity": "high"}

SKILL.md 给出的判定标准是"同一 IP 在 5 分钟内对登录端点的 POST 请求超过 50 次",对应源码中的threshold=50默认值。需要说明的是:源码默认以整个日志时间窗内统计,若要与"5 分钟窗口"精确对齐,可在接入 SIEM/Splunk 时增加时间窗口切片逻辑,或对输入日志先做时间段过滤。

GeoIP 来源归属富化

命中攻击特征的请求会按源 IP 进行地理位置富化。enrich_with_geoip 使用geoip2库读取 MaxMind GeoLite2-City 数据库:

import geoip2.database reader = geoip2.database.Reader("GeoLite2-City.mmdb") response = reader.city("8.8.8.8") response.country.name # "United States" response.city.name # "Mountain View" response.location.latitude # 37.386 response.location.longitude # -122.0838 reader.close()

每条命中记录会附加geo字段(国家、城市、经纬度)。源码中做了两级容错:若geoip2未安装则跳过富化并输出警告日志;若单个 IP 查询失败则置geo: null,不会中断整个分析流程。

攻击者画像聚合

summarize_attackers 将全部命中记录按源 IP 聚合,输出按命中数降序排列的前 50 个攻击者,每个画像包含:

  • total_hits:该 IP 命中的总请求数;
  • attack_types:该 IP 使用的攻击类型分布(如{"SQLi": 5, "Scanner": 3});
  • unique_uris:访问过的去重 URI 数量。

这一输出可直接用于研判攻击者的行为阶段——例如某 IP 同时存在扫描器 UA 与 SQLi 载荷,可推断其处于"侦察 + 漏洞利用"的复合阶段。

运行与分析:CLI 使用与报告结构

运行方式

在技能目录下执行(SKILL.md 中的标准用法):

python scripts/agent.py --log-file /var/log/nginx/access.log --geoip-db GeoLite2-City.mmdb --output web_intrusion_report.json

完整 CLI 参数(见 main):

参数必填默认值说明
--log-file访问日志文件路径
--geoip-dbGeoLite2-City.mmdb 路径;提供后启用 GeoIP 富化
--brute-threshold50暴力破解 POST 次数阈值
--outputweb_intrusion_report.json报告输出路径

报告结构

generate_report 生成的 JSON 报告包含:

  • total_log_entries:解析的日志总条数;
  • suspicious_requests:命中攻击签名的请求数;
  • brute_force_sources:暴力破解来源 IP 数;
  • attack_breakdown:攻击类型分布计数;
  • top_attackers:前 20 名攻击者画像;
  • brute_force_details:暴力破解明细;
  • sample_findings:前 30 条命中样例(每条含 IP、时间戳、方法、URI 截断 200 字符、状态码、UA 截断 150 字符与攻击详情列表)。

运行结束会在终端打印汇总行WEB LOG ANALYSIS: N suspicious, M brute force sources,并将报告写入--output指定文件。URI 与 UA 的截断处理(200/150 字符)防止异常超长字段破坏 JSON 结构与下游存储。

完整处理链路与源码结构

整个技能的处理流程可概括为五步流水线(与 SKILL.md 的 Instructions 一一对应):

  1. 依赖安装pip install geoip2 user-agents
  2. 日志采集:收集 Combined Log Format(Apache)或 Nginx 默认格式访问日志;
  3. 逐条解析:提取 IP、时间戳、方法、URI、状态码、响应大小、User-Agent、Referer(parse_log_file);
  4. 规则检测:SQLi / LFI / XSS / 扫描器签名 / 暴力破解阈值(detect_attacks 与 detect_brute_force);
  5. GeoIP 富化 + 优先级排序报告(enrich_with_geoip 与 generate_report)。

技能文件布局清晰:主流程定义在 SKILL.md,日志格式、正则解析、GeoIP2 用法与攻击签名速查表在 references/api-reference.md,完整可执行实现(约 220 行,零第三方运行时依赖、geoip2为可选增强)在 scripts/agent.py,授权条款见同目录 LICENSE(Apache-2.0)。

落地为检测规则与威胁狩猎查询

除直接运行脚本外,该技能的签名与阈值设计可直接转化为 SIEM 检测逻辑:

  • SQLi 检测规则:将 SQLI_PATTERNS 中的核心模式(UNION SELECTOR 1=1SLEEP())转为 Splunk/Sigma 查询,对uri字段做大小写不敏感匹配,可参考仓库中 building-detection-rule-with-splunk-spl 与 building-detection-rules-with-sigma 的规则构建方法;
  • 暴力破解告警:按clientip + uri维度统计 5 分钟窗口内 POST 到登录端点的计数,阈值 50,对应 ATT&CK T1110(暴力破解)的检测覆盖;
  • 扫描器识别:对 User-Agent 匹配 nikto、sqlmap、dirbuster、gobuster、wfuzz 等签名,对应 T1595.002(主动扫描);
  • Web Shell 驻留:结合命中记录中的可疑 POST 上传 URI 与高响应状态码,关联 T1505.003 的猎杀视角,可与 hunting-for-webshell-activity 组合使用。

局限性与注意事项

  • 误报管理:正则签名可能命中合法业务参数(如商品名含SELECT、正文讨论 SQL 的页面),建议结合响应状态码(如 200 且 5xx 比例)、请求频率与攻击者画像综合研判,降低误报;
  • 编码绕过:仅覆盖十六进制编码(0x...)与空字节(%00/%2500),URL 双层编码、Unicode 变体等绕过手段不在本技能覆盖范围,可结合 performing-web-application-firewall-bypass 补足对抗视角;
  • 数据可用性:若日志未开启 Referer/User-Agent 记录(如 Nginx 默认格式有时省略 referer),解析器仍能工作,但扫描器与 Referer 相关检测会受限;
  • 授权前提:该技能属于安全运营检测能力,仅限在拥有明确授权的环境中使用。

小结

通过本文你可以完整掌握一条"日志采集 → 正则解析 → 四类攻击签名检测 → 暴力破解统计 → GeoIP 富化 → 攻击者画像聚合 → JSON 报告输出"的 Web 入侵检测流水线。无论是将 scripts/agent.py 直接跑在 Nginx/Apache 日志上快速定位可疑请求,还是把其中的签名表与阈值抽取为 SIEM 检测规则,都能基于仓库源码与 API 参考文档直接落地,为 SOC 的持续监控(NIST CSF DE.CM-01)与异常分析(DE.AE-02)提供可复用的结构化能力。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 21:16:29

智能垃圾分类系统实战:MobileNetV2模型加载与Grad-CAM可视化

简介&#xff1a;这是一份面向计算机、人工智能等专业学生与从业者的毕业设计资源&#xff0c;实现基于深度学习卷积神经网络的智能垃圾分类功能&#xff0c;主体为Python源码与配套说明文档。项目经过完整调试&#xff0c;已在答辩评审中取得98分&#xff0c;可稳定运行&#…

作者头像 李华
网站建设 2026/9/11 21:15:00

时空RBF神经网络实现混沌时间序列预测的Matlab指南

简介&#xff1a;这是一套面向神经网络预测与信号处理教研场景的MATLAB仿真资源&#xff0c;专注解决混沌时间序列的建模与预测问题&#xff0c;采用时空RBF神经网络&#xff08;RBF-NN&#xff09;实现。代码兼容MATLAB 2014/2019a&#xff0c;共10个文件&#xff0c;包含3个可…

作者头像 李华
网站建设 2026/9/11 21:12:49

动漫同人创作技术解析:从命名规则到3D实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 21:12:47

低功耗开发不是调休眠,是全链路工程约束

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华