数据库遭遇比特币勒索的一次入侵分析
- 2019 年 10 月 6 日
- 筆記
本文作者:mark-zh(Web小组成员)
前言
事情发生在前几天,上午接到通知,公司的测试环境数据库遭遇比特币勒索,于是杯子开水加满,开始分析。

信息收集
首先想到的是看日志,空空如也。综合分析,存在一下三个疑点,欢迎补充。

疑点一:个人PC中马。因为最近有人反映收到钓鱼邮件。
疑点二:弱口令。网上搜索了一下相似的入侵案例。
疑点三:git信息泄漏。最近关于git信息泄漏的新闻不少。
排查阶段
首先重点看了一下git是否存在信息泄漏,排除此疑点。
网上存在相似案例,提供的信息是弱口令造成的,删库插入勒索信息,这也是我们觉得嫌疑最大的一方面。
关于个人PC中马,重点检查了一下掌握被入侵数据库的人员的PC。
最后得出的结果是弱口令。
背景
排查阶段并不是那么顺利,一开始怀疑就是弱口令。查日志的时候,运维大哥给了一个强密码,当时就被带沟里了。大佬去外地出差了,菜鸡的我在家看家。最后通过大佬的冷静分析,确定是弱口令,登录数据库查询,验证存在弱口令。
你大爷还是你大爷,大佬还是大佬。
安全防范
首先做了策略,数据库只允许内网的someone
访问。 然后排查了一遍数据库中的弱口令。
后记
本次入侵源头是外网开放了可远程连接的mysql服务。
Python批量检测远程开放连接的mysql服务
1. 任意IP登录情况下,`update user set host = '%' where user = 'root';` ```shell mysql> select host,user from user; +-----------+------------------+ | host | user | +-----------+------------------+ | % | root | | localhost | debian-sys-maint | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 4 rows in set (0.00 sec) ``` 模拟登录报错如下: ``` (1045, "Access denied for user '****' (using password: YES)") ``` 2. 限制任意IP登录情况下:`delete from user where host = '%';` ```shell mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | 127.0.0.1 | | debian-sys-maint | localhost | | mysql.sys | localhost | +------------------+-----------+ 3 rows in set (0.01 sec) ``` 模拟登录报错如下: ``` (1130, "Host '****' is not allowed to connect to this MySQL server") ``` 通过识别登录报错的元组,判断是否开启远程连接。 ```python import MySQLdb def coon(host): username = 'root' password = 'pass' port = '3306' try: result = MySQLdb.connect(host,username,password) except Exception as e: if e[0] ==1045 : print 'success',host if e[0] == 1130: print 'failed' else: pass def main(): with open('','r') as hosts: h = hosts.readlines() for host in h: host = host.strip('n') coon(host) if __name__ == '__main__': main() ``` Github:https://github.com/mark-zh/MySQL/blob/master/MySQL-Remote-Conn.py