开源 OSINT 信息收集框架 SpiderFoot:三条命令部署与攻击面测绘实战
【免费下载链接】spiderfootSpiderFoot automates OSINT for threat intelligence and mapping your attack surface.项目地址: https://gitcode.com/GitHub_Trending/sp/spiderfoot
接手一个域名之后,你想在短时间内搞清楚它有多少子域名、关联了哪些邮箱和 IP 段、挂在哪几个云上、有没有被黑名单收录过——逐个平台手工查,既慢也容易漏。SpiderFoot 做的事情就是把这个 OSINT 信息收集过程自动化:两百多个收集模块互相喂数据,从公开渠道把域名、IP、邮箱、社交账号、云存储桶等线索扒出来,再用内置的关联规则帮你从一堆原始数据里挑出真正值得关注的信号。
它是干什么的,适合谁
SpiderFoot 是一个 Python 编写的开源 OSINT(开源情报)自动化框架,MIT 协议,自 2012 年起持续维护,当前稳定版为 4.0(见 VERSION),要求 Python 3.7+。它的定位很明确:给渗透测试、红队侦察和防御团队做攻击面测绘与威胁情报分析——既可以对着别人的目标做侦察,也可以对着自己组织的资产做暴露面自查。Web 界面和纯命令行两种用法都支持。
三条命令完成部署,界面和 CLI 都能用
本地运行的最短路径是克隆仓库、装依赖、启动内嵌 Web 服务:
git clone https://gitcode.com/GitHub_Trending/sp/spiderfoot cd spiderfoot pip3 install -r requirements.txt python3 ./sf.py -l 127.0.0.1:5001跑起来之后,浏览器打开http://127.0.0.1:5001就是它的 Web 界面:点 New Scan,填入目标(支持 IP、域名/子域名、主机名、CIDR 网段、ASN、邮箱、手机号、用户名、人名、比特币地址这十类实体),勾选模块,Run Scan。之后模块完成数量、新发现的数据类型、潜在风险都能在页面上实时看到。
不想装 Python 环境的话,仓库根目录自带 Dockerfile,构建后docker run -p 5001:5001 spiderfoot即可,容器默认就监听 5001 端口。
纯命令行同样完整。python3 ./sf.py -s example.com -u passive就能以"纯被动"模块档跑一次扫描,-o json或-o csv控制输出格式,结果直接落管道。扫描数据存在本地 SQLite 里,想要细查可以直接查库。
能力拆解:这四类事它能替你做完
资产与暴露面测绘。给定一个域名,它会把能找到的子域名尽量枚举出来(被动 DNS、证书透明度日志、暴力破解、相似域名等路子都有),尝试 DNS 区域传输,检查子域名是否存在可被接管的悬挂记录(modules/sfp_subdomain_takeover.py),还能识别哪些 IP 落在 AWS、Azure 这类第三方托管段里。做接手侦察或暴露面盘点,这是主力。
实体与敏感信息提取。各模块按发布/订阅模式级联工作:一个模块发现的域名喂给 DNS 解析,解析出的 IP 再触发端口扫描。扫描过程中会持续从内容里提取邮箱、电话号码、人名、信用卡号、IBAN、比特币/以太坊地址、哈希值,以及图片和文档的元数据。适合做情报深挖,而不只是"找到资产"。
威胁情报查询。对扫出来的每个域名、IP、邮箱,它会自动去查 SHODAN、GreyNoise、HaveIBeenPwned、AlienVault OTX、abuse.ch、Spamhaus 等大量数据源的黑名单、泄露库和历史 DNS 记录。哪些 IP 被多家情报源同时标记为恶意、哪个邮箱出现在多个泄露事件中,扫完就能对号入座。
YAML 关联规则分析。这是 4.0 的主打能力:correlations/ 目录下内置 37 条 YAML 规则,每次扫描后自动分析结果,产出带风险等级的结论——暴露在互联网上的数据库、泄露软件版本号的开放端口、对公网开放的 RDP/VNC 远程桌面、证书过期、来自粘贴网站的唯一线索、异常值 Web 服务器(往往是影子 IT)等等。不想只用现成的话,拷贝 correlations/template.yaml 改成自己的规则、重启即生效;规则语法在 correlations/README.md 里有完整参考,写法类似一条带过滤、分组和阈值判断的数据库查询。
一次真实感的走查:从域名到一条高危结论
假设要盘点一个公司的攻击面。用命令行只启用 DNS 解析和端口扫描两个模块跑一遍:python3 ./sf.py -s www.example.com -m sfp_dnsresolve,sfp_portscan_tcp。跑的过程中,端口扫描模块发现一台主机 22 端口开着,banner 是SSH-2.0-OpenSSH_7.2p2;扫描收尾时,关联规则open_port_version命中,直接输出一条结论:"Software version revealed on open port: SSH-2.0-OpenSSH_7.2p2"——OpenSSH 7.2 是多年前就有补丁的旧版本,这条结论可以原样写进报告。
如果这次扫描还顺手发现 3389 端口对公网开放,remote_desktop_exposed规则会以 HIGH 风险等级再报一条"远程桌面暴露在互联网上"。两条结论在 Web 界面和 SQLite 数据库(tbl_scan_correlation_results表)里都能查到,也可以导出。
对更大规模的盘点,把-m换成-u passive用全部被动模块扫完整数据,结果导出 CSV/JSON/GEXF 三种格式,分别对应表格处理、自动化集成和网络图谱可视化。
新手最容易踩的三个坑
模块不是全部要配置,但配置了才有完整数据。两百多个模块里大多数不需要 API 密钥就能跑,需要密钥的多数有免费档。密钥在 Web 界面按模块填写,支持整体导入/导出;懒得配也不影响主体功能,只是少了几个数据源。
-u passive和-m是控制"扰民程度"的关键。有些模块会主动做端口扫描、抓 banner,对别人的生产系统压力不小。只想知道目标暴露了什么,用-u passive;想精控范围,用-m mod1,mod2点名模块,-M可以先列出全部可用模块。
关联规则出空结果 ≠ 规则坏了。规则只分析扫描结果里已经存在的数据,本身不收集数据。如果database_exposed之类的规则没报东西,通常只是这次扫描没扫出对应类型的发现,换个模块组合再扫即可。另外,往 correlations/ 里放错 YAML 语法会导致 SpiderFoot 启动时直接中止,报错信息里会指出出错位置。
合规边界
只对你拥有、或获得明确书面授权的目标运行扫描,尤其是带端口扫描、DNS 暴力破解这类主动模块时。尊重各数据源服务条款和速率限制,避免高频扫描触发封禁或误报成攻击;面向生产环境做暴露面自查时,默认用被动档(-u passive),需要主动验证的部分放到约定时间窗内做。
下一步
完整文档和更多教程在官方站点,安装细节、模块行为、关联规则写法在仓库内 docs/ 和 correlations/README.md 里都能查到;遇到问题可以直接在项目的 Discord 社区里问,维护者对 issue 和规则贡献的响应一直比较活跃。
【免费下载链接】spiderfootSpiderFoot automates OSINT for threat intelligence and mapping your attack surface.项目地址: https://gitcode.com/GitHub_Trending/sp/spiderfoot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考