从代码角度理解什么是蜜罐
一、蜜罐概念
1.1 蜜罐的定义
百度百科:蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。
维基百科:蜜罐通常伪装成看似有利用价值的网络、数据、计算机系统,并故意设置了bug,用来吸引黑客攻击。由于蜜罐事实上并未对网络提供任何有价值的服务,所以任何对蜜罐的尝试都是可疑的。蜜罐中还可能装有监控软件,用以监视黑客入侵后的举动。
个人理解:蜜罐是没有真正实现服务功能,却仿照正常服务对客户端请求进行回应,且一般具有比正常服务更强的操作记录功能的服务仿冒软件。比如一个ftp密罐就是并没有真正实现ftp服务器的功能,却仿照正常ftp服务器对ftp请求进行回应,还一般具有比正常ftp服务更强的操作记录功能的ftp服务仿冒软件。在第二大节中正是以一个ftp蜜罐来进行演示,来更具体地说明这个定义(为了程序简单并没有操作记录功能)。
1.2 蜜罐的分类
根据蜜罐对应仿冒程度可以分为以下三类密罐:
低交互蜜罐:只是声称功能已经实现但实际没实现很容易看出破绽的蜜罐。比如后文的ftp蜜罐对get等指令都未做处理,用户很多命令都执行不了就会产生怀疑,所以只能算是一个低交互蜜罐。
高交互蜜罐:声称功能实现且大多功能让攻击者使用起来感觉就和真的服务没区别的蜜罐。比如后文的ftp蜜罐如果在现在基上对get等其他指令都做处理那就可以成为一个高交互蜜罐。
实系统蜜罐:真的实现所有服务功能的蜜罐。比如后文的ftp蜜罐不是对指令做假的回应而是真真正正实现ftp的功能那就是一个实系统蜜罐。
但一般情况下实系统蜜罐并不是真自己从头去写,而是采用安装有漏洞版本辅以其他手段完成监控的方式。比如安装有漏洞版本的vsftpd加通过流量镜像进行监控的形式实现。
在常规介绍中蜜罐一般只指低交互蜜罐和高交互蜜罐,但在实际部署中为了提高逼真程度、让攻击者不疑有他地使用自己的攻击手段攻击系统经常直接部署实系统蜜罐。
另外还有被动型蜜罐和主动型密罐的说法。被动型密罐就是装了就完事被动等待黑客发现和攻击的蜜罐;主动蜜罐就是装完之后还装个客户端去主动发送数据包连接服务端的蜜罐(比如你装了个ftp蜜罐还再装个ftp客户端隔三差五地进行登录查看退出等操作)其意思是黑客可能会通过流量监测发现和攻击服务通过主动发包能增大黑客发现和攻击蜜罐的机率,不过公网到内网我都没想到有什么简单的方法能直接获取数据包所以这种机率能增大多少是有点疑问的。
1.3 蜜网
密网就是所有密罐的总和。我总怀疑密网和H5一样是销售制造的新名词,不过叫密码确实更能体现蜜罐系统的整体性,所以也不算一无是处:
在搭建密罐系统时,为了更强的诱捕能力,通常会不只单独部署一个密罐而经常是使用多台设备安装多个密罐,比如这台启ftp蜜罐那台启smtp蜜罐等。
在搭建密罐系统时,为了营造更逼真环境,通常会使用实系统蜜罐,而实系统蜜罐意味着真实的系统意味着真实的漏洞意味着机器可能真会被攻破,所以通常会将蜜罐系统放在独立的网络环境中。
在搭建蜜罐系统时,更了方便性,通常会有角色分工,比如有统一的流量监控主机和日志监控主机。
二、从代码角度理解什么是蜜罐
2.1 蜜罐编写思路
从代码角度看,"没有真正实现服务功能"就是使用“虚假”代码替换正常服务中真正实现功能的代码这不是难点,“操作记录功能”主要是写日志也不算难点,“仿照正常服务对客户端请求进行回应”这才是难点。正常服务一般是根据协议文档开发的,所以我们可以像正常服务开发一样根据服务的协议文档来编写蜜罐。
但是读协议文档往往是很费劲的一件事。我们可以先搭建一个正常的服务,再安装一个客户端,然后使用wireshark拦截客户端与服务端的交互数据包,最后收到什么客户端请求就模仿正常服务返回同样的数据包就可以了。
比如我这里实现的ftp蜜罐,就是通过先用IIS搭建ftp服务,然后使用windows自带的客户端,再然后使用wireshark拦截到如下数据包,最后编码模仿IIS的ftp服务进行响应实现的。
2.2 ftp蜜罐代码实现
代码解析可看注释不多坠述,相对略长所以将代码收起,展开即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2.3 ftp蜜罐与ftp服务使用对比
现具有一个IIS搭建的ftp服务,和一个ftp蜜罐,我们对其进行如下操作:
服务 | 监听端口 | 用户 | 蜜码 | 文件 | 测试操作 |
IIS搭建的ftp服务 | 21 | ls | abcd1234 | 根目录下有一ftp_server.txt文件 | 登录---查看文件----退出 |
ftp服务密罐 | 21212 | ls | abcd1234 | 声称自己在根目录下有一ftp_server.txt文件 | 登录---查看文件----退出 |
IIS搭建的ftp服务ftp客户端操作截图如下:
ftp服务密罐ftp客户端操作截图如下:
总结如下:
服务类型 | 数据包 | 功能是否真正实现 | 客户端使用感受 |
IIS搭建的ftp服务 | 按协议发送 | 真正实现(比如2.1中的ls是真列出ftp目录中的文件) | 正常ftp服务 |
ftp服务密罐 | 按协议发送 | 声称实现(比如2.2中的ls并不是真列出ftp目录中的文件,而是代码设定好的回应) | 正常ftp服务 |
也就是说在以上操作中,ftp密罐并没有真正实现ftp服务器的功能,却仿照正常ftp服务器对ftp请求进行回应,使用用户在使用ftp蜜罐和使用ftp服务交互过程完全一样感觉不到任何差别。如果是攻击者那么他也会认为自己发现了一个ftp服务,而不疑有他地使用自己的各种手法动该ftp蜜罐进行攻击和利用,又如果我们给上述蜜罐中加入日志功能那么攻击者的攻击手法将被我们一览无余。前者正是蜜罐的含义而后者正是蜜罐的意义。
三、常见蜜罐软件
蜜罐说到底就是一个“假”的服务,所以一般来说编写一个密罐难度比编写一个服务要简单,现在真服务都有很多开源的更简单的假服务没理由没有开源的。
可以到github上去搜honeypot,start越多的就是越受人认可的蜜罐;或者直接参考蜜罐列表:https://github.com/paralax/awesome-honeypots
蜜罐由于代码量比真服务少另外也为了方便部署统一监测,很多蜜罐软件并不只实现了一个蜜罐有可能同时实现了ftp/telnet/ssh等多个蜜罐,见到可部署多个服务蜜罐的软件不用觉得惊讶。