主頁 > 軟體工程 > 震網(Stuxnet)病毒深度決議:首個攻擊真實世界基礎設施的病毒

震網(Stuxnet)病毒深度決議:首個攻擊真實世界基礎設施的病毒

2023-01-17 07:12:14 軟體工程

摘要:震網病毒主要是通過改變離心機的轉速,來破壞離心機,并影響生產的濃縮鈾質量,

本文分享自華為云社區《【安全技術】震網(Stuxnet)病毒深度決議:首個攻擊真實世界基礎設施的病毒(1)【原創分析】》,作者:云存盤開發者支持團隊 ,

第一章 震網病毒背景【源自網路】

2006年,伊朗重啟核計劃,在納坦茲建立核工廠,安裝大量離心機生產濃縮鈾,2010年1月,聯合國負責核查伊朗核設施的國際原子能機構(IAEA)發現納坦茲核工廠出現問題,原本預期使用壽命10年的IR-1型離心機大規模故障,但是誰都說不清楚到底是什么原因導致的,

伊朗納坦茲核工廠

2010年6月,白俄羅斯一家小型反病毒公司VirusBlockAda的技術負責人舍基·烏爾森(Sergey Ulasen),在分析伊朗計劃上上的惡意檔案時,發現該惡意檔案例外復雜,不僅有效利用了"內核極"后門來躲過反病毒引擎的掃描,還利用了多個"零日漏洞"(zero-day) 來突破Windows系統,但是由于力不從心,沒有完全破譯該惡意代碼,2010年7月12日,烏爾森將該發現發布在一個英文安全論壇上,

舍基·烏爾森(SergeyUlasen)

全球安全業界開始對這個病毒進行分析和破譯,同時,微軟將該病毒命名為:震網(Stuxnet),通過分析發現,該病毒的隱蔽性、先進性和復雜性遠遠超過人們的想象,

據國外一些報道稱,該病毒是由美國和以色列的程式員共同撰寫,其中攻擊的西門子工控系統的技術規范由德國提供,西門子工控系統被廣泛應用于伊朗核設施中,在以色列的迪莫諾,構建了西門子控制器和IR-1型離心機的試驗系統,對該病毒進行了測驗,英國政府也參與了試驗,試驗完成后,荷蘭情報人員作為離心機的技術咨詢工程師,將病毒植入到核設施中,

震網病毒主要是通過改變離心機的轉速,來破壞離心機,并影響生產的濃縮鈾質量,

離心機被故障

震網病毒原本的設計是定向攻擊,作為網路武器來使用,算是APT攻擊的鼻祖,之所以被發現,是因為開發震網病毒的程式員在編程的時候,錯誤的將and和or用錯,導致病毒可以感染任何版本的Windows系統,最終在2010年6月被捕獲,

第二章 震網病毒逆向深入分析【個人原創分析,非授權請勿轉載】

震網病毒結構與運行流程

震網病毒主要包含6個檔案,4個快捷方式圖示檔案,利用LNK漏洞從U盤自動感染計算機,兩個tmp檔案,用于初始化和安裝震網病毒,

震網病毒共利用了7個漏洞,其中4個0 Day漏洞:

CVE-2008-4250(MS-08-067)-Windows Server Service NetPathCanonicalize()

CVE-2010-2772 WinCC default password

CVE-2012-3015 Step 7 Insecure Library Loading

CVE-2010-2568(MS-10-046)-Windows Shell LNK Vulnerability (O day)

CVE-2010-2743(MS-10-073)-Win32K.sys Local Privilege Escalation (O day)

CVE-2010-3888(MS-10-092) Task Scheduler vulnerability (O day)

CVE-2010-2729(MS-10-061)-Windows Print Spooler Service Remote Code Execution (O day)

震網病毒隱藏在U盤中,當U盤插入到計算機上時,利用LNK漏洞會自動感染Windows系統,感染執行后,通過Ring3 Hook Ntdll實作在記憶體中加載~WTR4141.tmp檔案,Ring3 Hook Kernel32、Ntdll實作*.tmp和*.lnk檔案隱藏,進而通過記憶體LoadLibrary加載~WTR4132.tmp檔案,提取出核心的Main.dll,在記憶體中加密、脫殼、加載Main.dll,初始化安裝震網病毒,注入行程、注冊服務,釋放資源檔案,最終震網病毒以服務運行,服務運行時,會攻擊西門子WinCC工控系統軟體,通過該軟體最終攻擊PLC,讓離心機例外作業,導致離心機快速故障,

