數據庫遭遇比特幣勒索的一次入侵分析

  • 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