astolica/SweetSting

GitHub: astolica/SweetSting

一个基于 Python 的轻量级蜜罐与金丝雀凭证框架,通过伪造登录页面和投放陷阱凭据来检测威胁行为并实时告警。

Stars: 1 | Forks: 0

# SweetSting “兵者,诡道也。故能而示之不能,用而示之不用,近而示之远,远而示之近。” ― 孙子,《孙子兵法》 一个基于 Python 的蜜罐与欺骗框架。SweetSting 暴露一个伪造的路由器管理员登录页面,记录凭证提交情况,并在植入的伪金丝雀凭证被使用时触发警报。专为在通过 Cloudflare Tunnel 暴露的 Raspberry Pi 4 上部署而设计。 ### SweetSting 目前没有用于安装的 bash 文件,预计将在 2026 年 5 月 5 日之后的约 2 周内实现。 ## 工作原理 1. 攻击者找到暴露的登录页面并提交凭证。 2. 在访问网站时,会触发一个 CanaryToken,将信息发送给操作员。 3. 每次尝试都会记录到 MySQL 数据库中(IP、user agent、用户名、密码、时间戳)。 4. 如果提交的凭证与植入的伪金丝雀对匹配,将通过电子邮件和/或 webhook 发送警报。 5. 攻击者会看到一个伪造的 nginx 503 错误页面,什么也得不到。 6. 实时终端仪表板允许操作员实时监控活动。 ## 项目结构 ``` sweetsting/ ├── alerting/ │ └── alerting_engine.py # Email and webhook alert dispatch ├── canaries/ │ └── canary_checker.py # Checks submissions against canary DB table ├── dashboard/ │ └── dashboard.py # Rich terminal dashboard (live feed + canary status) ├── database/ │ ├── db_Models.py # SQLAlchemy table definitions │ ├── db_setup.py # Creates database tables │ └── seed_canaries.py # Seeds canary credentials from canaries.json ├── portal/ │ ├── app.py # Flask app - serves login page, logs attempts │ └── templates/ │ ├── login.html # Fake OpenWrt LuCI login page │ └── 503.html # Fake nginx error page served post-submission ├── setup.sh # One-command deployment script ├── canaries.json # Your canary credential pairs (gitignored) ├── canaries.example.json # Template - copy this to canaries.json ├── .env # Your secrets and config (gitignored) ├── .env.example # Template - copy this to .env ├── .gitignore └── requirements.txt ``` ## 前置条件 在运行 `setup.sh` 之前,请在目标机器上手动完成以下操作。 **安装 MySQL / MariaDB 并创建数据库:** ``` sudo apt-get install mariadb-server sudo mysql ``` ``` CREATE DATABASE sweetsting; CREATE USER 'sweetsting_user'@'localhost' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON sweetsting.* TO 'sweetsting_user'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` 记下数据库名称、用户名和密码 - 在填写 `.env` 时会用到它们。 ## 安装设置 ``` chmod +x setup.sh ./setup.sh ``` 该脚本会处理系统依赖、Python 虚拟环境、配置文件脚手架、表创建和金丝雀种子植入。它会暂停两次,以便在继续之前填写 `.env` 和 `canaries.json`。 ## 配置 ### `.env` 将 `.env.example` 复制到 `.env` 并填写每个值。 | 变量 | 描述 | |---|---| | `DB_HOST` | 数据库主机。如果在同一台机器上运行,请使用 `localhost`。 | | `DB_PORT` | 数据库端口。默认为 `3306`。 | | `DB_NAME` | 您创建的数据库名称(例如 `sweetsting`)。 | | `DB_USER` | 您创建的 MySQL 用户。 | | `DB_PASSWORD` | 该用户的密码。 | | `ALERT_EMAIL_ENABLED` | 设置为 `true` 以启用电子邮件警报,设置为 `false` 以禁用。 | | `SMTP_HOST` | 您的邮件提供商的 SMTP 服务器(例如 `smtp.gmail.com`)。 | | `SMTP_PORT` | SMTP 端口。使用 `587` 进行 TLS 加密。 | | `SMTP_USER` | 发送警报的 Gmail 地址(或其他账户)。 | | `SMTP_PASS` | 对于 Gmail:是一个 16 个字符的应用专用密码,而不是您的账户密码。应用专用密码可在“安全”设置下的 myaccount.google.com 生成。 | | `ALERT_RECIPIENT` | 接收警报的地址。可以与 `SMTP_USER` 相同。 | | `ALERT_WEBHOOK_ENABLED` | 设置为 `true` 以启用 webhook 警报,设置为 `false` 以禁用。 | | `WEBHOOK_URL` | 您的 Discord 或 Slack 传入 webhook URL。两者均受支持。 | 至少应将一个警报通道(`ALERT_EMAIL_ENABLED` 或 `ALERT_WEBHOOK_ENABLED`)设置为 `true`。如果两者都为 `false`,金丝雀命中将被记录在数据库中,但您不会收到通知。 ### `canaries.json` 将 `canaries.example.json` 复制到 `canaries.json`,并用您的真实金丝雀凭证对替换占位符条目。 格式: ``` [ {"username": "admin", "password": "uniquepassword1", "source": "github_fake_env"}, {"username": "admin", "password": "uniquepassword2", "source": "pastebin_drop"} ] ``` **每个密码必须是唯一的。** `source` 字段用于标识该凭证对的植入位置。当金丝雀被触发时,警报会包含来源信息,以便您确切知道哪个投放位置被爬取了。 建议的投放位置: - 公开的 GitHub 仓库 - 带有硬编码凭证的伪造 `.env` 文件或 `config.py`(此类内容经常被爬取)。 - Pastebin - 格式化为看起来像意外凭证泄露的帖子。 - PDF 文档 - 格式化为列出默认凭证的内部 IT 文档。 - LinkedIn 简历或作品集网站 - 作为金丝雀的“演示登录”。 - 公开 Gist 上的伪造 `docker-compose.yml`。 - 伪造的 `~/.aws/credentials` 文件。 GitHub 和 Pastebin 是产出最高的起点,因为这两个平台都会被自动凭证收集工具主动爬取。 ## Canarytoken Web Bug `login.html` 包含一个指向 Canarytokens.org Web bug URL 的隐藏 1x1 像素图像标签。这在任何人加载登录页面的瞬间就会触发,甚至在凭证提交之前就为您提供警报。 要进行此设置: 1. 访问 [canarytokens.org](https://canarytokens.org) 并生成一个“Web bug / URL token”。 2. 复制生成的 URL。 3. 打开 `portal/templates/login.html` 并将 `YOUR_CANARYTOKEN_URL` 替换为您的 token URL。 这将为您提供一个双点攻击者时间线:页面在 X 时间被访问,凭证在 Y 时间被提交。 ## 运行 SweetSting 从项目根目录在两个单独的终端中启动它们。 注意:拥有 2 个终端有助于提高可见性 **终端 1 - 蜜罐门户:** ``` source venv/bin/activate && python portal/app.py ``` **终端 2 - 操作员仪表板:** ``` source venv/bin/activate && python dashboard/dashboard.py ``` 门户默认在端口 `5000` 上运行。仪表板每 5 秒自动刷新一次。按 `Ctrl+C` 停止任一进程。 ## 自定义 **更改登录页面的外观** `portal/templates/login.html` 采用 OpenWrt LuCI 界面的样式。您可以将其重新样式化为您想要冒充的任何登录页面。唯一必须保持不变的是表单字段名称(`entered_username`、`entered_password`)和表单操作(`action="/" method="post"`)。 **更改登录后页面的外观** `portal/templates/503.html` 显示一个伪造的 nginx 503 错误。您可以将其替换为任何页面 - 页面刷新、不同的错误或伪造的“密码错误”消息。通过编辑模板或更改 `app.py` 在 POST 后渲染的内容来实现。 **调整仪表板** `dashboard/dashboard.py` 中的列样式可以从 `"white"` 或 `"dim"` 更改为 Rich 支持的任何颜色名称(例如 `"cyan"`、`"yellow"`、`"green"`)。日志限制默认为 20 行,可以通过向 `get_recent_logs()` 传递不同的 `limit` 值来更改。 **更改警报电子邮件的主题或正文** 主题行和正文文本位于 `alerting/alerting_engine.py` 的 `send_email_alert()` 中。webhook 消息格式在 `send_webhook_alert()` 中。两者都是纯字符串,可以自由编辑。 ## 技术栈 | 组件 | 技术 | |---|---| | 语言 | Python 3 | | Web 框架 | Flask | | 数据库 ORM | SQLAlchemy 和 PyMySQL | | 数据库 | MySQL / MariaDB | | 警报 | smtplib(电子邮件),requests(webhook) | | 终端仪表板 | Rich | | 环境管理 | python-dotenv | | 部署目标 | Raspberry Pi 4 + Cloudflare Tunnel |
标签:AMSI绕过, BOF, CanaryToken, CISA项目, Cloudflare Tunnel, ETW劫持, Flask, IP 地址批量处理, osquery, Python, Raspberry Pi, SQLAlchemy, Webhook, 仪表盘, 内存执行, 凭证监控, 力导向图, 威胁检测, 底层分析, 开源安全项目, 攻击者诱捕, 攻击行为分析, 无后门, 日志记录, 欺骗防御, 网络安全, 蜜标, 蜜罐, 证书利用, 路由器管理页面, 运维安全, 邮件告警, 隐私保护