ayaeljahidi/Honeypot-CowrieSSH

GitHub: ayaeljahidi/Honeypot-CowrieSSH

一个基于 Cowrie 的生产级 SSH/Telnet 蜜罐,用于在隔离环境中捕获攻击行为并输出 JSON 日志以支持威胁分析。

Stars: 0 | Forks: 0

# 🍯 Cowrie 蜜罐实验室(Fedora)

Cybersecurity Cowrie Fedora JSON Active

一个用于网络安全研究和威胁情报的生产级 SSH/Telnet 蜜罐部署

## 📋 目录 - [概述](#overview) - [为什么选择这个项目?](#why-this-project) - [架构](#architecture) - [先决条件](#prerequisites) - [快速开始](#quick-start) - [详细安装](#detailed-installation) - [配置](#configuration) - [运行蜜罐](#running-the-honeypot) - [端口重定向](#port-redirection) - [日志与监控](#logs--monitoring) - [日志分析](#log-analysis) - [安全注意事项](#security-considerations) - [故障排除](#troubleshooting) - [贡献](#contributing) - [资源](#resources) - [免责声明](#disclaimer) ## 🔍 概述 本项目在 Fedora 上部署 **Cowrie SSH/Telnet 蜜罐**,用于模拟真实的网络攻击并捕获攻击者行为,在受控且隔离的环境中研究威胁。 ### ✨ 主要特性 | 特性 | 描述 | |---------|-------------| | 📝 **实时日志** | 以毫秒精度捕获每一次交互 | | 🔄 **端口重定向** | 无缝重定向 SSH 流量(22 → 2222) | | 🎯 **攻击模拟** | 使用 Kali Linux 或其他渗透测试工具进行测试 | | 🤖 **AI 友好数据** | 结构化的 JSON 日志,适合 ML/LLM 分析 | | 🔒 **安全环境** | 隔离的沙箱,保护真实基础设施 | | 📊 **丰富遥测** | 命令、文件、凭据和网络活动 | ## 🎯 为什么选择这个项目? 网络攻击者不断扫描互联网以寻找易受攻击的 SSH 服务。根据 [Shodan](https://www.shodan.io) 的数据,每天有数百万个 SSH 服务器暴露在互联网上。 ### 你将学到什么 - 🔍 **威胁情报** - 观察真实的攻击技术和 TTPs - 📜 **取证分析** - 捕获并分析恶意命令序列 - 📈 **模式识别** - 识别入侵模式和攻击活动 - 🤖 **AI 开发** - 构建用于自动威胁检测的机器学习模型 - 🛡️ **防御策略** - 理解攻击以构建更好的防御 ### 使用场景 - 🎓 **教育** - 亲身体验攻击方法论 - 🔬 **研究** - 研究僵尸网络行为和恶意软件传播 - 🏢 **企业** - 增强威胁检测能力 - 📰 **情报** - 收集 IOCs(妥协指标) ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ NETWORK DIAGRAM │ └─────────────────────────────────────────────────────────────────┘ ┌──────────────┐ │ Internet │ │ Attackers │ └──────┬───────┘ │ SSH Port 22 ▼ ┌──────────────────┐ │ Fedora Server │ │ ┌────────────┐ │ │ │ iptables │ │ ◄── Port Redirection (22 → 2222) │ │ NAT/ │ │ │ │ REDIRECT │ │ │ └─────┬──────┘ │ │ │ │ │ ┌─────▼──────┐ │ │ │ Cowrie │ │ ◄── Honeypot (Port 2222) │ │ Honeypot │ │ │ │ (Fake SSH)│ │ │ └─────┬──────┘ │ │ │ │ │ ┌─────▼──────┐ │ │ │ JSON Logs │ │ ◄── ~/cowrie/var/log/cowrie/ │ │ & SQLite │ │ │ └────────────┘ │ └──────────────────┘ │ ▼ ┌──────────────┐ │ Kali Linux │ ◄── Testing/Attack Simulation │ (Attacker VM)│ └──────────────┘ ``` ### 数据流 1. **攻击者** 扫描开放 SSH 端口(22) 2. **iptables** 将流量重定向到 Cowrie(2222) 3. **Cowrie** 模拟易受攻击的 SSH 服务器 4. **日志** 以 JSON 格式捕获所有交互 5. **分析** 工具处理数据以获取洞察 ## 📦 先决条件 ### 系统要求 | 组件 | 最低要求 | 推荐要求 | |-----------|---------|-------------| | 操作系统 | Fedora 36+ | Fedora 39+ | | 内存 | 2 GB | 4 GB | | 磁盘 | 10 GB | 50 GB+(用于日志) | | 网络 | 互联网访问 | 公网 IP(用于真实攻击) | ### 必需软件包 ``` # 更新系统 sudo dnf update -y # 安装依赖 sudo dnf install -y git python3 python3-pip python3-virtualenv \ python3-devel openssl-devel libffi-devel gcc \ iptables-services jq ``` ### 可选工具 ``` # 日志分析 sudo dnf install -y jq elinks # 可视化 pip3 install cowrie-logviewer ``` ## 🚀 快速开始 在 5 分钟内启动并运行: ``` # 1. 克隆仓库 git clone https://github.com/yourusername/cowrie-honeypot-lab.git cd cowrie-honeypot-lab # 2. 使设置脚本可执行 chmod +x setup_cowrie.sh # 3. 运行自动化设置 ./setup_cowrie.sh # 4. 配置端口重定向 sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222 # 5. 启动蜜罐 cd ~/cowrie source cowrie-env/bin/activate cowrie start # 6. 监控日志 tail -f ~/cowrie/var/log/cowrie/cowrie.json | jq ``` ## 🔧 详细安装 ### 步骤 1:创建 Cowrie 用户(推荐) ``` # 创建用于安全性的专用用户 sudo useradd -r -s /bin/bash cowrie sudo mkdir -p /home/cowrie sudo chown cowrie:cowrie /home/cowrie # 切换到 cowrie 用户 sudo su - cowrie ``` ### 步骤 2:克隆 Cowrie 仓库 ``` # 克隆官方 Cowrie 仓库 cd ~ git clone https://github.com/cowrie/cowrie.git cd cowrie ``` ### 步骤 3:设置 Python 虚拟环境 ``` # 创建虚拟环境 python3 -m venv cowrie-env # 激活环境 source cowrie-env/bin/activate # 升级 pip pip install --upgrade pip # 安装依赖 pip install -r requirements.txt ``` ### 步骤 4:配置 Cowrie ``` # 复制默认配置 cp etc/cowrie.cfg.dist etc/cowrie.cfg # 编辑配置 nano etc/cowrie.cfg ``` **关键配置选项:** ``` [honeypot] # 展示给攻击者的主机名 hostname = production-server-01 # 伪造 SSH 版本 ssh_version = OpenSSH_8.0 # 启用 Telnet(可选) enabled_telnet = true [output_json] # 启用 JSON 日志 enabled = true logfile = ${honeypot:log_path}/cowrie.json [output_sqlite] # 启用 SQLite 以便查询 enabled = true file = ${honeypot:log_path}/cowrie.db ``` ### 步骤 5:设置端口重定向 ``` # 使 iptables 规则持久化 sudo systemctl enable iptables # 添加重定向规则 sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222 # 保存规则(Fedora) sudo service iptables save # 验证规则 sudo iptables -t nat -L PREROUTING -n -v ``` ## ⚙️ 配置 ### 自定义蜜罐 #### 伪造文件系统 创建逼真的环境: ``` # 编辑文件系统布局 nano share/cowrie/fs.pickle # 或使用自定义文件系统创建工具 cd utils python3 createfs.py /path/to/real/server > newfs.pickle ``` #### 伪造凭据 设置诱人的登录组合: ``` # 编辑用户数据库 nano etc/userdb.txt # 格式:用户名:密码:x:uid:gid:描述 root:toor:x:0:0:root:/root:/bin/bash admin:password123:x:1000:1000:admin:/home/admin:/bin/bash ``` #### 自定义命令 添加攻击者期望的伪造命令: ``` # 创建自定义命令处理程序 mkdir -p honeyfs/bin echo '#!/bin/bash echo "CPU: 95%"' > honeyfs/bin/top chmod +x honeyfs/bin/top ``` ## ▶️ 运行蜜罐 ### 启动 Cowrie ``` cd ~/cowrie source cowrie-env/bin/activate # 前台启动(调试用) cowrie start --foreground # 后台启动(生产环境) cowrie start # 检查状态 cowrie status ``` ### 停止 Cowrie ``` # 优雅关闭 cowrie stop # 强制停止 cowrie stop --force ``` ### 重启 Cowrie ``` cowrie restart ``` ### 开机自启动 创建 systemd 服务: ``` sudo tee /etc/systemd/system/cowrie.service > /dev/null < ``` ### 持久化规则 ``` # 安装 iptables-services sudo dnf install -y iptables-services # 保存规则 sudo service iptables save # 或手动操作 sudo iptables-save > /etc/sysconfig/iptables ``` ## 📊 日志与监控 ### 日志位置 | 日志类型 | 位置 | 格式 | |----------|------|--------| | JSON 事件 | `~/cowrie/var/log/cowrie/cowrie.json` | JSON | | 文本日志 | `~/cowrie/var/log/cowrie/cowrie.log` | 文本 | | SQLite 数据库 | `~/cowrie/var/log/cowrie/cowrie.db` | SQLite | | 下载文件 | `~/cowrie/var/lib/cowrie/downloads/` | 二进制 | ### 实时监控 ``` # 实时查看 JSON 日志 tail -f ~/cowrie/var/log/cowrie/cowrie.json | jq # 彩色美化输出 tail -f ~/cowrie/var/log/cowrie/cowrie.json | jq -C '. | {timestamp: .timestamp, src_ip: .src_ip, eventid: .eventid}' # 过滤特定事件 tail -f ~/cowrie/var/log/cowrie/cowrie.json | jq 'select(.eventid == "cowrie.login.success")' ``` ### 日志轮转 防止磁盘空间问题: ``` # 添加到 crontab crontab -e # 添加每日轮转行 0 0 * * * /home/cowrie/cowrie/bin/cowrie-logrotate ``` ## 🔍 日志分析 ### 捕获的数据 Cowrie 捕获全面的攻击数据: | 数据类型 | 描述 | 示例 | |-----------|-------------|---------| | 🌐 **源 IP** | 攻击者的 IP 地址 | 192.168.1.100 | | 🔑 **登录尝试** | 用户名/密码尝试 | root/password123 | | 💻 **命令** | 执行的 Shell 命令 | `cat /etc/passwd` | | 📥 **下载** | 攻击者下载的文件 | malware.sh | | ⏱️ **会话时长** | 在蜜罐中停留时间 | 45 秒 | | 📡 **网络活动** | 出站连接 | C2 回调 | ### 分析示例 #### 统计登录尝试次数 ``` # 总登录尝试次数 cat ~/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid == "cowrie.login.failed") | .src_ip' | wc -l # 唯一攻击者 IP 数 cat ~/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid == "cowrie.login.failed") | .src_ip' | sort -u # Top 攻击者 IP cat ~/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid == "cowrie.login.failed") | .src_ip' | sort | uniq -c | sort -rn | head -20 ``` #### 分析命令 ``` # 最常用命令 cat ~/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid == "cowrie.command.input") | .input' | sort | uniq -c | sort -rn | head -20 # 搜索特定命令 cat ~/cowrie/var/log/cowrie/cowrie.json | jq 'select(.input | contains("wget"))' # 提取下载的 URL cat ~/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid == "cowrie.command.input") | .input' | grep -oE 'https?://[^ ]+' | sort -u ``` #### 生成报告 ``` # 每日摘要报告 #!/bin/bash LOGFILE=~/cowrie/var/log/cowrie/cowrie.json DATE=$(date +%Y-%m-%d) echo "=== Cowrie Honeypot Report - $DATE ===" echo "" echo "Total Events: $(cat $LOGFILE | jq -s 'length')" echo "Unique Attackers: $(cat $LOGFILE | jq -r '.src_ip' | sort -u | wc -l)" echo "Failed Logins: $(cat $LOGFILE | jq 'select(.eventid == "cowrie.login.failed")' | jq -s 'length')" echo "Successful Logins: $(cat $LOGFILE | jq 'select(.eventid == "cowrie.login.success")' | jq -s 'length')" echo "Commands Executed: $(cat $LOGFILE | jq 'select(.eventid == "cowrie.command.input")' | jq -s 'length')" ``` ### 可视化工具 ``` # 安装 ELK 堆栈以实现高级可视化 # 或使用简单 Python 脚本 pip3 install matplotlib pandas # 创建可视化 python3 << 'EOF' import json import pandas as pd import matplotlib.pyplot as plt with open('~/cowrie/var/log/cowrie/cowrie.json') as f: logs = [json.loads(line) for line in f] df = pd.DataFrame(logs) print(df['eventid'].value_counts()) df['eventid'].value_counts().plot(kind='bar') plt.savefig('cowrie_events.png') EOF ``` ## 🔒 安全注意事项 ### ⚠️ 重要警告 ### 最佳实践 1. **网络隔离** # 使用独立的 VLAN 或网络段 # 配置防火墙规则以限制出站流量 sudo iptables -A OUTPUT -o eth0 -m owner --uid-owner cowrie -j DROP 2. **资源限制** # 限制 CPU 和内存使用 sudo systemctl set-property cowrie.service CPUQuota=50% sudo systemctl set-property cowrie.service MemoryLimit=1G 3. **定期更新** # 保持 Cowrie 更新 cd ~/cowrie git pull source cowrie-env/bin/activate pip -r requirements.txt --upgrade ``` 4. **Log Security** ```bash # 保护日志文件 chmod 600 ~/cowrie/var/log/cowrie/*.json chmod 600 ~/cowrie/var/log/cowrie/*.db ``` ### 防火墙配置 ``` # 仅允许必要入站流量 sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload # 阻止蜜罐的出站连接 sudo iptables -A OUTPUT -m owner --uid-owner cowrie -j LOG --log-prefix "COWRIE-BLOCK: " sudo iptables -A OUTPUT -m owner --uid-owner cowrie -j DROP ``` ## 🐛 故障排除 ### 常见问题 #### 问题:Cowrie 无法启动 ``` # 检查端口冲突 sudo netstat -tlnp | grep 2222 # 检查日志 cat ~/cowrie/var/log/cowrie/cowrie.log # 验证虚拟环境 source ~/cowrie/cowrie-env/bin/activate which python ``` #### 问题:端口重定向不工作 ``` # 验证 iptables 规则 sudo iptables -t nat -L PREROUTING -n -v # 检查端口 22 是否已被占用 sudo netstat -tlnp | grep :22 # 使用 telnet 测试 telnet localhost 22 ``` #### 问题:权限被拒绝错误 ``` # 修复权限 sudo chown -R cowrie:cowrie ~/cowrie chmod -R 755 ~/cowrie # 检查 SELinux sudo setenforce 0 # Temporarily disable for testing sudo getenforce ``` #### 问题:日志未写入 ``` # 检查日志目录权限 ls -la ~/cowrie/var/log/cowrie/ # 验证磁盘空间 df -h # 检查配置 grep -A5 "output_json" ~/cowrie/etc/cowrie.cfg ``` ### 调试模式 ``` # 调试模式运行 cd ~/cowrie source cowrie-env/bin/activate twistd -n cowrie -c etc/cowrie.cfg --debug ``` ## 🤝 贡献 欢迎贡献!请遵循以下指南: 1. 叉取仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 打开合并请求 ### 报告问题 请提供以下信息: - Fedora 版本 (`cat /etc/fedora-release`) - Cowrie 版本 (`cowrie --version`) - Python 版本 (`python3 --version`) - 相关日志摘录 - 复现步骤 ## 📚 资源 ### 官方文档 - [Cowrie GitHub](https://github.com/cowrie/cowrie) - [Cowrie 文档](https://cowrie.readthedocs.io/) - [Cowrie Slack](https://cowrie.slack.com/) ### 社区与研究 - [蜜网项目](https://www.honeynet.org/) - [SANS 互联网风暴中心](https://isc.sans.edu/) - [Shodan](https://www.shodan.io/) - 搜索暴露的服务 ### 相关工具 | 工具 | 用途 | |------|---------| | [Dionaea](https://github.com/DinoTools/dionaea) | 恶意软件捕获蜜罐 | | [Conpot](https://github.com/mushorg/conpot) | ICS/SCADA 蜜罐 | | [T-Pot](https://github.com/telekom-security/tpotce) | 多蜜罐平台 | | [Elastic Stack](https://www.elastic.co/) | 日志分析与可视化 | ## 📄 许可证 本项目根据 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。 Cowrie 本身根据 BSD 3-Clause 许可证授权。 ## 🙏 感谢 - [Cowrie 团队](https://github.com/cowrie/cowrie) 提供优秀的蜜罐软件 - [蜜网项目](https://www.honeynet.org/) 进行威胁研究 - 网络安全社区持续贡献 ## ⚖️ 免责声明 **⚠️ 重要:** - **不要** 在没有适当安全控制的情况下将此蜜罐暴露到公共互联网 - 始终将蜜罐与生产网络隔离 - 了解您所在司法管辖区的法律含义 - 监控滥用行为并做出适当响应 - 永远不要使用捕获的数据进行恶意目的 作者不对本软件的任何误用或造成的损害承担责任。

用 ❤️ 为网络安全社区制作

⭐ Star this repo🐛 Report Bug🔀 Submit PR

标签:AI 威胁检测, Fedora, Homebrew安装, Honeypot, JSON 日志, LLM 安全分析, SSH 蜜罐, Telnet 蜜罐, 威胁情报, 开发者工具, 攻击模拟, 特权提升, 生产就绪, 端口重定向, 网络安全, 自动化部署, 蜜罐, 行为捕获, 证书利用, 逆向工具, 隐私保护, 驱动签名利用