Call#15初始化安裝Stuxnet

當Main.dll被加載的時候,匯出表#15第一個被呼叫,#15主要負責檢查Stuxnet是否運行在一個合適的系統中,檢測當前系統是否已被感染,把當前行程權限提升到系統權限,檢測系統中安裝的殺毒軟體版本,選擇把DLL注入到哪個行程中;把DLL注入到選擇的行程中,然后呼叫#16,

#15的第一個任務是檢查配置資料(configuration data)是否是最新的,配置資料可以被存盤到兩個位置,Stuxnet檢查最新的配置資料并且執行,然后Stuxnet檢查是否運行在一個32位的系統中,如果運行在64位系統中則退出,同時也檢查作業系統的版本,Stuxnet只能運行在以下版本的作業系統中:

Win2K

WinXP

Windows 2003

Vista

Windows Server 2008

Windows 7

Windows Server 2008 R2

接著檢查當前行程是否具有Administrator權限,如果沒有則會利用0-day漏洞提升運行權限,如果當前作業系統是Windows Vista、Windows 7、Windows Server 2008 R2,則利用Task Scheduler Escalation of Privilege來提升權限;如果作業系統是Windows XP、Win2K則利用Windows Win32k.sys Local Privilege Escalation(MS10-073)漏洞提升權限,

如果代碼運行成功,如果利用win32k.sys漏洞,主DLL檔案作為一個新行程運行,如利用Task Scheduler,主dll運行在csrss.exe行程中,

Win32k.sys漏洞利用的代碼在資源檔案#250中,

當匯出表#15運行檢查都通過后,#16運行,#16是Stuxnet的主安裝程式,它檢查日期和作業系統的版本,解密、創建并安裝rootkit檔案和注冊表項;并把自己注入到services.exe中,以便感染移動存盤設備;把自己注入到Step7的行程中感染所有的Step7工程;建立全域互斥量(mutexes)用于不同組件之間的通信;連接RPC服務器,

Call#16安裝Stuxnet

#16首先檢查配置資料是否有效,然后檢查注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation中的NTVDM TRACE值是否是19790509,如果是則退出,該項應該是是否允許感染的標識,然后讀取配置資料中的日期(配置資料偏移0x8c處)和當前系統日期對比,如果當前日期比配置資料中的時間晚,則退出;配置資料中的日期是2012-6-24,

Stuxnet的各個組件之間的通信采用全域互斥信號量,當在Windows Xp中時呼叫SetSecurityDescriptorDacl創建這些互斥信號量;在Windows Vista、Windows 7和WindowsServer2008中呼叫SetSecurityDescriptorSacl創建,用此方法可以降低系統完整性檢測,保證代碼寫操作被拒絕,

然后Stuxnet創建3個加密的檔案,這些檔案來自.stub節,然后將他們保存到磁盤,

? Stuxnet主要攻擊載荷檔案保存為Oem7a.pnf;

? 一個90個位元組的資料被保存到%SystemDrive%\inf\mdmeric3.PNF中;

? 配置資料被拷貝到%SystemDrive%\inf\mdmcpq3.PNF中;

? 一個日志檔案被拷貝到%SystemDrive%\inf\oem6C.PNF中;

接著Stuxnet檢查系統時間,確保它在2012年6月24號以前,然后通過讀取存并解密儲到硬碟中的版本資訊,來檢查自己和保存到磁盤上的加密代碼是否是最新的,此功能是通過#6實作的,

