news 2026/5/11 5:18:34

Sigma规则驱动:自动化网络空间测绘与威胁狩猎实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sigma规则驱动:自动化网络空间测绘与威胁狩猎实战指南

1. 项目概述:一个为安全研究量身定制的开源情报工具

如果你是一名安全研究员、渗透测试工程师,或者对网络资产测绘、威胁情报收集感兴趣,那么你很可能听说过或正在寻找像shodancensys这样的网络空间搜索引擎。它们能帮你发现暴露在公网上的设备、服务及其脆弱性。今天要聊的这个项目——manojmallick/sigmap,可以看作是这类工具的一个强力补充和自动化执行引擎。它不是另一个搜索引擎,而是一个规则驱动的、可扩展的指纹识别与数据提取框架。简单来说,它允许你用一种类似yara的规则语言,去描述你想在互联网上寻找的“特征”,然后它自动调用后端引擎(如shodancensysfofazoomeye等)进行搜索,并将结果进行结构化解析和输出。

我第一次接触sigmap是在一次内部红队演练中,我们需要快速定位某个特定版本、存在已知漏洞的物联网设备。手动在多个平台编写查询语句、翻页、导出再整理,效率极低且容易遗漏。sigmap的出现,让我们能够将这种“特征”写成一条规则,然后一键批量执行,结果直接以JSONCSV等格式输出,极大地提升了侦察阶段的效率。它特别适合用于漏洞影响范围评估、特定资产普查、威胁狩猎(如寻找某家族恶意软件的C2服务器)等场景。无论你是想自动化你的攻击面发现流程,还是构建自己的威胁情报源,sigmap都提供了一个非常优雅且强大的解决方案。

2. 核心设计理念与架构拆解

2.1 为什么是“规则驱动”?从手动查询到自动化狩猎的转变

传统的网络空间测绘流程是:分析目标特征 -> 在shodan等平台手动构造查询语法 -> 执行搜索 -> 人工浏览或导出结果 -> 手动解析关键信息(如IP、端口、横幅、证书信息等)。这个过程重复、繁琐,且严重依赖操作者的经验和对不同查询语法的熟悉程度。

sigmap的核心创新在于引入了“Sigma规则”的概念。这里的 Sigma 并非指那个著名的威胁检测规则项目,而是一种项目自创的、用于描述网络服务指纹的领域特定语言(DSL)。一条 Sigma 规则就是一个YAML文件,它清晰地定义了:

  1. 我们要找什么:通过detection字段,使用逻辑组合(andornot)来匹配HTTP响应头、HTML标题、证书主题、特定关键字等。
  2. 从哪里找:通过search字段指定使用哪个后端搜索引擎(如shodancensys)。
  3. 怎么输出:通过fields字段定义从结果中提取哪些感兴趣的字段(如ipportorgvulnerabilities)。

这种设计将“特征知识”(规则)与“执行引擎”(sigmap核心)解耦。安全团队可以积累和维护一个规则库,每条规则对应一种设备、一个服务、一个漏洞指纹甚至一个威胁指标。当需要执行某项侦察任务时,只需指定对应的规则文件,sigmap会负责翻译成对应搜索引擎的查询语句,并发起请求、解析结果。这实现了安全研究的“代码化”和“资产化”。

2.2 项目架构:模块化与可扩展性

sigmap的架构体现了清晰的模块化思想,主要分为三层:

  1. 规则层(Sigma Rules):位于最上层,由用户编写和维护。规则文件存放在rules/目录下,按类别组织。这是项目的“知识库”,也是其价值所在。
  2. 核心引擎层(Core Engine):这是sigmap的主程序。它负责:
    • 规则解析:读取并验证 Sigma 规则文件的语法和结构。
    • 查询翻译:根据规则中的search配置,将detection逻辑转换为目标搜索引擎(如 Shodan)能理解的查询字符串。这是技术难点之一,因为每个搜索引擎的查询语法和特性都有差异。
    • 任务调度与执行:管理并发请求,处理 API 速率限制,优雅地处理错误和超时。
    • 结果解析与输出:接收搜索引擎返回的原始数据(通常是 JSON),根据规则中定义的fields,提取、清洗并格式化数据,输出为指定的格式(JSON, CSV, 表格等)。
  3. 连接器层(Connectors):位于最底层,负责与具体的搜索引擎 API 进行通信。每个搜索引擎(Shodan, Censys, Fofa, ZoomEye)都有一个对应的连接器模块。连接器封装了 API 的认证、请求构造、分页处理和数据解析等细节。这种设计使得添加新的搜索引擎支持变得相对容易,只需实现一个新的连接器即可。

