rocky-2904/NeuroPhish
GitHub: rocky-2904/NeuroPhish
NeuroPhish 是一个基于 NLP 与 Scikit-learn 的实时钓鱼邮件检测系统,结合混合特征工程、RandomForest 分类器和交互式 Streamlit 威胁情报仪表板,实现邮件风险的自动评分与可解释告警。
Stars: 0 | Forks: 0
# 🛡️ NeuroPhish — 实时钓鱼邮件检测系统
NeuroPhish 是一个端到端的钓鱼邮件检测 pipeline,它将
**NLP 特征工程**与 **Scikit-learn 分类模型**以及
交互式的 **Streamlit 威胁情报仪表板**结合在一起。它的构建旨在
展示一种实用的、生产级的邮件威胁检测方法——从原始文本到实时风险评分。
## ✨ 功能
- **混合特征工程** — 将 TF-IDF 文本向量化与
人工设计的钓鱼信号特征(紧急性语言、可疑
关键词、URL 模式、基于 IP 的链接、发件人域名异常)相结合。
- **RandomForest 分类 pipeline**,包含训练/测试评估、
ROC-AUC、精确率/召回率以及混淆矩阵报告。
- **交互式 Streamlit 仪表板**,包含 5 个实时面板:
1. 实时邮件风险评分
2. 模型性能 KPI
3. 混淆矩阵与 ROC 曲线
4. 特征重要性(“为什么被标记?”)
5. 带有类别平衡可视化的数据集浏览器
- **可解释的风险信号** — 每封被标记的邮件都会显示*为什么*被
标记(例如 `num_urgent_words`、`sender_domain_suspicious`、`num_urls`)。
- 包含**合成数据集生成器**,因此项目无需任何外部下载即可
立即运行——只需几分钟即可替换为真实世界的数据集
(参见下方的[使用真实数据集](#using-a-real-dataset))。
## 🏗️ 架构
```
Email (subject, body, sender)
│
▼
┌─────────────────────┐
│ Text Preprocessing │ lowercasing, whitespace normalization
└──────────┬───────────┘
▼
┌─────────────────────────────┐
│ Feature Engineering │
│ • TF-IDF (1-2 grams) │
│ • Urgency / keyword counts │
│ • URL & IP-link detection │
│ • Sender domain heuristics │
└──────────┬───────────────────┘
▼
┌─────────────────────┐
│ RandomForest Classifier │ → risk score (0-100%) + label
└──────────┬───────────┘
▼
┌─────────────────────────────┐
│ Streamlit Threat Dashboard │
└───────────────────────────────┘
```
## 📂 项目结构
```
NeuroPhish/
├── app.py # Streamlit dashboard (entry point)
├── requirements.txt
├── src/
│ ├── data_generator.py # Synthetic phishing/legit email generator
│ ├── feature_engineering.py # TF-IDF + handcrafted feature extraction
│ ├── train_model.py # Model training + evaluation
│ └── predict.py # Single-email inference
├── data/
│ └── emails.csv # Generated dataset (created by data_generator.py)
├── models/ # Trained model artifacts (created by train_model.py)
└── notebooks/ # (optional) exploratory analysis
```
## 🚀 快速开始
### 1. 克隆并安装依赖
```
git clone https://github.com/rocky-2904/NeuroPhish.git
cd NeuroPhish
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
### 2. 生成数据集(或使用已包含的数据集)
```
python src/data_generator.py --n_per_class 300 --out data/emails.csv
```
### 3. 训练模型
```
python src/train_model.py --data data/emails.csv --model_dir models
```
这会打印准确率/精确率/召回率/F1/ROC-AUC,并将模型、
vectorizer 和指标保存到 `models/`。
### 4. 启动仪表板
```
streamlit run app.py
```
打开 Streamlit 打印的本地 URL(通常是 `http://localhost:8501`)。
## 🧪 使用真实数据集
内置的 `data_generator.py` 会生成一个合成的、基于模板的
数据集,以便项目开箱即用——这对于演示很有用,但不能
替代真实世界的数据。要使用真实邮件进行训练:
1. 下载一个公开的钓鱼数据集,例如
[Kaggle 钓鱼邮件数据集](https://www.kaggle.com/datasets) 或
[Nazario 钓鱼语料库](https://monkey.org/~jose/phishing/)。
2. 将其格式化为包含以下列的 CSV:`subject`、`body`、`sender`、`label`
(`1` = 钓鱼,`0` = 正常)。
3. 将训练指向它:
python src/train_model.py --data path/to/real_emails.csv
## 🛠️ 技术栈
| 层级 | 工具 |
|---------------------|-------------------------------------------|
| 语言 | Python 3.10+ |
| NLP / 特征工程 | Scikit-learn `TfidfVectorizer`,基于正则的启发式规则 |
| 模型 | RandomForestClassifier (Scikit-learn) |
| 仪表板 | Streamlit, Matplotlib |
| 数据 | Pandas, NumPy, SciPy (稀疏矩阵) |
## 📈 路线图 / 扩展想法
- [ ] 添加 `.eml` 文件上传器,用于对真实的收件箱导出进行评分
- [ ] 将 RandomForest 替换为微调过的 transformer(例如 DistilBERT)并进行比较
- [ ] 添加基于 SHAP 的单封邮件可解释性
- [ ] 部署到 Streamlit Community Cloud 并提供公开的演示链接
- [ ] 添加用于 Gmail/Outlook 分类处理的浏览器扩展前端
## 👤 作者
**Raakesh Kumar S**
专注于网络安全的 CSE 学生 | 拥有 RHCSA 认证
[LinkedIn](https://linkedin.com/in/raakesh-kumar-s-b906232b7) ·
[GitHub](https://github.com/rocky-2904)
## 📄 许可证
该项目基于 MIT 许可证授权——详见 [LICENSE](LICENSE)。
标签:Apex, Kubernetes, Scikit-learn, Streamlit, 机器学习, 网络安全, 访问控制, 逆向工具, 钓鱼检测, 隐私保护