隱藏攻擊面,提升信息安全防范能力
1. 攻擊面在安全攻防中的價值
洛克希德-馬丁公司的網絡殺傷鏈(Kill Chain )模型描述的攻擊過程一般包括7個階段:偵察跟蹤、武器構建、載荷投遞、漏洞利用、安裝植入、命令與控制、目標達成。偵察階段主要實現對攻擊目標(如服務器,公司網站,內網等)的各類信息收集,其中就包括通過各種技術手段進行主機和端口掃描,獲取存活IP地址、系統類型、開放端口、服務版本等基本信息。
安全防守方一般基于傳統的縱深防御理念,在物理、網絡、系統、應用、數據、流程、人員管理等不同維度使用技術和管理手段,對各種攻擊行為進行威懾、預防、檢測、響應和恢復。針對攻擊過程第一階段的掃描行為,安全防守方可以采取的措施包括梳理并減少對外暴露的攻擊面,進行系統和應用的安全基線加固,補丁更新、banner隱藏、日志和網絡流量審計等手段,一方面減少和降低攻擊者可以發現的風險資產數據,同時對早期的攻擊行為及時進行預警。
根據實戰經驗,攻擊者在偵察階段收獲的目標資產數據量多少和風險高低,某種程度上決定了后續攻擊行動的難易程度和最終的攻擊成果。一些HW行動中,經常會看到紅方人員早期的拔線操作,其最終目標就是盡可能減少藍方可以獲取到的攻擊面風險資產數據。因此從某種方式來看,最初的攻擊面掃描和安全防護,對攻防雙方來說有點像爭奪灘頭陣地。對于攻擊者來說,需要盡可能拿到更多的攻擊面信息,以便下一步開展武器化攻擊活動;對于防守方來說,需要盡可能通過各種方法減少暴露的攻擊面信息,以在攻擊初期就可以截斷攻擊者后續的各類攻擊行為。
我們可以試著想象一下這種場景:攻擊者在攻擊第一階段進行資產漏洞掃描時,如果防守方突然通過某種方式給信息資產穿上了一層隱身衣,會是怎樣一種情形?攻擊者會發現無論是fping、nmap、zmap又或者是openvas、nessus、wvs等各種掃描工具均無功而返,根本不能和想攻擊的服務器或應用建立任何的網絡層連接,之前預先準備好的各種攻擊工具、POC和0Day漏洞等招數全部落空,一臉郁悶吧。盡管現實中的實際情況不會這么絕對,但如果防守方可以把關鍵信息資產(如對外開放的公網服務、內部辦公應用系統等)進行統一隱身管理,必然可以大大降低公司整體信息資產風險,顯著提升公司安全防范能力。
這種隱身方法,除物理斷網外,現有的一些安全技術也可以達到類似的攻擊面隱藏效果,如Port-knocking、SPA及SDP解決方案。
2. 隱藏攻擊面的幾種方法
2.1. 端口敲門技術(Port-Knocking)
端口敲門是一種通過服務器上關閉的端口來傳輸約定信息的方法,從而在用戶訪問受保護服務之前對用戶進行身份驗證,主要用于對公網開放的服務如sshd進行安全防護。
Port-Knocking實現原理介紹
- 主機防火墻默認規則是DROP所有請求包,從外網來說,沒有任何方法可以確認服務器是否存活(備注:因為DROP規則不會發送響應包,從而避免掃描器根據響應包確認端口的開放情況。REJECT/DENY規則會發送ICMP_PORT_UNREACHABLE返回給客戶端,掃描器如nmap可據此判斷出端口狀態是filter,從而暴露服務器本身是存活的,端口是開放的,但禁止掃描器IP訪問);
- Port-Knocking守護進程運行在服務端,并在主機防火墻DROP數據包時進行分析,如果某個源IP發送的一系列TCP或UDP數據包是按照服務端預先設定的特定順序訪問了對應的一組TCP或UDP端口(表示敲門暗語正確),則knockd進程自動調用iptables命令執行配置文件中預設的對應規則,如增加一條允許該IP地址訪問服務器SSH端口的規則。如果數據包不滿足服務端預設的端口訪問順序,則守護進程不會執行任何操作。
Port-Knocking帶來的安全性提升
- 服務器是否在線對攻擊者來說不可感知
服務器主機防火墻默認DROP所有請求的數據包,因此攻擊者不能通過掃描器確認服務器是否存活,以及服務器上開放的任何端口。
- 漏洞服務不會對外暴露
訪問服務器上對外開放端口所對應的服務需要預先知曉敲門順序,所以即使對外開放的服務如SSH等存在哪怕是0day漏洞,攻擊者也無法利用。不存在暴力破解、字典攻擊、協議漏洞等安全問題。
- 建立多層防御體系
端口敲門順序是受信用戶才應知曉的秘密口令,因此某種程度來說,敲門順序和密碼一樣,也是一種用戶身份驗證機制。只有輸入了正確的敲門順序后,才會允許訪問對應的服務,即在所訪問服務之前增加了一層用戶身份認證防護。
2.2. 單包授權技術(Single Packet Authorization)
SPA可以說是下一代的端口敲門技術,和Port-Knocking實現機制不同的是,SPA把敲門所需要的信息即授權包PA(Authorization Packet),編碼在單個數據包內,然后發送給服務器的任意端口。
SPA傳遞的授權包信息類似:
AID : 發送數據包的客戶端唯一ID,明文傳輸以便服務端根據該ID查到對應的解密密鑰
PASSWORD : 客戶端口令(和服務端共享)
NEW_SEED : 下次事務的新種子
RANDOM : 客戶端發包前生成的隨機數,避免重放攻擊
MD5_HASH : 上述值的hash計算結果
和Port-Knocking技術相比,SPA具有如下優點:
- SPA僅需發送一個數據包,而Port-Knocking需要發送多個敲門數據包 (數據量大小)
- Port-Knocking數據包到達服務端順序不一致時會導致敲門暗語錯誤從而認證失敗,SPA不存在類似問題
- SPA數據包中包括一個一次性隨機字段,可以避免重放攻擊(重放攻擊)
- SPA傳輸的數據是加密的,而Port-Knocking數據包中包括了明文端口敲門順序(sniffer)
- 通過修改數據包源IP地址,攻擊者可以破壞Port-Knocking認證過程,但是SPA服務器僅允許訪問SPA載荷中最初加密的IP(避免MITM)
2.3. 軟件定義邊界技術(Software Defined Perimeter)
隨著云時代的來臨,2013年云安全聯盟(CSA)提出了軟件定義邊界(Software Defined Perimeter,SDP)的概念,并于2014年發布了《SDP標準規范1.0》,為各安全廠商構建自己的SDP產品提供指南。
SDP標準的核心仍然是通過SPA協議對后端服務實現隱身后的防護,但擴展了SPA的應用場景。通過引入SDP控制器,可以支持多種身份認證和授權服務,通過連接接受主機(AH)的網關模型,可以對網關后的多臺服務器或應用服務進行隱身和防護,從而在Iaas、Paas、SaaS、遠程辦公、私有云、混合云等場景下實現信息資產的隱身保護。
SDP技術方案的真正落地涉及到管理人員的安全認知改變,SDP產品性能和功能完善,IT基礎架構及應用使用場景的身份認證和授權機制的改造,目前主要還是以取代遠程VPN訪問、內辦公平臺統一安全管理等內部應用場景。有關SDP的介紹和其他應用場景可參考之前發布的《零信任和軟件定義邊界》一文。
目前在其他行業如游戲行業,零信任或“連接之前首先進行身份驗證”的安全理念也有一些實踐成果,通過游戲客戶端內嵌專用sdk和游戲服務端建立連接并進行合法性驗證,可有效預防和降低DDOS和CC攻擊,如阿里云游戲盾,締盟云太極盾等。
可以肯定的是,基于ZTNA的顛覆性安全理念,幾年后云計算、IOT、工業控制、衛星通信等多個行業必將有更多的SDP實現方案和案例落地。
2.4. 實現工具
- 服務隱身,如iptables recent模塊,knockd項目,fwknop項目
- 網段內服務和應用隱身,SDP產品廠商如deepcloud,Pulse Secure等
2.5. 參考資料
- https://zeroflux.org/projects/knock knockd項目
- http://www.cipherdyne.org/fwknop/ fwknop項目
- https://ir.lib.uth.gr/xmlui/handle/11615/48775
- http://www.securitygeneration.com/wp-content/uploads/2010/05/An-Analysis-of-Port-Knocking-and-Single-Packet-Authorization-Sebastien-Jeanquier.pdf