jmhatre/honeypot-ids-lab

GitHub: jmhatre/honeypot-ids-lab

结合 Cowrie 蜜罐与 Suricata IDS 的网络安全实验室,通过 Docker 一键部署,实现攻击行为捕获、检测与关联分析。

Stars: 0 | Forks: 0

# honeypot-ids-lab 一个实战型网络安全实验室,部署了 **Cowrie SSH/Telnet 蜜罐** 和 **Suricata IDS**,用于捕获、检测和分析真实世界的攻击行为。包含 Python 日志分析引擎和实时 Web 仪表板。 本项目作为圣荷西州立大学 (San Jose State University) 网络安全研究生研究的一部分构建。该项目旨在回答的核心问题是:*当攻击者以为成功入侵了一台服务器时,他们实际上会做什么?* ## 目录 ``` honeypot-ids-lab/ ├── docker-compose.yml # Orchestrates Cowrie + Suricata + Analyzer ├── cowrie/ │ └── cowrie.cfg # Honeypot config (hostname, credentials, logging) ├── suricata/ │ ├── suricata.yaml # IDS config (EVE JSON output, app layer detection) │ └── rules/ │ ├── honeypot.rules # Custom rules: brute force, port scan, payload download │ └── ssh-brute.rules # SSH-specific detection rules ├── analyzer/ │ ├── log_analyzer.py # Core analysis engine (CLI) │ ├── app.py # Flask web dashboard │ ├── generate_demo_logs.py # Generates fake logs for testing without live traffic │ ├── requirements.txt │ └── Dockerfile └── scripts/ ├── setup_iptables.sh # Redirects port 22/23 into Cowrie └── teardown_iptables.sh # Removes redirect rules ``` ## 工作原理 ``` ┌─────────────────────────────────────┐ Internet ──────────▶│ Host (iptables redirect) │ (SSH :22) │ Port 22 ──▶ Cowrie :2222 │ (Telnet :23) │ Port 23 ──▶ Cowrie :2223 │ └─────────────────────────────────────┘ │ │ ┌─────────▼──────┐ ┌─────▼──────────┐ │ Cowrie │ │ Suricata IDS │ │ (Honeypot) │ │ (Host Network) │ │ │ │ │ │ Captures: │ │ Detects: │ │ • Credentials │ │ • Brute force │ │ • Commands │ │ • Port scans │ │ • Downloads │ │ • Payload pulls │ └────────┬───────┘ └──────┬──────────┘ │ │ ┌────────▼─────────────────▼──────────┐ │ Log Analyzer + Flask Dashboard │ │ • Parses Cowrie JSON + Suricata EVE │ │ • Correlates IPs across both logs │ │ • Surfaces top attackers, creds, │ │ commands, and IDS alerts │ └─────────────────────────────────────┘ ``` **Cowrie** 是一个中等交互的蜜罐。攻击者连接时会以为这是一台真实的服务器——它提供一个伪造的 shell,记录他们运行的每一条命令,并捕获他们尝试下载的任何文件。它绝不会让他们触及任何真实的东西。 **Suricata** 在数据包层面监控网络流量,使用基于特征码和协议感知的检测方式。此仓库中的自定义规则可以标记暴力破解模式、端口扫描、已知的僵尸网络凭证以及出站 payload 下载。 **分析器**关联两个日志源:如果一个 IP 同时出现在 Cowrie(行为)和 Suricata(网络)日志中,那么它就是一个已确认、高置信度的攻击者。 ## 快速开始 ### 前置条件 - Docker + Docker Compose - Linux 主机(Suricata 需要 `network_mode: host` 才能进行数据包捕获) - Root 权限(用于 iptables 重定向) ### 1. 克隆并启动堆栈 ``` git clone https://github.com/jmhatre/honeypot-ids-lab cd honeypot-ids-lab docker compose up -d ``` ### 2. 将真实 SSH 流量重定向到蜜罐 ``` export ADMIN_IP= # Don't skip this — you'll lock yourself out sudo -E bash scripts/setup_iptables.sh ``` ### 3. 打开仪表板 ``` http://localhost:5000 ``` 仪表板在每次加载时自动刷新。它直接读取实时日志文件。 ### 4. 运行 CLI 分析器 ``` docker exec log_analyzer python log_analyzer.py \ --cowrie /logs/cowrie/cowrie.json \ --suricata /logs/suricata/eve.json \ --output report.json --pretty ``` ## 无需实时流量测试(演示模式) 如果您想在不将服务器暴露于互联网的情况下探索仪表板: ``` cd analyzer pip install flask python generate_demo_logs.py # → creates cowrie_demo.json and suricata_demo.json python log_analyzer.py \ --cowrie cowrie_demo.json \ --suricata suricata_demo.json \ --output report.json --pretty cat report.json ``` 或者针对演示日志运行完整的 Flask 仪表板: ``` COWRIE_LOG=cowrie_demo.json SURICATA_LOG=suricata_demo.json python app.py # → http://localhost:5000 ``` ## 分析器输出内容 **来自 Cowrie 日志:** - 按尝试量排名的攻击者 IP - 最常尝试的用户名、密码和凭证对 - 在伪造 shell 中运行的每条命令,按频率排名 - 攻击者尝试下载的文件(URL、hash、大小) - 按小时分组的会话时间线 **来自 Suricata 日志:** - 按特征码和类别统计的警报数量 - 严重程度分布 - 按警报量排名的源 IP **关联分析:** - 同时出现在两个日志源中的 IP = 已确认的攻击者 - 仅出现在一个源中的 IP = 可疑/扫描活动 ## 自定义 Suricata 规则 `suricata/rules/` 中的规则涵盖了常见于互联网暴露 SSH 蜜罐的攻击模式: | 规则 | 捕获内容 | |------|----------------| | SSH Brute Force | 60秒内来自同一IP的5次以上连接尝试 | | Port Scan | 5秒内扫描20+个端口的 SYN 包 | | Mirai Credentials | 已知的僵尸网络默认密码 | | Payload Download | 从 shell 会话发起的出站 wget/curl | | `/etc/passwd` read | 登录后常见的攻击者侦察步骤 | | Rapid Reconnect | 2222端口上的扫描器行为 | ## 安全提示 **请在专用、隔离的机器上运行此项目。** Cowrie 是一个中等交互的蜜罐——旨在 contain (容纳/控制) 攻击者——但没有完美的蜜罐。不要在与生产系统共享网络的机器上运行此项目。 切勿在 `cowrie.cfg` 中使用真实凭证。故意设置的弱默认值(`admin`/`admin`)是为了吸引暴力破解尝试,而不是为了安全。 ## 背景 该项目源于 SJSU 的网络入侵检测研究生课程作业,最初我部署了 Snort 和 Suricata 来模拟针对虚拟蜜罐网络的实时攻击。最初的工作使用裸机 VM 和手动日志解析。这个版本通过 Docker、结构化 JSON 日志和 Web 仪表板使技术栈现代化——但底层的安全理念是一样的:观察攻击者的行为,而不仅仅是他们的企图。 ## 许可证 MIT
标签:Docker, Docker Compose, Flask, GitHub, iptables, Metaprompt, Mirai僵尸网络, Python, SSH蜜罐, Suricata, Telnet蜜罐, 免杀技术, 入侵检测系统, 域名收集, 威胁情报, 安全实验室, 安全数据湖, 安全防御评估, 开发者工具, 插件系统, 攻击行为分析, 数据统计, 无后门, 无控制台执行, 暴力破解检测, 毕业设计, 现代安全运营, 端口扫描, 网络信息收集, 网络安全, 蜜罐, 证书利用, 请求拦截, 进程注入, 逆向工具, 隐私保护