如何避免數據庫“勒索事件”和“從刪庫到跑路”的尷尬
摘要:8月24日,阿裏雲數據庫技術峰會到來,本次技術峰會邀請到了阿裏集團和阿裏雲數據庫老司機們,為大家分享了一線數據庫實踐經驗和技術幹貨。在本次峰會上,阿裏雲數據庫技術專家張友東(林青)分享了如何從代碼層麵做好數據庫安全防護,以及如何避免頻發的數據庫“勒索事件”的發生,幫助大家了解了數據庫安全防護需要注意的事項。以下內容根據演講嘉賓現場視頻以及PPT整理而成。
近年來,數據庫安全問題逐漸引起大家的關注和重視,本次分享的主題就是如何去應對數據庫安全所麵對的問題。本次的分享主要將圍繞以下三個方麵:
- 2017數據庫安全事件及反思
- 如何讓你的數據庫更加安全可靠?
- 阿裏雲數據庫為你的數據保駕護航
一、2017數據庫安全事件及反思
2017年1月,MongoDB贖金事件
在今年的1月份,MongoDB黑客勒索贖金事件在互聯網上鬧得沸沸揚揚。這個事件大致就是某一天你發現自己的數據庫無法訪問了,當登陸到數據庫上去看時發現數據庫中的數據全都沒有了,而隻有黑客留下的一些記錄,裏麵的內容大概就是“你的數據庫已經被我黑掉了,而且我已經對於你的數據庫進行了備份,如果你想拿回自己的數據,就需要向某個比特幣賬戶中轉一筆錢。”,其實這與現實生活中的綁架勒索的性質基本相同。




- 這些數據庫之所以會被黑客攻擊,一個原因是這些數據庫開放了公網訪問,使得任何一台連接到公網的機器都能夠訪問到。除此之外,這些數據庫也沒有開啟鑒權,所以導致黑客能夠輕鬆地訪問用戶的數據庫,造成了用戶的數據損失。
- 受到影響的用戶對於數據的備份不夠重視,因為如果用戶對於數據進行了備份,即使黑客將數據刪除了,用戶也可以通過備份數據來進行恢複。
2017年1月,爐石傳說數據庫故障
接下來和大家繼續探討2017年1月份的另一起數據庫安全事件,也就是爐石傳說數據庫故障事件。這個事件並沒有公布技術細節,隻有爐石傳說的官方公告。爐石傳說在1月14號因為機房斷電導致的出現了數據庫故障,最終導致整個服務停了四五天,最終在1月18號將數據回滾到14號的某一個時間點。

- 爐石傳說並沒有做高可用的機房容災,因為整個機房掛了,於是服務就停了。
- 整個數據恢複使用了四五天的時間,所以在數據恢複方麵的工作還是存在一定欠缺的。
2017年2月,Gitlab數據庫誤刪
在2017年2月份還出現了一起數據庫安全事件,就是Gitlab的數據庫誤刪事件。這個事件的發生完全是因為運維同學鏖戰到深夜的時候,在已經非常疲勞的情況下把某一個數據庫誤刪掉了。這個事件當時也導致Gitlab的整個服務都停掉了,但是做的比較好的一點是Gitlab將他們對於整個事件的處理過程在互聯網上進行了直播,同時將改進的措施通過分成很多個issue來實現。


- 黑客攻擊,黑客攻擊存在不同層麵,也有很多種攻擊方法。
- 硬件故障,如果數據庫服務隻部署了單個節點,當單個節點掛掉之後,整個數據庫就無法提供服務了。
- 軟件缺陷,數據庫服務畢竟是軟件係統,當軟件存在Bug的時候,也往往會造成安全問題。
- 運維失誤,類似於剛才提到的Gitlab事件,數據庫往往是由運維同學管理的,而運維同學可能會發生一些運維的失誤,這也可能造成數據的丟失。
- 自然災害,類似於之前的爐石傳說的機房斷電以及其他可能的自然災害導致機房數據無法恢複。
二、如何讓你的數據庫更加安全可靠?
三招搞定數據庫安全
麵對這麼多數據庫安全的威脅,我們應該如何去做數據的安全防護呢?其實總結而言,隻需要三招就能搞定數據庫安全。第一招:安全配置,從單個數據庫節點的數據來看,應該盡可能地進行安全方麵的配置來避免遭受黑客攻擊以及非法訪問等。第二招:高可用部署,盡可能地部署多節點來構成的高可用數據庫服務,這樣就能夠應對硬件故障的問題,當單個節點出現問題的時候,可以直接啟用備用節點來頂上;當軟件出現Bug導致數據庫崩潰的時候,也可以通過高可用將故障進行轉移。第三招:數據備份,做好數據備份就可以應對運維的失誤以及自然災害等問題。通過以上的三個步驟,就可以使得數據庫達到比較安全的狀態。

