Akash-2615/credguard-ai

GitHub: Akash-2615/credguard-ai

CredGuard AI 利用机器学习异常检测技术分析登录日志,识别并评分凭据填充攻击风险,提供实时可视化安全监控仪表板。

Stars: 0 | Forks: 0

# CredGuard AI — 凭据填充检测系统 CredGuard AI 使用机器学习异常检测技术,从登录活动日志中检测**凭据填充**(credential stuffing)攻击。它将每个 IP 的风险评分定为 **NORMAL**(正常)、**SUSPICIOUS**(可疑)或 **ATTACK**(攻击),并在实时仪表板中展示结果。 ## 什么是凭据填充? 攻击者获取泄露的用户名/密码对,并使用脚本(机器人)在你的登录页面上进行尝试。典型特征包括: - 单个 IP 尝试**许多不同的用户名** - 尝试速度极快(间隔不到一秒或几秒) - 高失败率 - 非浏览器 user agent(如 `curl`、`python-requests` 等) - 通常为非工作时间流量 本实验构建了一个完整的流水线:合成数据 → 特征工程 → ML 模型 → Flask API → Web 仪表板。 ## 项目结构 ``` credential_stuffing/ ├── generate_dataset.py # Creates synthetic login logs ├── train.py # Feature engineering + model training ├── create_sample_logs.py # Extra CSV samples for upload testing ├── app.py # Flask backend (port 5003) ├── index.html # Dashboard UI ├── app.js # Frontend logic ├── style.css # Styles ├── data/ │ └── login_logs.csv # Main training / demo dataset ├── models/ │ ├── iso_forest.pkl # Isolation Forest │ ├── lof_model.pkl # Local Outlier Factor │ ├── scaler.pkl # StandardScaler │ └── feature_cols.pkl # Feature column names └── sample_logs/ # Ready-made CSVs to upload ├── heavy_attack_log.csv ├── stealth_attack_log.csv ├── mixed_scenario_log.csv └── normal_traffic_log.csv ``` ## 工作原理(从上到下) ### 1. 数据集生成 (`generate_dataset.py`) 创建包含以下内容的 `data/login_logs.csv`: | 流量类型 | 行为特征 | |---------|----------| | **Normal** | 真实浏览器,每个 IP 用户数少,节奏较慢,多在白天 | | **Credential stuffing 突发** | 少量 IP,大量用户名,机器人 user agent,快速重试,非工作时间 | | **代理轮换攻击** | 相同的机器人行为模式分散在不同的代理 IP 上 | 每行数据包括:`timestamp`、`ip_address`、`username`、`user_agent`、`endpoint`、`country`、`success`、`response_ms` 和 `is_attack`(仅用于训练的标签)。 ### 2. 特征工程 (`train.py`) 模型**不会**对单次登录进行评分。系统会**按 IP 在 60 分钟的滚动时间窗口内**聚合活动行为: | 特征 | 含义 | 重要性说明 | |---------|---------|----------------| | `attempts_last_1h` | 来自该 IP 的登录次数 | 攻击者会疯狂请求 endpoint | | `failure_rate` | 失败登录的百分比 | 凭据填充尝试大多会失败 | | `uniq_users_1h` | 不同用户名的数量 | 经典的凭据填充信号 | | `uniq_agents_1h` | 不同 user-agent 的数量 | 机器人通常只使用一种 agent | | `inter_arrival_s` | 尝试之间的间隔时间 | 人类会停顿;机器人速度很快 | | `avg_resp_ms` | 平均响应时间 | 脚本流量特征 | | `is_offhours` | 夜间 / 异常时段 | 常见的攻击时间窗口 | | `is_fast` | 间隔时间 < 3 秒 | 强烈的机器人标志 | | `is_bot_agent` | 类似脚本的 UA | 不是正常的浏览器 | ### 3. 模型 (`train.py` → `models/`) 1. **StandardScaler** — 规范化特征数据尺度 2. **Isolation Forest**(占 ensemble 的 60%)— 查找罕见 / 极端的 IP 3. **Local Outlier Factor**(占 40%)— 查找相对于邻居的密度异常点 4. **集成风险评分(Ensemble risk score)** → 0–100,然后得出结论: | 风险评分 | 判定结果 | |------------|---------| | ≥ 65 | **ATTACK** | | 35–64 | **SUSPICIOUS** | | < 35 | **NORMAL** | ### 4. 后端 API (`app.py` — 端口 `5003`) | Endpoint | 方法 | 用途 | |----------|--------|---------| | `/analyze` | POST | 对 JSON 格式的登录事件数组进行评分 | | `/upload_csv` | POST | 对上传的 CSV 文件进行评分 | | `/sample_data` | GET | 分析 `data/login_logs.csv` | | `/live_stream` | GET | 模拟实时登录及评分的 SSE 流 | | `/live_reset` | POST | 重置实时监控的 IP 状态 | ### 5. 前端仪表板 (`index.html` + `app.js`) - **加载演示数据** — 批量分析主数据集 - **上传 CSV 日志** — 对你自己的 / 示例 CSV 文件进行评分 - **实时监控** — 包含固定表头和滚动事件的实时模拟数据流 - IP 风险排行榜、过滤器和技术摘要面板 ## 环境要求 - Python 3.9+ - 依赖包: ``` pip install flask flask-cors pandas numpy scikit-learn ``` ## 运行方式 在项目文件夹下执行: ``` cd "/path/to/credential_stuffing" ``` ### 选项 A — 快速启动(模型已存在) 如果 `data/login_logs.csv` 和 `models/*.pkl` 已经存在: **终端 1 — 后端** ``` python3 app.py ``` 后端运行地址:http://127.0.0.1:5003 **终端 2 — 前端** ``` python3 -m http.server 8080 ``` 打开:http://127.0.0.1:8080/index.html ### 选项 B — 从零开始完整重新构建 ``` # 1) 生成 dataset python3 generate_dataset.py # 2) 训练 models python3 train.py # 3) (可选) 创建示例上传 CSV python3 create_sample_logs.py # 4) 启动 backend python3 app.py # 5) 在另一个 terminal 中 — 启动 frontend python3 -m http.server 8080 ``` 然后打开 http://127.0.0.1:8080/index.html ## 使用仪表板 1. 启动后端 + 前端(使用上述命令)。 2. 点击 **Load Demo Data** 查看来自训练数据集的 IP 评分。 3. 或者点击 **Upload CSV Log** — 尝试上传 `sample_logs/` 中的文件。 4. 或者点击 **Live Monitor** 观看实时评分的模拟登录。 5. 在排行榜上使用过滤器 / IP 搜索;点击某行查看 IP 详情。 ### 上传所需的 CSV 列 ``` timestamp, ip_address, username, user_agent, success ``` 可选但有用的字段:`country`、`response_ms`、`endpoint` ## 快速 API 冒烟测试 在后端运行的情况下: ``` curl http://127.0.0.1:5003/sample_data | head -c 500 ``` 你应该会得到包含 `summary` 和 `results` 的 JSON 响应。 ## 用户故事(用于演示 / 培训人员) ## 实验说明 - 这是一个**网络安全实验 / 演示**。仅限用于合成或已授权的日志。 - 已包含模型和数据集,因此无需重新训练即可运行。 - 在更改特征或重新生成数据(`train.py`)后,请重新训练模型。 - Live Monitor 会生成**模拟**事件用于演示目的;它未连接到真实的内部生产登录服务。
标签:Apex, Flask, 异常检测, 撞库防护, 数据可视化, 机器学习, 网络安全, 调试辅助, 逆向工具, 隐私保护