在評估漏洞影響時,人們關注的往往是漏洞風險,而實際上,漏洞潛伏的時間也是一個非常重要的因素。時間跨度大,也就意味著在此期間使用這些含有漏洞的軟件的設備更多,影響的設備就更多;而時間跨度長,也就意味著被利用的概率也會更高。因此,潛伏的時間長短也應該是一個重要的因素,今天就大家細數那些潛伏多年的漏洞。
5年:Stagefright漏洞
2015年7月,Stagefright庫被爆出一個重大的安全問題,這個漏洞由于觸發條件簡單而備受關注。攻擊者只需給被攻擊對象發送一條精心設計的彩信,即可控制整個手機,之后可以刪除之前發送的彩信,使用戶無法輕易察覺被攻擊。漏洞由以色列移動信息安全公司Zimperium的研究員發現。Stagefright系列漏洞影響之大,危害之大,堪稱移動界的“心臟滴血”。
產生漏洞的原因,都是因為對數據校驗完善造成的。
而漏洞影響2.2-4.0/5.0/5.1版本的Android用戶,Android 2.2發布于2010年5月,也就是說這個漏洞潛伏了5年之久。
不過接下來的漏洞就沒有這么年輕了,有的甚至潛伏了幾十年。
7年:Linux系統double-free漏洞
今年3月研究人員曝光一個Linux內核漏洞,這個漏洞影響的范圍涵蓋大多數主流的Linux發行版,包括Red Hat Enterprise Linux 6, 7, Fedora, SUSE, Debian和Ubuntu。
由于漏洞可以追溯至2009年7月,那些Linux設備存在漏洞長達7年了,并且研究人員很難確定漏洞是否已經被利用過。
這個Linux漏洞編號為CVE-2017-2636,根據CVSS v3標準漏洞評分為7.8分。未經授權的攻擊者可以利用這個漏洞注入執行任意代碼,獲取root權限,或者發動DoS讓系統崩潰。
問題存在于N_HLDC linux內核驅動的競爭條件問題。這個內核驅動負責處理高級數據鏈路控制(High-Level Data Link Control或簡稱HDLC)數據,這就導致了double-free漏洞。
7年:Samba遠程代碼執行漏洞
Samba是Linux和UNIX系統的SMB協議服務軟件,可以實現與其他操作系統(如:微軟Windows操作系統)進行文件系統、打印機和其他資源的共享。
今年5月研究人員發現了這個漏洞,漏洞編號為:CVE-2017-7494。如果使用了該漏洞,當惡意的客戶端連接上一個可寫的共享目錄時,通過上傳惡意的鏈接庫文件,使服務端程序加載并執行它,從而實現遠程代碼執行。根據服務器的情況,攻擊者還有可能以root身份執行。
Samba 3.5.0到4.6.4/4.5.10/4.4.14的中間版本都受波及,也就是最早影響到7年前的版本。
9年:“臟牛”0day漏洞
Linux內核的內存子系統在處理寫入時復制(copy-on-write, COW)時產生了競爭條件(race condition)。惡意用戶可利用此漏洞,來獲取高權限,對只讀內存映射進行寫訪問。
競爭條件,指的是任務執行順序異常,可導致應用崩潰,或令攻擊者有機可乘,進一步執行其他代碼。利用漏洞(編號CVE-2016-5195),攻擊者可在其目標系統提升權限,甚至可能獲得root權限。 由于漏洞影響大,研究人員們還把它取名為“臟牛”。
根據官方發布的補丁信息,這個問題可以追溯到2007年發布的Linux內核。
11年:Linux內核漏洞”Phoenix Talon”
2017年5月,啟明星辰ADLab提交了四個存在于Linux內核的遠程漏洞,并命名為“Phoenix Talon”,其中一個漏洞為嚴重(Critical)級別,漏洞可導致遠程DOS,在符合一定利用條件下可導致遠程代碼執行,包括傳輸層的TCP、DCCP、SCTP以及網絡層的IPv4和IPv6協議均受影響。
漏洞本質上是double free的問題,使用setsockopt()函數中MCAST_JOIN_GROUP選項,并調用accept()函數即可觸發該漏洞。
盡管之后漏洞沒有引起足夠多的重視,但這四個漏洞的影響范圍包括所有Linux kernel 2.5.69 ~ Linux kernel 4.11的內核版本。2.5.69發布于2003年5月5日,而4.11發布于今年的5月5日。也就是說,時間跨度相當長。
11年:Linux內核提權漏洞
今年2月,Linux內核曝出權限提升漏洞(CVE-2017-6074)。
漏洞存在于Linux系統中的DCCP協議。按現在的實現,解析DCCP協議的流程中如果dccp_v6_conn_request有返回值,就會通過dccp_rcv_state_process中的__kfree_skb釋放掉解析過程中收到了DCCP_PKT_REQUEST返回包的SKB地址。但是,如果IPV6_RECVPKTINFO開啟的情況下編譯內核,skb地址就會被存儲在ireq->pktopts,而dccp_v6_conn_request中的引用計數會增加,這樣skb就仍然會被使用。直到dccp_rcv_state_process進程中才會被釋放。
攻擊者使用某些內核堆噴射技術就能控制任意對象,并用任意數據重寫其內容。如果重寫過的對象中包含任何可觸發的函數指針,攻擊者便可在該內核中執行任意代碼。
該漏洞可追溯至2005年,漏洞影響Linux操作系統主要發行版本,包括Redhat、Debian、OpenSUSE和Ubuntu。利用該漏洞,攻擊者可以從低權限進程中進行內核代碼執行。目前已知受影響的最老版本是2.6.18(2006年9月),不過該漏洞可能在先前的版本中已經存在,或許從支持DCCP開始(2005年10月的2.6.14)就已經存在問題了。
16年:“永恒之藍”漏洞
5月12日晚,一款名為Wannacry 的蠕蟲勒索軟件襲擊全球網絡,這被認為是迄今為止最巨大的勒索交費活動,影響到近百個國家上千家企業及公共組織。 該軟件被認為是一種蠕蟲變種(也被稱為“Wanna Decrypt0r”、“Wanna Cryptor”或“ Wcry”)。
中國教育網相連的中國高校也出現大規模的感染,感染甚至波及到了公安機關使用的內網。在全球范圍內感染的計算機超過230,000。
WannaCry使用了美國國家安全局的“永恒之藍”(EternalBlue)工具進行攻擊。今年4月,黑客組織Shadow Brokers公布了NSA使用的這款工具,導致工具被黑客利用傳播病毒。
而永恒之藍實際上也是一個隱匿很久的漏洞。它利用了Windows服務器消息塊1.0(SMBv1)的數個漏洞,這些漏洞在通用漏洞披露(CVE)網站中分別被列為CVE-2017-0143至0148。而影響到的操作系統從Windows XP直到Windows 8的操作系統,微軟在2017年3月14日推送了相關補丁。因此漏洞隱匿的時間可以說至少有16年。
20年:Kerberos協議漏洞
Kerberos這一名詞來源于希臘神話“三個頭的狗——冥府守門狗”,在系統中是一種認證協議,使用ticket讓節點在不安全的網絡環境下進行安全的通信,它能夠防止竊聽、防止replay攻擊、保護數據完整性。
而利用這個漏洞的黑客可以提升自己的網絡權限,還可以獲取內網資源,比如竊取密碼。
發送到網絡時,并非ticket的所有部分都會被加密,通常Kerberos會檢查消息中的加密部分從而進行認證。
因此,有方法能夠強制讓Kerberos協議使用純文本和未經加密的部分進行認證。
三名研究員發現了這一漏洞,并且起了一個藝術的名字:“奧菲斯的豎琴”。但漏洞的危害卻沒有這么藝術了,漏洞影響的是Kerberos v5,也就是影響到了20年之前的軟件,而正因為其歷史悠久,眾多操作系統和應用中都含有這個組件,Windows、Debian、FreeBSD和Samba都使用到了Kerberos協議,影響范圍十分廣泛。
22年:Shellshock漏洞
1987年,年輕的程序員??怂咕帉懥薆ash(Bourne-Again Shell的簡稱)。如今,逾70%連入網絡的機器都裝有該免費軟件,比如服務器、電腦、路由器、某些類型的手機,乃至冰箱和相機等日常用品。
2014年,安全專家警告,Bash存在一個極其令人擔憂的軟件漏洞,編號為CVE-2014-6271。當用戶正常訪問時,只要shell是喚醒狀態,這個漏洞就允許攻擊者執行任意代碼命令,為各種各樣的黑客攻擊敞開了大門。由于Bash存在于各種操作系統中,這一漏洞可以被用于控制世界范圍內數以億計的機器,或許會危及蘋果電腦(Macintosh)和使用Android操作系統的智能手機。好在事件發生后,各大廠商都紛紛積極推出補丁,才成功減少了漏洞的影響。
很多人會把Shellshock漏洞與同年爆發的心臟出血漏洞相提并論,但實際上Shellshock的威脅更大。“心臟出血”漏洞可以被用于從服務器上盜取密碼等行動,而Shellshock則可以用于控制整臺機器,獲取最高權限,并且利用的方式更加簡單,只需要復制粘貼一條命令。而從時間來看,“心臟出血”漏洞潛伏了兩年,給大約50萬臺機器造成影響,而后者潛伏了22年后才被發現,應該可以說是壽命最長的漏洞了。
開源漏洞更多?
從數據來看Linux的漏洞可能比Windows更多,其中也不乏一些潛伏幾十年的漏洞。這就打了那些盲目信奉開源軟件的人的臉,開源能夠防范軟件開發商植入“后門”,但未必漏洞更少。
開源軟件的支持者認為:開放源代碼不僅能夠推動軟件發展,還可以讓更多的開發者檢驗代碼的安全性。
這種想法可能源于一種思想。我們知道,密碼學中有一個柯克霍夫原則(Kerckhoffs’s principle),由奧古斯特·柯克霍夫在19世紀提出:即使密碼系統的任何細節已為人悉知,只要密匙(key,又稱密鑰或密鑰)未泄漏,它也應是安全的。它和傳統上使用隱密的設計、實現、或其他等等來提供加密的隱晦式安全想法相對。
開源運動的主要領導者之一埃里克·雷蒙(Eric J. Raymond)則將它引伸到開放源代碼軟件,稱一套未假定敵人可獲得源代碼的資安軟件并不可靠,因此,“永無可信的封閉源碼”。反過來說,開放源代碼比封閉源碼更安全。此種論點稱為透明式的安全(security through transparency)。
然而現實是,很多開源軟件的漏洞不僅沒有減少,并且一些存在很久的漏洞也未曾被發現。
埃里克·雷蒙曾經說過,“只要吸引足夠多的眼球,一切漏洞都很淺顯。”但是,哥倫比亞大學計算機科學教授史蒂夫·貝羅文說,在這件事情上,吸引更多眼球的是新功能,而不是質量。“質量需要干苦活、設計、檢查和測試,這些事情根本比不上編程有趣,”貝羅文說。“如果不培養這些技能,開源社區就會在質量競賽中落后得更遠。”
2014年OpenSSL曝出Heartbleed漏洞時,AlienVault公司的安全顧問Javvad Malik說過:
“任何人都可以對代碼進行審計,但并非每個人都會這樣做,因為似乎每一個人都認為其他人已經對這些代碼進行過安全審查了,這也就是問題之所在。”
或許正是源于這種“責任分散”,開源軟件的安全性不如想象中完善。無論怎樣,開源軟件的安全性還是需要大家共同的努力。