ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三种蜜罐同台实测:Pentbox、Defnet、Cowrie 场景选型与部署避坑

三种蜜罐同台实测:Pentbox、Defnet、Cowrie 场景选型与部署避坑 简介这份文档面向网络安全初学者与渗透测试爱好者系统讲解 Defnet、Pentbox、Cowrie 三种蜜罐的搭建与使用方法帮助读者在实验环境中理解蜜罐的诱捕、监视与日志记录机制。其中 Pentbox 与 Cowrie 的操作均在 Kali Linux 下完成Defnet 则用于模拟 Web、FTP、Telnet 等虚假服务并监视连接过程覆盖从快速自动配置到手动指定端口、伪装系统信息等不同难度层级。资源包共 1 个 docx 文件约 7.96MB内容以图文步骤与命令记录为主便于对照复现。目前已有 3082 人学习下载适合想入门蜜罐部署、了解攻击行为捕获思路的读者参考也可作为网络安全课程实验的辅助材料。通过阅读可掌握三类蜜罐的安装配置流程、监听与告警设置方法以及日志查看与端口伪装等实用技巧为后续深入安全研究打下基础。1. 三种蜜罐同台实测Pentbox、Defnet、Cowrie 到底该在什么场景下用很多人第一次接触蜜罐部署脑子里想的是「抓几个真实攻击者」结果搭完发现要么日志看不懂要么蜜罐自己先被拿下了。我这次把 Pentbox、Defnet、Cowrie 三种蜜罐放在同一台 Kali Linux 上跑了一遍结论有点反直觉Pentbox 适合五分钟验证概念Defnet 适合做 Windows 服务伪装演示真正能长期挂着收数据的只有 Cowrie。如果你手头只有一台 Kali 虚拟机想搞清楚蜜罐到底能拿到什么、怎么配才不会被反向利用这篇笔记可以直接照着复现。三种蜜罐的定位差异很大选错了不是白干是可能把真实主机暴露出去。2. Pentbox 快速上手Ruby 套件里的 80 端口监听与手动配置Pentbox 是一个用 Ruby 写的安全套件里面塞了不少渗透测试辅助工具蜜罐只是其中一个模块。它的优势是轻不需要额外装数据库或者虚拟环境Kali 自带 Ruby 就能跑。但它的交互是纯菜单式的第一次用容易在选项里绕晕。2.1 下载、解压与启动在 Kali 终端里直接拉源码包注意 Pentbox 的版本号在文件名里解压后目录名要对上。# 下载 pentbox-1.8 源码包 wget https://sourceforge.net/projects/pentbox18realised/files/latest/download/pentbox-1.8.tar.gz # 解压到当前目录 tar -zxvf pentbox-1.8.tar.gz # 进入解压后的目录 cd pentbox-1.8/ # 查看目录内容确认 pentbox.rb 存在 ls # 用 Ruby 执行主程序 ./pentbox.rb这里有几个参数需要留意。wget后面跟的是 SourceForge 的 latest 链接实际下载下来的文件名可能带重定向如果tar报错先ls看一下真实文件名。./pentbox.rb依赖系统里的 Ruby 解释器Kali 默认有如果提示权限不够先chmod x pentbox.rb。执行后会看到一个数字菜单蜜罐功能藏在Network Tools下面。2.2 快速自动配置与手动配置的差别进入菜单后依次选2Network Tools再选3Honeypot。这时候会出现两个选项Fast Auto Configuration 和 Manual Configuration。快速自动配置的逻辑很简单直接绑定 80 端口开始监听任何访问都会返回Access denied。适合做演示比如你在浏览器里打开http://192.168.44.130页面上出现拒绝访问同时终端里会打印HONEYPOT ACTIVATED ON PORT 80和INTRUSION ATTEMPT DETECTED。这两行输出就是 Pentbox 的全部反馈没有结构化日志也没有攻击者指纹。手动配置才是 Pentbox 稍微能用的地方。选2之后它会依次问你开放哪个端口、返回什么错误信息、是否保存 log 文件、log 文件名是什么、是否开启蜂鸣报警。我一般会这样填端口填23模拟 Telnet 服务错误信息填Login incorrect看起来像真的登录失败保存 log 选yes文件名用pentbox_telnet.log蜂鸣报警选no不然终端会一直响配置完再用另一台机器telnet过来Pentbox 会记录这次连接。同样的流程可以换成 21、22、443 端口Pentbox 都能监听但它本质上只是一个端口监听加固定回显攻击者多问几句就会露馅。提示Pentbox 的 log 文件默认写在当前工作目录如果你在/root下启动log 就在/root里。别在跑完蜜罐后忘了把 log 挪走否则下次启动会覆盖。Pentbox 的局限很明显它没有伪文件系统没有交互式 shell攻击者连上来看到的就是一个固定字符串。用来做教学演示或者内部安全意识培训足够真要靠它抓攻击者行为数据维度太单薄。3. Defnet 蜜罐实验虚拟 Telnet 服务与 Windows 伪装参数Defnet 是 Windows 平台上的图形化蜜罐工具和 Pentbox 完全不是一个路子。它的卖点是可以虚拟出 Web、FTP、SMTP、Finger、POP3、Telnet 等多种服务而且能伪装 Windows 主机的盘符、卷标、MAC 地址、网卡类型。如果你要模拟一台「看起来像 Windows Server」的靶机Defnet 的伪装选项比 Pentbox 丰富得多。3.1 虚拟 Telnet 服务的配置流程Defnet 跑在物理机上虚拟机里的 Kali 作为攻击方去连。先在物理机打开 Defnet点击HoneyPot按钮进入设置对话框。第一步勾选Telnet Server设置用户名和密码。我这次设的是root/123456故意用弱口令因为蜜罐的目的就是让攻击者觉得「这台机器能登进去」。第二步点右下角的Advanced配置 Telnet Server 的高级伪装项。这里有几个参数值得认真填伪装项填写内容作用DriveC:伪装系统盘符VolumeSYSTEM卷标看起来像 Windows 系统盘目录创建时间2020-01-15让目录时间戳不突兀目录名Windows模拟系统目录Free space in bytes10737418240假装有 10GB 剩余空间MAC 地址00-0C-29-XX-XX-XX用 VMware 的 OUI 前缀网卡类型Intel PRO/1000常见服务器网卡这些参数填完之后攻击者 telnet 上来看到的 banner 和目录结构会更像一台真实 Windows 主机。如果不填Defnet 默认的伪装很粗糙有经验的人一眼就能看出是蜜罐。第三步回到主对话框点Monitore开始监听。物理机用ipconfig查到 IP 是192.168.44.1虚拟机 IP 是192.168.44.132。在虚拟机里执行telnet 192.168.44.1连接成功后输入root/123456Defnet 的 Monitore 窗口会实时显示连接过程、输入的用户名密码、以及后续的命令交互。3.2 监听记录里能看到什么Defnet 的记录界面会分条显示连接建立、用户名输入、密码输入、登录成功或超时。我这次测试时故意先输错一次密码再输对Monitore 里完整记录了两次尝试。这个功能比 Pentbox 强的地方在于它能区分「连接」和「登录」两个阶段而 Pentbox 只记录「有人访问了端口」。但 Defnet 的问题也很明显它跑在 Windows 上依赖图形界面没法像 Cowrie 那样丢在服务器上长期跑。而且它的虚拟服务是模拟的攻击者如果上传文件或者执行复杂命令Defnet 没法像 Cowrie 那样把文件存下来。它更适合做内网欺骗或者安全培训演示不适合做真实攻击捕获。注意Defnet 的 Telnet 服务默认不加密所有交互都是明文。如果你在真实网络里用确保它只监听内网地址别暴露到公网。4. Cowrie 蜜罐搭建Python 虚拟环境、端口转发与 SSH 伪装Cowrie 是三种蜜罐里最接近「生产可用」的一个。它是一个中等交互的 SSH 蜜罐能记录攻击者暴力破解用的字典、输入的命令、上传或下载的文件。攻击者上传恶意文件后执行会失败所以蜜罐本身比较安全。代价是安装步骤多依赖容易报错下面把我踩过的坑按顺序写清楚。4.1 创建专用用户与安装依赖Cowrie 不建议用 root 跑先建一个非 root 用户。# 创建 honey 用户-r 表示系统用户-m 表示创建家目录 useradd -r -m -s /bin/bash honey # 设置密码这里为了方便设为 123456 passwd honey # 安装 Python 相关依赖包 apt-get install -y python-twisted python-crypto python-pyasn1 \ python-gmpy2 python-mysqldb python-zope.interface # 安装 virtualenv apt-get install virtualenvuseradd的-r参数创建的是系统用户不会在登录界面显示适合跑服务。-m确保家目录存在Cowrie 后面会用到。依赖包这一串里python-twisted是异步网络框架python-crypto和python-pyasn1处理 SSH 加密python-gmpy2做大数运算缺一个 Cowrie 都起不来。4.2 下载 Cowrie 并配置虚拟环境# 进入 /opt 目录 cd /opt # 克隆 Cowrie 源码 git clone http://github.com/micheloosterhof/cowrie # 进入 Cowrie 目录 cd /opt/cowrie # 创建 Python 虚拟环境 virtualenv env # 激活虚拟环境 source env/bin/activate # 安装 Python 包 pip install twisted cryptography pyopenssl gmpy2这一步大概率会报错提示缺少cffi、libffi、libssl等系统库。别急退出来装系统依赖再重新执行。# 安装编译依赖 apt-get install -y python-cffi libffi-dev libssl-dev apt-get install -y libgmp-dev libmpfr-dev libmpc-dev # 重新激活虚拟环境并安装 source /opt/cowrie/env/bin/activate pip install twisted cryptography pyopenssl gmpy2libffi-dev和libssl-dev是编译cryptography包必须的libgmp-dev系列是gmpy2的依赖。这几个包装完pip 安装基本就能过。4.3 修改配置与端口转发# 改变 /opt/cowrie 的拥有者 chown -R honey:honey /opt/cowrie # 复制配置文件 cd /opt/cowrie cp cowrie.cfg.dist cowrie.cfg # 修改 start.sh 里的 umask vim start.sh # 把 -- umask 0077 改成 -- umask 0022 # 修改蜜罐 SSH 端口 vim cowrie.cfg # 把 listen_port 改成 63333umask从0077改成0022是为了让日志文件权限更宽松方便后续读取。listen_port设成63333是因为默认的2222太容易被 nmap 扫出来高于 60000 的端口在默认扫描里不会被覆盖。接下来做端口转发把公网访问 22 端口的请求重定向到蜜罐端口。# 将 22 端口的请求转发到 62223 iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 62223 # 修改真实 SSH 端口 vim /etc/ssh/sshd_config # 把 Port 22 改成 Port 62225 # 重启 SSH 服务 service ssh restart这里有个容易翻车的点iptables转发规则里的目标端口是62223但 Cowrie 实际监听的是63333。这两个数字要对上否则流量转过去没人接。我一般会把 Cowrie 的listen_port和iptables的--to-port设成同一个值减少混淆。4.4 启动 Cowrie 与验证# 切换到 honey 用户 su honey # 启动蜜罐 cd /opt/cowrie bin/cowrie start启动时可能报缺少configparser、service_identity、pycrypto、tftpy直接 pip 补装。pip install configparser service_identity pycrypto tftpy装完再bin/cowrie start看到启动成功的提示后用另一台机器 SSH 连接。注意连的是蜜罐端口不是真实 SSH 端口。# 从另一台机器连接蜜罐 ssh root192.168.44.130 -p 2222连接成功后Cowrie 会返回一个伪造的 SSH banner。登录进去后随便敲几个命令比如ping www.baidu.com然后去看/opt/cowrie/var/log/cowrie/cowrie.log和cowrie.json里面会记录你输入的每一个命令和返回结果。cowrie.json是结构化日志适合后面用 ELK 或者脚本做分析。提示Cowrie 的日志目录在/opt/cowrie/var/log/cowrie/cowrie.log是纯文本cowrie.json是 JSON 格式。做攻击行为分析时优先看 JSON字段更全。5. 避坑与排查三种蜜罐最容易翻车的五个地方5.1 Pentbox 启动后端口没监听现象执行./pentbox.rb后选了蜜罐选项但另一台机器连不上。原因Pentbox 默认绑定 80 端口如果 Kali 上已经有 Apache 或者 Nginx 占用了 80Pentbox 会静默失败。解决先netstat -tlnp | grep 80确认端口占用把占用程序停掉或者在手动配置里换一个高位端口比如8080。5.2 Defnet 的 Monitore 没有记录现象Telnet 连接成功了但 Monitore 窗口一片空白。原因Defnet 的监听和 Monitore 是两个独立操作点了HoneyPot设置完必须再点Monitore才开始记录。解决确认 Monitore 按钮处于按下状态并且物理机防火墙没有拦截 23 端口。5.3 Cowrie 虚拟环境激活后 pip 仍然报错现象source env/bin/activate之后pip install还是提示缺少cffi。原因虚拟环境是基于系统 Python 创建的系统库缺失时虚拟环境里也编译不了。解决退出虚拟环境用apt-get install装完libffi-dev、libssl-dev、libgmp-dev再重新激活安装。不要试图在虚拟环境里用 pip 装系统库。5.4 iptables 转发规则重启后失效现象配置好端口转发后 Cowrie 能收到连接但重启机器后转发没了。原因iptables规则默认不持久化重启就清空。解决用iptables-save /etc/iptables/rules.v4保存规则或者装iptables-persistent包。我一般会在crontab里加一条reboot任务重新应用规则。5.5 Cowrie 日志文件权限不对导致读不了现象cowrie.log存在但cat提示权限不够。原因start.sh里的umask还是0077日志文件只有 honey 用户能读。解决确认start.sh里已经改成umask 0022然后删掉旧日志重启 Cowrie。旧日志的权限不会自动变必须重建。6. 进阶技巧用 Cowrie JSON 日志做攻击行为提取Cowrie 的cowrie.json是三种蜜罐里唯一能直接拿来做自动化分析的数据源。每一行是一个 JSON 对象包含事件类型、时间戳、源 IP、输入命令等字段。我一般会写一个 Python 脚本把暴力破解的字典和攻击者输入的命令分开提取。import json # 读取 cowrie.json提取登录失败和命令输入事件 def parse_cowrie_log(log_path): failed_logins [] commands [] with open(log_path, r) as f: for line in f: try: event json.loads(line.strip()) except json.JSONDecodeError: continue # 登录失败事件记录用户名和密码 if event.get(eventid) cowrie.login.failed: failed_logins.append({ src_ip: event.get(src_ip), username: event.get(username), password: event.get(password) }) # 命令输入事件记录命令内容 elif event.get(eventid) cowrie.command.input: commands.append({ src_ip: event.get(src_ip), input: event.get(input) }) return failed_logins, commands # 调用示例 logins, cmds parse_cowrie_log(/opt/cowrie/var/log/cowrie/cowrie.json) print(f暴力破解尝试: {len(logins)} 条) print(f命令输入: {len(cmds)} 条) # 打印前 5 条命令 for c in cmds[:5]: print(c[src_ip], -, c[input])这段脚本的核心逻辑是按eventid分流。cowrie.login.failed事件里带username和password字段直接就是攻击者用的字典。cowrie.command.input事件里带input字段是攻击者在蜜罐里敲的命令。把这两个列表导出来登录失败的去重后就是一份真实字典命令列表能看出攻击者的意图比如是挖矿、反弹 shell 还是单纯扫端口。参数上要注意cowrie.json可能很大逐行读取比一次性json.load更稳。如果日志里有非 JSON 行比如启动时的调试输出用try/except跳过。提取出来的命令列表建议按源 IP 分组同一个 IP 的连续命令才构成完整攻击链。验证方法很简单用另一台机器 SSH 连蜜罐故意输错密码三次再登录进去敲whoami、uname -a、cat /etc/passwd然后跑脚本看能不能把这三条命令和三次失败登录都抓出来。如果能说明日志解析没问题可以挂到生产环境长期跑了。从那以后我每次部署 Cowrie都会先跑一遍这个脚本验证日志管道通不通再把它接到定时任务里每天导出一次。蜜罐这东西搭起来只是第一步能把数据洗干净才是真正省时间的地方。希望帮到你。本文还有配套的精品资源点击获取
返回列表