Chameleon蜜罐的多协议支持原理
安全研究 | 使用Chameleon蜜罐监控网络流量和用户凭证
在网络攻防的暗处,一个蜜罐能同时扮演十几种不同的服务,这听起来像天方夜谭,但Chameleon确实做到了。它支持从SSH、HTTP到SMB、Redis等近二十种协议,这种“多面手”能力并非简单的端口监听,其背后是一套精巧的模块化设计与协议模拟原理。
模块化:从“大杂烩”到“乐高积木”
传统单体蜜罐在扩展新协议时往往牵一发而动全身,需要修改核心代码。Chameleon则采用了一种更聪明的思路——将每个协议服务视为一个独立的脚本模块。你可以像导入一个Python库那样,在代码中引入ssh_server或http_server。这种设计意味着,每个协议模块都封装了自己的状态机、交互逻辑和日志格式,彼此隔离,互不干扰。开发者想新增一个MySQL模拟器?只需要按照接口规范编写一个新的模块文件,系统就能自动识别并加载它。
协议栈的精准模拟,而非简单回放
多协议支持的核心挑战在于“真实性”。攻击者不是傻瓜,一个只会回复固定Banner的SSH服务几秒钟就会被识破。Chameleon的每个模块都深入到了应用层协议层面。以它的SMB服务器为例,它并没有自己从头实现一套复杂的SMB协议,而是巧妙地利用了Impacket这样的第三方高级库。Impacket本身包含了大量对Windows协议的分析和实现,这使得Chameleon的SMB模块能够处理复杂的协商过程、树连接请求,甚至对部分命令做出符合逻辑的响应,从而极大地提升了欺骗性。
对于像RDP、VNC这类图形协议,完全模拟客户端渲染是不现实的。Chameleon的策略是“模拟会话建立”。它的RDP模块(基于Twisted)会完成标准的RDP连接握手,协商加密套件,等待客户端发送凭据。一旦攻击者输入用户名和密码,蜜罐就完成了它的核心任务——记录凭证,至于后续的图形交互,则可以优雅地超时或断开。这种“点到为止”的模拟,在资源消耗和欺骗效果之间找到了绝佳的平衡。
统一的交互与日志中枢
支持再多协议,如果数据七零八落也毫无价值。Chameleon的另一个精妙之处在于其统一的控制与日志层。无论背后运行的是Python的socketserver、Twisted框架还是其他异步IO库,所有模块产生的事件——一次失败的登录、一条可疑的指令、一个端口扫描——都被格式化成结构化的日志消息。
这些日志通过预设的管道(如输出到终端、写入数据库)汇流到中心。尤其是对接PostgreSQL数据库后,所有跨协议的攻击行为得以关联分析。攻击者先用Nmap扫描了HTTP和SSH端口,然后尝试爆破SSH密码,最后连接到Redis端口执行可疑命令——这一系列横跨多个服务的攻击链,在Grafana仪表盘上清晰可见。多协议支持的价值,此刻才真正体现出来:它不再只是收集孤立的警报,而是在绘制一幅完整的入侵者画像。
所以,下次当你看到一份列出了长长一串支持协议列表的蜜罐时,不妨想想它背后是像Chameleon这样由模块化构建、深度协议模拟和统一数据分析组成的精密机器。它静静地待在网络里,像一座布满各种房间的迷宫,等待不速之客闯入,并在每一个房间门口,记下他们的模样。

参与讨论
这个模块化的设计思路确实很聪明,扩展起来方便多了。
有人试过在实际环境部署吗?效果咋样?
SMB用Impacket库确实取巧了,但模拟深度够用不?
之前自己写过一个简单的Telnet蜜罐,光协议交互就折腾了好几天,这种多协议的更复杂。
感觉RDP那种点到为止的模拟策略很实用,资源消耗小。
所以日志统一到PostgreSQL是关键,不然数据太散了没法分析。
对于VNC这种图形协议,只模拟握手真的能骗过高级攻击工具吗?🤔
文章把原理讲得挺清楚的,比光列个功能清单强。
Impacket库这个点抓得挺准,省了好多事
@ 机敏羚羊 省下的时间还能干点别的