给 Claude 装上侦察眼:Cybersecurity MCP Server 拆解

给 Claude 装上侦察眼:Cybersecurity MCP Server 拆解

安全侦察一直有个效率陷阱:工具分散在不同终端,WHOIS 一个窗口、nmap 一个窗口、SSL 检查又开一个,最后还要把结果拼在一起分析。Cybersecurity MCP Server 把这套流程整合进了 Claude Desktop,一句话触发,所有工具并行跑,结果由 Claude 直接分析。

这篇文章拆解它的实现,重点看架构决策和代码层面的细节,不只是使用说明。


MCP 是什么,为什么适合做这件事

MCP(Model Context Protocol)是 Anthropic 定义的一套协议,让外部工具以标准化的方式注册到 Claude Desktop,Claude 可以在对话中主动调用这些工具。

这个项目用的是 FastMCP 库。注册一个工具只需要一个装饰器:

python 复制代码
from fastmcp import FastMCP
mcp = FastMCP("CyberSecurity-MCP-Server")

@mcp.tool()
def whois_lookup(domain: str) -> dict:
    """Perform WHOIS lookup for a domain."""
    ...

FastMCP 会读取函数签名和 docstring,自动生成工具描述传给 Claude。Claude 看到的工具说明就来自这里,docstring 写得清不清楚直接影响 Claude 会不会在合适的时机调用它。


8 个工具,逐一拆解

1. WHOIS 查询

调用 python-whois 库,返回注册商、创建日期、到期日期、名称服务器、DNSSEC 状态、所属机构和国家。

一个处理细节:日期字段有时返回的是列表(某些 TLD 的 WHOIS 格式会给多个日期),代码用了一个小函数统一处理:

python 复制代码
def safe_date(d):
    return str(d[0] if isinstance(d, list) else d)

2. DNS 枚举

查询 7 种记录类型:A、AAAA、MX、NS、TXT、CNAME、SOA,每种记录的结构差异较大,代码分别处理。比如 MX 记录需要同时返回优先级和邮件服务器地址,SOA 返回的是一个结构体而不是列表。

枚举完标准记录后,还会对 10 个常见子域名做暴力检测:

python 复制代码
common_subdomains = ["www", "mail", "ftp", "admin", "api", "dev", "staging", "vpn", "remote", "portal"]

每个子域名尝试解析 A 记录,设 3 秒超时,发现就记录。这个列表很短,但覆盖了最常见的暴露面。

3. 端口扫描

封装 python-nmap,支持 5 种扫描模式:

模式 参数 耗时
basic -F(Top 100 端口) ~5 秒
service -sV -F(服务和版本检测) ~15 秒
os -O -F(操作系统检测,需要 root) ~15 秒
full -p-(全 65535 端口) ~5 分钟
vuln --script vuln -F(漏洞脚本) ~30 秒

返回结果包含每个端口的状态、服务名、产品和版本,如果跑了 vuln 脚本还会附上脚本输出。

这里有个实际限制:os 模式需要管理员权限,macOS 和 Linux 下普通用户跑会失败。代码层面没有特别处理,会直接返回 nmap 的错误信息。

4. SSL 证书检查

用 Python 标准库的 ssl 模块,直接建立 TLS 连接,不经过第三方 API:

python 复制代码
context = ssl.create_default_context()
conn = context.wrap_socket(
    socket.create_connection((domain, port), timeout=10),
    server_hostname=domain
)
cert = conn.getpeercert()
cipher = conn.cipher()
tls_version = conn.version()

返回内容包括:证书有效期、剩余天数、是否即将到期(30 天内)、颁发机构、Subject Alternative Names(SAN)列表、当前使用的 TLS 版本和加密套件。

一个有用的字段:expiring_soon,判断条件是 0 <= days_left <= 30,适合做自动化监控。

5. 技术栈检测

