網絡安全縱深防禦體系

 

第一層是安全域劃分,這個安全域是對業務的抽象,並不是對物理服務器的劃分,在大規模分佈式架構中,同一個安全域的機器可能並不一定位於同一個物理機房,但是它們對應相同的安全等級,共享一組相同的訪問控制策略,只對其他安全域或 Iinternet 暴露有限的協議和接口。即使攻擊者滲透了其他相鄰的服務器,也只能掃描和訪問這個安全域內有限的幾個端口,沒辦法自由滲透,這個方案主要解決Plan-B曲線救國時被人侵者“誤傷”,即被無意識的掃描行爲以很低的成本獲取新的站點和權限,以及獲得單點root後進步滲透的擴散,希望能把安全事件爆發的最大範圍抑制在一個安全域中,而不是直接擴散到全網。

 

第二層是基於數據鏈路層的隔離,只有第二層隔離了才能算真正隔離,否則只在第3層以上做ACL效果會差一些,仍然會遭受ARP攻擊。第二層使用VPC、 Vxlan、VLan等方法相當於在安全域的基礎上對一組服務器以更細的粒度再畫一道防線,進一步抑制單點淪陷後受害源擴大的問題。在不是特別大的網絡中可以直接跳過安全域到這一步。當然安全域的概念在任何時候都是存在的,我們在這裏僅僅是在做劃分的事情。

 

第二層之上就是端口狀態協議過濾,這是絕大多數“防火牆”應用的場景。解決的還是對黑客暴露的攻擊面的問題,即使我的加固做得不到位,不必要的服務沒有清理乾淨,開放了有問題的端口,甚至有些端口上跑着的服務還有漏洞,但是因爲被防火牆過濾了,路由不可達,所以攻擊者利用不了,他只能在對外或對信任域暴露的端口上去想辦法。本質上,就是給攻擊者提供“窄帶”,有限的訪問通道。不過在有複雜嵌套引用關係的大規模生產網絡中,出於運維成本的考慮,有時候訪問控制策略不會做得很細粒度,因爲那樣的話,如果有臺機器掛了,換個P都麻煩,這也是安全向業務的妥協。

 

再往上一層是現在討論最多的APP安全,其實從圖中也可以看出你平日的工作都是聚焦於哪層。這一層單獨拆開都可以再建一個縱深防禦的子體系。應用層通常是暴露在Internet上的攻擊面,這一層主要是解決認證鑑權、注入跨站上傳之類的應用層漏洞,儘可能把入侵者堵在信息和資源的唯一入口。如果你在開發WAF,那你對應的也是這一層的工作。

 

應用層上方是容器、運行時環境。這裏的目標是假設服務器上的應用程序有漏洞,且攻擊者找到了漏洞,我不希望這個漏洞能被成功利用,直接跳轉到系統權限,而是希望能在這一步阻止攻擊者,辦法就是通過容器加固。比如阻止一些危險函數的運行,比如上傳了 webshell 但是不被解析執行,比如你想執行eval()並用種種方法變形編碼字符串拼接逃過了應用層的檢測,但是到了運行時其實是相同的底層指令,那麼無論攻擊者在上層多麼努力地變形,我都有可能在更底層把攻擊者揪出來,哪怕不直接阻斷,我也至少報個警。在絕大多數入侵活動中,上傳或生成 webshell 是從應用權限向系統權限轉化的關鍵一步,所以這一層的防禦也是比較重要的。後面會有單獨篇幅講如何對抗webshell。

 

如果不幸之前的步驟都沒阻止攻擊者,對方已經得到了普通用戶的shel"$",那麼我肯定不希望你繼續得到 rootshell,對抗的辦法就是大家常見的那些系統加固項。有很多文章洋洋酒灑寫了一大堆主要就是用在這個場景的,不過最主要的還是對抗本地提權以及內核提權,攻擊免疫或稱攻擊緩解機制如SMEP、SMAP、DEP、各種ASLR、 stack- canay、read-only、PLT、GOT等都是在這裏“埋點”,其他的諸如 umask=022等也是在這裏埋點。似乎看上去這些不太需要安全團隊的介入,好像都是OS默認的機制?其實不然,安全做到偏執的程度後還是有自己出手的地方, Android出手比標準的 Linux更快一點,也許以後就真的沒太多需要自己出手的地方了。不過,當下各種基於LXC的容器,越來越多的多租戶的雲環境,隔離的機制完全依賴於內核的健壯性,這些場景下對抗這一層的攻擊都顯得尤爲重要。

 

如果被拿走了root自然是很令人不爽的事,但還不是最令人不爽的。如果有一天當你的1萬臺服務器中有500臺被攻擊了,而且還不能推斷是不是裝了 kernel rootkit I的情況下,這種感覺是最要命的。就如同你生了個腫瘤手術摘掉也就算了,如果手術完都不確定摘了沒有,可就麻煩了,這時即便500臺服務器備份數據、重裝系統都不能徹底解決問題,而且近似於你某個子業務要處於離線狀態,對於這種極其影響可用性的事情,業務部門會把你通瘋掉。所以不是特別需求要幹掉LKM、/dev/kmem並限制/dev/mem的全地址空間讀寫,另外 kernel MAC內核強制訪問控制也能限制rot只能做有限的事情,儘管理論上內核提權還是能控制一切,不過要在沒有開發環境的服務器上實現完整的 kernel rootkit功能並保證不在用戶態留下蛛絲馬跡的概率還是比較低。這樣做還有一個好處,把入侵檢測聚焦於用戶態,不要動不動就去裝一堆內核級別的重量級玩意兒,大規模高併發的生產環境傷不起。

 

在雲計算環境中,上面那步可能還不算是單點滲透的終結,更底層還有 hypervisor。如果攻擊者逃逸出VM那就比較狼狽了,每個廠商都需要考慮一下VMM的保護方案,現在hypervisor這一層很薄,不會做得很重,似乎還沒有特別成熟和通用的方案,不過肯定會發展起來,會有更多類似於XSM這樣的方案。

 

在一個真正建立縱深防禦的系統中,人侵者一般到不了root這一步就會被揪出來,只不過完整的縱深防禦分散在全書後續的篇幅裏,這裏只是選取了其中一個維度來試圖解讀這個概念。另一方面,完整的縱深防禦體系只有大型互聯網公司纔可能全覆蓋,因爲跟安全建設成本有關,這個問題之前提到過:不同規模企業的安全需求和同一公司在不同安全建設階段的需求是不一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章