版本檢查通過后,Stuxnet從資源檔案中(#201、#242)釋放、解碼并將內容寫2個檔案中:Mrxnet.sys和Mrxcls.sys;它們是兩個驅動檔案:一個用于Stuxnet的加載點(Load point),另一個用于隱藏磁盤中惡意檔案,并且這兩個檔案的時間和系統目錄中的其他檔案時間一致,以免引起懷疑;然后創建注冊表項指向這兩個驅動檔案,將它們注冊為服務項,以便開機的時候就啟動這2個服務,一旦Stuxnet創建的這個Rootkit正確安裝后,會產生一些全域信號量,表明安裝成功,

Stuxnet接著采用另外的2個匯入函式(exports)繼續完成安裝和感染(infection)程序,

  1. 然后把payload .dll注入到services.exe中并且呼叫#32(感染可移動存盤設備和啟動RPC服務);
  2. 把payload .dll注入到Step7的行程:S7tgtopx.exe中并且呼叫#2(用于感染Step7工程檔案),為使這一步成功,Stuxnet可能需要殺掉explorer.exe和S7tgtopx.exe行程,如果他們在運行中的話,

Stuxnet的通過上述的兩種payload .dll注入和創建的服務及驅動檔案運行起來,

Stuxnet將等待一段短暫時間后才試圖連接RPC服務(#32開啟的),將呼叫0號函式檢查連接是否成功并且呼叫9號函式接收一些資料存盤到oem6c.pnf中,

至此,所有默認的傳播方式和攻擊載荷已經被激活,

Stuxnet攻擊西門子PLC流程

攻擊PLC程序:

  1. 惡意DLL將s7otbxdx.dll重命名為s7otbxsx.dll,用定制的DLL替代s7otbxdx.dll,該定制DLL主要重寫s7otbxsx.dll 109個中的16個涉及讀、寫和列舉代碼塊的匯出函式,其他匯出函式還是由s7otbxdx.dll提供;
  2. 震網根據不同目標系統的特征選擇不同的代碼來感染PLC,一個感染的序列包含注入到PLC中的代碼塊和資料塊,來改變PLC行為,主要有三種感染序列,其中兩種比較相似,功能相同,標記為序列A和B,另外一種標記為序列C;
  3. 如果s7otbxdx.dll是運行在ccrtsloader.exe檔案中,替換后的s7otbxdx.dll啟動兩個執行緒感染特定的PLC:

執行緒1:(每15分鐘運行一次;感染含有特定SDB特征的6ES7-315-2 PLC)

  1. 通過s7ag_read檢測PLC型別,必須為6ES7-315-2;
  2. 檢測SDB塊來確定PLC是否被感染以及選擇寫入哪個序列(A或B);
    ? 列舉、決議SDB(系統資料塊),尋找一個偏移50h DWORD的地方等于0100CB2Ch的SDB;(說明使用的是Profibus communications processor module CP 342-5,)
    ? 在SDB中搜索特定的值7050h和9500h,只有當兩個值出現在總數大于等于33時才滿足感染要求;(7050h代表KFC750V3變頻驅動器,9500h代表Vacon NX頻率轉換驅動器,)
  3. 按照序列A或B進行感染:

? 拷貝DP_RECV塊到FC1869,然后用定制的塊替換DP_RECV塊;(DP_RECV是網路協處理器使用的標準代碼塊的名稱,用來接收Profibus上的網路幀,每次接收包時,定制塊會呼叫FC1869中原始的DP_RECV進行處理,然后對包資料進行一些后處理,)

? 將一些定制塊寫入到PLC(20個);

? 感染OB1,使每個周期開始先執行惡意代碼;(首先增加原始塊的大小;然后將定制代碼寫入到塊的開頭;最后將原始的OB1代碼插入到定制代碼后面,)

? 感染OB35;(和OB1相同,采用code-prepending感染技術)

執行緒2:(每5分鐘查詢一次;保證攻擊同時進行)

  1. 監控、查詢總線上的每個特定PLC(如S7-315)中被執行緒1成功注入的資料塊DB890;
  2. 當達到特定條件,啟動破壞例程時,該執行緒向所有監控的PLC中的DB890寫入資料,使同一總線上的PLC同時發起破壞攻擊,

(4) 某些條件下,會將序列C寫入PLC,針對6ES7-417,更為復雜;

(5) 破壞:(在不同時間降低或增加馬達頻率)

  1. 確定正常的操作頻率:807-1210Hz;
  2. 將頻率設定為1410Hz;
  3. 恢復正常操作;
  4. 大約27天后,先將頻率設為2Hz,然后設為1064Hz;
  5. 恢復正常操作;

重復上述程序,

第三章 震網病毒重現

【篇幅原因,請關注后續文章】

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/542108.html

標籤:其他

上一篇:如何做研發效能提升

下一篇:【提升團隊運營效率】交易履約之訂單中心實踐

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more