0x01前言蜜罐是网络红蓝攻防对抗中检测威胁的重要产品。防御者经常使用蜜罐来分析攻击行为、捕获漏洞,甚至反击攻击者。攻击者可以通过蜜罐识别技术发现并避开蜜罐。因此,我们有必要从红队攻击者的角度来研究蜜罐识别的方法和方法。0x02简介蜜罐是一种安全威胁检测技术,其本质是引诱和欺骗攻击者,通过记录攻击者的攻击日志来产生价值。安全研究人员可以通过分析蜜罐的被攻击记录,推断出攻击者的意图、手段等信息。根据蜜罐的交互特性,可分为低交互蜜罐和高交互蜜罐。后者提供了一个真实的易受攻击的系统,目的是让攻击者认为他在攻击一个真实的系统。在甲方的一些实际蜜罐构建中,也提出了使用真实的服务组件构建蜜罐系统的思路。低交互蜜罐并没有那么复杂,提供了一个不完善的交互系统,有的甚至只是模拟一个响应。网上大部分的低交互蜜罐都是开源蜜罐。由于其独特的开放性,人们可以识别和避开它的特性。在本次分析过程中,检测目标是一个默认配置的开源蜜罐。我们调查了19个开源蜜罐和模糊测试签名蜜罐。本次分析的目的是从攻击者的角度找出开源蜜罐的特点,同时完成各种开源蜜罐在全网的分布。用于此分析的蜜罐如表2-1所示。表2-1Honeypot0x03本分析基于蜜罐检测的特征3.1协议返回特征Can。以Dionaea的Memcached协议为例。在实现Memcached协议时,Dionaea随机化了很多参数,但一些参数如version、libevent、rusage_user是固定的。可以通过组合查询固定参数来确定蜜罐。其他蜜罐的协议特征如表3-1所示。表3-1具有协议响应特性的蜜罐3.2协议实现的缺陷部分开源蜜罐对部分协议的模拟实现并不完善。我们可以通过发送一些特定的请求包并得到响应来判断是否是蜜罐。3.2.1SSH协议SSH协议(SecureShell)是一种加密的网络传输协议,最常用作远程登录。SSH服务器在与客户端建立连接时需要经过五个步骤:协商版本号阶段。协商关键算法阶段。认证阶段。会话请求阶段。互动环节阶段。SSH蜜罐在模拟协议时也是实现了这五个步骤。Kippo是一款经典的SSH蜜罐,现已停止更新。它使用twisted来模拟SSH协议。最新版本的kippo使用了非常旧的twistd15.1.0版本。这个版本有一个明显的特点。在版本号交互阶段,客户端的SSH版本需要采用SSH-主版本-次版本软件版本号的形式。当版本号为不受支持的版本时,如SSH-1.9-OpenSSH_5.9p1,会报错“badversion1.9”并断开连接。根据Kippo的配置,只支持SSH-2.0-X和SSH-1.99-X两个大版本,其他大版本会报错。3.2.2Mysql协议部分Mysql蜜罐会构造一个恶意的mysql服务器,攻击者连接到恶意的mysql服务器后发送查询请求,恶意的mysql服务器会读取攻击者指定的文件。最早的如https://github.com/Gifts/Rogue-MySql-Server,可以伪造一个恶意的mysql服务器,并使用mysql客户端连接,如下图,恶意mysql服务器已经成功读取了客户端的/etc/password内容。检测此类蜜罐的步骤可以分为以下几个步骤:伪造客户端连接蜜罐mysql服务连接成功发送mysql查询请求并收到mysql服务器的响应,通过读取得到的消息进行分析来自伪造的mysql客户端的文件数据包结构:文件名长度+1+\x00\x00\x01\xfb+文件名然后通过相应的socket构建过程就可以识别出伪造的mysql服务器,抓取读取的文件姓名。3.2.3Telnet协议Telnet协议在Hfish蜜罐中实现,默认监听23端口。模拟协议默认不需要校验,对每条命令的结果以响应模板进行响应。命令为空或直接回车换行时,会响应默认模板,模板内容为test。因此,如图所示,可以利用该特性检测telnet服务上的蜜罐。3.3明显的WEB特征一些开源蜜罐提供web服务,这些web服务往往具有一些明显的特征,可以用来检测蜜罐。比如具体的js文件,build_hash或者版本号等。还是以Hfish为例。HFIsh在默认的8080端口上实现了一个WordPress登录页面,页面中使用了一个名为x.js的javascript文件,用于记录尝试爆破的登录名和密码。直接判断WordPress登录页面是否存在x.js文件即可判断是否是蜜罐。还有就是glastopfhoneypot,这个是最明显的,没有任何伪装。可以通过页面下方的博客评论输入框来识别。WEB上其他常见的开源蜜罐的特点如下表所示。表3-2具有明显WEB特征的蜜罐3.4上下文特征一些开源蜜罐具有明显的命令执行上下文特征。本节以Cowrie和Hfish为例。2020年6月,研究人员发现Mirai的新变种Aisuru检测可以根据命令执行的上下文检测Cowrie开源蜜罐。当满足以下三个条件时,Aisuru将被判断为蜜罐:设备名称为localhost。设备中的所有进程在6月22日或6月23日启动。用户名richard存在。查看Cowrie源码,在默认配置下执行ps命令,发现进程的启动时间为6月22日或6月23日,但在最新版本的Cowrie中,richard被phil取代,hostname为替换为来自本地主机的svr04。受Aisuru的启发,可以根据某些特定上下文检测蜜罐。例如,在最新版本的Cowrie中,一些命令的结果在默认配置下是固定的。如:cat/proc/meminfo这个命令无论执行多少次都会得到相同的内容,但这在真实系统中是不可能的。除了Hfish蜜罐,Hfish还实现了SSH协议,默认监听22端口。通过上下文也可以轻松识别蜜罐的SSH协议。和telnet协议一样,SSH协议在直接回车换行的时候默认会执行默认的输出测试。3.5模糊测试的特点模糊测试(fuzztesting)是一种安全测试方法,通过生成随机数据输入测试系统来检查系统响应或状态,以发现潜在的安全漏洞。有些蜜罐是借用Fuzz测试的思想来实现蜜罐系统的。通过《通过Anglerfish蜜罐发现未知的恶意软件威胁》中netlab的zom3y3的fuzz测试蜜罐的介绍,我们知道它具有以下特点:响应任意端口的TCPSYN包。根据协议特性,始终返回正确的响应。返回预定义或随机的Payload签名库集合。蜜罐很容易通过人为判断。其目的是模拟蜜罐的fuzzing特性,通过预先定义大量关键字来干扰扫描器。这类蜜罐可以通过跨服务特性来判断,比如开启HTTP服务响应upnp协议,或者通过服务器的长度或数量来判断。由于不知道是哪个蜜罐产品提供了这个蜜罐服务,quake将这个蜜罐标记为未知蜜罐,可以使用语法app:"unknownhoneypot"进行搜索。0x04开源蜜罐的使用4.1蜜罐的分布在确定了一些开源蜜罐的特征后,我们利用这些特征进行全网匹配,找到了369161条服务数据和72948个独立IP。全球和国家蜜罐分布如图所示。可以看出,在这些开源蜜罐中,中国的数量最多。其中,中国台湾占1/3,居中国首位。并且在全球省份排名中,台湾省的数量位居第一。从ASN分布来看,全球TOP5ASN数量如表所示。发现开源蜜罐主要部署在云厂商或教育网络。4.2生命周期结合蜜罐服务资产数量和ASNTOP5全年分布情况可知,全年蜜罐数量出现三个高峰,分别为4月、6月和12月。在讨论蜜罐的模糊测试时,发现响应中包含大量与服务相关的关键字,用于干扰扫描器的服务识别。其中,发现服务响应中包含weblogic关键字的蜜罐从11月开始爆发。我们知道,CVE-2020-14882weblogic未授权命令执行漏洞在10月份被披露。可见,该类蜜罐可以根据热点漏洞进行灵活配置,达到捕获扫描器的目的。0x05结论本文通过蜜罐协议返回特征、协议实现缺陷、明显的WEB特征和Fuzz测试特征,对19种常见的开源蜜罐进行了分析。我们研究发现,互联网上有超过369161个蜜罐服务,而这些蜜罐可以通过最简单的特征检测出来,因为这些蜜罐是在互联网上以默认配置开启的,基本上是一种自我暴露的状态。从全球分布来看,大量蜜罐集中在中国台湾地区。在全球蜜罐的ASN分布中,主要集中在云厂商和教育网络。同时,全年蜜罐数量在4月、6月和12月出现三个高峰,从部分蜜罐响应的关键词来看,蜜罐数量可能会随着热点漏洞的披露而增加。最后,本文涉及的蜜罐都可以在Quake中搜索到,我们提供了三个渠道:直接搜索特定的蜜罐,搜索语法在附录中(所有用户可用)。使用type:"honeypot"获取全网所有蜜罐设备(高级会员和终身会员可用)。直接在Quake专栏查看,专栏地址如下:https://quake.360.cn/quake/#/specialDetail/5ff5678693fe78dcaa8b2f090x06参考文献[1]蜜罐技术研究新进展[J].石乐怡、李洋、马梦飞。电子与信息技术杂志。2019(02)[2]基于数据包分片的工控蜜罐识别方法[J].尤建洲、张岳阳、卢世超、陈欣、尹立波、孙利民。信息安全期刊。2019(03)[3]VETTERL,A.,ANDCLAYTON,R.苦涩的收获:在互联网规模上系统地对中低交互蜜罐进行指纹识别。在第12届USENIX攻击性技术研讨会上,WOOT'18。[4]http://books.gigatux.nl/mirror/honeypot/final/ch09lev1sec1.html[5]https://mp.weixin.qq.com/s/_hpJP6bTuoH-3cQtDawGOw[6]https://www.avira.com/en/blog/new-mirai-variant-aisuru-detects-cowrie-opensource-honeypots[7]https://hal.archives-ouvertes.fr/hal-00762596/document[8]https://subs。emis.de/LNI/Proceedings/Proceedings170/177.pdf[9]https://www.freebuf.com/articles/ics-articles/230402.html[10]http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/[11]https://github.com/mushorg/conpot[12]https://github.com/cowrie/cowrie[13]]https://github.com/DinoTools/dionaea[14]https://github.com/jordan-wright/elastichoney[15]https://github.com/bontchev/elasticpot[16]https://github.com/mushorg/glastopf[17]https://github.com/hacklcx/HFish/[18]https://github.com/omemerdem/honeything[19]https://github.com/desaster/kippo[20]https://github.com/madirish/kojoney2[21]https://github.com/jrwren/nepenthes[22]https://github.com/thinkst/opencanary[23]https://github.com/Gifts/Rogue-MySql-Server[24]https://github.com/jaksi/sshesame[25]https://github.com/Cymmetria/weblogic_honeypot[26]https://github.com/bg6cq/whoisscanme[27]https://github.com/zeroq/amun[28]https://github.com/foospidy/HoneyPy[29]https://github.com/Cymmetria/StrutsHoneypot附录:
