舍基·烏爾森(Sergey Ulasen)一看就不是會被卷進國際大事漩渦的人。這位31歲的白俄羅斯人有一頭金色短發和少年般瘦削的輪廓,不僅面善,而且性格和藹友善,看上去是在生活中完全沒有敵人甚至對手的那種宅男……他最愛的度假方式就是去明斯克郊外的奶奶家,在那里放下手機、離開網絡,充分釋放壓力。就是這樣一個人,在2010年6月,干了一件驚天大事,成為世界矚目的焦點。
[](http://www.aqniu.com/wp-content/uploads/2015/09/640.webp-2.jpg)
舍基·烏爾森
他是白俄羅斯一家小型反病毒公司VirusBlockAda反病毒部門負責人,和同事奧萊格·庫普瑞(Oleg Kupreev)一起,在坐落于明斯克市中心、離斯維斯洛奇河不遠的一座蘇聯時期建造的灰褐色大樓里辦公。他們正在系統地梳理近期在伊朗計算機上發現的惡意文件,突然有什么東西讓庫普瑞激動了起來。他坐在椅子上,大聲喊:舍基,快過來看吶。舍基把這段代碼看了一遍又一遍,最終確信他所看到的東西就是這么不可思議。他激動得有些喘不過氣來。這段代碼他們已經研究好幾天了,直到現在他們才發現,它絕非一種溫和而有趣的普通病毒,而是一部如惡魔般可怕又冷靜的頂級作品。
它不僅有效利用了后門(rootkit)來躲過反病毒引擎的掃描,還利用了“零日漏洞”(zero-day)將其從一臺計算機傳播到另一臺計算機,從而能突破Windows系統,讓百萬臺計算機暴露于風險之下。
漏洞利用程序(exploit)是黑客用于植入病毒的攻擊代碼,一般利用IE等瀏覽器或PDF閱讀器等應用程序中的安全漏洞,把病毒代碼植入進去。這需要受害者瀏覽或點擊帶毒鏈接或文件。當軟件開發者意識到漏洞的存在后,會制作并發放補丁。
“零日漏洞”利用程序(zero-day exploits),是黑客世界中最牛的東西。因為它利用的漏洞是軟件開發者和反病毒公司尚未發現的——這意味著根本沒有補丁。
這種程序非常少見。這需要很多時間去發現無人發現的新漏洞,并研究、分析、并制作利用漏洞實現攻擊的程序。因此多數黑客只是簡單依賴已知漏洞和漏洞利用程序(exploit)來傳播[惡意代碼](http://www.aqniu.com/infosec-wiki/827.html "惡意代碼是一種程序,它通過把代碼在不被察覺的情況下鑲嵌到另一段程序中,從而達到破壞被感染電腦數據、運行具有入侵性或破壞性的程序、破壞被感染電腦數據的安全性和完整性的目的。")。他們利用從漏洞補丁發布到用戶安裝補丁這個時間差,或者有些用戶因為大意沒有安裝補丁的情況,來進行攻擊。雖然每年有超過1200萬種[惡意代碼](http://www.aqniu.com/infosec-wiki/827.html "惡意代碼是一種程序,它通過把代碼在不被察覺的情況下鑲嵌到另一段程序中,從而達到破壞被感染電腦數據、運行具有入侵性或破壞性的程序、破壞被感染電腦數據的安全性和完整性的目的。")出現,但“零日漏洞”大概只有10來個。這次的攻擊者使用的正是這種價值很高的“零日漏洞”利用程序和高超的攻擊技術。從烏爾森他們看來,伊朗設備上的這些病毒在漏洞利用(exploit)技術和后門(rootkit)運用技術方面的表現,是空前的。簡直不能再牛了。
早在一周前,這個神秘的病毒就已經引起了Ada公司的注意。Ada公司在伊朗的一家安全軟件中間商發現,顧客的機器反復出現故障。計算機反復重啟,Ada公司技術團隊進行了遠程掃描,尋找反病毒軟件漏掉的惡意程序,但一無所獲。因此后來他們找到了烏爾森。
烏爾森自從讀大學起就受雇于Ada公司。但公司規模很小,而烏爾森非常優秀,所以當他26歲時已經成為公司的技術大拿,負責開發維護反病毒引擎。他偶爾還與破解惡意代碼的研究團隊一起工作。盡管偶爾為之,但他非常喜歡從事反編譯研究。因此,當技術支持團隊找他解決伊朗客戶的問題時,他欣然接受。
烏爾森起初認為,問題出在軟件配置錯誤,或是操作系統中不同軟件無法兼容上。但之后他了解到,并不是一臺機器出現問題,而是很多臺,而且當重裝系統后問題仍然存在。于是他推測,攻擊者一定是將病毒潛伏在目標網絡中,這樣就可以反復感染被清理干凈的計算機了。他還懷疑,攻擊者利用后門逃過了反病毒軟件的監測。烏爾森已經為公司編寫反后門(anti-rootkit)代碼很久了,因此他很有信心把它找到。
當獲準遠程接入遭感染計算機后,烏爾森和庫普瑞將目光鎖定在6個可疑文件上,其中2個驅動程序文件,4個其他文件。他們認為這些文件就是問題的根源。然后,在同事的幫助下,他們花了幾天時間對這些可以文件進行破譯、努力解釋令人驚異的復雜代碼。由于他們只是一個服務于政府客戶的小公司,所以并不擅長這種挑戰。但他們經過持續努力,終于發現:其中一個驅動程序文件,扮演著“內核級”后門(kernel-level rootkit)的角色,這印證了烏爾森的懷疑。
后門有很多變種,最難的是探測出那個能獲得與反病毒軟件一樣的系統特權的“內核級”后門。如果把計算機系統結構想象成一個靶子,內核層就是靶心,就是操作系統讓計算機運作起來的起點。多數黑客編寫的漏洞利用程序(exploit)僅能獲得用戶級權限,這是比較容易做到的。但反病毒軟件可以探測到這種“提權”。因此,真正高明的黑客將漏洞利用程序(exploit)瞄準系統內核級別,這樣就能逃脫反病毒軟件的掃描。在那里,漏洞利用程序與惡意代碼“內外勾結”,為惡意代碼大行其道提供運行接口,反病毒軟件卻無法掃描和跟蹤。內核級后門絕非常見,制作它需要復雜的知識背景和高超的技巧。但烏爾森發現的這一個,是超贊的。
庫普瑞認為,這個后門是用來隱藏四個惡意的.lnk文件的。病毒看來是使用了由4個惡意文件構成的漏洞利用程序來通過USB設備傳播自己,而通過后門可以做到讓這些U盤上的惡意文件對用戶“不可見”。就在這時,庫普瑞找烏爾森過來,讓他看看到底是什么情況。
利用漏洞通過U盤傳播病毒,不像通過互聯網上的網站和郵件傳播那樣普遍,但也非聞所未聞。庫普瑞和烏爾森之前所見過的所有U盤傳播病毒,都是利用了Windows系統的自動運行功能,這樣當U盤插入計算機時,U盤上的惡意代碼就會立刻執行。但這個家伙更加聰明。
在Windows系統中,.lnk文件負責渲染U盤或其他移動存儲介質中的文件圖標。當我們插入U盤時,資源管理器或類似工具就會自動掃描其中的.lnk文件,來顯示各種格式的文件,如音樂文件、Word文檔、其他程序等。在這個病毒中,攻擊者精心設計了一個漏洞利用程序,并將其插入其中.lnk文件中。當Windows掃描時,它能執行這個漏洞利用程序,秘密地將U盤上的惡意文件“貨物”運送到計算機上,就像軍用運輸機將偽裝的傘兵投放到敵方領土上一樣。
烏爾森在想,利用漏洞通過.lnk文件攻擊Windows系統如此基礎的功能,為什么之前沒有人想到過呢?這比利用“自動運行”功能要牛逼得多,因為后者可以通過關閉“自動運行”功能使攻擊失效,很多網管都對這一點很了解。但并沒有禁用自動掃描.lnk文件而不引發其他問題的辦法。
烏爾森搜索了漏洞利用程序的檔案庫,試圖找到其他通過.lnk文件的類似病毒,但一無所獲。此時,他開始懷疑,這是一個“零日漏洞”。
烏爾森找到一個被感染的U盤,把它插入一臺安裝了Win7的測試機上。這臺計算機安裝了微軟官方發布的所有補丁。如果微軟已經發現這個漏洞,那么補丁程序將會阻止其向系統注入病毒。如果這是一個“零日漏洞”,則補丁將并無卵用。烏爾森等待了幾分鐘,然后檢查計算機,沒錯,惡意文件進來了。(待續)
注釋 :rookit
NSA安全和入侵檢測術語字典(NSA Glossary of Terms Used in Security and Intrusion Detection)對rootkit的定義如下:
A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network, mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.
很多人有一個誤解,認為rootkit是用作獲得系統root訪問權限的工具。實際上,rootkit是攻擊者用來隱藏自己的蹤跡和保留root訪問權限的工具。通常,攻擊者通過遠程攻擊獲得root訪問權限,或者首先密碼猜測或者密碼強制破譯的方式獲得系統的訪問權限。進入系統后,如果他還沒有獲得root權限,再通過某些安全漏洞獲得系統的root權限。接著,攻擊者會在侵入的主機中安裝rootkit,然后他將經常通過rootkit的后門檢查系統是否有其他的用戶登錄,如果只有自己,攻擊者就開始著手清理日志中的有關信息。通過rootkit的嗅探器獲得其它系統的用戶和密碼之后,攻擊者就會利用這些信息侵入其它的系統。
烏爾森還是無法置信。VirusBlockAda公司,一個籍籍無名的微型安全公司,剛剛作為病毒探測者發現了一個病毒界的“稀世珍奇”!而且,它不僅利用了一個“零日漏洞”,是4個,對應Win2000以來的4個不同操作系統。攻擊者將其分別注入到4個.lnk文件中,確保攻擊萬無一失。
烏爾森試圖計算到底有多少臺計算機遭受了它的感染。之后,又有一個問題困住了他。被注入到計算機上的兩個驅動程序文件,已經在任何無彈窗提示的情況下,完成了自身的安裝。要知道,Win7的安全特性要求“當沒有安全證書的程序安裝時,會彈出提示框”,但這兩個文件在安裝時并未遇到這個問題。烏爾森警覺的意識到,這是因為,這兩個驅動已經獲得了一家名為瑞昱半導體公司(RealTek Semiconductor,以生產聲卡著稱)的合法數字簽名。
數字簽名(digital certificates),就是經過認證的安全文件,就像數字護照一樣。軟件開發者用數字簽名為產品進行鑒定,有簽名的產品就是公司的合法產品。微軟和反病毒公司也會為自家程序和更新包加上數字簽名。計算機會認為,具有數字簽名的程序是可信的。但如果攻擊者偷到微軟公司數字簽名以及它的加密密鑰,并用在自己的程序上,就能輕松的騙過計算機,讓計算機認為“這是微軟家的代碼”。
此前,已有攻擊者在數字簽名上做過文章。但他們都是用假的、自己制作的簽名文件冒充合法文件,或者通過注冊一個“殼公司”欺騙認證方、讓其誤以為是合法公司的簽名文件。但這兩種方式下,計算機都可能將簽名文件視為可疑對象,并拒絕相應文件。而在這件事中,攻擊者使用的是瑞昱公司——一家著名臺灣硬件廠商——的簽名文件,因此計算機都會將其視為合法的。
這種戰術是烏爾森從未見過的,激起了他心中的一系列疑問。
一種可能性是攻擊者黑掉了瑞昱公司開發人員的計算機,然后使用開發人員的計算機及權限,秘密授予病毒文件數字簽名。
另一種可能性是攻擊者偷到了認證密鑰(signing key)和證書(certificate)。出于安全考慮,聰明的公司會把它們的密鑰和證書保存在不聯網的服務器上,或者保存到提供額外安全防護的硬件模塊上。但并不是每個公司都會這樣做。有線索證明,瑞昱公司的證書確實被人偷走了。兩個惡意程序文件上,數字簽名的時間戳均為“2010年1月25日”。而一個文件于2009年1月1日,即于加簽名之前一年被編輯過,另一個文件于加簽名之前6分鐘時被編輯過。由此可以推斷,攻擊者手上可能確實有密鑰和證書,可以很快對文件加數字簽名。
其影響之大,令人感到不安。將合法數字簽名用在惡意程序文件上,顛覆了計算機世界對數字簽名體系的信賴,讓人對從此以后所有經過數字簽名的程序都無法再信任了。其他黑客模仿這種偷盜數字簽名的策略,也只是時間問題了。烏爾森必須將這件事公諸于眾。
負責任的漏洞報告程序是,漏洞發現者在發現問題后,應首先與軟件開發方取得聯系,待開發方做好補丁之后再向公眾發布消息。因此,烏爾森立即向瑞昱公司和微軟公司發送了電子郵件,把自己的所見告訴了他們。
兩周過去,兩家公司沒有任何回復。烏爾森和庫普瑞決定,不再保持沉默。有義務讓其他安全機構了解.lnk漏洞。隨后,安裝了Ada公司反病毒引擎的機構們發現,中東及附近地區的計算機中大量發現具有該特征的惡意程序。病毒正在肆虐,并且快速傳播。這必須向媒體公開。
7月12日,烏爾森在公司網站上發布了一條關于“零日漏洞”的簡短聲明,同時在一個英文安全論壇上也發布了一條消息,警告說可能將爆發大規模感染。他公開了利用漏洞攻擊的幾個細節,但不足以使其他具有模仿能力的黑客根據這些信息進行類似攻擊。但論壇上的成員都是內行,很快意識到其中的價值,指出這個漏洞具有造成“大規模殺傷”的潛力。
三天后,科技記者克雷布斯(Brian Krebs)發現了這條聲明,并寫了一篇博客,對當時還少為人知的漏洞進行了簡介。這條新聞在安全社區中快速流轉,讓每個人都打起精神,來面對這種病毒以及可能出現的、跟風模仿者利用相同漏洞進行的其他攻擊。同時,一家從事反病毒研究和測試的德國機構老大,向微軟方面引薦了烏爾森,并督促微軟開始研究補丁。根據已經公布的漏洞,微軟決定向用戶發布一個關于問題關鍵點的緊急報告,同時提供了如何減輕被感染風險的一點建議。但是,補丁的制作和分發可不是幾個星期的事,解決問題仍然遙遙無期。
安全業界迅速展開了對這個病毒的討論。現在,微軟給它起了一個新的名字:震網(Stuxnet),是將一個驅動文件(mrxnet.sys)的名字和其他部分代碼的字母進行拼合而成。安全公司紛紛將其特征納入反病毒引擎,隨即數以萬計的病毒開始顯現。
這時,又出事了。7月17日,斯洛伐克一家名叫ESET的安全公司發行了一個與震網有關聯的另一種惡意驅動程序文件。這個文件也帶有一家臺灣公司的數字簽名,但卻并非瑞昱公司,而是生產電路板的臺灣智微科技(JMicron Technology)。
這次發現的驅動程序文件是獨立的,不像震網有那么多文件。但是,所有人都認為它與震網有關,因為它和Ada公司發現的驅動程序高度相似。這個文件的編輯日期中,有引人注目之處。當黑客在編譯器中運行源代碼,然后將其翻譯成計算機能夠讀取的二進制代碼時,編譯器一般會在二進制文件中留下一個時間戳。攻擊者可以操縱這個時間戳,以擺脫反編譯研究者的跟蹤,但這個文件的時間戳似乎是正常的(沒被篡改)。時間戳顯示,該驅動程序文件于7月14日,也就是在Ada公司將震網的信息公布后兩天后被人編輯過。是攻擊者在非常清楚一家白俄羅斯公司已經揭開病毒面紗之后,又釋放出新的驅動來進行攻擊嗎?或者是他們知道事情即將敗露,希望趕在被處理掉之前將震網病毒傳播到更多機器?有線索證明,在攻擊者為驅動程序文件加上智微公司數字簽名時,漏掉了幾個小步驟,這說明攻擊者急于推出這個新的驅動,讓它趕緊“干活”。有一件事是很明確的:攻擊者需要給他們的驅動文件加上一個新的數字簽名,因為瑞昱公司的數字簽名已經于6月12日過期了。數字簽名都有生命期限,一旦瑞昱公司的數字簽名過期,攻擊者就不能再用這個簽名來標記新文件了。當震網被曝光,認證機構也會取消對相應病毒文件數字簽名的認可,Windows系統將自動拒絕使用該簽名的文件。
第二個簽名文件的發現,讓人們對于黑客如何獲取相應安全文件有了更多的猜測。瑞昱和智微兩家公司的總部都坐落于臺灣新竹科技工業園,彼此相隔兩個街區。考慮到地理位置接近,有人推測可能有人闖入了這兩家公司,偷走了數字簽名密鑰和工具。還有人推測中國是震網幕后主使(躺槍),是中國方面黑了臺灣公司、取得數字簽名密鑰和證書。
不論怎樣,這意味著攻擊方的“軍火庫”里面,可能還有其他公司的證書。既然他們已經費了這么大的力氣來確認這種攻擊是有效的,那么這很可能意味著他們為達目的,有著嚴肅的目標和精心設計的手段。安全業界中很多人都感到心神不寧、不知所措。ESET公司研究員皮埃爾在網上說:“擦,從來沒見過這么專業的壞蛋。”
反病毒公司源源不斷的檢測著來自客戶的震網病毒文件,令人吃驚的情況又出現了。根據文件的時間標記,震網病毒早在2009年6月就已經開始出現了,這比Ada公司發現它的時間要早一年還多。研究還顯示,攻擊者先后于2009年6月、2010年3-4月和2010年6月發起了三個波次的攻擊,每一波攻擊所用代碼略有不同。
然而,震網的意圖到底是什么,仍然是個謎。研究者沒有發現任何有關震網試圖盜取銀行賬號等機密信息的行為,這一點與其他大多數惡意程序大相徑庭。研究者也無法從代碼中找到其他動機的信號。直到有一天,一名來自德國的研究者弗蘭克(Frank Boldewin)找到了一個可能的線索。
[](http://www.aqniu.com/wp-content/uploads/2015/09/640.webp-3.jpg)
弗蘭克Frank Boldewin
當烏爾森第一次在論壇上談起震網時,弗蘭克就曾問過他:“哥們,有誰深入看過它的代碼嗎?”原來,弗蘭克曾深入震網的內層代碼,發現其中有一些不尋常的、對德國西門子公司所生產軟件的說明文字。攻擊者看上去是在尋找那些安裝有SIMATIC Step 7或SIMATIC WINCC這兩種西門子公司專有軟件的計算機。這兩種軟件都是與西門子公司生產的可編程邏輯控制器(PLC)配套的工業控制系統的一部分,用于配置自動控制系統的軟硬件參數。而PLC,一般有烤箱那么大,是廣泛用于世界各地的小型工業計算機,用來控制機械臂、傳送帶或裝配生產線等。
[](http://www.aqniu.com/wp-content/uploads/2015/09/640.webp-4.jpg)
西門子 SIMATIC 系列產品,硬件為PLC,軟件為與之配套的軟件,即震網的目標。
[](http://www.aqniu.com/wp-content/uploads/2015/09/640.webp-51.jpg)
西門子SIMATIC Step 7操作界面
弗蘭克從未見過以工業控制系統為目標的惡意軟件。因為,黑工業控制系統根本沒什么利潤回報,起碼不是黑銀行賬戶和信用卡系統那種賺快錢的方式。只有一種可能。他說,“看來,這個惡意程序是個間諜軟件”。攻擊者一定是想盜取競爭對手的工業設計或產品模板。
客觀的說,業界大多數人都太樂觀了。震網似乎只以安裝了西門子專用軟件的計算機為攻擊目標,這意味著沒裝西門子軟件的計算機都是安全的,他們的機主也可安枕了。但烏爾森在伊朗發現的、反復重啟的計算機并沒有安裝西門子軟件,除了系統被破壞之外,震網并未引發持續性的傷害。這些都是為什么呢?
在震網聲名遠揚之后僅僅一周之后,就漸漸走向了平息。微軟還在為了修復.lnk漏洞而開發補丁,但在多數其他安全公司眼中,一旦把震網的特征碼加入本公司產品病毒庫,震網就和他們沒有一毛錢關系了。
世界上第一個數字武器的故事即將到此為止,但有幾個業內研究者卻認為其中有料,把震網揪住不放。(待續)
注釋:震網導致計算機反復重啟的原因
Stuxnet蠕蟲被設計用來破壞伊朗核工廠鈾濃縮離心機,但一個編程錯誤使蠕蟲擴散到了 Windows 95和Windows 98等不支持的操作系統上,導致電腦藍屏死機,從而引起了懷疑,使它曝光于世界。