A. 震網病毒的深度分析
2010年10月,國內外多家媒體相繼報道了Stuxnet蠕蟲對西門子公司的數據採集與監控系統SIMATIC WinCC進行攻擊的事件,稱其為「超級病毒」、「超級工廠病毒」,並形容成「超級武器」、「潘多拉的魔盒」。
Stuxnet蠕蟲(俗稱「震網」、「雙子」)在2010年7月開始爆發。它利用了微軟操作系統中至少4個漏洞,其中有3個全新的零日漏洞;偽造驅動程序的數字簽名;通過一套完整的入侵和傳播流程,突破工業專用區域網的物理限制;利用WinCC系統的2個漏洞,對其開展破壞性攻擊。它是第一個直接破壞現實世界中工業基礎設施的惡意代碼。據賽門鐵克公司的統計,截止到2010年09月全球已有約45000個網路被該蠕蟲感染, 其中60%的受害主機位於伊朗境內。伊朗政府已經確認該國的布希爾核電站遭到Stuxnet蠕蟲的攻擊。
安天實驗室於7月15日捕獲到Stuxnet蠕蟲的第一個變種,在第一時間展開分析,發布了分析報告及防範措施,並對其持續跟蹤。截止至本報告發布,安天已經累計捕獲13個變種、600多個不同哈希值的樣本實體。 2.1 運行環境
Stuxnet蠕蟲在以下操作系統中可以激活運行: Windows 2000、Windows Server 2000 Windows XP、Windows Server 2003 Windows Vista Windows 7、Windows Server 2008 當它發現自己運行在非Windows NT系列操作系統中,即刻退出。
被攻擊的軟體系統包括: SIMATIC WinCC 7.0 SIMATIC WinCC 6.2 但不排除其罩歷弊他版本存在這一問題的可能。
2.2 本地行為
樣本被激活後,典型的運行流程如圖1 所示。
樣本首先判斷當前操作系統類型,如果是Windows 9X/ME,就直接退出。
接下來載入一個主要的DLL模塊,後續的行為都將在這個DLL中進行。為了躲避查殺,樣本並不將DLL模塊釋放為磁碟文件然後載入,而是直接拷貝到內存中,然後模擬DLL的載入過程。
具體而言,樣本先申請足夠的內存空間,然後Hookntdll.dll導出的6個系統函數: ZwMapViewOfSection ZwCreateSection ZwOpenFile ZwClose ZwQueryAttributesFile ZwQuerySection 為此,樣本先修改ntdll.dll文件內存映像中PE頭的保護屬性,然後將偏移0x40處的無用數據改寫為跳轉代碼,用以實現hook。
進而,樣本就可以使用ZwCreateSection在內存空間中創建一個新的PE節,並將要載入的DLL模塊拷貝到其中,最後使用LoadLibraryW來獲取模塊句柄。
圖1 樣本的典型運行流程
此後,樣本跳轉到被載入的DLL中執行,衍生下列文件:
%System32%driversmrxcls.sys %System32%driversmrxnet.sys%Windir%infoem7A.PNF%Windir%infmdmeric3.PNF %Windir%infmdmcpq3.PNF%Windir%infoem6C.PNF 其中有兩個驅動程序mrxcls.sys和mrxnet.sys,分別被注冊成名為MRXCLS和MRXNET的系統服務,實現開機自啟動。這兩個驅動程爛祥序都使用了Rootkit技術,並有數字簽名。
mrxcls.sys負責查找主機中安裝的WinCC系統,並進行攻擊。具體地說,它監控系統進程的鏡像載入操作,將存儲在%Windir%infoem7A.PNF中的一個模塊注入到services.exe、S7tgtopx.exe、CCProjectMgr.exe三個進程中,後兩者是WinCC系統運行時的進程。
mrxnet.sys通過修改一些內核調用來隱藏被拷貝到U盤的lnk文件和DLL文件(圖2 )。
圖2驅動程序隱藏某些lnk文件
圖3 樣本的多物族種傳播方式
2.3 傳播方式Stuxnet蠕蟲的攻擊目標是SIMATIC WinCC軟體。後者主要用於工業控制系統的數據採集與監控,一般部署在專用的內部區域網中,並與外部互聯網實行物理上的隔離。為了實現攻擊,Stuxnet蠕蟲採取多種手段進行滲透和傳播,如圖3所示。
整體的傳播思路是:首先感染外部主機;然後感染U盤,利用快捷方式文件解析漏洞,傳播到內部網路;在內網中,通過快捷方式解析漏洞、RPC遠程執行漏洞、列印機後台程序服務漏洞,實現聯網主機之間的傳播;最後抵達安裝了WinCC軟體的主機,展開攻擊。
2.3.1. 快捷方式文件解析漏洞(MS10-046)
這個漏洞利用Windows在解析快捷方式文件(例如.lnk文件)時的系統機制缺陷,使系統載入攻擊者指定的DLL文件,從而觸發攻擊行為。具體而言,Windows在顯示快捷方式文件時,會根據文件中的信息尋找它所需的圖標資源,並將其作為文件的圖標展現給用戶。如果圖標資源在一個DLL文件中,系統就會載入這個DLL文件。攻擊者可以構造這樣一個快捷方式文件,使系統載入指定的DLL文件,從而執行其中的惡意代碼。快捷方式文件的顯示是系統自動執行,無需用戶交互,因此漏洞的利用效果很好。
Stuxnet蠕蟲搜索計算機中的可移動存儲設備(圖4)。一旦發現,就將快捷方式文件和DLL文件拷貝到其中(圖5)。如果用戶將這個設備再插入到內部網路中的計算機上使用,就會觸發漏洞,從而實現所謂的「擺渡」攻擊,即利用移動存儲設備對物理隔離網路的滲入。
圖4 查找U盤
拷貝到U盤的DLL文件有兩個:~wtr4132.tmp和~wtr4141.tmp。後者Hook了kernel32.dll和ntdll.dll中的下列導出函數:
FindFirstFileW FindNextFileW ZwQueryDirectoryFile 實現對U盤中lnk文件和DLL文件的隱藏。因此,Stuxnet一共使用了兩種措施(內核態驅動程序、用戶態Hook API)來實現對U盤文件的隱藏,使攻擊過程很難被用戶發覺,也能一定程度上躲避殺毒軟體的掃描。
圖5 拷貝文件到U盤
2.3.2. RPC遠程執行漏洞(MS08-067)與提升許可權漏洞
這是2008年爆發的最嚴重的一個微軟操作系統漏洞,具有利用簡單、波及范圍廣、危害程度高等特點。
圖6 發動RPC攻擊
具體而言,存在此漏洞的系統收到精心構造的RPC請求時,可能允許遠程執行代碼。在Windows 2000、Windows XP和Windows Server 2003系統中,利用這一漏洞,攻擊者可以通過惡意構造的網路包直接發起攻擊,無需通過認證地運行任意代碼,並且獲取完整的許可權。因此該漏洞常被蠕蟲用於大規模的傳播和攻擊。
Stuxnet蠕蟲利用這個漏洞實現在內部區域網中的傳播(圖6)。利用這一漏洞時,如果許可權不夠導致失敗,還會使用一個尚未公開的漏洞來提升自身許可權(圖1),然後再次嘗試攻擊。截止本報告發布,微軟尚未給出該提權漏洞的解決方案。
2.3.3. 列印機後台程序服務漏洞(MS10-061)
這是一個零日漏洞,首先發現於Stuxnet蠕蟲中。
Windows列印後台程序沒有合理地設置用戶許可權。攻擊者可以通過提交精心構造的列印請求,將文件發送到暴露了列印後台程序介面的主機的%System32%目錄中。成功利用這個漏洞可以以系統許可權執行任意代碼,從而實現傳播和攻擊。
圖7 利用列印服務漏洞
Stuxnet蠕蟲利用這個漏洞實現在內部區域網中的傳播。如圖7所示,它向目標主機發送兩個文件:winsta.exe、sysnullevnt.mof。後者是微軟的一種託管對象格式(MOF)文件,在一些特定事件驅動下,它將驅使winsta.exe被執行。
2.3.4.內核模式驅動程序(MS10-073)
2.3.5.任務計劃程序漏洞(MS10-092)
2.4 攻擊行為
Stuxnet蠕蟲查詢兩個注冊表鍵來判斷主機中是否安裝WinCC系統(圖8):
HKLMSOFTWARESIEMENSWinCCSetup
HKLMSOFTWARESIEMENSSTEP7
圖8 查詢注冊表,判斷是否安裝WinCC
一旦發現WinCC系統,就利用其中的兩個漏洞展開攻擊:
一是WinCC系統中存在一個硬編碼漏洞,保存了訪問資料庫的默認賬戶名和密碼,Stuxnet利用這一漏洞嘗試訪問該系統的SQL資料庫(圖9)。
二是在WinCC需要使用的Step7工程中,在打開工程文件時,存在DLL載入策略上的缺陷,從而導致一種類似於「DLL預載入攻擊」的利用方式。最終,Stuxnet通過替換Step7軟體中的s7otbxdx.dll,實現對一些查詢、讀取函數的Hook。
圖9 查詢WinCC的資料庫
2.5 樣本文件的衍生關系
本節綜合介紹樣本在上述復制、傳播、攻擊過程中,各文件的衍生關系。
如圖10所示。樣本的來源有多種可能。
對原始樣本、通過RPC漏洞或列印服務漏洞傳播的樣本,都是exe文件,它在自己的.stud節中隱形載入模塊,名為「kernel32.dll.aslr.<隨機數字>.dll」。
對U盤傳播的樣本,當系統顯示快捷方式文件時觸發漏洞,載入~wtr4141.tmp文件,後者載入一個名為「shell32.dll.aslr.<隨機數字>.dll」的模塊,這個模塊將另一個文件~wtr4132.tmp載入為「kernel32.dll.aslr.<隨機數字>.dll」。
圖10 樣本文件衍生的關系
模塊「kernel32.dll.aslr.<隨機數字>.dll」將啟動後續的大部分操作,它導出了22個函數來完成惡意代碼的主要功能;在其資源節中,包含了一些要衍生的文件,它們以加密的形式被保存。
其中,第16號導出函數用於衍生本地文件,包括資源編號201的mrxcls.sys和編號242的mrxnet.sys兩個驅動程序,以及4個.pnf文件。
第17號導出函數用於攻擊WinCC系統的第二個漏洞,它釋放一個s7otbxdx.dll,而將WinCC系統中的同名文件修改為s7otbxsx.dll,並對這個文件的導出函數進行一次封裝,從而實現Hook。
第19號導出函數負責利用快捷方式解析漏洞進行傳播。它釋放多個lnk文件和兩個擴展名為tmp的文件。
第22號導出函數負責利用RPC漏洞和列印服務漏洞進行傳播。它釋放的文件中,資源編號221的文件用於RPC攻擊、編號222的文件用於列印服務攻擊、編號250的文件用於提權。 3.1 抵禦本次攻擊
西門子公司對此次攻擊事件給出了一個解決方案,鏈接地址見附錄。下面根據我們的分析結果,給出更具體的措施。
1.使用相關專殺工具或手工清除Stuxnet蠕蟲
手工清除的步驟為: 使用Atool管理工具,結束系統中的父進程不是winlogon.exe的所有lsass.exe進程; 強行刪除下列衍生文件:
%System32%driversmrxcls.sys
%System32%driversmrxnet.sys
%Windir%infoem7A.PNF
%Windir%infmdmeric3.PNF
%Windir%infmdmcpq3.PNF
%Windir%infoem6C.PNF 刪除下列注冊表項:
HKEY_LOCAL_
HKEY_LOCAL_ 2. 安裝被利用漏洞的系統補丁
安裝微軟提供的下列補丁文件: RPC遠程執行漏洞(MS08-067) 快捷方式文件解析漏洞(MS10-046) 列印機後台程序服務漏洞(MS10-061) 內核模式驅動程序漏洞(MS10-073) 任務計劃程序程序漏洞(MS10-092) 3. 安裝軟體補丁
安裝西門子發布的WinCC系統安全更新補丁,地址見附錄。
3.2 安全建議
此次攻擊事件凸顯了兩個問題: 即便是物理隔離的專用區域網,也並非牢不可破; 專用的軟體系統,包括工業控制系統,也有可能被攻擊。 因此,我們對有關部門和企業提出下列安全建議:
加強主機(尤其是內網主機)的安全防範,即便是物理隔離的計算機也要及時更新操作系統補丁,建立完善的安全策略;
安裝安全防護軟體,包括反病毒軟體和防火牆,並及時更新病毒資料庫;
建立軟體安全意識,對企業中的核心計算機,隨時跟蹤所用軟體的安全問題,及時更新存在漏洞的軟體;
進一步加強企業內網安全建設,尤其重視網路服務的安全性,關閉主機中不必要的網路服務埠;
所有軟體和網路服務均不啟用弱口令和默認口令;
加強對可移動存儲設備的安全管理,關閉計算機的自動播放功能,使用可移動設備前先進行病毒掃描,為移動設備建立病毒免疫,使用硬體式U盤病毒查殺工具。 相比以往的安全事件,此次攻擊呈現出許多新的手段和特點,值得我們特別關注。
4.1 專門攻擊工業系統
Stuxnet蠕蟲的攻擊目標直指西門子公司的SIMATIC WinCC系統。這是一款數據採集與監視控制(SCADA)系統,被廣泛用於鋼鐵、汽車、電力、運輸、水利、化工、石油等核心工業領域,特別是國家基礎設施工程;它運行於Windows平台,常被部署在與外界隔離的專用區域網中。
一般情況下,蠕蟲的攻擊價值在於其傳播范圍的廣闊性、攻擊目標的普遍性。此次攻擊與此截然相反,最終目標既不在開放主機之上,也不是通用軟體。無論是要滲透到內部網路,還是挖掘大型專用軟體的漏洞,都非尋常攻擊所能做到。這也表明攻擊的意圖十分明確,是一次精心謀劃的攻擊。
4.2 利用多個零日漏洞
Stuxnet蠕蟲利用了微軟操作系統的下列漏洞: RPC遠程執行漏洞(MS08-067) 快捷方式文件解析漏洞(MS10-046) 列印機後台程序服務漏洞(MS10-061) 內核模式驅動程序漏洞(MS10-073) 任務計劃程序程序漏洞(MS10-092) 後四個漏洞都是在Stuxnet中首次被使用,是真正的零日漏洞。如此大規模的使用多種零日漏洞,並不多見。
這些漏洞並非隨意挑選。從蠕蟲的傳播方式來看,每一種漏洞都發揮了獨特的作用。比如基於自動播放功的U盤病毒被絕大部分殺毒軟體防禦的現狀下,就使用快捷方式漏洞實現U盤傳播。
另一方面,在安天捕獲的樣本中,有一部分實體的時間戳是2013年3月。這意味著至少在3月份,上述零日漏洞就已經被攻擊者掌握。但直到7月份大規模爆發,漏洞才首次披露出來。這期間要控制漏洞不泄露,有一定難度。
4.3 使用數字簽名
Stuxnet在運行後,釋放兩個驅動文件:
%System32%driversmrxcls.sys
%System32%driversmrxnet.sys
這兩個驅動文件偽裝RealTek的數字簽名(圖7)以躲避殺毒軟體的查殺。目前,這一簽名的數字證書已經被頒發機構吊銷,無法再通過在線驗證,但目前反病毒產品大多使用靜態方法判定可執行文件是否帶有數字簽名,因此有可能被欺騙。圖11 Stuxnet偽造的數字簽名
4.4 明確的攻擊目標
根據賽門鐵克公司的統計,7月份,伊朗感染Stuxnet蠕蟲的主機只佔25%,到9月下旬,這一比例達到60%。
WinCC被伊朗廣泛使用於基礎國防設施中。9月27日,伊朗國家通訊社向外界證實該國的第一座核電站「布希爾核電站」已經遭到攻擊。據了解,該核電站原計劃於2013年8月開始正式運行。因此,此次攻擊具有明確的地域性和目的性。 5.1 工業系統安全將面臨嚴峻挑戰
在我國,WinCC已被廣泛應用於很多重要行業,一旦受到攻擊,可能造成相關企業的設施運行異常,甚至造成商業資料失竊、停工停產等嚴重事故。
對於Stuxnet蠕蟲的出現,我們並未感到十分意外。早在去年,安天就接受用戶委託,對化工行業儀表的安全性展開過研究,情況不容樂觀。
工業控制網路,包括工業乙太網,以及現場匯流排控制系統早已在工業企業中應用多年,目前在電力、鋼鐵、化工等大型重化工業企業中,工業乙太網、DCS(集散控制系統)、現場匯流排等技術早已滲透到控制系統的方方面面。工業控制網路的核心現在都是工控PC,大多數同樣基於Windows-Intel平台,工業乙太網與民用乙太網在技術上並無本質差異,現場匯流排技術更是將單片機/嵌入式系統應用到了每一個控制儀表上。工業控制網路除了可能遭到與攻擊民用/商用網路手段相同的攻擊,例如通過區域網傳播的惡意代碼之外,還可能遭到針對現場匯流排的專門攻擊,不可輕視。
針對民用/商用計算機和網路的攻擊,目前多以獲取經濟利益為主要目標,但針對工業控制網路和現場匯流排的攻擊,可能破壞企業重要裝置和設備的正常測控,由此引起的後果可能是災難性的。以化工行業為例,針對工業控制網路的攻擊可能破壞反應器的正常溫度/壓力測控,導致反應器超溫/超壓,最終就會導致沖料、起火甚至爆炸等災難性事故,還可能造成次生災害和人道主義災難。因此,這種襲擊工業網路的惡意代碼一般帶有信息武器的性質,目標是對重要工業企業的正常生產進行干擾甚至嚴重破壞,其背景一般不是個人或者普通地下黑客組織。
目前,工業乙太網和現場匯流排標准均為公開標准,熟悉工控系統的程序員開發針對性的惡意攻擊代碼並不存在很高的技術門檻。因此,對下列可能的工業網路安全薄弱點進行增強和防護是十分必要的: 基於Windows-Intel平台的工控PC和工業乙太網,可能遭到與攻擊民用/商用PC和網路手段相同的攻擊,例如通過U盤傳播惡意代碼和網路蠕蟲,這次的Stuxnet病毒就是一個典型的例子。 DCS和現場匯流排控制系統中的組態軟體(測控軟體的核心),目前其產品,特別是行業產品被少數公司所壟斷,例如電力行業常用的西門子SIMATIC WinCC,石化行業常用的浙大中控等。針對組態軟體的攻擊會從根本上破壞測控體系,Stuxnet病毒的攻擊目標正是WinCC系統。 基於RS-485匯流排以及光纖物理層的現場匯流排,例如PROFIBUS和MODBUS(串列鏈路協議),其安全性相對較好;但短程無線網路,特別是不使用Zigbee等通用短程無線協議(有一定的安全性),而使用自定義專用協議的短程無線通信測控儀表,安全性較差。特別是國內一些小企業生產的「無線感測器」等測控儀表,其無線通信部分採用通用2.4GHz短程無線通信晶元,連基本的加密通信都沒有使用,可以說毫無安全性可言,極易遭到竊聽和攻擊,如果使用,將成為現場匯流排中極易被攻擊的薄弱點。 工業控制網路通常是獨立網路,相對民用/商用網路而言,數據傳輸量相對較少,但對其實時性和可靠性的要求卻很高,因而出現問題的後果相當嚴重。
傳統工業網路的安全相對信息網路來說,一直是憑借內網隔離,而疏於防範。因此,針對工業系統的安全檢查和防範加固迫在眉睫。