社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

浅谈Mysql蜜罐识别

ChaMd5安全团队 • 3 年前 • 4074 次点击  

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


在协议上识别蜜罐

Mysql协议

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

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

Info:
Protocol:10
Version:5.5.53
ThreadId:1
Language:utf8_general_ci
Salt:uQsoT6Ppd&+Gb95Authentication_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



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/105651
 
4074 次点击