近期,公司營運多年的舊有專案,十幾套系統發生同時無法連線問題,查明原因發現資料庫被入侵,資料被清空,root密碼被更改,以及留下一個 PLEASE_READ_ME_MXG 資料表,內容如下:

WARNING
To recover your lost data : Send 0.05 BTC to our BitCoin Address and Contact us by eMail with your server IP Address or Domain Name and a Proof of Payment. Any eMail without your server IP Address or Domain Name and a Proof of Payment together will be ignored. Your File and DataBase is downloaded and backed up on our servers. If we dont receive your payment,we will delete your databases.

Bitcoint_Address
xxxxxxxxxxxxxxxxxxxxxxxxxx

Email
xxx@hello-database.xyz

在搜尋過相關類似攻擊 Your File and DataBase is downloaded and backed up on our servers 的真實性不高,事實上,在連線後資料就已經被刪除 ref

所以,如果你也遇到同樣遭遇,千萬別充值!

回歸到話題,關於系統資料庫由於每天都有做雲端備份,所以接下來要復原其實不是太大的問題。

慘痛之中,還是必須保持鎮定,掌握處理的步調

先開出任務清單,召集幾個 MIS 進行研擬狀況及對策,進行處理

這裡,將處理的過程記錄下來,提供參考

###【盤點損失】

由於過去有幾點缺失,例如,一個 Cloud SQL 個體存在多個資料庫,且共同一組 root 帳密管理 經過盤點確認後,共有以下損失

  • 兩個執行個體遭到入侵
  • 共 41 個資料庫遭到清空
  • 一個執行個體 root 密碼被更改 (也就這麼一組)

沒錯,損失相當慘重,前人造孽,後人遭殃就是這回事

###【評估對應方式】

由於是使用 GCP Cloud SQL,並且有執行每日備份,因此透過備份還原,讓網站立即恢復運作,

缺少一天的資料,則安排相關人員協助進行對應措施

同時,聚集 MIS 擬出資料庫安全防護清單,針對資料庫遭入侵的幾個方向做補足:

SQL 設定防火牆IP限制

在處理過程中,首先是 SQL server 設定為 0.0.0.0/0

因此,知道帳密的情況下,任何主機都能夠直接連到資料庫進行操作

首先,緊急情況下先手動將所有專案主機IP建立對應白名單,在刪除掉 0.0.0.0/0

後續則啟用私人 IP,透過default方式,修改各個主機專案設定的 SQL 位置

以及新增公司內部 IP 加入白名單,以此方式防止以外的主機連到 SQL

檢查防火牆

查看 GCP 的 VPC 外部網路IP及規則,重新確定安全名單

檢查 GCP Cloud SQL 相關行為記錄

查看 GCP 上所有相關操作 log 行為記錄,並無發現異常,因此暫時排除是GCP遭到入侵。

(若 GCP 遭到入侵,受損的可能就不只是資料庫)

每一專案開設定應 mysql 連線帳號,限制權限

過去專案是一組 root 讓所有專案共用,目前則設定每一個專案有一個對應的帳號,根據該帳號設定可連線的資料庫及訪問權限。

內部備份GCP SQL 資料

由於主機資料有幾百G,在平時大量用戶使用的情況下,不適合進行匯出備份,

避免有額外狀況發生,於當天凌晨進行資料備份

檢查是否暴露 .env (過去專案多使用 apache,直接透過 .htaccess 做安全設定)

公司大多數專案都是透過 Laravel 建立,並且使用 apache 服務,在正常情況下是不會有問題的,

但是有些主機內部安裝了多個專案,以 subdomain方式進行管理,就會出現問題

針對這狀況透過 .htaccess 設定防止 .env 暴露

laravel debug 設定為 false

檢查每一個專案的 laravel debug ,發現有部分專案設定為 true,會導致發生錯誤時,會連同帳號密碼一同噴出

將這些專案的 debug 改為 false

移除 phpmyadmin

舊版的 phpmyadmin 存在著 /phpmyadmin/scripts/setup.php 等相關漏洞

因此,同樣檢查所有專案,將所有 phpmyadmin 刪除

查驗 access_log ,檢查公司內部流量是否有異常訪問紀錄

有營運的主機通常都會有大量的測試後門位置的輪詢,對此檢查也同樣有發現大量測試後門的紀錄

另外則檢查公司內部,查看是否有異常的訪問紀錄

以上流程處理完畢,原則上可提高再次被入侵的難度

【進階優化方式】

為了防範未然,後續則在請 MIS 進行一些進階的防護:

  • 內部每日即時備份
  • 內部程式系統備援
  • 全面資安漏洞檢查
  • log 管理系統
  • mysql log
  • 防火牆掃描偵測 在測試後門的機制

【提交報告】

將攻擊相關的訊息提交到 bitcoinabouse 比特幣濫用數據庫

https://www.bitcoinabuse.com/reports

最後,當然這場仗還是持續在進行中,資安領域博大精深,後續有其他的發展再持續將相關事件進行紀錄