注意sigmap本身不爬取或扫描互联网,它只是一个“智能中介”。所有数据都来源于其集成的第三方搜索引擎。因此,使用sigmap的前提是你拥有这些搜索引擎的有效 API 密钥,并遵守其服务条款和速率限制。

3. 深入Sigma规则:编写你的第一份“狩猎指南”

规则是sigmap的灵魂。理解如何编写一条有效的规则,是发挥其威力的关键。让我们通过一个实际例子来拆解。

假设我们需要寻找暴露在公网上的、版本号小于2.4.50Apache HTTP Server,因为这个版本存在一个高危漏洞(CVE-2021-41773)。我们的目标是找到所有这类易受攻击的资产。

3.1 规则文件结构解剖

一个完整的 Sigma 规则文件通常如下所示(我们命名为apache_httpd_cve-2021-41773.yml):

title: Apache HTTP Server < 2.4.50 - Path Traversal (CVE-2021-41773) id: 9eeb0f0a-1b5a-4c5e-a3d8-123456789abc # 随机唯一UUID status: test description: Detects Apache HTTP Server versions prior to 2.4.50 vulnerable to path traversal. references: - https://httpd.apache.org/security/vulnerabilities_24.html - https://nvd.nist.gov/vuln/detail/CVE-2021-41773 author: Your Name date: 2023/10/27 tags: - web - cve - apache - rce search: - shodan - censys detection: service: http version: - source: banner match: 'Apache/(2\.4\.[0-4][0-9]?|2\.4\.5[0-9]?|2\.[0-3]\.|1\.|0\.)' # 匹配小于2.4.50的版本 - source: html match: '<address>Apache/(2\.4\.[0-4][0-9]?|2\.4\.5[0-9]?|2\.[0-3]\.|1\.|0\.)' banner: - match: 'Server: Apache/(2\.4\.[0-4][0-9]?|2\.4\.5[0-9]?|2\.[0-3]\.|1\.|0\.)' condition: service and (version or banner) # 服务是HTTP,且版本或Banner信息匹配 fields: - ip - port - hostnames - org - location.country_name - vulns falsepositives: - Version string might be obfuscated in some distributions. level: high

逐字段解析:

  • titleiddescription:元信息,用于标识和描述规则。
  • search:指定本规则使用的搜索引擎。可以是一个列表,sigmap会依次使用它们进行查询。
  • detection:这是规则的核心。
    • service: http:限定只搜索 HTTP 服务(端口 80, 443, 8080 等)。这能大幅缩小搜索范围,提升效率。
    • versionbanner:定义了多个“匹配源”和对应的正则表达式。这里从banner(服务横幅)和html(页面内容)中匹配Apache版本号。正则表达式Apache/(2\.4\.[0-4][0-9]?|2\.4\.5[0-9]?|2\.[0-3]\.|1\.|0\.)用于匹配所有小于2.4.50的版本。编写精准的正则表达式是规则有效的关键,需要你对目标服务的版本标识方式有深入了解。
    • condition:定义了匹配的逻辑条件。本例中,要求目标必须是http服务,并且其versionbanner信息匹配我们的正则表达式。逻辑运算符andornot可以构建复杂的条件。
  • fields:指定输出中需要包含的字段。这些字段名需要与后端搜索引擎返回的字段对应。例如,shodanlocation.country_name对应国家名。
  • falsepositives:提醒可能存在的误报情况,这是经验之谈。
  • level:标识规则匹配结果的风险等级。

