防火牆
當前主流防火牆在基本的基於五元組(源目IP、源目端口、協議號)檢查的基礎上引入了狀態檢測,即對於接受的報文順序有所要求,比如需要先接受到某個5元組的IMCP request(type 8 code 0)報文,然后再從反向接受到對應5元組的ICMP replay(type 0 code 0)報文,才認為這是一個正常狀態的報文,並將其放過。如果首包接受到一個ICMP replay報文則會認為其狀態不合法並將其丟棄。這樣實現的好處在於引入了更為嚴格的訪問控制,能夠極大減小偽造源地址攻擊的危害。因此,如果業務(主要是TCP這種有狀態的)只是單向過牆,需要在防火牆上關閉狀態檢查。
將部分具有相似屬性的接口划分安全域,為不同安全域分配優先級,各個安全域之間按照優先級互訪的方法過於不安全。安全域只應該是一個名稱,用於對防火牆連接的業務區域做邏輯划分,本身不該有優先級概念。隱式拒絕,按需放通,最小權限才是防火牆策略部署的正確做法。尤其在零信任愈發為各大公司所接受的當下,防火牆更為主要的作用在於攔截不必要的、非預期的訪問流量。
防火牆的性能瓶頸主要在新建、並發和吞吐。由於其特性,新建會話需要上送到CPU進行安全過程的處理,進入穩態后才會通過硬件轉發,高新建會極大消耗CPU處理能力,比如漏掃多線程對大目的地址段進行掃描、用zmap等掃描工具穿過防火牆進行掃描等很容易就將防火牆打掛,這種狀態下由於探測完后就拆鏈所以並發不大,探測報文基本都是小包所以吞吐也不會成為瓶頸,唯一的瓶頸就行新建,這在防火牆作為出口網關的場景下比較常見。
由於防火牆的狀態檢查機制,不同狀態的連接有不同的老化時間,一旦連接老化后對應五元組的報文經過防火牆時會由於狀態非法而被丟棄,部分業務基於其特性要求使用長連接(即對應五元組老化時間變長甚至不老化),如果並發過大而連接不老化會消耗設備內存。
對於多核多線程的防火牆,如果逐流轉發,一旦由於五元組hash問題導致流量集中到某幾個核處理,將單核打滿,即使未達整機吞吐也會出現部分業務丟包的情況。
IPS/IDS
IPS(入侵防御系統)和IDS(入侵檢測系統)的區別在於部署位置的不同。IDS主要用於旁路部署在網絡中接收鏡像流量基於流量特征生成對應的告警日志,優點在於只需接收到鏡像就來即可,不會由於增加IDS而影響現有網絡或造成業務故障,缺點在於IDS僅檢測上報,不對檢測到的威脅進行阻斷。IPS則是侵入式的部署到網絡中,可以實現對檢測到的威脅進行攔截阻斷,但同時也引入了導致業務故障的風險。
在網絡中引入IPS需要考慮如何避免IPS故障導致業務中斷。對於IPS可靠性,可以通過雙機熱備實現故障切換,或者對於透明二層部署的IPS可以通過監控CPU和內存利用率在觸發閾值時實現軟件bypass,如果IPS有硬件bypass接口,在部署的時候應該考慮優先使用bypass接口對,這樣在設備掉電時可以實現硬件bypass。此外,IPS作為7層設備,如果串聯進網絡中需要在部署前對網絡吞吐進行詳細評估,避免IPS成為性能瓶頸。
IPS/IDS需要保持特征庫和官方最新才能有最好的防護效果。任何一款IPS/IDS都不可避免的存在漏報(false pasitive)和誤報(false negative),漏報需要在有對比的情況下才能評估判斷,而誤報需要及時排除,避免由於頻繁的誤報掩蓋了真實的攻擊信息。在設備上線初期可以開啟所有規則,然后動作設置為放行並記錄日志,定期和業務側就日志進行溝通,將確認是誤報的規則關閉或者放行,一段時間后在基於前期整理的誤報規則重新配置IPS規則。對於IPS誤阻斷業務從業務側的定位方法可參考我之前寫的文章:為什么服務器突然回復RST——小心網絡中的安全設備
以上描述的都是網絡側的入侵檢測和入侵防御(NIPS、NIDS),HIDS(Host-based Intrusion Detection System)也是防護中不可缺少的一環,尤其是當終端和服務器之間建立的是HTTPS連接時,NIPS和NIDS基本沒有檢測效果,此時HIDS可以對服務器上的文件進行掃描,並對主機上的操作進行監控,可以及時發現webshell、后門等威脅。關於HIDS更多的信息可見保障IDC安全:分布式HIDS集群架構設計
WAF
WAF常見的部署方式有:透明部署、旁路監聽、反向代理。
透明部署的優點和IPS一樣,無需改動上下游網絡,設備出現異常時可以通過bypass跳過設備保障業務。
旁路監聽模式用於對鏡像流量進行審計,和IDS功能類似,不過更專注於Web層的防御,部分旁路監聽模式的WAF可以通過偽造服務器地址發給RST報文給終端來實現阻斷惡意攻擊,這需要WAF的響應包比服務器響應包先到達終端才能實現。
反向代理是WAF部署中最常見的部署方式,無論硬件WAF還是軟件WAF都適用,在WAF反向代理的場景下,服務器對終端呈現的地址是WAF的反代地址。反代部署的優點在於一方面可以通過路由控制只將需要防護的流量指向WAF從而減少無關流量對WAF性能的影響;另一方面,反代模式下,終端和WAF的反代地址建立一個TCP連接,WAF和服務器建立一個TCP連接,因此可以通過WAF屏蔽掉終端對服務器的感知。
WAF透明部署的缺點在於所有流量都會經過WAF,WAF會消耗性能對這些流量進行轉發,而且一旦WAF掛死且bypass失敗會導致所有業務中斷,有單點故障風險。
旁路部署模式的WAF一般用於威脅監控,部分攻擊需要基於服務器返回值才能進行判斷,所以在做流量鏡像時需要保證雙向流量都被鏡像到WAF,否則會導致WAF的檢出率下降。
反代模式部署時,對外提供的服務器地址是WAF地址,需要在部署階段考慮WAF的高可用性,避免在WAF故障后業務無法遷移,常見的做法是在出口防火牆上對WAF監聽地址做一次NAT,一旦WAF故障后可以在防火牆上修改映射關系將映射地址指向服務器地址。此外,由於WAF會作為客戶端向服務器發起訪問,如果業務並發過大,需要在部署初期考慮到WAF反代時候連接服務器的地址是否能池化,如果WAF連接服務器時只有一個地址那么即使把保留端口(1-1024)用上,最大並發(五元組)也只能是65535個。如果出現服務器主動發FIN拆除連接的情況,可用並發數會更低。具體請見之前寫的例子:TCP狀態機:當服務端主動發FIN進TIME_WAIT,客戶端源端口復用會發生什么
作為一個七層設備WAF對Web攻擊的敏感度要遠高於IPS,因此在部署上線初期必然會出現大量的誤報,為了將業務影響降低到最小,可以在上線初期對業務流量僅檢測記錄日志不阻斷,在手工排除誤報項后定期和業務側對無法確定是否為誤報的項進行溝通,整理出規則例外列表和誤報URL,當規則例外列表中的規則數和誤報URL數趨於穩定后,可以將明細的誤報URL加白,對於規則例外列表中的規則謹慎禁用,將其他規則啟用阻斷后WAF完成上線。特征庫是WAF識別能力的重要依據,因此需要保持特征庫最新。建立和業務側的溝通機制及時解決誤阻斷。
虛擬局域網
當前最常見的虛擬局域網技術有IPsec、SSLV P N、L2TP等。基於IPsec流量可以通過ESP進行加密保證傳輸的安全性,常用於點對點之間建立加密通道保護數據流。SSLV P N基於SSL提供加密傳輸,可以支持Web接入、TCP接入、IP接入,是遠程辦公的首選方式。L2TP可以封裝2層報文並且能夠提供終端身份認證功能,但是其本書不具有加密能力,因此L2TP常常結合IPsec使用,在提供認證的同時對流量進行加密,主要用於移動終端遠程接入內網。
IPsec部署最大的困難在於需要一一比對建立IPsec隧道的兩端設備的各項參數,基於IKE的IPsec認證中,一階段主要實現雙方互相進行身份認證,以及協商保護二階段所需要使用的加密和認證算法,二階段主要用於雙方交換IPsec加密相關算法,協商感興趣流。IPsec建立起來后,對IPSec的維護主要有兩方面的工作:一方面是對於新增業務,需要同時修改兩端的IPSec感興趣流,兩端協商出來的感興趣流是各自感興趣流的交集。另一方面需要防止IPSec隧道異常斷開,異常斷開一般是由於中間鏈路不穩定導致報文被丟棄或者長時間沒有業務流量經過IPSec隧道自然老化,可以通過配置DPD檢測的方式規避此類問題。
SSLV P N有豐富的認證方式,可以在撥號過程中完成多因素身份認證(我是誰、我有什么、我知道什么),常見的認證有:用戶名密碼認證、證書認證、短信認證等,而用戶名和密碼認證即可以在設備本地完成,也可以將認證數據擺渡到遠端的Radius、LDAP等類型的認證服務器,基於其返回結果對終端進行動態授權。終端通過SSLV P N進行IP接入后會在終端生成虛擬網卡,該網卡會基於網關設備上配置的策略進行路由下發將匹配的流量轉發到SSL隧道網關處理。在此種場景中需要注意,如果不是所有流量都強制走SSL隧道網關,終端通過域名方式訪問內網資源時,由於終端系統的實現,會輪詢進行DNS查詢,有可能會通過本機物理網卡設置的DNS地址進行解析,進而出現解析失敗或者解析到公網地址的情況。對於此類異常,一般需要強制流量走VPN隧道或者修改終端host來解決。
兩種加密隧道還有一個共性問題,由於隧道內部封裝的是IP層報文,為了保持一致性,外層隧道報文的IP層一般會復制內層報文IP頭中的FLAG置位情況,也就是說,如果內層報文的DF(DONTFRAGMENT)標志位置位,外層隧道報文也會將自己的DF標志位置位。如果內層報文比較大,在經過加密、外層封裝后,整個報文的長度可能大於接口MTU,又由於該報文設置了DF位,因此報文到達出出接口時會由於報文長度大於MTU,而又不允許分片導致報文被丟棄造成業務異常。常見的規避辦法是在設備連接內網資源的接口上或者全局調小TCP MSS 值,減少封裝后報文長度大於MTU的情況出現。但是TCP MSS的值也不宜設置過小,否則會導致文件傳輸速率明顯降低。
漏掃
基於其掃描對象,常見的漏掃系統可以分為主機漏掃、Web漏掃、數據庫漏掃。
主機漏掃通過目標主機發現→端口探測→服務枚舉的順序進行掃描,基於獲取到的服務信息,讀取服務版本號以此作為一個重要的漏洞判斷依據,在主機漏掃的掃出漏洞中,最常見的是基於主機OpenSSL或OpenSSH版本號列舉出來的相關版本漏洞以及基於交互過程中獲取的加密算法、密鑰長度、證書等信息得到的協議弱點相關漏洞,基於POC對主機系統進行檢測后得到主機操作系統相關漏洞,另一方面也可以使用密碼字典對探測出來的服務進行弱口令檢測,常見的有RDP登錄弱口令、FTP弱口令、SSH弱口令等。
Web漏掃通過url爬取、目錄枚舉、組件版本探測等進行信息收集,構造請求報文訪問爬取的url連接通過對比響應報文判斷是否存在Web安全漏洞(諸如SQL注入等),目錄枚舉獲得的信息可能存在敏感信息泄露等問題,而基於組件版本號可以列舉出對應組件存在的已知漏洞。
數據庫漏掃相較於前兩者更專精於數據庫弱點的掃描,支持豐富的數據庫種類和版本,通過數據庫漏掃實現弱口令掃描和老版本已知弱點掃描。
漏掃的使用大同小異,主機漏掃在配置時需要注意兩點:主機發現的方式,在對地址段的掃描中,一般會先進行主機發現,通過arp探測、icmp探測、常用端口探測等方式進行主機發現,這樣可能會漏掉部分攔截了icmp報文、未監聽知名端口的主機,所以如果需要一個完整的掃描結果而不是追求效率的話,可以考慮跳過主機發現;主機漏掃的端口探測缺省一般是常見知名端口,如果應用側將服務修改成監聽在非知名端口時,使用缺省掃描可能錯過相關服務的檢測。Web漏掃檢測的目標url數量直接關系到最終探測到的漏洞數量,漏掃可以通過順序爬取Web頁面或者用戶使用漏掃內置瀏覽器進行訪問漏掃記錄訪問URL的方式進行掃描。
漏掃作為旁路設備,其本身並不承載業務流量,但是在使用漏掃的過程中很可能會影響到生產業務。漏掃在主機發現和端口探測階段會發送大量的握手報文,如果中間設備通過CPU對這些報文進行轉發,很可能導致中間設備由於CPU繁忙而丟包,造成業務不可用。另一方面,對於部分兼容性不好的應用,漏掃發送的非預期接收數據包可能導致應用處理異常,造成業務不可用,因此,在開始進行漏洞掃描前,需要基於網絡情況評估合理的並發值、並和業務部門對關鍵應用的掃描方式進行溝通,在不影響業務的前提下進行掃描。
漏掃不可避免的存在漏報和誤報,對於漏報,使用多款工具進行交叉測試可以集各家所長盡可能全面的收集到系統弱點信息;對於誤報,最好能從網上找到基於漏洞原理測試的PoC或者測試工具進行二次確認。此外,漏掃在運行過程中會導致被掃描的主機系統產生大量的日志,可能淹沒真實的攻擊流量和威脅,因此,如果漏掃功能上支持,可以在掃描請求報文中攜帶特征字段,用於目標系統快速排出漏掃日志。
最后,漏掃本身的安全性常常被忽略,由於其掃描各類資產的需求,為了方便,很可能內網中的安全設備對漏掃都加了白,而且有的環境中漏掃甚至跨區域存在,如果漏掃被攻破,則很可能到內網所有主機可達,因此,需要對漏掃系統本身進行持續的安全加固,並且做到只在使用的時候將漏掃接入網絡中,不同隔離區域之間使用不同的漏掃,避免漏掃成為打通各個區域的工具。
抗DDoS
DDoS攻擊主要通過消耗目標系統的資源(連接建立能力、請求處理能力)或者帶寬來實現攻擊的目的。
消耗連接建立能力常見於syn flood攻擊,攻擊者通過偽造源地址或者控制僵屍主機向目標服務器監聽端口發起 tcp syn連接,服務器響應syn + ack並為終端分配TCB,終端不響應服務器發出的syn + ack導致服務器反復重傳,大量的syn包會消耗服務器的CPU新建能力,TCB占用內存資源,導致服務器無法處理正常客戶端的請求報文。
消耗請求處理能力的攻擊常見於應用層攻擊,比如HTTP慢速攻擊和CC攻擊,HTTP慢速攻擊利用HTTP的協議特點(\r\n\r\n表示header結束,\r\n表示header換行),通過以極慢的速度發送請求頭,導致服務端一直在請求狀態最終耗盡服務器資源;CC攻擊通過發送大量不同的查詢請求(等需要消耗性能進行計算的請求),消耗服務器資源,導致服務器無法提供正常服務。
帶寬消耗型的攻擊常見於反射放大攻擊,由於其需要反射的特性(偽造源地址為受害主機),攻擊客戶端無法和反射源構建穩定的連接狀態,所以無連接的UDP承載的上層應用是這類攻擊的首選利用對象。常見的反射放大攻擊有DNS反射放大攻擊、NTP反射放大攻擊、以及其他一些基於UDP的應用bug導致的反射放大攻擊,如18年memcached爆出的UDP反射放大攻擊。DNS反射放大通常會利用EDNS0擴展實現得到更大的UDP響應包借此放大攻擊效果,NTP反射放大攻擊利用NTP服務器mode 7的monlist功能偽造源地址發起請求,服務器響應最近請求的600個終端IP,觸發反射放大攻擊。
DDoS攻擊的防御和治理需要從整個攻擊鏈條上進行,包括:僵屍網絡的治理(從源頭阻斷DDoS攻擊的產生)、反射源的安全加固(減少被用作攻擊資源的可能)、終端源地址來源確認(緩解偽造源地址攻擊)、使用內容分發網絡(CDN,對攻擊流量進行稀釋)、部署抗DDoS設備(攻擊流量的清洗)。
對於被攻擊者而言,后兩種在服務器端可以比較方便進行部署。通過將業務域名解析到CDN,在CDN緩存靜態頁面,只有動態操作才通過CDN反代到真實服務器處理,一方面CDN對靜態頁面的代答減小了服務器端的負載壓力,另一方面CDN的反代模式也能對網絡層及傳輸層的攻擊流量進行攔截,最大程度上保證了服務器端的安全。
在網絡出口部署硬件抗DDoS設備也是一種極為有效的防御方法,適合對資源消耗型的DDoS攻擊進行防御,在硬件抗DDoS中常見的攔截方法有:針對ICMP攻擊的ICMP限速,針對TCP syn flood的syn cookie、syn首包丟棄,針對UDP flood的UDP限速,針對CC攻擊的請求限速、驗證碼、JS挑戰碼等。
在部署模式上抗D設備比較靈活,可以串聯部署到網絡中對所有流量進行轉發,對防護主機進行攻擊檢測和攔截保護,優點在於部署簡單,無需上下行設備配合,缺點在於所有流量都會流經設備,影響防護性能。
此外抗D設備也可以使用旁掛出口的方式進行部署,通過在出口設備上將需要防護的流量指向抗D,抗D處理完后再轉發給出口或者出口的下行設備,優點在於只專注防護站點的流量處理,沒有其他干擾,處理能力更強。缺點在於需要出口設備配合,改動出口。
有的抗DDoS設備為了提升處理能力將檢測和控制進行了分離,也就是說其中一個組件負責對鏡像流量進行檢測,當檢測到針對防護主機的攻擊后聯動清洗設備通過OSPF或者BGP路由注入的方式將防護主機的32位主機路由注入到被旁掛的設備中實現將對應主機流量牽引到清洗設備的目的,清洗完成后再將正常流量發送給防護主機,這種模式使得流量處理能力可以得到極大的增強,兩組設備各司其職,正常情況下只檢測不處理,一旦觸發攻擊防范閾值則可以立即將流量牽引到清洗設備,通過聯動共同完成對攻擊流量的檢測清洗,其缺點是部署復雜,需要仔細規划網絡拓撲,運行動態路由協議。
對於CDN的部署,一方面需要注意CDN的可靠性,其基於域名解析的方式決定了local DNS server會存在緩存,一旦CDN故障,可能導致終端訪問異常無法第一時間恢復;另一方面要避免攻擊者繞過CDN直接發起向真實IP的攻擊,這種情況下可以考慮開白名單只允許來自CDN的地址訪問。
出口硬件抗D需要注意閾值設置,建議在經過幾個業務高峰周期后基於服務側的新建、並發峰值評估一個彈性值后來設置閾值,在現網中較為常見的故障時開啟了ack flood攻擊,在文件下載或者資源訪問中會有大量ack包傳遞,觸發攻擊防范后,ack包被丟棄,導致業務訪問變慢,實際中ack flood攻擊很少見(過不了攻擊終端出口的防火牆狀態檢查)可以考慮不開啟,避免誤阻斷。
此外,應該糾正通過防火牆/IPS等設備來攔截DDoS攻擊的想法,這類設備對DDOS攻擊的處理常常需要CPU來抗會極大的消耗設備性能,難以防御真正的DDoS攻擊。