君は春の中にいる、かけがえのない春の中にいる.

你驻足于春色中,于那独一无二的春色之中.

Snare 与 Tanner——下一代高级 Web 蜜罐把玩

利益相关(大雾)~,MushMush 的号称下一代先进蜜罐的一整套系统,Glastopf 的升级版。部署什么的参照官方文档啦,有点小坑但跑起来问题不会太大,这次主要是把玩记录。

0x00 系统简介

部署过 Web 蜜罐的估计都知道大名鼎鼎的 Glastopf,它其中的许多特性都很值得借鉴,不过,一个默认没有经过改良的 Glastopf 蜜罐是这个样子的,指纹堆叠确实能够很好的应对扫描器(如果确实用 AWVS 之类的扫描器扫过的话),但是视觉效果上略有不足。

于是 MushMush 推出了它的替代品,就是 Snare 和 Tanner。Snare 负责基本款的蜜罐生成,可以通过爬虫来学习任意网站,这样就弥补了视觉上的缺陷;而 Tanner 负责进一步的攻击反馈和数据分析,也就是充当蜜罐大脑(Honeybrain)来进行决策。

0x01 Snare

单独把 Snare 提出来看,其实它算是一个低交互可以模拟任意网站的蜜罐生成套件。可以看做有三部分,Clone 模块负责爬取网站,并且存储路由与页面的对应信息;Server 负责把存储的网页解析起来,并且接受请求路由进行匹配;Tanner 连接的部分负责把请求包装发送给 Tanner 并且接收返回的数据。

先看一下,以我的博客为例,生成的蜜罐。这种爬虫机制还是能够比较好的对这种页面进行模拟的,但是从它的机制来看,能不能很好的模拟 Web2.0 的一些站点还是一个问题。

基本参数启动:

1
snare --page-dir phantom0301.cc --host-ip=127.0.0.1

Clone

克隆工具的实现很简洁,HTTP 请求加 BeautifulSoup 解析,提取网页中的链接,网页类型,链接格式进行判断后,存储路由和它的 hash 表,整个网页以 hash 命名后存储为文件。存储结果如下所示

1
2
3
{
"/index.html": {"hash": "d1546d731a9f30cc80127d57142a482b",
}

利用路由表+爬虫的方式进行蜜罐生成很多人都做过研究,这里算是实现了最基础版的蜜罐生成。

Server

服务器使用 Jinja 来加载网页文件,使用 nsq 来做信息传输(这一部分可以参考以前提过的 hpfeed 协议),从代码中可以看出,Snare 继续沿用了 Glastopf 的 Dork 机制,开启参数后,就可以看到被嵌入到网页中的隐藏堆叠指纹。

0x02 Tanner

Tanner 模块就要复杂多了,Server 负责接收 Snare 传输的信息,WebUI 提供可视化的信息汇聚分析,API 提供 json 格式的信息反馈,数据存储于 Redis 中。

Web 视图如下

展示了当前蜜罐网站的被攻击数,运行时间和不同攻击类型的统计次数。

通过调用多个其他应用来完成更加高级的模拟功能,其中:

PHPOX,Mush 实现的 PHP 沙盒,通过函数替代的方式提供沙盒环境。一个简单的沙盒测试如下图所示。通过 python 捕捉满足 php 格式的代码,然后动态调用 php 执行,在这个过程中,使用 bfr 对函数进行 hook 改写。

SQL 注入采用两种模拟方式,一种是 SQLite 模拟,一种是 Mysql 模拟;系统命令执行使用 Docker 环境中的 BusyBOX 来做;另外还实现了文件包含,crlf等攻击回应。

这里我们可以使用符合格式的 json 直接进行攻击传输,向 Tanner 的 Server 发送数据,观察不同攻击的回复。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"method": "GET",
"path": "/index.php?serch1=111<script>alert(document.cookie)</script>", "headers": {"Host": "127.0.0.1:8080",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate",
"Referer": "http://127.0.0.1:8080/,
"Cookie": "sess_uuid=9dc52cb8-a2b6-xxxx-xxxx-4501a8f1a0c8", "Connection": "keep-alive"
},
"uuid": "xxxxxxxx-4cfb-xxxx-xxxx-6930f1cc2321",
"peer": {"ip": "123.57.206.153", "port": 6723},
"status": 200, "cookies": {"sess_uuid": "9dc52cb8a2b6-xxxx-xxxx-4501a8f1a0c2"}
}

而 Tanner 的攻击向量分析主要从 IP 定位、攻击类型判断、攻击来源等几个维度出发。

0x03 总结

Snare 和 Tanner 的构架提供了足够的灵活性、视觉欺骗性和一些基本的攻击反馈,而且利用 PHP 沙盒、Docker 机制在某些子功能上也算是实现了高交互。同时,Snare 加 Tanner 的实现方式一定程度上提供了比较多样的蜜罐生成机制,然而,其中还是有可以魔改的地方。

首先,Tanner 的攻击检测完全基于正则关键字提取,可以把更复杂的检测算法放进来。

其次,PHP 沙盒的函数保护机制过于简单,存在绕过的可能性。