浅析开源蜜罐识别与全网测绘
0x01 前言
蜜罐是网络红蓝攻防对抗中检测威胁的重要产品。防守方常常利用蜜罐分析攻击行为、捕获漏洞、甚至反制攻击者。攻击方可以通过蜜罐识别技术来发现和规避蜜罐。因此,我们有必要站在红队攻击者的角度钻研蜜罐识别的方式方法。
0x02 介绍
蜜罐是一种安全威胁的检测技术,其本质在于引诱和欺骗攻击者,并且通过记录攻击者的攻击日志来产生价值。安全研究人员可以通过分析蜜罐的被攻击记录推测攻击者的意图和手段等信息。
根据蜜罐的交互特征,可以分为低交互蜜罐和高交互蜜罐。后者提供了一个真正的易受攻击的系统,为的就是让攻击者认为自己在攻击一个真实的系统,在一些甲方实际的蜜罐建设中还提出了使用真实的服务组件构建蜜罐系统的想法。低交互蜜罐则没有这么复杂,其提供了一个不完善的交互系统,有的甚至仅仅模拟了一个响应。互联网中的低交互蜜罐大部分为开源蜜罐。由于其特有的开放特性,人们能够对其特征进行识别和规避。
在本次浅析的过程中,探测的目标为使用了默认配置的开源蜜罐。我们调查了19种开源蜜罐和Fuzz testing 特征蜜罐。本次浅析的目的是从攻击者角度出发找出开源蜜罐的特征,同时完成了多种开源蜜罐全网的分布。本次分析的蜜罐如表2-1所示。
表2-1 本次分析的蜜罐
0x03 基于特征的蜜罐检测
3.1 协议的返回特征
部分开源蜜罐在模拟各个协议时,会在响应中带有一些明显的特征,可以根据这些特征来检测蜜罐。
拿Dionaea 的Memcached协议举例,在实现Memcached协议时Dionaea把很多参数做了随机化,但是在一些参数如:version、libevent和rusage_user等都是固定的。
可以通过组合查询其固定参数来确定蜜罐,其他蜜罐在协议上的特征如表3-1所示。
表3-1 协议响应特征的蜜罐
3.2 协议实现的缺陷
在部分开源的蜜罐中模拟实现部分协议并不完善,我们可以通过发送一些特定的请求包获得的响应来判断是否为蜜罐。
3.2.1SSH协议
SSH协议(Secure Shell)是一种加密的网络传输协议,最常用的是作为远程登录使用。SSH服务端与客户端建立连接时需要经历五个步骤:
协商版本号阶段。
协商密钥算法阶段。
认证阶段。
会话请求阶段。
交互会话阶段。
SSH蜜罐在模拟该协议时同样要实现这五个步骤。Kippo 是一个已经停止更新的经典的SSH蜜罐,使用了twisted来模拟SSH协议。在kippo的最新版本中使用的是很老的twistd 15.1.0版本。该版本有个明显的特征。在版本号交互阶段需要客户端的SSH版本为形如SSH-主版本-次版本 软件版本号,当版本号为不支持的版本时,如SSH-1.9-OpenSSH_5.9p1就会报错“bad version 1.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内容。
检测此类蜜罐的步骤可分为如下几步:
1. 伪造客户端连接蜜罐mysql服务
2. 连接成功发送mysql查询请求
3. 接受mysql服务器响应,通过分析伪造的mysql客户端读取文件的数据包得到的报文结构:文件名长度+1 + x00x00x01xfb + 文件名
那么我们就可以通过socket构造对应的流程即可识别伪造的mysql服务器,并抓取读取的文件名。
3.2.3Telnet协议
HFish蜜罐中实现了Telnet协议,默认监听在23端口。模拟的该协议默认无需验证,并且对各个命令的结果都做了响应的模板来做应答。在命令为空或者直接回车换行时,会响应default模板,该模板内容为test。因此可以利用这个特征进行该蜜罐在telnet服务上的检测如图所示。
3.3 明显的WEB的特征
部分开源蜜罐提供了web服务,这些web服务中常常会带有一些明显的特征,可以根据这些特征来检测蜜罐。如特定的js文件、build_hash或者版本号等。
还是拿HFish举例。HFish在默认8080端口实现了一个WordPress登录页面,页面中由一个名为x.js的javascript文件用来记录尝试爆破的登录名密码。直接通过判断wordpress登录页是否存在x.js文件就可判断是否为蜜罐。
还有glastopf蜜罐,其没做任何伪装是最明显的。可以通过页面最下方的blog comments的输入框进行识别。
其他的常见的开源蜜罐在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替换,并且主机名由localhost替换为svr04。
由Aisuru的启发,是可以根据一些特定的上下文来检测蜜罐的。比如最新版的Cowrie,在默认配置下一些一些命令得到的结果是固定不变的。如:cat /proc/meminfo 这个命令无论执行多少次得到的内容都是不变的,而这真实的系统中是不可能的。
再说HFish蜜罐,HFish同样也实现了SSH协议,默认监听在22端口。该蜜罐的SSH协议同样可以很容易的通过上下文识别出来。和telnet协议一样SSH协议在直接进行回车换行时会默认执行default输出test。
3.5 Fuzz testing 特征
Fuzz testing(模糊测试)本是一种安全测试的方法,通过产生随机的数据输入测试系统查看系统响应或者状态,以此发现潜在的安全漏洞。部分蜜罐借用Fuzz testing的思想实现了蜜罐系统,通过360 Netlab的 zom3y3大哥在《通过Anglerfish蜜罐发现未知的恶意软件威胁》中对Fuzz testing蜜罐的介绍,我们得知有以下几点特征:
响应任意端口的TCP SYN Packet。
根据协议特征,永远返回正确的响应。
返回预定义或者随机的Payload特征库集合。
该蜜罐很容易通过人工判断,其目的为模拟蜜罐fuzzing特征,通过预定义大量的关键字实现对扫描器的干扰。该类蜜罐可以通过跨服务的特征进行判断,如开放了HTTP服务同时响应了upnp协议,或者根据server的长度或者个数来判断。由于未知哪种蜜罐产品提供的这个蜜罐服务,quake将此蜜罐标记为未知蜜罐,可以使用语法app:"未知蜜罐"搜索。
0x04 开源蜜罐的使用情况
4.1 蜜罐分布
在确定了部分开源蜜罐的特征后,我们利用特征进行了全网匹配,发现了369161条服务数据和72948个独立IP。全球和全国蜜罐分布如图所示。
可以看到在这些开源蜜罐中,中国的数量是最多的。其中,中国台湾占据了1/3,位于国内第一。并且在全球省份排名中,台湾省的数量是第一的。
从ASN的分布上来看,ASN数量全球TOP5如表所示。发现开源蜜罐主要还是部分部署在云厂商或者教育网中。
4.2 生命周期
结合蜜罐服务资产数和ASNTOP5全年的分布可以看,蜜罐数量在全年有三个峰值,分别为四月、六月和十二月。
在之前讨论蜜罐的fuzz testing时,发现在响应中含有大量与服务有关的关键词,用来干扰扫描器服务识别。其中发现在服务的响应中含有weblogic关键词的蜜罐在十一月开始爆发,我们知道在十月份CVE-2020-14882 weblogic未授权命令执行漏洞被披露出来。由此可以看出此类蜜罐可根据热点漏洞进行进行灵活配置,以达到捕捉扫描器的目的。
0x05 结论
本文通过蜜罐协议返回特征、协议实现缺陷、明显的WEB特征和Fuzz testing特征四种方法对常见的19种开源蜜罐进行了分析。我们的研究发现,互联网中存在有超过369161个蜜罐服务(72948个独立IP),这些蜜罐都可以通过最简单的特征被检测出来,因为这些蜜罐都是在默认配置情况下被开放在互联网上,基本上是一种自我暴露的状态。
从全球分布上来看中国台湾集中了大量的蜜罐,在全球蜜罐的ASN分布中,主要集中在云厂商和教育网络中。同时在全年的蜜罐数量上在四月份、六月份和十二月份存在三个峰值,并且通过部分蜜罐响应的关键字来看,蜜罐的数量可能会随着热点漏洞的披露而增长。
最后,本文中所涉及的蜜罐均可在Quake中搜索,我们提供了三种渠道:
1. 直接搜索特定蜜罐,搜索语法见附录(所有用户可用)。
2. 使用 type:"蜜罐"获取全网全量蜜罐设备(高级会员、终身会员可用)。
3.在Quake专题栏目中直接查看,专题地址如下:
https://quake.360.cn/quake/#/specialDetail/5ff5678693fe78dcaa8b2f09
4.使用Quake命令行工具进行识别(https://github.com/360quake/quake_rs)。
0x06 参考
[1] 蜜罐技术研究新进展[J]. 石乐义,李阳,马猛飞. 电子与信息学报. 2019(02)
[2] 基于数据包分片的工控蜜罐识别方法[J]. 游建舟,张悦阳,吕世超,陈新,尹丽波,孙利民. 信息安全学报. 2019(03)
[3] VETTERL, A., AND CLAYTON, R. Bitter harvest: Systematically fingerprinting low- and medium-interaction honeypots at internet scale.In 12th USENIX Workshop on Offensive Technologies, 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/omererdem/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
附录:
蜜罐 |
Quake系统搜索语法 |
STRUTSHONEYPOT |
app:"StrutsHoneypot" |
CONPOT HTTP 蜜罐 |
app:"Conpot Http 蜜罐" |
CONPOT MODBUS 蜜罐 |
app:"Conpot modbus 蜜罐" |
CONPOT S7 蜜罐 |
app:"Conpot s7 蜜罐" |
KIPPO 蜜罐 |
app:"kippo 蜜罐" |
HONEYPY HTTP 蜜罐 |
app:"Honeypy Http 蜜罐" |
HONEYPY ES蜜罐 |
app:"Honeypy ES蜜罐" |
AMUN IMAP 蜜罐 |
app:"amun imap 蜜罐" |
AMUN HTTP蜜罐 |
app:"amun http蜜罐" |
NEPENTHES NETBIOS蜜罐 |
app:"Nepenthes netbios蜜罐" |
NEPENTHES FTP 蜜罐 |
app:"Nepenthes FTP 蜜罐" |
SSHESAME SSH 蜜罐 |
app:"sshesame ssh 蜜罐" |
OPENCANARY蜜罐管理后台 |
app:"opencanary蜜罐管理后台" |
DIONAEA SIPD 蜜罐 |
app:"Dionaea sipd 蜜罐" |
DIONAEA SMBD 蜜罐 |
app:"Dionaea smbd 蜜罐" |
DIONAEA HTTP 蜜罐 |
app:"Dionaea Http 蜜罐" |
DIONAEA MSSQL 蜜罐 |
app:"Dionaea MSSQL 蜜罐" |
DIONAEA FTP 蜜罐 |
app:"Dionaea ftp 蜜罐" |
DIONAEA MEMCACHED 蜜罐 |
app:"Dionaea Memcached 蜜罐" |
KOJONEY SSH 蜜罐 |
app:"Kojoney SSH 蜜罐" |
WEBLOGIC蜜罐 |
app:"weblogic蜜罐" |
MYSQL蜜罐 |
app:"MySQL蜜罐" |
HFISH蜜罐 |
app:"HFish蜜罐" |
HFISH蜜罐管理后台 |
app:"HFish蜜罐管理后台" |
HONEYTHING物联网蜜罐 |
app:"honeything物联网蜜罐" |
ELASTICSEARCH蜜罐 |
app:"elasticsearch蜜罐" |
HOSTUS蜜罐 |
app:"HostUS蜜罐" |
WHOISSCANME蜜罐 |
app:"whoisscanme蜜罐" |
未知蜜罐 |
app:"未知蜜罐" |
COWRIE TELNETD蜜罐 |
app:"Cowrie telnetd蜜罐" |
GLASTOPF蜜罐 |
app:"glastopf蜜罐" |