“我們都知道洗手在預防疾病傳播上的重要性,但是在面對應用安全問題時,類似的行為卻變成了馬后炮。我們已經掌握了在開發工作流中加入測試的做法,但是對于安全問題卻常假定稍后會有其他的人去解決。”這是Sam Newman近期在倫敦微服務大會的主題演講中所提出的觀點。他的演講內容圍繞微服務環境中的安全問題而展開。
Newman當前供職于Atomist,他認為各個微服務構成了一種六邊形的形態,其中每種微服務的命名是與它們的業務職責相對應的。這些微服務具備自治能力。Newman特別指出,這些微服務的自治能力主要來自于它們的獨立可部署性。
單體系統通常會具有一個邊界,以及一個需要得到保護的數據庫。如果攻擊者借助安全漏洞闖入了這樣的系統,他很有可能會竊取到系統內的全部東西。如果基于微服務的系統具備了適當的安全性,我們就可以限制攻擊者竊取的權限,以及在一次攻擊破壞了某個服務后所能竊取到的東西。但是在使用微服務的同時,也暴露了更大的可攻擊面,使得更多的服務器可被攻擊。單體進程內的方法調用,現在變成了對遠程API的網絡調用。另外為大量服務器手動打補丁容易出現漏打補丁的情況。
通常我們在發現滲透或潛在的攻擊時并不會采取理性思考。我們通常會修補漏洞以防止被再次利用,而不是退后一步從整體看待這個問題。這意味著我們常將錢花在了錯誤的事情上,反而將容易受攻擊的缺陷留在了系統中。
正確的做法應該是建立威脅模型,并仔細思考如何在防范攻擊問題上合理地分配你的精力。Newman給出了他們所使用的兩個例子,分別是由Bruce Schneider提出的Attack trees以及使用了STRIDE和DREAD威脅建模技術的Microsoft安全開發生命周期。
增強安全性的一個簡單做法是對包括內部網絡在內的所有地方都使用HTTPS。該做法可確保消息載體不會被篡改,而且不會出現惡意的冒牌服務器。Let's encrypt是一個免費且自動化的認證機構,它的目標是試圖為在公共網絡中隨意獲取HTTPS認證提供便利。Newman指出Let's encrypt最重要的特點在于它是自動化的。服務器在對客戶端進行驗證時需要客戶端認證,但是通常情況下管理這些認證信息會是一種負擔。
Newman認為Docker是一項偉大的技術,但是他同時也指出許多受信任的官方鏡像都具有嚴重的缺陷,這意味著安裝了這些鏡像的系統同時也包含了該鏡像的缺陷。Newman極力推薦使用clair這類工具,它具有缺陷靜態分析及日常打補丁的功能。
檢測或是對已發生的攻擊事件了如指掌對防止新的攻擊是十分有用的,但是在運行中的服務器上發現新的缺陷也是十分重要的。一般情況下攻擊會在日志中留下痕跡,因此Newman指出,我們首先要去做的一件事情是如何在一個集中的地點獲取對所有日志的訪問。這不僅是出于安全方面的考慮,而且是來自應用開發上的考慮。
除了預防和檢測問題,Newman還指出對漏洞問題做出響應和恢復受攻擊系統的重要性。你如何對一個安全漏洞問題做出響應并就該問題與客戶進行溝通?你如何去恢復一個被攻擊的系統?在數據散布到微服務系統中去之后,從備份進行恢復會變得更加困難。
明年的倫敦微服務大會將在11月6日至7日期間召開。