cyclonite69/shadowcheck-web

GitHub: cyclonite69/shadowcheck-web

基于 Node.js 和 PostGIS 的生产级无线网络 SIGINT 取证平台,支持 ML 威胁检测和地理空间分析。

Stars: 1 | Forks: 0

# ShadowCheck - SIGINT 取证平台 [![GitHub stars](https://img.shields.io/github/stars/cyclonite69/shadowcheck-static?style=flat-square)](https://github.com/cyclonite69/shadowcheck-static/stargazers) [![GitHub forks](https://img.shields.io/github/forks/cyclonite69/shadowcheck-static?style=flat-square)](https://github.com/cyclonite69/shadowcheck-static/network) [![GitHub issues](https://img.shields.io/github/issues/cyclonite69/shadowcheck-static?style=flat-square)](https://github.com/cyclonite69/shadowcheck-static/issues) [![GitHub license](https://img.shields.io/github/license/cyclonite69/shadowcheck-static?style=flat-square)](LICENSE) [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen?style=flat-square)](https://nodejs.org/) [![PostgreSQL](https://img.shields.io/badge/postgresql-%3E%3D18-blue?style=flat-square)](https://www.postgresql.org/) [![Redis](https://img.shields.io/badge/redis-%3E%3D4.0.0-red?style=flat-square)](https://redis.io/) [![GitHub last commit](https://img.shields.io/github/last-commit/cyclonite69/shadowcheck-static?style=flat-square)](https://github.com/cyclonite69/shadowcheck-static/commits) [![GitHub repo size](https://img.shields.io/github/repo-size/cyclonite69/shadowcheck-static?style=flat-square)](https://github.com/cyclonite69/shadowcheck-static) 🛡️ **生产级 SIGINT 取证和无线网络分析平台。** 实时威胁检测、通过 PostGIS 进行地理空间关联以及交互式分析仪表板。 ## 当前系统状态 - **React/Vite 前端** 已完全集成 TypeScript 支持(`client/src/` 路由如 `/geospatial-intel`、`/analytics`、`/ml-training`、`/endpoint-test`) - **现代模块化后端架构**,在 `server/src/api/`、`server/src/services/` 和 `server/src/repositories/` 中组织服务 - **集成资产服务**:主 Express 服务器原生提供来自 `dist/` 的编译前端资产,并带有优化的安全标头 - **通用过滤器系统**,支持 20 多种过滤器类型,支持跨所有页面进行复杂查询 - **DevContainer 支持**,通过 VS Code 集成提供一致的开发环境 - **静态服务器**,具有用于生产部署和 Lighthouse 审计的安全标头 - **PostGIS 物化视图**,用于具有预计算威胁情报的快速浏览器页面 - **ETL 管道**位于 `etl/` 中,具有模块化的加载/转换/提升步骤,为浏览器视图提供数据;暂存表保持 UNLOGGED 以提高摄入速度 - **机器学习**,支持多种算法(逻辑回归、随机森林、梯度提升)和超参数优化 - **Redis 集成**处理缓存、会话管理和速率限制 ## 功能 - **仪表板:** 具有威胁指示器和交互式指标卡的实时网络环境概览。 - **地理空间分析:** 具有空间关联、聚类、热力图、路线和 **统一网络工具提示** 的交互式 Mapbox 可视化。 - **天气 FX 系统:** 具有雨/雪粒子效果、动态雾和观测点历史天气查询的实时大气可视化。 - **机构办公室数据集:** [新增] 56 个外地办事处(100% ZIP+4 覆盖率)和 334 个驻点机构(93.4% ZIP+4 覆盖率),带有用于地理空间关联的 PostGIS 坐标点。 - **地理空间浏览器:** 具有叠加层和时间线视图的基于地图的网络探索。 - **网络分析:** 通过通用过滤深入分析单个网络特征和行为模式。 - **威胁检测:** 通过多种算法进行 ML 驱动的监控设备和异常识别。 - **分析统计:** 通过 Chart.js 可视化进行网络模式分析的高级图表和图形。 - **地址丰富:** 多 API 场所和业务识别(4 个来源:OpenCage、LocationIQ、Abstract、Overpass)。 - **设备分类:** 自动识别设备类型和行为分析。 - **网络标记:** 手动分类和标记检索网络。 - **三边测量:** 通过多次观测进行 AP 位置计算及精度估算。 - **机器学习:** 具有超参数优化和模型版本控制的多算法威胁检测。 - **通用过滤器:** 20 多种过滤器类型,支持复杂的时间、空间和行为查询。 - **WiGLE 集成:** 本地 WiGLE 数据库搜索及实时 API 查询。 - **Kepler 集成:** 支持过滤器的 Kepler.gl 就绪 GeoJSON 端点。 - **家庭位置和标记:** 保存的位置及距家庭距离过滤器。 - **数据导出和备份:** CSV/JSON/GeoJSON 导出以及管理员保护的备份。 - **身份验证和角色:** 基于会话的登录及管理员门控操作。 - **管理员设置:** 由 AWS Secrets Manager 支持的 Mapbox/WiGLE/Google Maps 配置。 - **DevContainer 支持:** 通过 VS Code 集成提供一致的开发环境。 - **安全标头:** 具有 CSP、HTTPS 强制和 Lighthouse 优化的生产就绪部署。 - **管理员功能:** 系统管理界面,具有配置管理、用户设置和基于角色的门控。 - **管理员数据库安全**:多用户模型,包含只读的 `shadowcheck_user` 和特权的 `shadowcheck_admin`。 完整功能目录请参见 `docs/FEATURES.md`。 ## Kepler.gl 数据策略 - 除非通过查询参数明确请求,否则 Kepler 端点 **无默认限制**。 - 使用过滤器代替上限;Kepler.gl 专为大型数据集设计。 ## 近期改进(2026 年 2 月) ✅ **机构办公室数据集完成** - **外地办事处**:共 56 个,56 个 ZIP+4 (100%),0 个仅 ZIP5。 - **驻点机构**:共 334 个,312 个 ZIP+4 (93.4%),22 个仅 ZIP5。 - **数据完整性**:所有 390 条主要记录中,0 个缺失的城市、州、邮政编码、电话、网站或坐标。 - **标准化**:完整的地址和电话标准化(10 位数字)并保留原始值。 ✅ **天气 FX 和大气可视化** - **实时天气叠加**:基于地图中心的实时 Open-Meteo 数据,提供动态雾、雨和雪效果。 - **粒子系统**:基于 canvas 的高性能粒子引擎,实现逼真的雨(垂直条纹)和雪(正弦飘动)效果。 - **历史天气背景**:通过后端代理查看任何过去观测点的天气状况(温度、气压、能见度)。 - **后端代理**:新的 `/api/weather` 端点,用于安全地获取外部天气数据,而不会暴露密钥或触发 CSP 问题。 ✅ **TypeScript 迁移和构建管道** - **完整的 TypeScript 迁移**:转换了 60 多个文件,包括服务器实用程序、中间件、ETL 脚本和构建工具 - **生产构建管道**:用于 Docker 部署的编译 TypeScript 服务器消除了运行时 ts-node 开销 - **类型安全**:为数据库操作、API 响应和服务层添加了全面的接口和类型 - **构建优化**:前端和服务器分别编译,具有适合容器化部署的路径解析 ✅ **Redis 实施** - **威胁分数缓存**:Redis 以 5 分钟为间隔缓存威胁分数。 - **分析缓存**:Redis 缓存分析聚合数据。 - **会话管理**:Redis 处理会话存储。 - **速率限制**:Redis 后端强制执行每个 IP 15 分钟内 1000 次请求的限制。 ✅ **数据完整性修复** - 修复了 GeoSpatial 表显示不正确默认值的问题(signal: 0 dBm, channel: 0, frequency: 0 MHz) - 解决了分析小部件故障(时间活动、随时间变化的无线电类型、威胁分数趋势) - 修复了最大距离计算,使用真实的 PostGIS 地理距离而不是约 238m 的信号近似值 - 解决了威胁分数列排序问题(rule_score、ml_score、ml_weight、ml_boost 现已可排序) ✅ **API 和后端改进** - Networks API 现在使用最新观测数据以获取准确的实时信息 - 通过带有 OUI 前缀匹配的 radio_manufacturers 表添加了制造商字段填充 - 修复了 WiGLE 观测点渲染,使用了正确的 schema 命名空间(app 与 public) - 增强了分析端点,具有适当的空值处理和适当的数据源 ✅ **前端增强** - 修复了数据转换器字段名称不匹配问题(network_type → type, avg_score → avgScore) - 为 temporal、radio-time 和 threat-trends 分析添加了缺失的 API 调用 - 改进了地理距离显示和无效值处理 ✅ **测试和质量** - 为 networks API 数据完整性添加了全面的回归测试 - 增强了所有端点的错误处理和验证 ## 架构 **后端:** Node.js/Express REST API,配合 PostgreSQL + PostGIS + Redis(具有 Repositories 和 Services 的模块化架构) **前端:** React + Vite 配合 TypeScript(浏览器和仪表板) **数据库:** PostgreSQL 18 配合 PostGIS 扩展(566,400+ 位置记录,173,326+ 唯一网络) **缓存:** Redis v4+ 用于会话、速率限制和分析 **开发:** DevContainer 支持,配合 VS Code 集成 **部署:** 生产构建通过 `server/server.ts` 中的集成资产处理程序提供服务。 ## 前置条件 - Node.js 20+ - PostgreSQL 18+ 配合 PostGIS - Redis 4.0+ - TypeScript 5.0+(包含在 devDependencies 中) ## 快速开始 ### 本地开发 ``` git clone https://github.com/cyclonite69/shadowcheck-static.git cd shadowcheck-static npm install docker-compose up -d ``` ### 家庭实验室部署 ``` git clone https://github.com/cyclonite69/shadowcheck-static.git cd shadowcheck-static ./deploy/homelab/scripts/setup.sh ``` 硬件要求和详细设置请参见 [deploy/homelab/README.md](deploy/homelab/README.md)。 ### AWS 生产环境 **🚀 快速开始:** 参见 [deploy/aws/QUICKSTART.md](deploy/aws/QUICKSTART.md) ``` # 启动实例(从本地机器) ./deploy/aws/scripts/launch-shadowcheck-spot.sh # 通过 SSM 连接 aws ssm start-session --target INSTANCE_ID --region us-east-1 # 运行自动设置 bash curl -fsSL https://raw.githubusercontent.com/cyclonite69/shadowcheck-static/master/deploy/aws/scripts/setup-instance.sh | sudo bash cd /home/ssm-user git clone https://github.com/cyclonite69/shadowcheck-static.git shadowcheck cd shadowcheck ./deploy/aws/scripts/deploy-complete.sh # 更新部署 git pull origin master ./deploy/aws/scripts/scs_rebuild.sh ``` **文档:** - [QUICKSTART.md](deploy/aws/QUICKSTART.md) - 完整部署指南 - [WORKFLOW.md](deploy/aws/WORKFLOW.md) - 开发工作流 - [README.md](deploy/aws/README.md) - AWS 基础设施详情 - [DEPLOYMENT_CHECKLIST.md](deploy/aws/DEPLOYMENT_CHECKLIST.md) - 验证清单 - [ssm-embedded-session-policy.json](deploy/aws/iam/ssm-embedded-session-policy.json) - Admin UI 嵌入式 SSM 所需的 IAM 策略 ## 详细设置 ### 1. 克隆并安装 ``` git clone https://github.com/your-username/shadowcheck-static.git cd shadowcheck-static npm install ``` ### 2. 数据库和 Redis 设置 使用 Docker 进行本地设置(推荐),以便 PostGIS、Redis、bootstrap 授权和迁移保持同步: ``` docker compose up -d ``` 对于 AWS/EC2,请使用 `deploy/aws/scripts/` 中的部署脚本(特别是 `scs_rebuild.sh`),而不是手动运行遗留 SQL。 ### 3. 环境配置 在 AWS Secrets Manager 中配置密钥,并通过环境变量导出任何本地覆盖: ``` DB_USER=shadowcheck_user DB_HOST=shadowcheck_postgres DB_NAME=shadowcheck_db DB_PASSWORD=your_password DB_PORT=5432 REDIS_HOST=shadowcheck_static_redis REDIS_PORT=6379 PORT=3001 ``` 有关非密钥选项,请参见 `.env.example`。 ### 4. 运行迁移 迁移由标准运行器应用: ``` # Local/dev docker compose up -d # AWS/EC2 ./deploy/aws/scripts/scs_rebuild.sh ``` 如果必须手动运行,请使用 `sql/run-migrations.sh`,并使用部署脚本所用的相同凭据和 schema/search_path 设置。 ### 5. 启动服务器 ``` npm start ``` 服务器运行在 `http://localhost:3001` ## 页面 - 仪表板 (React): `/` 和 `/dashboard` - 地理空间情报 (React): `/geospatial` 或 `/geospatial-intel` - 地理空间浏览器 (React): `/geospatial-explorer` - 分析统计 (React): `/analytics` - API 测试 (React): `/endpoint-test` - ML 训练 (React): `/ml-training` - 管理: `/admin` - WiGLE (React): `/wigle` - Kepler (React): `/kepler` ## API 端点 ### 网络和观测 - `GET /api/networks` - 具有通用过滤的分页网络列表 - `GET /api/v2/networks` - 版本 2 分页网络 API - `GET /api/networks/observations/:bssid` - 特定网络的所有观测记录 - `GET /api/networks/search/:ssid` - 按 SSID 搜索网络 - `GET /api/networks/tagged` - 列出用户标记的网络 - `GET /api/location-markers` - 检索保存的地图标记 - `GET /api/home-location` - 获取当前家庭/基地坐标 ### 威胁分析和 ML - `GET /api/threats/quick` - 高性能威胁检测概览 - `GET /api/threats/detect` - 详细的基于移动的取证分析 - `GET /api/ml/status` - 检查 ML 模型训练状态和统计信息 - `POST /api/ml/train` - 在标记数据上触发 ML 模型重训练 ### 分析和情报 - `GET /api/analytics/dashboard-metrics` - 仪表板卡的关键指标 - `GET /api/analytics/*` - 各种统计分布端点(时间、信号等) - `GET /api/weather` - 用于地图叠加的当前天气代理 (Open-Meteo) - `GET /api/wle/api-status` - 检查 WiGLE API 连接 - `GET /api/mapbox-token` - 安全检索 Mapbox API token ### 数据管理和管理员 - `POST /api/network-tags/:bssid` - 手动分类网络 (管理员) - `POST /api/admin/import-sqlite` - Turbo SQLite 数据库导入 (管理员) - `POST /api/admin/cleanup-duplicates` - 删除冗余观测数据 (管理员) - `GET /api/export/networks` - 将过滤后的网络导出为 CSV/JSON - `POST /api/admin/aws/instances/:id/start` - 启动 EC2 实例 (管理员) - `POST /api/admin/aws/instances/:id/stop` - 停止 EC2 实例 (管理员) ### 身份验证 - `POST /api/auth/login` - 基于会话的身份验证 - `POST /api/auth/logout` - 使当前会话失效 - `GET /api/auth/status` - 检查当前身份验证状态 实现详情请参见 `server/server.ts` 和 `server/src/utils/routeMounts.ts`。 ## 机器学习 ShadowCheck 包含多算法威胁检测,具有模型训练和超参数优化功能。 ### 训练端点 **POST** `/api/ml/train` 在数据库中所有标记网络上训练逻辑回归模型。 **请求:** ``` curl -X POST http://localhost:3001/api/ml/train ``` **响应:** ``` { "ok": true, "model": { "type": "logistic_regression", "accuracy": 0.92, "precision": 0.88, "recall": 0.95, "f1": 0.91, "rocAuc": 0.94 }, "trainingData": { "totalNetworks": 45, "threats": 18, "falsePositives": 27 }, "message": "Model trained successfully" } ``` **错误:** - `400`:少于 10 个标记网络(最低要求) - `503`:ML 模型模块不可用 ### 状态端点 **GET** `/api/ml/status` 检查模型训练状态和标记统计信息。 ### 高级 ML 迭代 通过网格搜索和交叉验证测试多种算法: ``` pip install -r scripts/ml/requirements.txt python3 scripts/ml/ml-iterate.py ``` 测试 Logistic Regression、Random Forest 和 Gradient Boosting 并进行超参数调优。 ### 用于训练的特征 - 观测计数(网络检测) - 看到的唯一天数 - 地理分布(位置聚类) - 信号强度(RSSI 最大值) - 距家庭位置的距离范围 - 行为标志(在家与外出时看到) ## 项目结构 ``` shadowcheck-static/ ├── client/ │ ├── src/ │ │ ├── components/ # ⚛️ React components (TypeScript) │ │ ├── App.tsx # ⚛️ Main React app │ │ └── main.tsx # ⚛️ Frontend entry point │ └── vite.config.ts # ⚛️ Frontend build config (TypeScript) ├── server/ │ ├── src/ │ │ ├── api/ # 🔧 REST API routes (TypeScript) │ │ ├── services/ # 🔧 Business logic (TypeScript) │ │ ├── middleware/ # 🔧 Express middleware (TypeScript) │ │ └── utils/ # 🔧 Server utilities (TypeScript) │ ├── server.ts # 🔧 Main server entry point │ └── static-server.ts # 🛠️ Benchmark static server ├── deploy/ # 🚀 Deployment configs (AWS, etc.) │ └── aws/ # AWS-specific deployment ├── etl/ # 📊 ETL pipeline (TypeScript) ├── scripts/ # 🛠️ Utility scripts (TypeScript) ├── tests/ # 🧪 Jest tests (TypeScript) ├── sql/ # 🗄️ Database migrations & functions ├── docs/ # 📚 Documentation ├── tsconfig.json # ⚙️ TypeScript config (client) ├── tsconfig.server.json # ⚙️ TypeScript config (server) └── docker-compose.yml # 🐳 Docker configuration ``` **📖 详细的前端/后端组织请参见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。** 文档索引另请参见 [docs/README.md](docs/README.md)。 ## 开发 **运行开发服务器:** ``` npm run dev ``` **运行测试:** ``` npm test ``` ## 配置 关键环境变量(参见 `.env.example`): - `DB_*` - PostgreSQL 连接 - `REDIS_*` - Redis 连接 - `PORT` - 服务器端口(默认值:3001) - `NODE_ENV` - development 或 production ## 安全 - 在生产环境中使用强数据库凭据。 - 每 60-90 天轮换密码(参见 `deploy/aws/docs/PASSWORD_ROTATION.md`)。 - 在反向代理层启用 HTTPS/TLS。 - 通过速率限制限制 API 访问(通过 Redis 启用)。 - 详细的安全指南请参见 `SECURITY.md`。 ### 安全标头和 Lighthouse 审计 为了进行准确的 Lighthouse 最佳实践审计,请使用基准静态服务器: ``` npm run build npm run serve:dist # 然后针对 http://localhost:4000 运行 Lighthouse ``` 集成服务器(`server/server.ts`)默认也应用高安全性标头。 ### 第三方 Cookie 通知 **预期的 Lighthouse 警告:** 来自 `api.mapbox.com` 的“使用第三方 Cookie”。 这是使用 Mapbox GL JS 时的预期行为。Mapbox 设置 Cookie 用于: - 会话管理和速率限制 - 遥测(可以通过 `mapboxgl.config.COLLECT_TELEMETRY = false` 禁用) - 瓦片缓存 这些 Cookie 是 Mapbox 功能所必需的,如果不自托管所有地图瓦片,则无法消除。 ### SEO 索引 默认情况下,`robots.txt` 禁止所有爬取(开发/预发布)。对于生产环境: ``` npm run build:public # Sets ROBOTS_ALLOW_INDEXING=true ``` ## 文档 `docs` 目录中提供了其他文档。导航请参见 [docs/README.md](docs/README.md)。 ## 维基(图表和视觉文档) `.github/wiki/` 中的维基包含重图表文档,是架构和流程视觉的主要来源。 - [维基首页](.github/wiki/Home.md) - [架构 (维基)](.github/wiki/Architecture.md) - [数据流 (维基)](.github/wiki/Data-Flow.md) - [部署指南 (维基)](.github/wiki/Deployment-Guide.md) ## 贡献 代码标准和工作流请参见 `CONTRIBUTING.md`。 ## 行为准则 参见 `CODE_OF_CONDUCT.md`。 ## 许可证 MIT。详情请参见 `LICENSE`。
标签:DFIR, Express, GEOINT, GNU通用公共许可证, HTTP/HTTPS抓包, MITM代理, Node.js, PostGIS, PostgreSQL, React, Redis, SIGINT, Syscalls, TypeScript, Vite, 代码示例, 位置追踪, 信号情报, 前端仪表盘, 后端架构, 地理空间情报, 安全插件, 实时威胁检测, 态势感知, 插件系统, 搜索引擎查询, 数据分析, 无线网络分析, 测试用例, 网络安全, 自动化攻击, 请求拦截, 逆向工具, 隐私保护