adityapitale/Impossible-Travel-Detector

GitHub: adityapitale/Impossible-Travel-Detector

基于 UEBA 理念的身份验证异常检测引擎,通过 GeoIP 定位和移动速度计算识别凭证泄露后的「不可能旅行」攻击,并提供交互式 SOC 仪表板和分析师分诊工作流。

Stars: 0 | Forks: 0

# 🛡️ 不可能旅行检测器 一个受 UEBA 启发的检测引擎,用于分析身份验证日志、执行 GeoIP 查询、计算登录事件之间的移动速度、利用实时威胁情报(VPN/TOR/托管)丰富警报、分配风险评分,并在交互式 SOC 风格的仪表板上可视化结果。 ![严重程度分布](https://static.pigsec.cn/wp-content/uploads/repos/cas/62/6223b91d9560b2f7ac9f90ff0a55fbb6d3568d401f9d9ca0e16ef497bd843cf1.png) ## 🚀 它的功能 现代攻击者经常使用距离受害者真实位置很远的异地基础设施,利用窃取的凭证进行登录。此工具模拟了 Microsoft、Google 和 Okta 等公司如何检测此类行为: 1. 解析身份验证日志(用户、时间戳、IP、状态) 2. 使用 GeoLite2 将每个 IP 解析为地理位置 3. 计算连续登录之间的距离和所需的移动速度 4. 标记任何超过现实移动速度(民航客机 ≈ 900 km/h)的登录对 5. 通过实时威胁情报丰富警报 —— 检查该 IP 是否为已知的 VPN、TOR 退出节点或数据中心/托管 IP(通过 `ip-api.com`) 6. 计算加权风险评分(0–100)并分配严重程度级别 7. 在包含图表、全球移动地图和分析师分诊工作流的交互式 Flask 仪表板上显示所有内容 ## 🧱 架构 登录日志 (CSV) │ ▼ 日志解析器 → 为每个用户配对连续的登录记录 │ ▼ GeoIP 查询 → IP → 国家、城市、纬度/经度 (GeoLite2) │ ▼ 距离 + 速度引擎 → Haversine 距离,km/h │ ▼ 威胁情报 → VPN / TOR / 托管检测 (ip-api.com) │ ▼ 风险评分引擎 → 加权评分 → 严重程度 → 处置建议 │ ▼ Flask 仪表板 → SQLite 存储、图表、移动地图、分析师分诊 ![架构图](https://static.pigsec.cn/wp-content/uploads/repos/cas/1c/1ce560602edc82878f9c1b66ae4a6a4618df9cb9741e75b6db6be868d09d86d1.png) ## ✨ 特性 - **真实的移动速度检测**,使用 Haversine 公式 - **实时威胁情报** —— 没有硬编码的 IP 列表,每次分析运行时都会通过 ip-api.com 检查真实的 VPN/TOR/托管状态 - **加权风险评分**,结合了速度、新国家/地区、威胁情报和登录失败信号 - **交互式仪表板** —— 严重程度饼图、风险评分柱状图、曲线式全球移动地图展示每个用户的完整登录轨迹并带有悬浮提示 - **可过滤的警报表**,支持按用户、严重程度、威胁情报类型和开启/已批准状态进行过滤 - **分析师分诊工作流** —— 警报可以被批准(合法的商务旅行)或重新开启,并保留完整的审计追踪 - **防重复的安全重新分析** —— 多次运行分析绝不会导致警报重复或覆盖已批准的状态 ![移动地图](https://static.pigsec.cn/wp-content/uploads/repos/cas/dc/dc0d2a149e63e731cbccf8d4af274e6e1c2b76f05b0ceb12bc8d907d267f6381.png) ## 🛠️ 技术栈 | 工具 | 用途 | |---|---| | Python | 核心检测逻辑 | | Flask | Web 仪表板 | | Pandas | 日志解析 | | GeoPy | Haversine 距离计算 | | GeoLite2 (MaxMind) | IP → 地理位置 | | ip-api.com | 实时 VPN / TOR / 托管检测 | | SQLite | 警报持久化 | | Plotly.js | 图表和交互式世界地图 | ## 📦 设置 ### 1. 克隆仓库 ``` git clone https://github.com/YOUR_USERNAME/Impossible-Travel-Detector.git cd Impossible-Travel-Detector ``` ### 2. 创建并激活虚拟环境 ``` python -m venv venv venv\Scripts\activate # Windows source venv/bin/activate # Mac/Linux ``` ### 3. 安装依赖项 ``` pip install -r requirements.txt ``` ### 4. 下载 GeoLite2 数据库 必需 —— 由于 MaxMind 的许可条款,本仓库不包含此内容。 1. 在 [maxmind.com/en/geolite2/signup](https://www.maxmind.com/en/geolite2/signup) 免费注册 2. 下载 `GeoLite2-City.mmdb` 3. 将其放置在项目根目录下 ### 5. 运行应用 ``` python app.py ``` 打开 [http://127.0.0.1:5000](http://127.0.0.1:5000) 并点击 **▶ Run Analysis**。 ## 📊 检测结果示例 ![警报表](https://static.pigsec.cn/wp-content/uploads/repos/cas/41/413eb70dc9a5cecf08d49ecc1518197b17e5eb3b848561ed15fade4af2ea6455.png) | 用户 | 路线 | 速度 | 威胁情报 | 风险评分 | 严重程度 | |---|---|---|---|---|---| | aditya | 孟买 → 勃兰登堡,德国 | 189,373 km/h | VPN | 80/100 | CRITICAL | | arjun | 孟买 → TOR 节点,德国 | 189,373 km/h | VPN | 80/100 | CRITICAL | | priya | 孟买 → 圣保罗,巴西 | 41,346 km/h | Hosting | 70/100 | HIGH | | john | 美国 → 拉各斯,尼日利亚 | 25,328 km/h | Clean | 60/100 | HIGH | ## ✅ 分析师分诊工作流 ![批准工作流](https://static.pigsec.cn/wp-content/uploads/repos/cas/4a/4a3700c732d378b171e0135907e87b61283eb90128db086d45286cc9889d5ddc.png) 每个警报的初始状态均为 **OPEN**。分析师可以: - 点击 **✓ Approve** 将警报标记为合法的商务旅行 - 该记录将永久保留在数据库中 —— 不会删除任何内容(保留审计追踪) - 如果决策错误,点击 **↺ Undo** 重新开启 - 随时可以通过状态过滤表 -> Open / Approved ![分诊工作流](https://static.pigsec.cn/wp-content/uploads/repos/cas/49/490cfa7368bd2ab3dad73962346719a26ed2adfdfc5276154db905c83b5f5a7e.png) ## ⚠️ 为什么未公开部署 此工具处理敏感的身份验证数据,旨在安全内部网络中运行 —— 与 Microsoft Sentinel、Splunk ES 和 CrowdStrike 使用的模型相同: - 身份验证日志包含 PII(用户名、IP、位置)—— 公开部署将违反 GDPR / 印度的 DPDP 法案 - SOC 仪表板始终仅限内部访问 —— 公开的 URL 会让攻击者看到他们哪些 IP 被标记,从而做出相应调整 - 未实现用户身份验证 —— 任何拥有该 URL 的人都可以批准或重新开启警报,且没有审计追踪 - 正确的部署模型是在本地或私有云 VPC 中,而不是在面向公众的 URL 上 ## 🎯 这展示了什么 - 身份验证日志的解析和分析 - 行为分析(UEBA —— 用户和实体行为分析) - 实时威胁情报丰富 - 基于风险的警报优先级排序 - 在 Microsoft Sentinel 和 Splunk ES 等真实工具中使用的 SOC 分析师分诊工作流 ## 📌 备注 - `GeoLite2-City.mmdb`、`alerts.db` 和 `venv/` 已被排除在此仓库之外(参见 `.gitignore`) - 示例登录日志仅为演示目的而合成的数据 - ip-api.com 免费版限制为每分钟 45 次请求 —— 足以满足演示用途
标签:Flask, Python, 后端开发, 威胁情报, 安全运营, 开发者工具, 异常检测, 扫描框架, 无后门, 身份认证分析, 逆向工具