3.2 规则编写的经验与避坑指南

  1. 从简单开始,逐步复杂化:不要试图在一条规则里匹配所有特征。先写一条只匹配特定Server头或HTML标题的简单规则,测试通过后,再逐步增加其他条件(如证书信息、特定路径响应、Cookie 等)来减少误报。
  2. 善用service过滤service字段(如httpsshftpelasticsearch)是sigmap和底层搜索引擎沟通的“快捷方式”。正确使用它能极大提升查询效率和准确性。你需要查阅sigmap和对应搜索引擎的文档,了解支持的service类型。
  3. 正则表达式要精确且高效
    • 避免贪婪匹配:尽量使用非贪婪操作符.*?
    • 注意转义:在 YAML 中写正则,特殊字符如点.需要转义\.
    • 测试你的正则:在编写规则前,先用在线的正则测试工具或本地用grep测试你的表达式是否能准确匹配到样本数据。
  4. 理解后端搜索引擎的能力与限制:不同的搜索引擎索引的数据维度不同。Shodan擅长端口横幅和元数据,Censys在证书和协议握手信息方面更强,FofaZoomEye对 Web 特征支持较好。你的规则中的detection字段,必须基于目标搜索引擎实际提供的数据来设计。例如,一个依赖深度 HTML 内容分析的规则,在Shodan上可能效果不佳,因为Shodan通常只存储有限的页面内容。
  5. 管理你的规则库:建议按类别(如cve/iot/cloud/malware-c2/)组织规则文件。为每条规则生成唯一的id(可以用uuidgen命令)。在description中详细说明规则的意图和上下文,方便团队协作和后续维护。

4. 实战部署与核心操作流程

4.1 环境准备与安装

sigmap是一个 Python3 项目,安装相对简单。推荐在 Linux 或 macOS 环境下使用,Windows 可通过 WSL 获得最佳体验。

# 1. 克隆仓库 git clone https://github.com/manojmallick/sigmap.git cd sigmap # 2. 创建并激活虚拟环境(推荐) python3 -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows # 3. 安装依赖 pip install -r requirements.txt

依赖解析requirements.txt中通常包含requests(HTTP请求)、pyyaml(解析YAML规则)、colorama(彩色输出)、shodan(官方Python库)等。如果遇到缺失库,手动pip install即可。

4.2 配置API密钥

sigmap需要通过配置文件或环境变量来读取各搜索引擎的 API 密钥。最方便的方式是创建配置文件~/.config/sigmap/config.yaml(Linux/macOS)或%USERPROFILE%\.config\sigmap\config.yaml(Windows)。

shodan: api_key: "YOUR_SHODAN_API_KEY" censys: api_id: "YOUR_CENSYS_API_ID" api_secret: "YOUR_CENSYS_API_SECRET" fofa: email: "YOUR_FOFA_EMAIL" key: "YOUR_FOFA_KEY" zoomeye: api_key: "YOUR_ZOOMEYE_API_KEY"

重要提示:请妥善保管你的 API 密钥。特别是免费账户的 API 调用次数有限,将密钥提交到公开仓库会导致密钥泄露和资源被盗用。建议将配置文件加入.gitignore

4.3 基础命令与使用模式

安装配置完成后,就可以开始使用了。sigmap主要通过命令行操作。

1. 列出所有可用规则:

python sigmap.py -l

这会扫描rules/目录,列出所有规则的idtitledescription,帮助你快速找到需要的规则。

2. 执行单条规则:

python sigmap.py -r rules/cve/apache_httpd_cve-2021-41773.yml

这是最常用的命令。sigmap会读取规则,使用规则中定义的搜索引擎(本例中是shodancensys)进行查询,并将结果打印到终端(默认表格形式)。

3. 指定输出格式:-o参数支持多种输出格式,便于后续处理。

# 输出为JSON格式,适合用jq等工具进行二次分析 python sigmap.py -r rules/cve/apache_httpd_cve-2021-41773.yml -o json > results.json # 输出为CSV格式,方便导入Excel或数据库 python sigmap.py -r rules/cve/apache_httpd_cve-2021-41773.yml -o csv > results.csv # 输出为简洁的“IP:PORT”列表,用于直接导入扫描工具 python sigmap.py -r rules/cve/apache_httpd_cve-2021-41773.yml -o list

4. 批量执行规则(规则链):你可以创建一个文本文件,里面每行写一个规则文件的路径,然后使用-R参数批量执行。

# 创建规则列表文件 echo "rules/iot/camera_hikvision.yml" > rulelist.txt echo "rules/iot/router_tplink.yml" >> rulelist.txt # 批量执行 python sigmap.py -R rulelist.txt -o json --output-folder ./scan_results/

--output-folder参数会将每个规则的结果分别保存到指定文件夹,并以规则ID或文件名命名。

5. 限制结果数量与并发:为了避免过量消耗 API 配额,可以使用-L限制每个搜索引擎返回的最大结果数,用-t控制并发线程数。

