蜜罐技术学习
约 1192 字大约 4 分钟
前言
由于在学校创新实践所做的项目是waf,之前也有了解过一点蜜罐的相关知识,因此打算深入学习蜜罐技术并且将其和waf结合,实现更好的防御效果。
蜜罐简介
蜜罐可以实现对攻击者的主动诱捕,能够详细地记录攻击者攻击过程中的许多痕迹,利于取证。并且可以收集到大量有研究价值的数据,如留下的后门、攻击者的操作和攻击者信息等,从而便于提供丰富的溯源数据。
高交互性蜜罐:模仿承载各种服务的生产系统的活动,因此,可能允许攻击者大量服务浪费时间。通过使用虚拟机docker等,可以在单个物理机上托管多个蜜罐。因此,即使蜜罐受损,也可以更快地恢复它。通常,高交互性蜜罐由于难以检测而提供了更高的安全性,但维护成本很高。如果虚拟机不可用,则必须为每个蜜罐维护一台物理计算机。
低交互性蜜罐:仅模拟攻击者经常请求的服务。由于它们消耗的资源相对较少,因此可以轻松地将多个虚拟机托管在一个物理系统上,这些虚拟系统的响应时间短,所需的代码更少,从而降低了虚拟系统安全性的复杂性。
蜜罐核心 —— 攻击欺骗技术
ssh服务
- 记录攻击者爆破密码使用的字典
- 记录攻击者连入蜜罐后执行的命令
- 放入虚假文件如
/etc/hosts
等进一步将攻击者引入其余虚假服务
MySQL 服务
- 通过伪造MySQL报文来模拟服务。
- 利用MySQL客户端任意文件读取漏洞获取攻击者主机信息。
mysql读取客户端任意文件漏洞
抓包:
当Can Use LOAD DATA LOCAL: set
存在mysql建立连接时的握手包中时,该漏洞存在。
关于 LOAD DATA LOCAL
:
正常情况下,需要客户端发起如下查询:
load data local infile "/etc/passwd" into table TestTable fields terminated by '分隔符';
服务端才会去读取客户端的文件 /etc/passwd
https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html
指出了load data local 的安全隐患。
- Because
LOAD DATA LOCAL
is an SQL statement, parsing occurs on the server side, and transfer of the file from the client host to the server host is initiated by the MySQL server, which tells the client the file named in the statement. In theory, a patched server could tell the client program to transfer a file of the server's choosing rather than the file named in the statement. Such a server could access any file on the client host to which the client user has read access. (A patched server could in fact reply with a file-transfer request to any statement, not justLOAD DATA LOCAL
, so a more fundamental issue is that clients should not connect to untrusted servers.) - In a Web environment where the clients are connecting from a Web server, a user could use
LOAD DATA LOCAL
to read any files that the Web server process has read access to (assuming that a user could run any statement against the SQL server). In this environment, the client with respect to the MySQL server actually is the Web server, not a remote program being run by users who connect to the Web server.
如上所述服务端可以主动发起一个读取文件的请求,而不需要客户端发起后再回应,因此就导致了可以构造恶意服务端,当客户端连接的时候,就发送读取文件的数据包,即可任意文件读取。
伪造恶意服务端
// mysql-server 发送的握手包
var handshakePack = []byte{
0x4a, 0x00, 0x00, 0x00, 0x0a, 0x35, 0x2e, 0x35, 0x2e, 0x35, 0x33,
0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x51, 0x73, 0x6f, 0x54, 0x36,
0x50, 0x70, 0x00, 0xff, 0xf7, 0x21, 0x02, 0x00, 0x0f, 0x80, 0x15,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
0x26, 0x2b, 0x47, 0x62, 0x39, 0x35, 0x3c, 0x6c, 0x30, 0x45, 0x4a,
0x00, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x5f, 0x6e, 0x61, 0x74, 0x69,
0x76, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
0x00,
}
// mysql-server 回应的OK包
var okPack = []byte{0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00}
// mysql-server 发送的读取文件包
getFileData := []byte{byte(len("/etc/passwd") + 1), 0x00, 0x00, 0x01, 0xfb}
getFileData = append(getFileData, "/etc/passwd"...)
Web服务
- 使用一些带有漏洞的cms等引导攻击者进入蜜罐,可获取某些最新的攻击手法
- 使用个人(企业)自行开发的应用,及时感知0day情况。
- 模拟钓鱼页面,引诱攻击者上钩
- 利用jsonp劫持等漏洞,进一步获取攻击者信息
Redis 服务
- 通过模拟Redis 报文,来构建虚假服务
- 获取攻击者的攻击命令。