事情發生在前幾天,上午接到通知,公司的測試環境數據庫遭遇比特幣勒索,因而杯子開水加滿,開始分析。html
首先想到的是看日誌,空空如也。綜合分析,存在如下三個疑點,歡迎補充。python
疑點一:我的PC中馬。由於最近有人反映收到釣魚郵件。mysql
疑點二:弱口令。網上搜索了一下類似的入侵案例。git
疑點三:git信息泄漏。最近關於git信息泄漏的新聞很多。github
首先重點看了一下git是否存在信息泄漏,,排除此疑點。web
網上存在類似案例,提供的信息是弱口令形成的,刪庫插入勒索信息,這也是咱們以爲嫌疑最大的一方面。sql
關於我的PC中馬,重點檢查了一下掌握被入侵數據庫的人員的PC。shell
最後得出的結果是弱口令。數據庫
排查階段並非那麼順利,一開始懷疑就是弱口令。查日誌的時候,運維大哥給了一個強密碼,當時就被帶溝裏了。大佬去外地出差了,菜雞的我在家看家。最後經過大佬的冷靜分析,肯定是弱口令,登陸數據庫查詢,驗證存在弱口令。安全
你大爺仍是你大爺,大佬仍是大佬。
首先作了策略,數據庫只容許內網的someone
訪問。
而後排查了一遍數據庫中的弱口令。
本次入侵源頭是外網開放了可遠程鏈接的mysql服務。
任意IP登陸狀況下,update user set host = '%' where user = 'root';
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)")
限制任意IP登陸狀況下:delete from user where host = '%';
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")
經過識別登陸報錯的元組,判斷是否開啓遠程鏈接。
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()