从Hfish看蜜罐开发思路

很多文章说“蜜罐”一词是来自小说《The Cuckoo’s Egg》,克利福德·斯托尔(Clifford Stoll)写的一本记录他在1986年追踪一名黑客的故事。Clifford Stoll注意到一个系统账目上的错误,随着进一步调查,发现有黑客在入侵系统。在这个过程中,他创建了一些伪装的文件(假的军事机密文档等)当作诱饵,来吸引黑客访问,通过系统日志和网络流量监控和记录黑客的行为。虽然蜜罐这个词不是这么来的,但是这本书的故事实际用了最早的蜜罐技术。

蜜罐的英文是“honeypot”,直译就是装蜂蜜的罐子。蜜罐早期的表述称为“诱捕”,看起来是一个真实的计算机系统,实际上是为黑客准备的诱饵,在系统中故意植入一些缺陷,以检测入侵者的攻击。简单来说,假如我们想捕获某OA的未知漏洞,那么就可以在公网上部署该OA的蜜罐,等待攻击者用漏洞来攻击。所以蜜罐的一个很重要的应用是捕获对目标系统的未知漏洞和攻击,以及在野利用的方式。

交互设计

蜜罐设计主要分两种,高交互蜜罐和低交互蜜罐。低交互的蜜罐提供了有限的服务和系统,比如只模拟了OA的首页,或者模拟了OA某个功能的响应。其欺骗环境可能都是通过软件代码模拟实现的。而高交互蜜罐,一般采用真实的OA系统来搭建,大部分功能都具有交互性。

那么看到这一般就会有个疑问,高交互蜜罐既然采用真实的环境搭建,那蜜罐和真实环境的区别在哪儿呢?真实环境一般想要检测攻击,需要使用入侵检测系统IDS或者查询相关的日志。高交互蜜罐则是针对可能出现的攻击,如登录尝试、命令执行、文件访问等进行设计。比如在蜜罐中放置伪装的敏感信息文件。等待攻击者访问该文件,这样可以追溯攻击者的整个攻击路径。或者伪造了一些数据库的数据,吸引黑客攻击。另外,蜜罐是和真实环境隔离的。真实环境一旦被攻陷会造成数据泄漏,但是蜜罐被攻陷也不会造成太大危害。

高交互的蜜罐就意味着真实的环境,而很多软件都是需要购买的才能部署的,访问越频繁对网络资源的要求也越高。所以高交互蜜罐意味着高成本。

SSH蜜罐

以Go语言写的Hfish蜜罐为例看一下SSH蜜罐的交互。Hfish虽然免费,但是新版已经不开源了。此处从gitee上找的v0.6.5main.go入口文件可以查看软件的版本。

将1022设置为ssh蜜罐的端口,尝试访问ssh。我们把自己当作攻击者,输入Hfish设定的ssh校验用户名密码root/root,成功登录后尝试执行cat命令查看敏感文件。这里选了Hfish中有设定内容的文件/proc/version,对应的文件模板就是version.hf
Hfish ssh协议低交互

如果不是设定好的命令内容,命令行就只会回显如下内容。

Command 'xxx is not available.

这种就是低交互。提供有限的linux命令行。伪造ssh协议,设定好登录账号和命令,可以采集攻击者常用的ssh爆破密码本。检测攻击者命令。
ssh蜜罐捕获内容

整个ssh蜜罐的代码实现逻辑也很简单。从上图的config.json文件中读取ssh配置。然后用开源的https://github.com/gliderlabs/ssh构建了ssh服务器并启动ssh服务。接着就是交互的逻辑,我简化了一下代码,如下。
ssh交互代码

SSH蜜罐还经常用https://github.com/desaster/kippo的Kippo或者libopenssl编写。

FTP蜜罐

FTP文件传输协议,常用于远程下载文件等。Hfish ftp蜜罐的ftp协议用的开源的https://github.com/yob/graval。蜜罐核心代码是对ftp的文件下载功能进行模拟。放置了两个预先设定好的文件。

服务器上搭建一个正常的ftp环境,远程登录ftp,输入ftp ip。然后输入用户名和密码。登录成功就可以执行get file来下载文件
ftp正常的连接和下载过程

ftp服务器在配置时一般会配置用户登录后的目录,并且限制ftp服务能访问的目录。ftp蜜罐则是在限制的目录下放置了两个伪造的文件。
ftp蜜罐

