PushpikaS/Deception-Threat-Intelligence-Platform
GitHub: PushpikaS/Deception-Threat-Intelligence-Platform
一个通过部署仿真企业蜜罐来捕获攻击者行为并将其自动转化为结构化威胁情报的安全欺骗平台,具备事件分类、MITRE 映射、风险评分和可视化仪表板。
Stars: 0 | Forks: 0
# 基于欺骗的威胁情报平台
一个**安全欺骗与威胁情报平台**。它通过伪装成真实的企业网站(登录页面、管理面板、API)来吸引并研究攻击者,然后将每一次探测转化为结构化的情报,您可以在私有分析仪表板上查看这些情报。
**三个层级:** 欺骗(Go 蜜罐) → 情报(Python 引擎) → 可视化(React 仪表板 + FastAPI)。
## 换句话说
想象一下,您设立了一栋与真实大楼一模一样的虚假办公大楼。试图打开假门的窃贼会被摄像头监视。每一次尝试——他们尝试了哪扇门、使用了什么工具、从哪里来——都会被自动记录并评分。
HoneyPot+ 在互联网上就是这样做的:
1. **攻击者**访问 `http://localhost:8080` —— 他们会看到看起来很真实的登录页面、管理仪表板和 API。
2. **每个请求**都会被记录在数据库中。他们所做的任何操作都不会影响您的真实系统。
3. **后台引擎**读取这些日志,标记攻击(SQL 注入、暴力破解、扫描器等),将它们映射到 MITRE ATT&CK,并进行风险评分。
4. **您**在**独立的私有端口**上打开 `http://localhost:9090`,查看地图、时间轴、配置文件和导出数据。
蜜罐面和分析仪表板在网络边缘是**物理隔离的**(不同的 nginx 网关和端口)。探测 `/login` 的攻击者无法发现该仪表板。
## 快速开始
```
cp .env.example .env
docker compose up --build -d
```
| 接口 | HTTP(使用此项) | 使用者 |
|---------|-----------------|-------------|
| **蜜罐**(公开欺骗) | `http://localhost:8080/login` | 攻击者、扫描器、红队 |
| **仪表板**(私有情报) | `http://localhost:9090` | 安全分析师 |
HTTP 通信。Go 和 Python 服务在 Docker 内部使用普通的 HTTP 进行通信。
**模拟攻击:**
```
./scripts/simulate-attacks.sh # Linux/macOS
.\scripts\simulate-attacks.ps1 # Windows
```
事件会在约 2 秒内出现在仪表板上(引擎每 2 秒轮询一次)。
**验证技术栈**(以下三项均应通过):
```
.\scripts\simulate-attacks.ps1 # generate classified events
.\scripts\test-all-endpoints.ps1 # 104 dashboard + honeypot endpoint checks
.\scripts\verify-production.ps1 # auth, honeytokens, microservice health
.\scripts\test-smoke.ps1 # quick subset smoke test
```
**红队 / 攻击者进入路径:** 请参阅 [ATTACKER_ENTRY_GUIDE.md](ATTACKER_ENTRY_GUIDE.md)。
## 技术栈
| 层级 | 技术 | 版本 | 角色 |
|-------|------------|---------|------|
| **欺骗** | Go | 1.22 | 蜜罐微服务(`honeypot-auth`、`honeypot-web`、`honeypot-api`) |
| **事件总线** | Redis Streams | 7 | `redis-events` 上的 `honeypot:events` 流 |
| **接入** | Python + asyncpg | 3.12 | `threat-ingest` — 流消费者 → `postgres-events` |
| **引擎** | Python + asyncpg | 3.12 | `threat-engine` — 分类、地理位置、MITRE、风险评分 |
| **API** | FastAPI + uvicorn | 3.12 | `threat-api` — 用于仪表板的 REST |
| **UI** | React + Vite | 20 / 5 | 分析师仪表板(`frontend`) |
| **事件数据库** | PostgreSQL | 16 | `postgres-events` — 不可变的事件日志 |
| **情报数据库** | PostgreSQL | 16 | `postgres-intel` — 配置文件、分类、攻击链 |
| **防御状态** | Redis | 7 | `redis-defense` — 蜜罐会话、WAF、锁定 |
| **平台状态** | Redis | 7 | `redis-platform` — 仪表板会话 + API 缓存 |
| **网关** | nginx | 1.27 | HTTP 路由、速率限制 |
| **编排** | Docker Compose | — | 14 个服务、健康检查、命名卷 |
**共享库(非独立部署件):** `services/shared/` (Go), `shared/` (Python MITRE、分类法、生产环境检查、陷阱注册表)。
**设计原则:** 每个服务一个数据库、每个限界上下文专用的 Redis、Python 全局异步 I/O、连接池、Redis 响应缓存(30秒)、事务性引擎批处理、幂等分类插入。
## 系统概览
```
INTERNET / ATTACKERS
│
▼
┌─────────────────────────┐
│ nginx-honeypot │ :8080 HTTP
│ login · admin · /api/v1 │
└───────────┬─────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
honeypot-auth honeypot-web honeypot-api
(login/MFA) (admin/traps) (fake REST)
│ │ │
└────────────────┼────────────────┘
│ XADD stream
▼
┌─────────────────┐
│ redis-events │
└────────┬────────┘
│
▼
┌─────────────────┐
│ threat-ingest │ stream → postgres-events
└────────┬────────┘
│
▼
┌─────────────────┐
│ postgres-events │
└────────┬────────┘
│ polls every 2s
▼
┌─────────────────┐
│ threat-engine │ classify · geo · risk · chains
└────────┬────────┘
│
▼
┌─────────────────┐
│ postgres-intel │
└────────┬────────┘
│
┌───────────┴───────────┐
▼ ▼
┌──────────────┐ ┌─────────────┐
│redis-platform│ │ threat-api │
│ sessions+cache│ │ (FastAPI) │
└──────────────┘ └──────┬──────┘
│
ANALYSTS ONLY ▼
┌─────────────────────────┐
│ nginx-dashboard │ :9090 HTTP
│ React UI + /api/* │
└─────────────────────────┘
```
| 服务 | 语言 | 角色 | 暴露于互联网? |
|---------|----------|------|----------------------|
| `nginx-honeypot` | nginx | 欺骗网关,速率限制 | 是 (8080) |
| `nginx-dashboard` | nginx | 仪表板网关 | 否(保持私有) |
| `honeypot-auth` | Go | 伪造登录、MFA、OAuth、LDAP(HTML 在 `templates/` 中) | 仅通过蜜罐 nginx |
| `honeypot-web` | Go | 伪造管理界面、扫描器陷阱、honeyfiles | 仅通过蜜罐 nginx |
| `honeypot-api` | Go | 伪造 REST API、honeytoken 检测 | 仅通过蜜罐 nginx |
| `threat-ingest` | Python | Redis 流 → postgres-events | 从不 |
| `threat-engine` | Python | 分类事件 → postgres-intel | 从不 |
| `threat-api` | Python/FastAPI | 用于仪表板的 REST API | 仅通过仪表板 nginx |
| `frontend` | React | 分析师 UI(刷新 + 实时 WebSocket) | 仅通过仪表板 nginx |
| `postgres-events` | PostgreSQL 16 | 仅原始蜜罐事件 | 仅内部 |
| `postgres-intel` | PostgreSQL 16 | 配置文件、分类、攻击链 | 仅内部 |
| `redis-events` | Redis 7 | 事件总线流 | 仅内部 |
| `redis-defense` | Redis 7 | 蜜罐会话 + 守卫状态 | 仅内部 |
| `redis-platform` | Redis 7 | 仪表板会话 + API 缓存 | 仅内部 |
## 攻击是如何发生的(逐步说明)
1. **攻击者**请求 `http://localhost:8080/.env`
2. **nginx-honeypot** 应用速率限制,将其转发给 `honeypot-web`
3. **honeypot-web** 提供一个逼真的虚假 `.env` 文件(honeytoken 诱饵)并记录一个事件:
- IP、方法、endpoint、user-agent、payload(陷阱名称、WAF 命中等)
4. **threat-ingest** 将该行写入 `postgres-events`
5. **threat-engine**(在约 2 秒内)读取新事件,将其分类到 `postgres-intel` 中:
- **事件级:** 针对此特定请求的 `env_leak`
- **会话上下文:** 如果同一个 IP 访问了许多 endpoint,则为 `port_scanner`
6. 引擎更新 `attacker_profiles`(风险评分、地理位置、MITRE 标签),如果命中了多个服务,还会更新 `attack_chains`
7. **threat-api** 向仪表板提供丰富的数据
8. **您**在事件流中看到该事件,在威胁地图上看到该 IP,并在配置文件中看到 MITRE 技术
## 微服务架构
每个限界上下文都有**其独立的数据存储** —— 服务之间没有共享的 Postgres 或 Redis。
```
honeypot-* → redis-events (stream) → threat-ingest → postgres-events
↓
threat-engine → postgres-intel
↑
threat-api / dashboard ← redis-platform (sessions + cache)
honeypot-* sessions ← redis-defense (isolated)
```
### 欺骗层(Go)
**事件总线:** 蜜罐服务发布到 **redis-events**(`honeypot:events` 流)。会话和 WAF 状态仅使用 **redis-defense**。它们从不接触 PostgreSQL 或分析师技术栈。
三个独立的 Go 二进制文件共享 `services/shared/` 下的包:
| 包 | 用途 |
|---------|---------|
| `shared/events` | 结构化事件记录器 → redis-events 流 |
| `shared/defense` | 会话、锁定、WAF 模式、honeytoken 注册表 |
**honeypot-auth** (`:8082`) — 伪造的企业认证:
- HTML 登录/注册/MFA/SSO 页面(`templates/` 通过 `go:embed` 引入) — 通用的企业文案,表单上没有密码规则提示
- JSON API:`/auth/login`、`/auth/mfa/verify`、OAuth、LDAP 绑定模拟
- 基于 Redis 的会话和暴力破解锁定
- 分析师测试路径(仅在服务端,UI 中不显示):`admin@acmecorp.com` / `password123` / MFA `482910`
**honeypot-web** (`:8080`) — 伪造的内部应用:
- `/admin` 控制台:仪表板、用户、设置、日志、计费、API 密钥、安全、集成
- 扫描器陷阱:`/.env`、`/.git/HEAD`、`/actuator/*`、`/swagger.json`、Jenkins/Jira 诱饵
- `/status` 侦察页面、`/downloads/exports/*` 存储工件、错误页面
**honeypot-api** (`:8081`) — 伪造的 REST API:
- `/api/v1/users`、`/api/v1/search`、`/api/v1/webhooks` 等
- 检测查询参数中的 SQLi、XSS、路径遍历、RCE 模式
- 当 webhook payload 中出现伪造的 AWS 密钥时触发 honeytoken
### 情报层(Python)
**threat-engine** — 长期运行的工作进程(无 HTTP):
- 分批轮询 `events` 表(默认 100 个事件 / 2秒)
- 具有幂等分类插入功能的**事务性批处理**
- GeoIP 丰富:**MaxMind GeoLite2**(离线,可选)或 **IP-API** HTTP 后备 — 无需 API 密钥
- `classifier.py` 中的单一风险评分路径(速度、衰减、ASN 汇总)
- 在 Redis `tip:live` 上发布实时更新,供仪表板 WebSocket 使用
- 写入:`threat_classifications`、`attacker_profiles`、`attack_chains`、`asn_intel`
**threat-ingest** — 流消费者(无 HTTP):
- 从 **redis-events** 读取 `honeypot:events`
- 通过消费者组 `threat-ingest` 将行写入 **postgres-events**
- 轮询间隔默认为 1秒;与分类解耦
**threat-api** — FastAPI REST (`:8000`):
- 双数据库连接池:`events_pool` + `intel_pool`
- **redis-platform** 上的服务端会话(`hp_session` cookie)
- 脚本的 HTTP Basic Auth 后备(`curl -u`)
- Redis 响应缓存(30秒 TTL);CORS 限制为仪表板源
### 可视化层(React)
**frontend** — 单页仪表板:
- 每 10 秒轮询核心 API endpoint;**WebSocket** (`/api/ws/live`) 在有新事件时触发静默刷新
- **受攻击最多的国家**、**ASN 汇总**、全球威胁地图(英文标签,色彩丰富的 Carto + Esri 叠加)
- 全局搜索、热力图、MITRE 指南、带有 STIX/黑名单导出的配置文件模态框
- 每个事件分别显示事件级和会话上下文威胁标签
### 网关
**nginx-honeypot** — 公开欺骗入口:
- HTTP 80 → 主机 `8080`
- 速率限制:认证 8/s,API 18/s,全局 30/s
- 阻止非 `/api/v1/` 的 `/api/` 路径(防止仪表板 API 泄露)
**nginx-dashboard** — 私有分析师入口:
- HTTP 80 → 主机 `9090`
- 代理 `/` → React,`/api/*` → threat-api(去除前缀)
## 数据模型
Schema 分布在两个 PostgreSQL 实例中(没有跨数据库外键):
**postgres-events** (`db/events/init.sql`):
| 表 | 存储内容 |
|-------|----------------|
| `events` | 原始蜜罐请求(不可变日志) |
**postgres-intel** (`db/intel/init.sql`):
| 表 | 存储内容 |
|-------|----------------|
| `threat_classifications` | 每个事件的标签(SQLi、env_leak 等) + JSON 详情中的 MITRE |
| `attacker_profiles` | 每个 IP 一行:风险评分、地理位置、行为标签、`metadata` 中的会话上下文 |
| `attack_chains` | 每个 IP 的多服务攻击序列 |
| `asn_intel` | 来自 GeoIP + 蜜罐风险的 ASN 汇总(IP、事件、平均风险) |
| `engine_state` | 引擎游标(`last_processed_event_id`) |
**分类范围:**
| 范围 | 存储位置 | 示例 | 显示在事件行中? |
|-------|--------------|----------|---------------------|
| **事件级** | `threatifications` | `sqli_attempt`、`env_leak`、`scanner_tool` | 是 |
| **会话上下文** | `attacker_profiles.metadata.context_classifications` | `port_scanner`、`credential_stuffing`、`cross_service_probe` | 在配置文件上;在事件 UI 中为次要显示 |
这种分离防止了 SQLi 事件也在同一行显示 `port_scanner` —— 会话上下文反而会出现在攻击者配置文件中。
## 威胁分类与 MITRE
规范的 MITRE 映射:**`shared/mitre.py`**(在 Python 容器中复制为 `shared_mitre.py`)。仪表板通过 `GET /api/mitre/map` 加载它 —— 前端没有重复的映射。
| 分类 | 含义 |
|----------------|---------------|
| `sqli_attempt` | 参数中的 SQL 注入 |
| `xss_attempt` | 跨站脚本模式 |
| `path_traversal` | 目录遍历(`../`) |
| `rce_attempt` | 远程代码执行探测 |
| `env_leak` / `config_leak` | 触发了敏感文件陷阱(`.env`、`config.json`) |
| `git_exposure` / `backup_leak` | 源代码/备份文件探测 |
| `honeytoken_trigger` | 在请求中使用了伪造的凭据 |
| `brute_force` | 反复登录 / 锁定 |
| `credential_stuffing` | 来自同一个 IP 的多个唯一电子邮件 |
| `scanner_tool` | 已知的扫描器 user-agent(sqlmap、nikto 等) |
| `port_scanner` | 来自同一个 IP 的高 endpoint 多样性 |
| `cross_service_probe` | 跨多个蜜罐服务的命中 |
| `reconnaissance` | 通用探测后备 |
| `benign_session` | 合法的分析师登录流程(无 MITRE) |
**风险评分**结合了加权分类 + 请求速度 + 时间衰减,并与之前的分数(0–100)混合。
## 仪表板指南
启动技术栈后打开 `http://localhost:9090`。使用仪表板凭据登录(默认本地:`analyst` / `changeme_local_only`)。
| 区域 | 可见内容 |
|---------|--------------|
| **系统健康状态** | postgres-events、postgres-intel、redis-platform、引擎延迟 |
| **统计卡片** | 总事件数、配置文件数、高风险计数 |
| **趋势统计** | 7天 / 30天 数量及高风险差值 |
| **受攻击最多的国家** | 柱状图 + 排名表(24小时 / 48小时 / 7天) |
| **ASN 汇总** | 按平均风险排名的顶级 ASN(来自 GeoIP,无外部源) |
| **全局搜索** | 搜索 IP、endpoint、分类 |
| **MITRE 指南** | 来自实时映射的技术参考 |
| **攻击时间轴** | 每小时事件量 |
| **威胁地图** | 验证过的地理位置图钉、精度环、起点侧边栏、风险过滤器 |
| **攻击者配置文件** | 包含风险、地理位置、标签、黑名单导出的可排序表 |
| **事件流** | 带有每个事件威胁 + MITRE 单元格的实时信息流 |
| **攻击链** | 跨服务序列 |
点击任何 IP 即可打开 **配置文件详情模态框**,其中包含完整的事件历史记录和上下文分类。
## API 参考
所有 endpoint 在仪表板端口上都有 `/api/` 前缀(nginx 在转发给 threat-api 之前会去除该前缀)。受保护的路由需要 `hp_session` cookie(通过 `POST /api/auth/login` 登录)或 HTTP Basic Auth。
| Endpoint | 认证 | 描述 |
|----------|------|-------------|
| `GET /api/health` | 否 | postgres-events + postgres-intel + redis-platform 健康状况 |
| `GET /api/health/platform` | 是 | 引擎延迟、配置文件计数 |
| `GET /api/auth/config` | 否 | 认证模式元数据 |
| `POST /api/auth/login` | 否 | 创建会话 |
| `POST /api/auth/logout` | 是 | 注销会话 |
| `GET /api/auth/session` | Cookie | 会话状态 |
| `GET /api/auth/me` | 是 | 当前分析师身份 |
| `GET /api/stats/overview` | 是 | 汇总统计(缓存) |
| `GET /api/stats/trends` | 是 | 时间序列趋势 |
| `GET /api/stats/countries?hours=24&limit=8` | 是 | 按事件量计算受攻击最多的国家 |
| `GET /api/stats/asn?limit=10` | 是 | ASN 汇总(平均风险、恶意命中) |
| `WS /api/ws/live` | 否* | 实时引擎事件(仪表板自动连接) |
| `GET /api/events?limit=50` | 是 | 带有分类的近期事件 |
| `GET /api/profiles/search` | 是 | 过滤/排序配置文件(`?q=&min_risk=&sort=risk`) |
| `GET /api/profiles/{ip}` | 是 | 配置文件详情 + 事件 + 分类 |
| `GET /api/profiles/{ip}/timeline` | 是 | 每个 IP 的每小时时间轴 |
| `GET /api/search?q=` | 是 | 全局搜索 |
| `GET /api/chains` | 是 | 攻击链 |
| `GET /api/timeline?hours=24` | 是 | 每小时时间轴 |
| `GET /api/heatmap?hours=24` | 是 | 分类热力图 |
| `GET /api/map` | 是 | 地理位置图钉 |
| `GET /api/mitre/map` | 是 | MITRE ATT&CK 映射 |
| `GET /api/taxonomy` | 是 | 分类法 |
| `GET /api/export/events.csv` | 是 | CSV 导出 |
| `GET /api/export/profiles.csv` | 是 | CSV 导出 |
| `GET /api/export/blocklist.txt?min_risk=20` | 是 | 防火墙黑名单(注释头 + 阈值) |
| `GET /api/export/blocklist/{ip}` | 是 | 单个 IP 的黑名单文件 |
| `GET /api/export/stix/{ip}` | 是 | 用于 IP 的 STIX 2.1 包 |
\* WebSocket 接受不带 cookie 的连接;仅在已认证的仪表板源中使用。
## 配置
复制 `.env.example` → `.env`。关键变量:
```
# Gateway 端口
HONEYPOT_PORT=8080
DASHBOARD_PORT=9090
# Dashboard CORS(必须与您的 dashboard URL 匹配)
CORS_ORIGINS=http://localhost:9090
# Engine 调优
POLL_INTERVAL=2
BATCH_SIZE=100
CACHE_TTL=30
# Dashboard auth(默认开启)
REQUIRE_DASHBOARD_AUTH=true
DASHBOARD_AUTH_USER=analyst
DASHBOARD_AUTH_PASS=changeme_local_only
# GeoIP(可选的离线 MaxMind;IP-API 备用机制无需 keys 即可工作)
GEOIP_HTTP_FALLBACK=true
GEOIP_CACHE_TTL=86400
```
**GeoIP:** 将 `GeoLite2-City.mmdb` 和 `GeoLite2-ASN.mmdb` 放入 `data/geoip/`(绑定挂载到引擎中)。如果没有它们,**IP-API** 将为公网 IP 提供实时地理位置定位。私有/Docker IP 会被标记,但会从地图中排除。为了在本地开发中获得逼真的国家图钉,请使用 `X-Forwarded-For: ` 发送流量(请参阅 `scripts/simulate-attacks.ps1`)。
```
$env:MAXMIND_LICENSE_KEY='your_key'; .\scripts\download-geoip.ps1
docker compose restart threat-engine
```
## 开发
### 重新构建单个服务
```
docker compose up --build -d honeypot-api
docker compose up --build -d threat-engine
docker compose up --build -d frontend
```
### 本地前端(热重载)
```
cd frontend && npm install && npm run dev
```
当 API 在 Docker 中运行时,在 `.env` 中设置 `CORS_ORIGINS=http://localhost:3000,http://localhost:9090`。
### 查看日志
```
docker compose logs -f threat-engine
docker compose logs -f threat-api
docker compose logs -f nginx-honeypot nginx-dashboard
```
### 重置数据库(删除所有数据)
```
docker compose down -v
docker compose up --build -d
```
## 故障排除
| 问题 | 修复 |
|-------|-----|
| 蜜罐无法加载 | 验证与 localhost:8080 的连接。检查 docker 日志:`docker compose logs nginx-honeypot` |
| 浏览器证书警告 | 不适用于纯 HTTP 设置 |
| nginx 在启动时退出 | 检查 docker 日志:`docker compose logs nginx-honeypot` 或 `docker compose logs nginx-dashboard` |
| 仪表板未显示数据 | 运行 `.\scripts\simulate-attacks.ps1`;等待约 2秒 |
| 搜索结果无法清除 | 更新前端后强制刷新(`Ctrl+Shift+R`) |
| 在 PowerShell 中登录失败 | 使用浏览器 UI — PS 会破坏 JSON 主体 |
| 429 Too Many Requests | Nginx 速率限制 — 在模拟运行之间等待片刻 |
| 地图为空 / 国家错误 | 通过 `X-Forwarded-For` 使用公网 IP;等待约 2秒 以便引擎进行地理信息丰富 |
| 缺少地理位置图钉 | 仅显示已验证的 MaxMind/IP-API 坐标;排除私有 IP |
| 数据库 schema 不匹配 | `docker compose down -v` 重置卷 |
### 健康检查
```
curl http://localhost:8080/health
curl http://localhost:9090/api/health
curl http://localhost:9090/api/health/platform
```
## 项目结构
```
├── docker-compose.yml # 14 microservices + 5 data volumes
├── .env.example # Configuration template
├── db/
│ ├── events/init.sql # postgres-events schema
│ └── intel/init.sql # postgres-intel schema
├── data/geoip/ # MaxMind .mmdb files (optional)
├── shared/
│ ├── mitre.py # Canonical MITRE ATT&CK map
│ ├── taxonomy.py # Classification taxonomy
│ ├── traps.py # Trap rule loader
│ ├── trap_registry.json # Trap definitions (synced with Go defense)
│ └── production_check.py # STRICT_PRODUCTION validation
├── nginx/
│ ├── honeypot.conf # Deception gateway
│ ├── honeypot-locations.conf
│ ├── dashboard.conf # Dashboard gateway
│ └── dashboard-locations.conf
├── scripts/
│ ├── simulate-attacks.ps1 / .sh # Generate attack patterns
│ ├── test-smoke.ps1 # Quick smoke test
│ ├── test-all-endpoints.ps1 # Full endpoint verification
│ ├── verify-production.ps1 # Production readiness checks
│ └── download-geoip.sh # MaxMind GeoIP data (optional)
├── services/
│ ├── shared/
│ │ ├── events/ # Redis stream event logger (Go)
│ │ ├── defense/ # Sessions, WAF, honeytokens (Go)
│ │ └── runtime/ # Production checks, Redis init (Go)
│ ├── honeypot-web/ # Admin UI + traps
│ ├── honeypot-api/ # Fake REST API
│ └── honeypot-auth/ # Fake auth flows
├── threat-ingest/ # Redis stream → postgres-events
├── threat-engine/ # Classification worker (events → intel)
│ ├── classifier.py # Single risk + classification path
│ ├── enrichment.py # MaxMind + IP-API geo
│ └── asn_intel.py # ASN rollup writer
├── threat-api/ # FastAPI REST + WebSocket for dashboard
├── frontend/
│ └── src/lib/mapLayers.js # Map tile config (English labels)
└── ATTACKER_ENTRY_GUIDE.md # Red team / deception surface map
```
标签:AV绕过, CISA项目, FastAPI, Go, Python, React, Ruby工具, Syscalls, 威胁情报, 安全, 开发者工具, 搜索引擎查询, 无后门, 日志审计, 测试用例, 版权保护, 自定义脚本, 蜜罐, 证书利用, 超时处理, 逆向工具