第一招: 數據庫安全配置
接下來為大家更加詳細地介紹如何使得數據庫更加安全可靠。首先分享如何對數據庫進行安全配置。因為用戶的業務性質往往各不相同,所以對於數據庫安全的要求級別也會是不一樣的。這裏的數據庫配置將會分為三個維度進行介紹,分別是基礎安全防護工作、進階模式和更高層級的數據庫防護需要做的工作。

在基礎的安全配置完成之後,就可以更進一步地去實現進階的配置。進階的配置主要分為兩部分,第一部分是開啟鑒權之後,因為有很多個用戶需要去訪問數據庫,而這些用戶往往會擁有不同的角色,比如開發、運維、DBA以及測試等等,所以需要盡量地為不同的角色配置不同的操作權限,而不是一股腦地為所有的用戶都賦予Root權限,使得所有的用戶能執行一切操作。具體給什麼權限呢?其實這裏應該使用最小化權限原則,用戶需要什麼樣的權限,那就隻給用戶能夠滿足需求的最低權限。這樣就能夠盡量地避免一些誤操作,也能夠避免在出現數據誤刪事件之後,各個角色之間相互甩鍋,當為不同用戶分配了不同的權限之後,這樣的問題就可以避免了。同時還可以開啟審計日誌,審計日誌就是可以將所有數據庫的操作都記錄下來,具體是哪個用戶操作的、操作用了多長時間、整個操作的執行計劃等都可以詳細地記錄下來,這樣就能將所有的操作都實現有據可查,即使發現數據庫的誤刪動作以及非法訪問都可以立即查出是誰做的。而且通過開啟審計日誌,還可以方便地查看數據庫的運行狀態是否是健康的。
如果用戶想要獲得更高級別的數據庫安全配置其實可以做兩部分的工作,其中一部分工作就是實現SSL鏈路加密。通過SSL鏈路加密能夠避免數據被抓包的風險,並且在開啟SSL鏈路加密之後,客戶端和數據庫服務端存在一個相互認證的過程,這樣就可以避免遭受中間人攻擊。除了鏈路加密,為了達到更高的數據安全級別,還可以在數據存儲的時候進行數據加密,也就是TDE數據加密,這個通常是由數據庫存儲引擎在將數據存儲到磁盤上的時候來做的透明的數據加密。而這樣的整個加密過程對於用戶而言是完全透明的,用戶不需要去修改自己的訪問業務代碼。
第二招: 數據庫高可用部署
以上所提到的三個層次的數據安全配置方式是需要根據用戶自身業務的不同需求來進行配置的。單個節點的安全配置可能主要是為了防止數據庫被黑客入侵,但是如果發生了硬件故障或者軟件故障導致數據庫崩潰,想要實現數據庫的安全轉移,就需要實現數據庫的高可用部署。那麼如何實現整個數據庫集群的高可用部署呢?總結而言,數據庫的高可用部署主要可以分為三種模式,分別是外部支持、內建高可用以及通過計算和存儲分離將數據庫的數據存儲到共享存儲之上,讓共享存儲來負責數據庫的安全。這三種模式中,外部支持常見的有MySQL的MHA、Redis的Redis-sentinal,以及PGPool和Keepalived等都是實現的外部支持的高可用。在內建支持高可用方麵,像MySQL Group Replication、MongoDB Replica Set以及阿裏雲最新上線的MySQL金融版都提供了內置的高可用策略。而在共享存儲方麵,主要有一些比如將數據放到SAN存儲上,或者使用DRBD共享磁盤存儲,而且阿裏雲即將上線的PolarDB數據庫也實現了類似的共享存儲模式。

外部支持示例:MHA for MySQL

內建高可用示例:MySQL Group Replication

共享存儲案例:阿裏雲PolarDB

