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%\drivers\mrxcls.sys %System32%\drivers\mrxnet.sys%Windir%\inf\oem7A.PNF%Windir%\inf\mdmeric3.PNF %Windir%\inf\mdmcpq3.PNF%Windir%\inf\oem6C.PNF其中有兩個驅動程序mrxcls.sys和mrxnet.sys,分別被註冊成名為MRXCLS和MRXNET的系統服務,實現開機自啟動。這兩個驅動程序都使用了Rootkit技術,並有數字簽名。
mrxcls.sys負責查找主機中安裝的WinCC系統,並進行攻擊。具體地說,它監控系統進程的鏡像加載操作,將存儲在%Windir%\inf\oem7A.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 FindFirstFileExWNtQueryDirectoryFile 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):
HKLM\SOFTWARE\SIEMENS\WinCC\Setup
HKLM\SOFTWARE\SIEMENS\STEP7
圖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%\drivers\mrxcls.sys
%System32%\drivers\mrxnet.sys
%Windir%\inf\oem7A.PNF
%Windir%\inf\mdmeric3.PNF
%Windir%\inf\mdmcpq3.PNF
%Windir%\inf\oem6C.PNF 刪除下列註冊表項:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRxCls
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRxNET 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%\drivers\mrxcls.sys
%System32%\drivers\mrxnet.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短程無線通信芯片,連基本的加密通信都沒有使用,可以說毫無安全性可言,極易遭到竊聽和攻擊,如果使用,將成為現場總線中極易被攻擊的薄弱點。 工業控制網絡通常是獨立網絡,相對民用/商用網絡而言,數據傳輸量相對較少,但對其實時性和可靠性的要求卻很高,因而出現問題的後果相當嚴重。
傳統工業網絡的安全相對信息網絡來說,壹直是憑借內網隔離,而疏於防範。因此,針對工業系統的安全檢查和防範加固迫在眉睫。