cemsid/hermes-security
GitHub: cemsid/hermes-security
一款基于Hermes大模型的自主漏洞扫描器,让非技术用户也能获得专业的网站安全审计与自动修复建议。
Stars: 0 | Forks: 0
# 🛡️ HERMES SECURITY — 自主漏洞扫描器
我的家庭正面临经济困难。
当我看到这次黑客马拉松时,我想 —— 也许我能做点什么。
我是为了钱参加的吗?是的,我很诚实。
但我也确实看到了一个问题,并想要解决它。
我从事 WordPress 网站工作已经很久了。
在搭建和维护客户网站的过程中,我总是看到同样的情况:
网站所有者根本不知道他们的网站暴露在多大的风险中。
进行安全审计要么太贵,要么太技术化。
*为什么每个人都不能了解自己网站的安全性呢?*
这个问题为我开启了 Hermes。
黑客马拉松最难的部分是让所有组件协同工作 ——
nmap、Hermes-4-405B、前端、Telegram、GitHub hunter、ArXiv、Excalidraw...
所有这些都要在真实服务器上同时运行。
当它成功运行时,我感到很自豪。但我仍然不完全满意。
那种感觉没有阻止我 —— 它让我继续构建。
🌐 **https://hermes-intel.duckdns.org**
## ⚕️ Hermes-4-405B — 在每一步做出决策的 AI
这不是一个简单的“扫描并显示结果”的工具。
Hermes-4-405B 在每个端点都处于活跃状态 —— 分析、学习、编写修复方案。
所有 AI 调用都通过 `inference-api.nousresearch.com/v1/chat/completions` 进行。主要模型是 **Hermes-4-405B**;如果失败,会自动回退到 **Hermes-3-70B**,然后是 **Hermes-3-8B**。每个端点都有不同的系统提示 —— 安全分析需要 JSON 输出,聊天模式使用自然语言,ArXiv 评论生成 2 句话摘要。运行参数为 `max_tokens: 8000`,`temperature: 0.3`,以确保输出一致且具技术性。
## 🔍 全量扫描 — 8 层实时分析流水线
`/api/full-scan` 端点通过单个 HTTP 请求运行 8 种不同的检查:
**1. 可达性 + SSL** — 通过 `requests.get()` 测试 HTTPS 连接。SSL 错误、连接错误和仅支持 HTTP 的情况会被分别捕获。检查 5 个关键 HTTP 安全头(CSP、X-Frame-Options、XCTO、HSTS、Referrer-Policy),并计算 `headers_score` 百分比。
**2. nmap 端口扫描** — 通过 `subprocess.run()` 调用真实的 nmap:`-T4 --open -sV -p 80,443,8080,8443,22,21,3306,5432,6379,27017`。输出通过正则表达式解析,提取端口/服务/版本。超时:15 秒。
**3. robots.txt 检查** — 根据 HTTP/HTTPS 状态使用正确的协议获取。验证存在性和内容长度。
**4. SSL 证书过期检测** — Python 的 `ssl` 和 `socket` 模块连接到 443 端口以检索证书。使用 `datetime` 解析 `notAfter` 字段,计算 `ssl_days_left` 和 `ssl_expiry`。
**5. DNS/IP 变更检测** — 通过 `socket.gethostbyname()` 获取当前 IP。与存储在 `/tmp/hermes-dns-{domain}.txt` 中的上次 IP 进行比较。如果更改,则返回 `dns_changed: true`。
**6. HTTP→HTTPS 重定向检查** — 发送带有 `allow_redirects=False` 的 HTTP 请求。对于 301/302/307/308 状态码,检查 `Location` 头是否包含 HTTPS 前缀。
**7. Google Safe Browsing** — 对 Google Transparency Report 进行简单的 GET 请求,搜索 `dangerous` 或 `malware` 关键词。执行黑名单检测。
**8. 篡改检测** — 主页前 5000 个字符的 MD5 哈希存储在 `/tmp/hermes-content-{domain}.txt` 中。每次扫描时进行比较。如果更改,则返回 `content_changed: true`。
所有这些数据在单个提示中发送给 Hermes-4-405B。模型返回包含 5-8 个详细 `findings`、`score`、`threat_assessment`、`critical_actions` 和 `auto_fix` 的 JSON。
## 🔬 38 项安全测试 — 独立的前端检查
除了后端数据外,还有 38 项独立的安全测试通过 `index.html` 中的 JavaScript 运行。每项测试返回 PASS / WARN / INFO:
- SSL/TLS 证书有效性和剩余天数
- HTTPS 重定向强制执行
- HTTP 安全头:CSP、X-Frame-Options、HSTS、X-Content-Type-Options、Referrer-Policy、Permissions-Policy
- 暴露的敏感文件:`.env`、`.git`、`wp-config.php`、`phpinfo.php`、`backup.zip`
- 目录列表检测
- 错误信息泄露
- URL 参数中的密码泄露
- SQL 注入被动检测
- XSS 反射检测
- 后台面板暴露(`/admin`、`/wp-admin`、`/administrator`)
- 备份文件检查(`.bak`、`.old`、`.backup`)
- 混合内容(HTTPS 页面上的 HTTP 资源)
- CORS 策略分析
- CSRF token 存在性
- 针对检测到的服务版本的 CVE 数据库查询
- HTTP/2 和 HTTP/3 支持
- Cookie 安全标志(Secure、HttpOnly、SameSite)
- 点击劫持保护
- 内容嗅探保护
- 以及更多
## ⚡ delegate_task — 真正的并行 Agent 架构
`/api/delegate` 端点使用 Python `threading.Thread`。为每个域名生成一个独立的线程 —— 最多 3 个并行 agent。每个线程独立运行 nmap 扫描并向 Hermes-4-405B 发送单独的分析请求。线程以 90 秒超时进行 join。结果收集在 `results` 字典中,并作为单个 JSON 响应返回。
如果 API 无法访问,浏览器端回退机制会自动激活:根据 SSL 存在性生成基本分数,用户不会看到错误。
## 🤖 自主 Issue Hunter — 灵感源自 Symphony #404
`_issue_hunter_loop()` 函数在后台守护线程中运行。即使页面刷新,它也会继续运行。
**流程:**
1. `_fetch_github_issues()` — 向 GitHub API 发送 `GET /repos/{owner}/{repo}/issues`。按 `state=open` 和指定标签进行过滤。
2. **认领** — 未认领的 issue 被添加到 `_issue_hunter_state['claimed']` 字典中。`_add_label()` 将 `hermes-claimed` 标签附加到 GitHub issue 上。
3. **Hermes 分析** — Issue 标题和正文发送给 Hermes-4-405B。模型返回包含以下内容的 JSON:`understood`、`root_cause`、`fix_type`(patch/nginx_config/bash_script)、`fix_code`、`test_commands`、`confidence`(HIGH/MEDIUM/LOW)、`estimated_effort`(S/M/L/XL)、`pr_title`。
4. **CI 模拟** — 如果 `confidence` 为 HIGH 或 MEDIUM,则 CI PASS;如果为 LOW,则 CI FAIL。模拟真实的 CI 流水线行为。
5. **PR 评论** — `_post_github_comment()` 向 GitHub issue 发布评论,包含修复代码、测试命令和 CI 结果。
6. **轮询** — 循环在配置的间隔(默认:60 秒)后重复。
**一次性测试** — `/api/issue-hunter/analyze-one` 端点允许分析任何 issue 标题 + 正文对,无需实时仓库连接。
## 📡 域名情报 — 被动侦察引擎
`/api/domain-intel` 端点从 4 个来源收集数据:
- **crt.sh** — 通过证书透明度日志发现子域名。使用 `q=%.{domain}` 模式获取所有证书。从 `name_value` 字段解析子域名。返回最多 40 个唯一子域名。
- **Google DoH (DNS over HTTPS)** — 从 `dns.google/resolve` API 获取 A、AAAA、MX、NS、TXT、CNAME 记录。无外部库 —— 纯 HTTP 请求。
- **SSL 证书详情** — Python `ssl` + `socket` 模块连接到 443 端口以检索证书。提取主题、颁发者、notBefore、notAfter、SAN 列表(最多 15 条)、版本和剩余天数。
- **Hermes AI 风险分析** — 所有数据合并到单个提示中发送给 Hermes。返回 `risk_level`、`exposure_score`、`key_findings`、`recommendations`、`summary`。
## 📄 ArXiv 集成 — 学术 CVE 研究
`/api/arxiv-search` 端点使用 ArXiv Atom API。`search_query` 参数构建为 `all:{term} AND (cat:cs.CR OR cat:cs.NI OR cat:cs.SE)`。涵盖类别:`cs.CR`(密码学与安全)、`cs.NI`(网络与互联网架构)、`cs.SE`(软件工程)。
XML 响应使用 `xml.etree.ElementTree` 解析。对于每篇论文:提取标题、摘要(400 字符)、链接、PDF 链接、发布日期和前 3 位作者。PDF 链接通过将 URL 中的 `abs` 转换为 `pdf` 自动生成。
Hermes-4-405B 为排名靠前的结果生成 2 句话的相关性评估。
## 🗺️ Excalidraw 图表 — AI 驱动的网络地图
`/api/diagram` 端点完全在 Python 中生成 Excalidraw JSON —— 无外部库。
`rect()`、`text()`、`arrow()` 函数生成 Excalidraw 元素格式的字典。每个元素包含唯一的 ID 计数器、`versionNonce`、`boundElements`、`strokeColor`、`backgroundColor`、`roundness` 和所有必需字段。
颜色编码:分数 ≥80 → `#00875a`(绿色),≥60 → `#ff991f`(橙色),≥40 → `#ff7452`,<40 → `#de350b`(红色)。风险端口(21、22、23、3306、5432、6379、27017)为红色;安全端口为蓝色。严重/高危发现显示在单独的框中,通过箭头连接到服务器。
输出可导出为 `.excalidraw` 或 `.svg`。Hermes AI 生成 2-3 句话的图表架构分析。
## 🧠 技能系统 — 持久化记忆
每次扫描后,Hermes-4-405B 在 `skill_learned` 字段中生成一条安全规则。此规则通过 `tg_bot.py` 写入 `/var/www/html/hermes-skills.json`。保留最近 50 条技能。技能也会追加到 `/root/.hermes/memories/MEMORY.md`。
`/api/skills` GET 端点返回所有技能。在前端的 Schedule & Skills 标签页中按域名分组显示。
## ✈️ Telegram 集成
双层 Telegram 系统:
**1. tg_bot.py** — 使用长轮询的独立 Python bot。处理 `/scan`、`/summary`、`/findings`、`/domainintel`、`/arxiv` 命令。每位用户最后 10 条消息存储在 `chat_histories` 字典中。非命令消息路由到 `/api/chat`,与 Hermes-4-405B 进行自然语言对话。
**2. hermes-addons.js** — 前端的 Telegram 按钮调用 `sendTelegramAlert()`。分数、风险条、SSL 状态、主要发现、域名情报和 ArXiv 结果以 Markdown 格式 POST 到 `api.telegram.org/bot{TOKEN}/sendMessage`。
## ⏰ 每日晚间 Cron — 个性化自动扫描
`/api/cronjob` 端点为每位用户动态生成 bash 脚本,并将其注册到 crontab 中。脚本名称格式:`hermes-scan-{domain}-{chat_id}.sh` —— 每个用户/域名对唯一。
多用户自动错峰:统计现有的 `hermes-scan-` 条目,每个新条目偏移 2 分钟(02:00、02:02、02:04...)。日志文件单独保存在 `/var/log/hermes-scan-{domain}.log`。
在每个脚本内部,所有值都通过 Python3 单行命令从 `/api/full-scan` 输出中解析:分数、严重/高/中/低计数、端口列表、HTTPS 状态、SSL 过期时间、DNS IP、篡改状态、Google 黑名单。
## 🔧 SWE Agent — 自动修复生成
`/api/swe-agent` 端点接收漏洞 + 目标域名,并指派 Hermes-4-405B 扮演“mini-swe-agent”角色。模型生成:
- `understanding` — 漏洞存在的原因
- `fix_type — nginx_config / bash_script / code_patch
- `fix_code` — 完整、可部署的修复代码
- `test_commands` — 用于验证修复的命令列表
- `before_after` — 易受攻击配置与安全配置的对比
- `confidence` — HIGH / MEDIUM / LOW
在前端,点击任何发现旁边的“Auto-Fix”按钮会调用此端点并立即显示结果。
## 📊 PDF 导出
jsPDF 库在 `hermes-addons.js` 内部使用。深色主题:背景 `#040c10`,顶部栏 `rgba(0,255,136,0.15)`,分数颜色动态变化。分数环绘制为 SVG。通过 `data-hermes-{level}` 属性从 DOM 读取漏洞计数。日志行根据 OK/WARN/ERROR 状态进行颜色编码。文件名自动生成为 `hermes-report-{domain}-{timestamp}.pdf`。
## 💎 钱包卫士 — 链上安全分析
通过 Etherscan API 获取实时链上数据:ETH 余额、交易计数、代币列表、钱包年龄。概览、交易和代币/NFT 标签页分开显示。所有数据发送给 Hermes-4-405B 进行行为风险分析。风险分数从 0-100 计算,确定钱包画像(HODLer、Trader、Suspicious 等)。
## 🏗️ 技术栈
```
Backend → Python 3 / Flask / Flask-CORS / gunicorn (4 workers)
AI → Hermes-4-405B (primary) → Hermes-3-70B → Hermes-3-8B (fallback)
AI API → inference-api.nousresearch.com/v1/chat/completions
Port Scan → nmap (-T4 --open -sV)
DNS → Google DoH (dns.google/resolve)
Subdomains → crt.sh certificate transparency
ArXiv → export.arxiv.org Atom API + xml.etree.ElementTree
Diagram → Native Python Excalidraw JSON generation
PDF → jsPDF (browser-side)
Blockchain → Etherscan API
Bot → Python requests + long polling
Infra → Ubuntu 24, nginx reverse proxy, systemd, crontab
Frontend → Vanilla JS, dark terminal UI
```
作为一名学生,我参加这次黑客马拉松的原因既有个人的也有技术的。
但最终,呈现出的成果超越了我自己。
*安全应该对不懂终端的人触手可及。*
*任何拥有 WordPress 网站的人都应该能够使用它。*
*Hermes 让这成为可能。*
🌐 **https://hermes-intel.duckdns.org**
⚕️ **由 Hermes-4-405B 驱动 — Nous Research**
标签:AI安全, Chat Copilot, ESC4, Hermes-4-405B, Nmap, Nous Research, OSINT, Python, SSL证书检测, WordPress安全, 加密, 动态插桩, 后端开发, 威胁建模, 密码管理, 插件系统, 操作系统监控, 数据可视化, 无后门, 智能安全分析, 漏洞修复建议, 漏洞扫描器, 网站安全检测, 网络安全, 自动化渗透测试, 虚拟驱动器, 资产侦察, 逆向工具, 防御性安全, 隐私保护, 黑客马拉松