Mysql蜜罐

Mysql协议的正常通信流程是,先进行TCP三次握手,然后服务器向客户端发送一个Greeting,包含了服务器mysql的版本等信息

mysql Greeting通信流量

接着客户端向Server发送用户名密码进行登录,如果登录成功,服务器给客户端发送OK包。
mysql OK响应

然后就是正常的sql查询语句交互了。所以mysql蜜罐在模拟时,首先要实现服务器上述两个连接步骤。Greeting和OK。
image.png

把上面的MySQL Protocol对应的数据包复制下来。然后就可以模拟整个流程。

Hfish mysql发包过程

另外,MySQL低版本,如5.X客户端在连接MySQL服务器时,服务器可以主动读取客户端上的文件。这个问题也可以参考伪造的mysql服务器https://github.com/Gifts/Rogue-MySql-Server。但是在Mysql高版本客户端下是无法读文件的,比如Mysql8.X。另外,想要读文件,需要客户端在连接服务器时开启--enable-local-infile

mysql -u root -p -h ip --enable-local-infile

Hfish Mysql蜜罐也实现了这一恶意操作。在config.ini中设置默认要读的文件。

config.ini

这里有一个很有意思的点。因为上面我们抓包了mysql通信的真实流量,后面也抓取了Hfish Mysql蜜罐的流量,如果对比来看。左边的Hfish蜜罐在Response OK后,在流量中有个明显的读文件/etc/group的操作。

Hfish Mysql流量和真实Mysql流量对比

所以如果想检测是否是伪造的Mysql蜜罐的话,我们可以伪造一个Mysql客户端,接收服务器的Mysql请求并对数据流中的字节进行解码。

Redis蜜罐

Redis(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统。它可以用作数据库、缓存和消息中间件,支持多种数据结构。它的通信协议是RESP(Redis Serialization Protocol)。它用于客户端和 Redis 服务器之间的数据交换。

RESP 使用特定的前缀字符来表示不同的数据类型,具体示例参考官网:https://redis.io/docs/latest/develop/reference/protocol-spec/

\r\n (CRLF)是协议的终止符
简单字符串:以 + 开头,例如:+OK\r\n
错误信息:以 - 开头,例如:-Error message\r\n
整数:以 : 开头,例如::1000\r\n
批量字符串:以 $ 开头,后跟字符串长度和实际内容,例如:$6\r\nfoobar\r\n
数组:以 * 开头,后跟元素个数和各个元素,例如:*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n

而Redis攻击常用的命令如config set dir /var/www/html/ ,该命令的RESP表示如下

*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$3\r\nDIR\r\n$15\r\n/var/www/html\r\n

所以Hfish在开发Redis蜜罐时重点的功能就是RESP解析。它这里只考虑了数组情况的命令解析。
Hfish RESP解析

整体的逻辑是根据\r\n进行分割,将分割后的数据存储到切片中。

Redis蜜罐请求处理逻辑

如果分割后的第一个数组是SET返回OK,如果是GET,返回字符串本身内容。这个符合SET和GET的用法,如下

Redis SET和GET用法

除了这几个核心的蜜罐,剩下的就是数据收集和展示的开发。展示页面的设计,日志的增删改查等。这些就不再解析了,Hfish支持写入mysql或者内置sqlite。如果自研规模更大也可以考虑EL+Django等模式。

另外,Hfish每个蜜罐都判断了当前机器是否采用RPC。RPC机制用于将捕获的数据发送到远程服务器进行处理和存储。这种方式便于集中管理和分析数据,提高系统的灵活性和扩展性。通过判断是否启用了 RPC,代码可以灵活地选择将数据发送到远程服务器或使用本地方法处理。

通过上面这些Hfish的蜜罐代码,相信对蜜罐的设计和开发都有了一定的了解。我们可以获取ssh爆破的字典、恶意的IP列表。一旦攻击者进入系统,还可以收集到病毒样本、攻击流程。这说明蜜罐是有一定的意义的。但大部分蜜罐都带有自己的特征,尤其是开源蜜罐的指纹很多都被识别了。有经验的攻击者一看就知道自己踩了蜜罐,尤其是很多OA,只做了首页甚至没有开发类似的响应功能。如果做成高交互蜜罐,成本又很高。商业的蜜罐可以参考默安https://www.moresec.cn/product/magic-shield。

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值