# 每个搜索引擎最多取100条结果,使用5个线程 python sigmap.py -r my_rule.yml -L 100 -t 5

4.4 一个完整的实战案例:追踪暴露的 Jenkins 服务器

假设我们需要统计互联网上未授权访问的 Jenkins 服务器(端口8080),并提取其版本号和所在组织。

步骤1:编写规则 (rules/ci/jenkins_unauth.yml)

title: Exposed Jenkins Servers (Unauthenticated) id: a1b2c3d4-5678-90ef-ghij-klmnopqrstuv status: production description: Detects Jenkins CI/CD servers exposed on the internet, often on port 8080. author: Security Researcher date: 2023/10/27 tags: - ci-cd - jenkins - devops search: - shodan detection: service: http port: 8080 html: - match: '<title>Dashboard \[Jenkins\]</title>' # Jenkins 经典标题 - match: 'Jenkins' # 页面内容包含Jenkins headers: - match: 'X-Jenkins: .*' # Jenkins 特有的HTTP头 condition: service and port and (html or headers) fields: - ip - port - hostnames - org - location.country_name - html:title # 提取HTML标题,里面通常包含版本号 falsepositives: - Some internal development pages might have similar titles. level: medium

步骤2:执行侦察

python sigmap.py -r rules/ci/jenkins_unauth.yml -o csv -L 500 > jenkins_exposed.csv

步骤3:结果分析与后续动作打开jenkins_exposed.csv,你会得到一个包含IP、端口、组织、国家等信息的列表。你可以:

  • cutawk或 Excel 进行排序和统计(如哪个组织暴露最多)。
  • ip:port列表导出,用漏洞扫描器(如nuclei)对其进行深度漏洞检测。
  • 手动访问几个目标,确认是否存在未授权访问漏洞。

5. 高级技巧、问题排查与生态整合

5.1 性能优化与大规模扫描策略

当规则库庞大或单个规则匹配范围很广时,直接运行可能导致 API 配额迅速耗尽或运行时间过长。

  1. 分而治之:对于宽泛的规则(如service: http),可以拆分成基于端口、国家代码、组织等更细粒度的规则,分批执行。
  2. 利用搜索过滤器:在规则中,除了detection,还可以在search块下使用搜索引擎特有的过滤器。例如,在 Shodan 连接器中,可以添加filters
    search: - shodan: query: "port:8080" filters: - "country:US" # 只搜索美国的资产 - "org:Google" # 只搜索谷歌旗下的资产
    注意:这需要你熟悉每个搜索引擎的过滤语法,并且sigmap的连接器可能并未完全暴露所有过滤器参数,有时需要修改连接器代码。
  3. 离线结果缓存sigmap本身没有内置缓存。对于需要反复验证的规则,一个实用的技巧是将首次的json输出保存下来,后续分析直接读取本地文件,避免重复调用 API。
  4. 分布式执行构想:对于超大规模扫描,可以编写脚本,将目标(如不同的国家代码、IP段)分配给多个sigmap进程或机器同时执行,最后合并结果。这需要较强的脚本编写能力。

5.2 常见问题与排查实录

问题1:执行规则后无任何输出,也没有报错。

  • 排查思路
    1. 检查API密钥和配额:首先确认配置文件中的 API 密钥正确无误,并且该密钥在对应的搜索引擎上还有剩余查询额度。可以尝试用搜索引擎官方的命令行工具(如shodan search 'apache' --limit 1)测试密钥是否有效。
    2. 检查规则语法:运行python sigmap.py --check -r my_rule.yml(如果支持语法检查)。仔细检查 YAML 格式,特别是缩进和冒号后的空格。
    3. 检查查询是否过于宽泛或狭窄:在搜索引擎的 Web 界面上,手动输入你规则预期生成的查询语句,看看是否有结果。可能你的规则逻辑 (condition) 太严格,或者目标特征在搜索引擎中未被索引。
    4. 开启调试输出:查看sigmap是否有-v(verbose)或--debug参数,查看它实际发送的查询请求和接收的响应。

问题2:结果误报率很高。

  • 解决方案
    1. 精炼正则表达式:这是最主要的原因。确保你的正则表达式能唯一标识目标,避免匹配到相似的其他服务。多收集一些正样本和负样本进行测试。
    2. 增加匹配条件:使用and组合多个不同来源的特征。例如,同时匹配bannerhtml中的一个特定图标路径、以及证书中的组织字段。多条件同时满足的概率远低于单条件。
    3. 利用serviceport:尽可能限定服务类型和端口,这是最有效的过滤手段之一。
    4. 人工审核与迭代:对初期结果进行抽样检查,分析误报案例的特征,反过来修改你的规则。

