蜜罐
Last Update:
Word Count:
Read Time:
Page View: loading...
学习蜜罐相关的知识
蜜罐的定义
蜜罐蜜罐,顾名思义是一个放有【蜂蜜】的罐子,用看似甜蜜的蜂蜜去吸引【蜜蜂】的注意,引诱其进入到罐子中。在安全领域,又或者说红蓝攻防的视角里,这里的蜂蜜就是一个看似漏洞百出的网站,而蜜蜂就是攻击者。
上面的这段话是个人的理解,一般来说蜜罐的定义是攻击者的欺骗技术。它被用以监测、分析和溯源攻击行为,由于它没有业务上的用途,单纯作为“陷阱”引诱攻击者,因此所有流入/流出蜜罐的流量都预示着对蜜罐的扫描或者攻击行为。因此蜜罐能够比较好地得到攻击流量,收集到大量攻击者的有关数据,例如攻击用的源码,黑客的操作等。
引申蜜网与蜜饵
蜜网:蜜网由多个蜜罐组成,并且这些蜜网还都围绕着该公司的业务专属定制的。比如某公司的网站可能会将蜜网设置成管理等web站点,并且这种站点一般都是弱口令,通过弱口令成功登录后可能会显示网站维护中等无法深入访问的提示。
蜜饵:会在特定目录里放一些敏感文件,例如password.txt等看似诱人的文件。一旦该文件被执行了读写等操作就代表着这台主机失陷了。
溯源反制
蜜罐的核心目的就是追踪攻击者甚至反制攻击者达到溯源的目的。现在的蜜罐主要做下面几件事:
- 通过各种手段来获取个人信息
- 诱导攻击者下载钓鱼文件达到反制getshell
- 打本地客户端来反制攻击者
蜜罐溯源的原理
jsonp
在蜜罐溯源反制中,最常用的技术是JSONP来获取攻击者的个人信息。
浏览器的同源策略限制了不同源的站点不能够发送ajax请求,但是在一些html标签里不会限制跨域访问,例如img src和script src这种标签。而JSONP就是利用src标签来发送一个带有函数名的请求(callback),服务端收到请求后动态生成数据,并且以该数据为参数调用指定的函数名的函数,最后会返回一个callback(参数)的数据。
如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据就可能导致网站A能够利用漏洞获取到用户在网站B上的数据
再复习一下JSONP的漏洞,例如恶意html页:
1 | |
当受害者访问该html页时,由于xxx.com/test.php没有对JSONP请求进行安全检查就直接返回受害者的数据(假设这个test.php返回的是$callback.(用户的敏感json数据)),并调用当前页面的zzz函数,返回的内容作为参数,也就是alert敏感信息。
因此运用上面的原理,攻击者如果登录了某些网站(下面会有例子),蜜罐就会尝试使用JSONP向这些网站发起跨域请求,并获取到攻击者的敏感信息。例如:
api.ipify.org
1 | |
如果访问了蜜罐,则会通过JSONP请求攻击者的IP。
- 搜狗(已失效)
1 | |
曾经这个jsonp接口能够获取到用户的登录信息并返回,如果没有登录会返回:
1 | |
登录成功后会返回:
1 | |
蜜罐通过这个JSONP请求来收集攻击者的手机信息,从而进行溯源反制
WebRTC
WebRTC(Web Real Time Connection)是一项非常老的技术,并且在现代浏览器例如Chrome/Edge/Firefox都支持,并且默认开启。如果没有关闭WebRTC则有可能会暴露真实IP,即使你开的是全局代理。
WebRTC允许浏览器之间简历点对点连接从而实现实时通信,在WebRTC建立连接的时候,浏览器会向对方发送自己的IP地址,以便双方建立连接。攻击者可以通过JavaScript等技术访问到WebRTC中的API,以获取用户的IP地址,从而进行跟踪、监视或者攻击。
mysql
例如低版本的Adminer存在任意文件的读取,这就是利用了Mysql的特性。
mysql客户端向Server发起查询后,Server会返回一个Response TABULAR的响应包,如果在这个数据包中指定文件路径,则可以读取Client响应的文件。
因此mysql蜜罐就是利用这个特性,当访问mysql蜜罐的时候就可以发送一个包含文件路径的响应包去读取客户端的文件。
例如读当前个人PC的用户名:
1 | |
当前用户的微信号:
1 | |
用户微信昵称:
1 | |
Cobalt Strike登录信息,如果你的CS未经二开的话,CS的登录信息是明文存储的:
1 | |
蜜罐的分类
蜜罐可以按照用途分类,分为研究型蜜罐和产品型蜜罐。研究型蜜罐一般用于研究各类网络威胁,寻找应对的方式,不增加特定组织的安全性,而产品型蜜罐是主要用于防护的商业产品。
但是我们更常用交互方式来进行分类:
- 低交互式蜜罐:通常是指与操作系统交互程度较低的蜜罐系统,仅开放一些简单的服务和端口,用来检测扫描器的批量扫描和连接,这种蜜罐比较容易识别
- 中交互式蜜罐:介于低交互式和高交互式之间,能模拟更多的服务,让攻击者看起来更像一个真实的业务,诱导攻击者对它发起攻击,这样蜜罐能够得到更多有价值的信息。
- 高交互式蜜罐:它会提供一个更加真实的环境,这样更容易吸引入侵者。有利于掌握新的攻击手法和类型,但是同样存在隐患,会对真实网络造成攻击
常见的蜜罐:
Honeyd: https://github.com/DataSoft/Honeyd
T-pot: https://github.com/telekom-security/tpotce
HFish: https://github.com/hacklcx/HFish
opencanary web: https://github.com/p1r06u3/opencanary_web
蜜罐的识别
基于蜜罐指纹的识别
指纹通常是鉴定一个业务系统最直接的方式,因此对蜜罐而言也一定会留下属于它的独特指纹信息,例如下面的一些开源蜜罐的指纹信息:
同时除了开源蜜罐以外,一些商业蜜罐也可能会留下指纹信息,有可能是加载的时候会有一些经过混淆的js去调用jsonp漏洞
基于溯源方式的识别
上文提及到蜜罐最主要的作用就是溯源反制,而溯源反制的常见方法就是利用jsonp漏洞向各大网站发起请求,从而获取到攻击者的敏感信息,因此当我们发现在访问某个应用系统时有大量对各大主流厂商的ajax请求时大概率就是遇到蜜罐了,并且即使部分系统禁用了F12,又或者定时清除F12的网络连接(network),我们依然能够通过抓包的方式去获取这种请求。这是因为·jsonp的请求是在用户侧进行的,这个原生请求无法做加密或者混淆
基于配置失真的识别
例如某些无交互蜜罐就会放出大量指纹从而诱导扫描器攻击,因此这类蜜罐会有许多矛盾的指纹,又或者有一串巨长的header,例如:
1 | |
以及页面的title数量极多,用以作为多种指纹诱导攻击者。
总结一下这类蜜罐通常会在server、header、title等字段里返回大量特征信息。例如某个server返回的信息既有iis又有apache,这在逻辑上就是不合理的,因此可以识别为蜜罐
除了指纹以外,开放的端口也有可能会被识别为蜜罐,例如一台服务器同时开放了22和3389,又或者8080端口显示是windows系统,但是8081又显示为ubuntu,这些都是不合常理的端口配置,当然不排除可能是一些映射服务,这里需要人工进行二次识别。
基于虚拟机配置的识别
当获取到某个系统的权限的时候,我们需要判断该系统是否是一个蜜罐或者处在某个蜜网内。由于蜜网通常需要模拟各种系统或者设备,因此一般不会使用真实物理机器,通常都是虚拟机,因此基本上可以通过寻找虚拟机特征来初步判断是否处于在蜜网内,例如判断mac地址等:
1、VM虚拟机常用mac地址前缀:00-05-69,00-0C-29,00-50-56等
2、判断 OpenVZ/Xen PV/UML,此方式是一种常见且比较准确的识别虚拟机的方式,网上有大量demo程序可供参考。
当然这个方法的识别效果不如前面的方法优秀,因为这个特征只是一个弱特征。如果发现当前控制的设备是一个虚拟机,那么就需留个心眼了
除此之外,一些蜜罐可能也会因为担心被攻陷后作为跳板攻击第三方系统会限制出网连接限制,例如一天限制15个TCP出网连接等,我们可以通过发大量的syn包到其他主机来进行检测和识别。
基于伪造场景的识别
在高交互的蜜罐中,为了诱导攻击者发起攻击,蜜罐会做的特别真实,贴近真实环境。从而让攻击者不知不觉调入陷阱,比较典型的场景就是手机验证码,这种方式一般是通过引诱攻击者自发输入自己的手机号来达成。例如故意泄露站点的源码文件,通过代码审计发现有文件上传漏洞,但是这个上传漏洞必须通过返回的验证码来实现成功上传。这个时候攻击者就有可能会掉入到陷阱里,认为这并不是一个蜜罐,为了获取到webshell从而使用自己的手机账号。
这类蜜罐应随时提高警惕,可以利用一些网上的接码平台进行收集的验证,又或者使用不常用的手机号或者新手机号来降低被发现的风险。
另一种情况是伪造成邮件系统,邮件里可能会有一些看似是敏感文件,例如vpn客户端等伪造软件(实际上是shellcode等),待攻击者下载使用后便可获取其信息,甚至反制getshell。
这种情况下对于下载到的程序最好先进行沙箱检测,检测完后用虚拟机运行以防被溯源。
简单防范蜜罐
从上文不难看出,大部分蜜罐的溯源方式都是通过jsonp请求获取到攻击者的敏感信息。因此我们可以根据这一点进行针对性的防范。
https://github.com/Ghr07h/Heimdallr
上面这个插件通过拦截jsonp请求,提高WebRTC策略严格度等方式来防止真实IP泄露。
同时还有绑定本地host的方式防止溯源(因为jsonp请求本质还是用户自己发起的请求,因此将一些域名绑定成本地host能够阻止蜜罐溯源)
1 | |