浅谈Mysql蜜罐识别

百家 作者:Chamd5安全团队 2021-01-01 09:26:43

感谢投稿,版权所有,转载请注明出处。


在协议上识别蜜罐

Mysql协议

在登录Mysql服务器时,Mysql会向客户端发送一个验证挑战包。

从挑战包内我们可以获取到很多有用的信息,例如通信协议版本、数据库版本、线程ID、加密盐、认证插件、数据库权能标志、数据库状态标志、数据库扩展权能标志。
下面的Hfish蜜罐识别就是根据这个挑战包识别的:

Info:
Protocol:10
Version:5.5.53
ThreadId:1
Language:utf8_general_ci
Salt:uQsoT6Ppd&+Gb95<l0EJ
Authentication_Plugin:mysql_native_password
TypeName:ServerCapabilities
????new?more?secure?passwords:Set
????Found?instead?of?affected?rows:Set
????Get?all?column?flags:Set
????One?can?specify?db?on?connect:Set
????Do?not?allow?database.table.column:Set
????Can?use?compression?protocol:Set
????Odbc?client:Set
????Can?use?LOAD?DATA?LOCAL:Set
????Ignore?spaces?before?'(':Set
????new?more?secure?passwords:Set
????This?is?an?interactive?client:Set
????Switch?to?SSL?after?handshake:NoSet
????IGNORE?sigpipes:Set
????Client?knows?about?transactions:Set
????Old?flag?for?4.1?protocol:Set
????New?4.1?authentication:Set
TypeName:ServerStatus
????In?transaction:NoSet
????AUTO_COMMIT:Set
????Multi?query?/?Unused:NoSet
????More?results:NoSet
????Bad?index?used:NoSet
????No?index?used:NoSet
????No?index?used:NoSet
????Last?row?sent:NoSet
????Database?dropped:NoSet
????No?backslash?escapes:NoSet
????Metadata?changed:NoSet
????Query?was?slow:NoSet
????PS?Out?Params:NoSet
????In?Trans?Readonly:NoSet
????Session?state?changed:NoSet
TypeName:ExtendedServerCapabilities
????Multiple?statements:Set
????Multiple?results:Set
????PS?Multiple?results:Set
????Plugin?Auth:Set
????Connect?attrs:NoSet
????Plugin?Auth?LENENC?Client?Data:NoSet
????Client?can?handle?expired?passwords:NoSet
????Session?variable?tracking:NoSet
????Deprecate?EOF:NoSet



通过ThreadId 识别蜜罐

在正常的数据库中,ThreadId是非常大的,而且几乎增长速度很快。
在蜜罐中就不是如此了,我们通过多次GetServerInfo,发现Hfish的ThreadId是不变的。
有时边缘遗忘的数据库ThreadId增长速度很慢,这并不代表这个数据库是一个蜜罐。
我们可以通过这个特点来进行识别。


通过Salt(盐) 识别蜜罐

正常的数据库,Salt(盐) 每次请求都会有变化的。
而部分蜜罐是没有这个所谓的变化,每次请求都相同。
如果你遇到一个多次请求 Salt(盐) 是一样的,那你可要注意了,这台数据库百分之百是一个蜜罐。


通过Mysql拉黑机制来判断目标是否为蜜罐

在某塔以及官网安装的Mysql,默认的连接错误拉黑次数是15。
在连接错误次数到15时,再次请求Mysql服务器,服务器会向你发送一个错误代码:1129。
准确率:配合ThreadId可以达到百分之80。


通过登录验证识别蜜罐

有些协议实现不完善的蜜罐,会把任意输入的用户名以及密码当成正确的。

常见的有,Mysql读取客户端任意文件并且没有实现认证的如下:

https://github.com/Gifts/Rogue-MySql-Server

https://gitee.com/lauix/HFish

特点就是输入任意用户名和密码都会显示登录成功。

准确率:百分之百。


通过认证成功后第一条命令返回包识别

许多蜜罐为了读取客户端的任意文件来识别攻击者的身份,会把客户端第一条执行的命令作为读取客户端文件的数据包返回。
不止Hfish这么做,许多可交互的蜜罐也是如此。
准确率:百分之百。



登陆成功后通过sql命令识别

在mysql 5.6及以上,mysql引入了sys库。
sys库主要作用就是分析sql语句的执行效率
当然sys还包括更多的信息。
更多详情:https://www.t00ls.net/thread-54783-1-1.html

查看重要的数据库以及表

#?统计所有访问过的表次数:库名,表名,访问次数
select?table_schema,table_name,sum(io_read_requests+io_write_requests)?io?from?sys.schema_table_statistics?group?by?table_schema,table_name?order?by?io?desc;

通过上述命令,我们可以判断目标数据库经常被访问的库或者表是哪一个,来判断是真实应用访问的还是蜜罐模拟的。


查看当前正在登录的用户

#?查看所有正在连接的用户详细信息:连接的用户(连接的用户名,连接的ip),当前库,用户状态(Sleep就是空闲),现在在执行的sql语句,上一次执行的sql语句,已经建立连接的时间(秒)
SELECT?user,db,command,current_statement,last_statement,time?FROM?sys.session;

通过这条命令我们可以判断目标数据库正在被哪些内网/外网地址访问,以及正在执行的sql语句,在蜜罐中很少有别的IP访问,一般是蜜罐主控或者本机。


通过数据库历史连接记录

在蜜罐部署之后,蓝方经常会去连接测试数据库的正常功能,以判断蜜罐是否正确的运行。

#?查看所有曾连接数据库的IP,总连接次数
SELECT?host,total_connections?FROM?sys.host_summary

通过这条命令我们可以看到曾连接过这个数据的所有ip,以及连接次数,通过部分内网/外网IP连接次数的判断。
我们可以判断哪些是当时部署蜜罐测试蜜罐的运维IP。
准确率:百分之70。


总结

识别蜜罐好像并没有这么困难,对于实力较强的攻击者,部分蜜罐更多的像一个摆设。
文章上述识别Mysql蜜罐工具:
https://github.com/BeichenDream/WhetherMysqlSham
另外我的另一个工具史上最强WebShell 哥斯拉(https://github.com/BeichenDream/Godzilla),希望能够在新年之际star能够达到1k。
希望大家能够多多支持,多多star,跪谢大家。祝大家元旦快乐。


end


万年招新小广告

ChaMd5 ctf组 长期招新

尤其是crypto+reverse+pwn+合约的大佬

欢迎联系admin@chamd5.org



关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接