问题3:运行过程中报错Rate limit exceededConnection error

  • 解决方案
    1. 降低并发度:使用-t 1-t 2减少并发线程数。
    2. 增加延迟:如果sigmap支持,在配置文件中或命令行添加请求间隔延迟。
    3. 使用付费API:免费API的速率限制通常很严格。对于生产级应用,考虑升级到付费计划。
    4. 分时段执行:将大型扫描任务拆分成多个小任务,在不同时间执行。

5.3 与现有安全工具链的整合

sigmap的价值不仅在于独立使用,更在于它能嵌入到现有的自动化工作流中。

  1. 作为侦察阶段输入:将sigmap的输出(-o list格式)直接管道传递给nmapmasscan进行端口确认和深度扫描。

    python sigmap.py -r rules/iot/camera.yml -o list | xargs -I {} nmap -sV -p {} -oA scan_result

    (注意:此命令仅为思路示意,需根据实际情况调整xargs参数)

  2. 与漏洞扫描器联动:将sigmap发现的资产列表(CSV或JSON)作为nucleigoby等漏洞扫描器的输入目标,进行自动化漏洞检测。

    python sigmap.py -r rules/cve/xxx.yml -o list > targets.txt nuclei -l targets.txt -t cves/ -o nuclei_results.txt
  3. 生成动态威胁情报仪表板:定期(例如每天)执行一批关键规则,将JSON结果导入到Elasticsearch+KibanaGrafana中。你可以构建一个仪表板,实时监控全球范围内特定漏洞的暴露情况、特定恶意软件家族C2服务器的活跃度等,实现威胁情报的视觉化和监控。

  4. 集成到CI/CD管道(蓝队视角):安全团队可以编写规则,用于发现公司资产是否被意外暴露在公网。将sigmap作为定时任务集成到CI/CD中,一旦规则匹配到属于自己公司IP段的暴露资产,立即触发告警,通知相关团队进行修复。

在我个人的使用经验中,sigmap最大的优势在于它将“寻找什么”的知识(规则)固化了下来,并且通过社区可以不断积累。一个成熟的规则库本身就是一份宝贵的威胁情报资产。它的学习曲线主要在于规则编写和对各搜索引擎特性的理解,一旦掌握,它就能成为你网络空间测绘工具箱中一把高效、精准的“手术刀”。

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

Maya摄影机实战:从基础创建到电影级景深应用

1. Maya摄影机基础&#xff1a;从创建到类型选择 第一次打开Maya时&#xff0c;很多人会被默认的四个视图窗口搞懵——其实这些就是Maya自带的透视、顶、前、侧四个基础摄影机。就像拍电影前要先架设机位一样&#xff0c;做三维动画也得先搞定摄影机。我刚开始用Maya时总直接在…

作者头像 李华
网站建设 2026/5/11 5:08:42

解决Cognito触发器部署失败问题

在使用AWS Cognito User Pool时,开发者经常会遇到一些部署问题,尤其是当涉及到现有资源的操作时。这篇博客将探讨如何解决在部署Cognito触发器时遇到的一个常见错误,并提供一个详细的实例说明。 问题背景 假设你有一个已经存在的Cognito User Pool,你想要为其添加一个新的…

作者头像 李华
网站建设 2026/5/11 5:08:42

高斯混合模型与Fokker-Planck方程在持续学习中的应用

1. 高斯混合模型与Fokker-Planck方程基础1.1 高斯混合模型的核心特性高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;是概率密度估计中常用的参数化模型&#xff0c;它通过多个高斯分布的线性组合来描述复杂分布。对于K个分量的GMM&#xff0c;其数学表达式为…

作者头像 李华
网站建设 2026/5/11 5:06:45

Transmission密码安全加固:从配置文件到命令行实战

1. Transmission密码安全加固的必要性 最近在帮朋友排查一个奇怪的网络问题时&#xff0c;意外发现他路由器上的Transmission客户端竟然还在使用默认密码。这让我惊出一身冷汗——这相当于把家门钥匙插在门锁上啊&#xff01;作为一款广泛使用的BT客户端&#xff0c;Transmiss…

作者头像 李华