第三招: 數據庫備份
以上的三個例子介紹了目前數據庫的高可用是怎樣實現的,接下來介紹如何實現數據庫的備份。很多人對於數據庫的備份存在著一個疑問:之前已經實現了數據庫三節點了,通過三節點已經將數據存儲了三份了,那麼為什麼還需要去做數據備份呢?其實一定是需要做備份的。這裏就需要談到做數據備份究竟有什麼樣的好處了,假設剛才實現了三節點數據庫的部署,這樣所能夠應對的場景就像三節點的其中一個節點的硬件出現故障了,這時候可以自動fail over,或者其中某一個節點因為軟件Bug導致整個數據庫崩潰了,但是還有多個節點可用,這樣整個數據庫服務仍舊是處於可用狀態。而備份所解決的問題卻是:對於剛才的場景,假如運維同學對於三節點數據庫做了誤操作,向主節點發送了“drop database”刪除數據庫的操作,這樣整個數據庫就會從主節點刪除掉了,同時這個刪除動作也會同步到備節點上去,也就是對於像誤刪這樣的場景,所有的節點上的數據都是會丟失的。還有就是類似於誤刪的黑客刪庫攻擊,也會將整個數據庫都刪除掉,而且這將會是無法恢複的。除此之外,如果發生了自然災害,或者整個機房出現了故障,數據也都會丟失,這時如果進行了數據庫的備份,以上的場景就都能夠覆蓋了。

全量備份方法

邏輯備份 vs 物理備份
邏輯備份和物理備份的區別以及對於數據的影響存在多大的差異呢?我們又應該如何選擇數據庫備份策略的時候呢?下圖就為大家進行了簡單對比,從五個維度來對於邏輯備份和物理備份進行對比。

增量備份方法

三、阿裏雲數據庫為你的數據保駕護航
接下來介紹阿裏雲的數據庫是如何實現數據安全防護的,其實阿裏雲數據庫安全防護也是基於上述的安全配置、高可用部署以及數據備份這三個策略。阿裏雲數據庫——ApsaraDB目前的數據庫產品已經支持了整個DB Engine排名前十的絕大部分數據庫,比如關係型數據庫的MySQL、SQL Server、PG以及NoSQL數據庫中的MongoDB、Redis以及HBase等。

ApsaraDB 安全體係總覽
下圖是ApsaraDB安全體係的總覽,主要分為了三個維度:最內側的框表示的是ApsaraDB在單節點上所做的安全工作,比如鏈路加密、訪問鑒權以及防止SQL注入等;這一層往上就是在單節點實現了安全配置之後的高可用部署,最外麵一層就是在高可用基礎之上做的數據備份以及機房容災工作。

ApsaraDB 數據安全特性

- 在數據庫接收請求開始就支持SSL鏈路加密,也就是說可以配置數據庫使得所有請求的網絡數據都是加密的,這樣可以免除數據被抓包的風險,還能避免中間人攻擊。
- 當加密的數據到達數據庫,開始處理用戶請求之後,還提供了鑒權以及白名單策略。首先鑒權是默認開啟的,如果用戶希望使更多的服務器能夠訪問數據庫就需要去開啟白名單,通過鑒權+白名單這兩個策略來盡量地避免非法訪問。
- 在通過了鑒權和白名單之後還會進行SQL檢測,因為SQL訪問可能包含像SQL注入這樣的攻擊,所以需要對於用戶的SQL進行防止注入的檢測。
- 同時,如果配置了審計日誌就會把所有的訪問都記錄到審計日誌裏麵,有了審計日誌之後,所有的請求以及所有數據庫的操作都是有據可查的並且是可以回溯的。
- 在最底層數據存儲到磁盤的時候還可以配置TDE存儲加密,這樣使得最終的數據以密文的形式存儲到磁盤中,這樣即使對方拿到數據文件也無法讀取其中的數據。
- 最後,阿裏雲還會提供數據保險服務,用戶可以為自己的數據庫購買保險,當出現黑客攻擊、數據庫被破壞的情況發生時,可以獲得一定的賠付。
總結而言,對於整體安全策略而言,在故障發生之前,通過SSL、鑒權等策略盡量避免非法請求進入數據庫。當訪問進來之後,通過SQL檢測,在事中對於安全策略進行加固,盡量地避免攻擊。在事後,通過審計日誌將訪問請求都記錄下來,更好地發現攻擊以及誤刪等問題。最後,通過第三方數據保險使得用戶在數據丟失時獲得一定的經濟補償,來彌補所受到的損失。以上這些就是阿裏雲ApsaraDB單節點上的數據庫安全特性。
ApsaraDB 高可用

ApsaraDB 任意時間點備份恢複

ApsaraDB 容災

ApsaraDB 源碼能力 + 專家服務

最後更新:2017-09-02 01:33:42