发一个 HTTP GET 请求,从响应头和 HTML 内容做特征匹配。检测逻辑分几类:

  • 响应头ServerX-Powered-By
  • CMS :WordPress(检测 wp-content)、Drupal(检测 drupal.js)、Joomla(检测 joomla
  • JS 框架 :React(检测 react.)、Vue(检测 vue.)、Angular(检测 angular)、jQuery(检测 jquery
  • CDN:CloudFront、Cloudflare、Fastly、Akamai(从响应头匹配)
  • 安全响应头评分:检查 7 个安全头是否存在,计算得分

安全头评分的逻辑:

python 复制代码
security_score = int((len(present) / len(security_headers)) * 100)
# 评级: >=85% Excellent, >=60% Good, >=40% Fair, <40% Poor

7 个被检查的安全头包括:Strict-Transport-SecurityContent-Security-PolicyX-Frame-OptionsX-Content-Type-OptionsReferrer-PolicyPermissions-PolicyX-XSS-Protection

6. Full Recon(并行整合)

这是整个项目最有意思的一个工具。用 concurrent.futures.ThreadPoolExecutor 同时跑 5 个工具:

python 复制代码
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as ex:
    futures = [
        ex.submit(run, "whois",     whois_lookup,      domain),
        ex.submit(run, "dns",       dns_enumeration,   domain),
        ex.submit(run, "ports",     port_scan,         domain, "service"),
        ex.submit(run, "ssl",       ssl_inspect,       domain),
        ex.submit(run, "techstack", tech_stack_detect, domain),
    ]
    concurrent.futures.wait(futures)

每个工具的结果写入同一个字典,任何一个失败都不会中断其他的。最后把所有原始结果打包返回给 Claude,同时附带一段 instructions 字段,告诉 Claude 如何对每个工具的输出生成摘要,Claude 做了原本需要人做的工作:把五份原始数据拼成一份有意义的安全评估。

7. CVE 查询

调用 NVD(National Vulnerability Database)的公开 API,不需要 API key:

python 复制代码
response = requests.get(
    "https://services.nvd.nist.gov/rest/json/cves/2.0",
    params={"keywordSearch": f"{software} {version}"},
    timeout=60,
)

返回每个 CVE 的 ID、CVSS 评分、严重程度、发布时间、最后修改时间和英文描述。

CVSS 分数的提取有一定复杂度,因为 NVD 的数据结构会因 CVE 年代不同而变化(有 CVSS v2、v3.0、v3.1 三种格式),代码按优先级依次尝试:

python 复制代码
metric_groups = (
    metrics.get("cvssMetricV31")
    or metrics.get("cvssMetricV30")
    or metrics.get("cvssMetricV2")
    or []
)

timeout 设了 60 秒,比其他工具长得多,原因是 NVD API 在高负载时响应会很慢。

8. IP 信誉检查

调用 AbuseIPDB API,这是唯一需要 API key 的工具。免费账号每天 1000 次请求,足够日常使用。

判断 IP 是否恶意的阈值设在了 abuse_confidence_score >= 25,这是一个相对保守的阈值,减少误报。


架构层面的几个决策

本地运行,无服务端,整个 MCP server 跑在用户自己机器上,安全侦察数据(目标域名、扫描结果)不经过任何中间服务器。

输入验证前置 ,几乎每个工具开头都有 is_valid_domain() 检查,用正则验证域名格式,避免把无效输入传给下游库。防线不算深,但对本地工具已经够用。

错误不中断流程 ,每个工具都用 try/except 包住,返回 {"success": False, "error": "..."} 而不是抛异常。Claude 收到错误信息后可以告知用户哪个工具失败了,整个对话不会中断。

full_recon 不包含 CVE 和 IP 信誉,这两个工具在 full_recon 里没有被调用。CVE 查询需要具体的软件名和版本,要先看端口扫描和技术栈检测的结果才能确定,先跑没有意义;IP 信誉查询依赖 AbuseIPDB key,不是所有人都配置了。


安装步骤

依赖:Python 3.10+、Claude Desktop、Nmap、Git。

bash 复制代码
git clone https://github.com/gaoharimran29-glitch/Cybersecurity-MCP-Server.git
cd Cybersecurity-MCP-Server
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt

Nmap 安装:Mac 用 brew install nmap,Linux 用 sudo apt install nmap,Windows 从官网下载安装包后手动把 C:\Program Files (x86)\Nmap 加入 PATH。

配置 Claude Desktop(~/Library/Application Support/Claude/claude_desktop_config.json):

json 复制代码
{
  "mcpServers": {
    "cybersecurity": {
      "command": "/full/path/to/.venv/bin/python3",
      "args": ["/full/path/to/main.py"],
      "env": {
        "ABUSEIPDB_API_KEY": "your-key-here"
      }
    }
  }
}

路径必须用绝对路径,不能用 python~ 缩写,Claude Desktop 的启动环境不会加载你的 shell 配置。

配置完全退出 Claude Desktop(包括系统托盘),重新启动,问 Claude "What cybersecurity tools do you have available?" 验证,应该能列出 8 个工具。


实际使用

csharp 复制代码
# 单个工具
Do a WHOIS lookup on example.com
Run DNS enumeration on github.com
Scan ports on scanme.nmap.org
Inspect the SSL certificate of stripe.com
Detect the tech stack of wordpress.org
Look up CVEs for apache 2.4.49
Look up CVEs for log4j 2.14.1
Check the reputation of IP 1.2.3.4

# 完整侦察
Do a complete security recon on reddit.com

# 深入分析
What are the top security risks based on the recon?
Is this SSL configuration adequate for a financial services company?
Cross-reference the open ports with known CVEs for the detected services.

port scan 只有 scanme.nmap.org 是公开允许测试的域名,其他域名只能扫描你自己拥有或有书面授权的系统。WHOIS、DNS、SSL、CVE 查询使用公开数据,可以对任意域名使用。


路线图上的东西

代码里还没有,但 README 里列了:Shodan 集成、证书透明度日志搜索(用于子域名发现)、HTTP 安全头深度分析器、钓鱼域名检测、批量多域名扫描、PDF 报告生成。

其中证书透明度搜索(crt.sh)值得期待,这是比 10 个固定子域名暴力猜测效率高得多的方式,能发现真实存在但未公开的子域名。


总结

把 5 个常用的网络安全侦察工具(加 CVE 查询和 IP 信誉)包装成 MCP 工具,让 Claude 可以在对话中直接调用并分析结果,整个 main.py 不到 400 行,逻辑清晰。

最有价值的部分是 full_recon 的并行设计,把本来需要分步骤、跨窗口操作的工作变成一个命令,然后让 Claude 做跨工具的综合分析,这是单独使用任何一个命令行工具做不到的。


项目地址:github.com/gaoharimran... 作者:Gaohar Imran

相关推荐
TokyoEric3 小时前
我在 Windows 上搭了个 13 人 AI 团队,踩了一路坑(OpenClaw 多 Agent 实战)
agent
宇图SHARE4 小时前
【RAG搭建纯干货】从零手搓本地知识库(第一篇):数据清洗流水线搭建指南
agent
这是谁的博客?4 小时前
LangChain 框架深度解析:从 LCEL 到 Agent 架构的核心原理
ai·架构·langchain·llm·agent·架构设计
后端小肥肠5 小时前
文章没人看?多半是标题的锅:我用 Codex + Obsidian 做了个爆款标题 Skill
人工智能·aigc·agent
不赶时间5 小时前
Claude Code 实战从配置到高效开发工作流
claude
是Yu欸5 小时前
CC-Switch 零基础保姆级教程1(2026 最新版)
网络·人工智能·网络协议·http·大模型·claude·claude desktop
一个处女座的程序猿5 小时前
Agent之Hermes:Hermes Agent的简介、安装和使用方法、案例应用之详细攻略
agent·hermes
MomentYY6 小时前
第 5 篇:Agent 记不住事?补上 Memory + RAG 检索
前端·python·agent