浅谈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/

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