0
1945年9月9日下午,美國海軍編程員、編譯器的發明者格格蕾絲·霍波正領著她的小組構造一個稱為“馬克二型”的計算機。
突然,馬克二型死機了。技術人員試了很多辦法,最后定位到第70號繼電器出錯。霍波發現一只飛蛾躺在中間,她小心地用攝子將蛾子夾出來,小心翼翼地帖到“事件記錄本”中,并注明“第一個發現蟲子的實例”。
這是有記載的計算機系統第一個Bug,從此以后,人們將計算機錯誤戲稱為Bug。
遺憾的是,從計算機誕生至今,工程師們也沒能把Bug消滅。
舉個例子。來看這樣一句話:“那個語文老師是我父親。”乍一看,這句話并沒有語病,讀起來也并不拗口。
但是,當環境中有兩個語文老師呢?這就出現了指代不清的問題。所以,這句話在特定環境中,是有缺陷的。
此時你可能會發布一個“補丁”:那個長得最高的語文老師是我父親。
很快問題又來了,如果他們一樣高的話,這句話同樣是有缺陷的。你不得不再次發布“補丁”,如此循環往復下去,缺陷不斷地“消失再出現”。
而能夠被利用的Bug或者是設計缺陷,就是漏洞。
漏洞有危害嗎?當然。關于漏洞的危害,《計算機安全技術規劃研究》作者James在1972年說了這么一段話:函數的代碼沒有正確地檢查源地址和目的地址,允許用戶覆蓋部分系統數據。這可能被用來向系統中注入代碼,從而使用戶獲得機器的控制權。
而在隨后的數十年間,桌面操作系統取代了DOS系統一統天下,應用軟件生態百花齊放,漏洞的利用一發不可收拾:
2003年8月,在微軟發布新一輪的操作系統安全漏洞后不久,沖擊波病毒利用微軟RPC漏洞開始全面爆發,受其感染的機器會不停重啟、IE瀏覽器不能正常打開鏈接、應用程序異常等等;
2010年7月,有著“有史以來最復雜的網絡武器”之稱的震網病毒開始爆發,它利用了微軟操作系統中至少4個漏洞(包括3個當時的0day漏洞),突破了工業生產網絡與辦公網絡的物理邊界,致使伊朗核設施遭受重大損失;
2014年4月,心臟滴血漏洞首次向公眾披露,攻擊者可通過讀取網絡服務器內存,訪問敏感數據,從而危及服務器及用戶的安全,其影響范圍之大實屬罕見;
2017年5月,全球范圍內爆發基于Windows網絡共享協議進行攻擊傳播的永恒之藍蠕蟲惡意代碼,本次爆發使用了已知Office漏洞、永恒之藍SMB漏洞等。盡管微軟早在數月前就發布了相關漏洞補丁,但依然沒有阻止數百萬臺主機的失陷。
……
指望不再出現漏洞是不可能的。能夠預見的是,將來還會有更多的漏洞出現,誰都無法阻止。
只要是人編寫的程序,一定會有缺陷,即便用于防范網絡攻擊的網絡安全產品也不能例外。不管工程師如何修復,隨著外部環境的變化,缺陷就會暴露出來。一旦這個缺陷能夠被用于網絡攻擊,漏洞就形成了。
面對漏洞利用,防守者只能血戰到底。
按照公開程度,漏洞大致可以分成三類:
第一類是Nday漏洞,即已公開并且已經有修復方案的老舊漏洞;第二類是1day漏洞,即已公開但尚未發布補丁的漏洞,甚至沒有緩解措施;第三類是0day漏洞,即尚未公開的漏洞。
理想狀態下,只要發現的足夠及時,修復足夠快,漏洞攻擊就追不上我,也就不存在0day的問題。
或許在絕大多數情況下,事實的確如此。在賽博空間,每天都有大量的白帽子發現并協助廠商完成漏洞修復工作。
但現實卻是骨感的,沒有人能做到一直領先。所以,攻擊者仍可能掌握著少數0day,而你對它一無所知。尤其是那些不需要與用戶過多交互就能夠輕松觸發利用的遠程代碼執行漏洞,更是頗受攻擊者的青睞。
一旦出現0day,安全廠商最重要的事情,就是與時間賽跑,盡可能縮短漏洞利用的“空窗期”,讓它變成Nday。
首先是盡快幫助客戶確定漏洞的危害以及影響范圍。漏洞的危害包括很多種,有的被用于竊取數據,有的被用于獲取控制權限,還有的則可能用于破壞,危害不同,處置方法也不盡相同;漏洞的影響范圍則包括影響哪些軟件版本,有哪些主機安裝了有漏洞的軟件等等。
其次是通過漏洞復現盡快找出通用規則,在補丁發布之前輸出緩解措施和檢測方案。從漏洞發現到補丁安裝,這中間需要經過一段相當漫長的過程,而且即便有補丁,也會考慮到業務的連續性和穩定性原因,補丁安裝也不會十分順利。因此,通過關閉部分不常用的端口等緩解措施來防范漏洞利用就顯得非常重要了。與此同時,安全廠商還應盡快推動相應的安全產品更新檢測規則,及時發現對應的攻擊行為。
尤其是需要注意那些POC或者EXP已公開的漏洞,它們隨時可能被其他攻擊者大范圍利用。
話雖如此,但攻擊者手握0day甚至是1day,就意味著掌握網絡攻擊的絕對主動權,往往能夠在成功在內網建立“根據地”,向其余目標進行橫向滲透。
因此在攻防對抗階段,防守方決不能完全依賴某一款或者某一類安全產品,一旦攻擊者繞過安全產品的檢測(尤其是使用該安全產品的漏洞),便可以暢通無阻。這就要求防守隊必須構建起多批次、大縱深的防御體系,對異常行為進行持續的檢測。
這種做法的好處有兩個,其一是提高攻擊者的攻擊成本,迫使攻擊者不得不花費更多的資源甚至是使用多個0day漏洞的組合攻擊,才能達成攻擊目標;其二是在邊界、終端、服務器等多個不同網絡位置,完整記錄攻擊者的入侵行為,包括端口嗅探、弱口令暴破、文件上傳、DNS解析、進程創建等,結合威脅情報,為溯源反制提供數據支撐。
當攻擊者利用社會工程學技巧向目標用戶發動釣魚郵件攻擊時,防守方可以利用各類檢測設備,輕松獲取攻擊者的IP地址、域名后綴郵箱、釣魚網站或惡意附件樣本等信息。
此時,溯源反制便顯得游刃有余:其一,可以通過相關聯的域名/IP進行追蹤;可以利用沙箱對郵件惡意附件進行分析,獲取文件MD5等信息后與威脅情報進行比對,完善攻擊者畫像;在規則允許的情況下,還可以對攻擊者進行反向釣魚滲透,進一步獲取攻擊者的社交信息。
而想要獲取上述數據,至少需要在網絡側部署全流量檢測設備,記錄全部的網絡會話;在終端側部署終端檢測與響應系統,記錄終端上的各類文件執行等數據;在服務器側,部署服務器安全軟件,記錄服務器內部的行為數據;甚至可以在內網大量部署蜜罐,對攻擊行為進行欺騙誘捕并記錄。
話說回來,0day的最大危險性來源于其未知性。既然無法避免,那就兵來將擋水來土掩。一旦被防守方捕獲或者成功溯源,0day很快就會變得和Nday一樣,失去它的銳利。
值得欣慰的是,0day漏洞的首次利用并非完全無懈可擊。漏洞是未知的,可攻擊者觸發漏洞的方式,卻可能是執行已知的攻擊命令,并且剛好命中安全設備的檢測規則。
例如,安全員可能無法完全排查出飛機上所有的火災隱患(漏洞),但可以阻止乘客攜帶明火登機,而縱火犯想要縱火的方式恰好就是帶明火上飛機,于是被安檢攔截了。
雷鋒網雷鋒網
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。