工業(yè)控制系統(tǒng)安全與實踐 課件 第6-9章 工業(yè)控制系統(tǒng)漏洞-石油行業(yè)工業(yè)控制系統(tǒng)案例_第1頁
工業(yè)控制系統(tǒng)安全與實踐 課件 第6-9章 工業(yè)控制系統(tǒng)漏洞-石油行業(yè)工業(yè)控制系統(tǒng)案例_第2頁
工業(yè)控制系統(tǒng)安全與實踐 課件 第6-9章 工業(yè)控制系統(tǒng)漏洞-石油行業(yè)工業(yè)控制系統(tǒng)案例_第3頁
工業(yè)控制系統(tǒng)安全與實踐 課件 第6-9章 工業(yè)控制系統(tǒng)漏洞-石油行業(yè)工業(yè)控制系統(tǒng)案例_第4頁
工業(yè)控制系統(tǒng)安全與實踐 課件 第6-9章 工業(yè)控制系統(tǒng)漏洞-石油行業(yè)工業(yè)控制系統(tǒng)案例_第5頁
已閱讀5頁,還剩248頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章工業(yè)控制系統(tǒng)漏洞工業(yè)控制系統(tǒng)安全與實踐2本章學習目標了解常見的工控軟件漏洞類型如緩沖區(qū)溢出漏洞、DLL劫持、格式化字符串漏洞等,熟悉這些漏洞的基本原理。分析工控軟件漏洞入門小節(jié)中的小例子,動手實踐運行程序并對其進行分析,深入理解各種漏洞產(chǎn)生的原因和防范手段。動手分析真實的工控漏洞案例,搭建起漏洞分析實驗環(huán)境,掌握常見的漏洞分析工具的使用方法,掌握基本的漏洞分析能力。6.1 工控系統(tǒng)漏洞概況6.2 工控軟件漏洞入門6.3 案例1-施耐德Modbus串行驅動遠程代碼執(zhí)行漏洞6.4 案例2-紫金橋監(jiān)控組態(tài)軟件DLL劫持漏洞6.5案例3-LAquisSCADA目錄遍歷漏洞6.6案例4-AdvantechWebAccess遠程命令執(zhí)行漏洞6.7 本章小結和習題目

錄CONTENT36.1工控系統(tǒng)漏洞概況5工業(yè)控制系統(tǒng)的安全威脅主要來源于系統(tǒng)中所使用到的操作系統(tǒng)、工控協(xié)議、工控硬件、工控軟件等存在的漏洞。下表為工控漏洞分類及其典型設備和協(xié)議舉例。6.1 工控系統(tǒng)漏洞概況工控典型漏洞分類漏洞分類典型設備/協(xié)議工控設備漏洞PLC、RTU、DCS、交換機、工業(yè)協(xié)議網(wǎng)關等工控網(wǎng)絡協(xié)議漏洞OPC、Modbus、Profibus、CAN等工控軟件系統(tǒng)漏洞WinCC、Intouch、KingView、WebAccess等工控安全防護設備漏洞工業(yè)防火墻、網(wǎng)閘等6下圖展示了2011年至2022年期間工控漏洞數(shù)量的走勢圖,從圖中可以清楚地看出這種快速增長的趨勢。這說明在工業(yè)領域中,工控系統(tǒng)的漏洞問題無法被忽視,并且需要采取更加有力的措施來確保其安全性,以保障工控系統(tǒng)的安全穩(wěn)定。6.1 工控系統(tǒng)漏洞概況工控漏洞數(shù)量走勢7根據(jù)CVE、NationalVulnerabilityDatabase(NVD)和CNNVD的數(shù)據(jù)統(tǒng)計,工控系統(tǒng)漏洞分析顯示高危漏洞占比達到了68.9%,中危漏洞占比為20.5%。其中,中高危漏洞占比高達89.4%,這進一步凸顯了工業(yè)控制系統(tǒng)的脆弱性。下圖為2022年工控系統(tǒng)新增漏洞危險等級分布餅狀圖。6.1 工控系統(tǒng)漏洞概況工控漏洞危險等級8在收錄的工業(yè)控制系統(tǒng)漏洞中,涉及到的前十大工控廠商分別為臺達電子、西門子、三菱、3SSmart、思科、艾默生、羅克韋爾、施耐德、歐姆龍、霍尼韋爾。2022年工控新增漏洞涉及主要廠商情況如下圖所示。6.1 工控系統(tǒng)漏洞概況工控漏洞類型及廠商在2022年,新出現(xiàn)的工控系統(tǒng)安全漏洞展現(xiàn)出多樣化的趨勢,涵蓋了超過30種不同的技術類型。2022年工控系統(tǒng)新增漏洞類型分布如下圖所示6.2工控軟件漏洞入門106.2.1 緩沖區(qū)溢出漏洞緩沖區(qū)是計算機內存中用于填充數(shù)據(jù)的一段連續(xù)區(qū)域,可以用來存放變量,字符串等。緩沖區(qū)的長度是固定的,當向緩沖區(qū)中存放長度大于緩沖區(qū)長度的數(shù)據(jù)時就會出現(xiàn)“溢出”,溢出的數(shù)據(jù)就會進入相鄰的內存中,這往往會導致程序的異常。緩沖區(qū)溢出的出現(xiàn)往往是程序沒有很好地對輸入的數(shù)據(jù)長度進行校驗??梢暂p松的構造一個緩沖區(qū)溢出的例子,請看下面的代碼。顯然如果向name輸入長度大于6的字符串就會出現(xiàn)緩沖區(qū)溢出,name沒有足夠的空間來存儲輸入的數(shù)據(jù)。預期測試結果116.2.1 緩沖區(qū)溢出漏洞此處設定了兩個函數(shù),主調函數(shù)和被調函數(shù),簡單來說就是主調函數(shù)的代碼中調用了被調函數(shù)以實現(xiàn)具體的功能,被調函數(shù)中定義的局部變量Y的長度為8字節(jié),這時假設對Y賦值aaaabbbb,該值會正確地占據(jù)局部變量Y所在位置。而當對變量Y賦值長度超過8字節(jié)的字符串時,前棧的EBP(ExtendedBasePointer)就會被覆蓋,而其下方存儲的是主調函數(shù)的返回地址,如果該返回地址被覆蓋,程序自然會崩潰,預期測試結果函數(shù)調用緩沖區(qū)覆蓋情況126.2.1 緩沖區(qū)溢出漏洞緩沖區(qū)溢出防護手段輸入驗證:確保對用戶輸入進行嚴格的驗證和過濾,防止惡意或不當輸入觸發(fā)緩沖區(qū)溢出漏洞。邊界檢查:緩沖區(qū)溢出通常發(fā)生在寫入超出緩沖區(qū)范圍的數(shù)據(jù)時,進行邊界檢查可以確保寫入數(shù)據(jù)大小未超過緩沖區(qū)范圍。使用安全的字符串處理函數(shù):避免使用不安全的字符串處理函數(shù),如strcpy和sprintf,而是使用更安全的函數(shù),如strncpy和snprintf,這些函數(shù)能夠對字符串復制的長度進行限制靜態(tài)和動態(tài)分析工具:使用靜態(tài)和動態(tài)分析工具,如靜態(tài)代碼分析器和內存調試器,來檢測和修復潛在的緩沖區(qū)溢出漏洞。更新和維護:定期更新和維護軟件,及時應用操作系統(tǒng)和依賴庫的安全補丁,以確保已知的安全漏洞得到修復。136.2.2 DLL劫持DLL(DynamicLinkLibrary)文件為動態(tài)鏈接庫文件,該類文件包含了一系列可以調用的函數(shù)但其不能獨立運行必須借助其他文件才能加載。Windows系統(tǒng)的眾多應用程序在實現(xiàn)功能時會調用相同的函數(shù),使用DLL文件對函數(shù)進行封裝,應用程序在執(zhí)行前加載其需要的DLL文件,這種處理方式減少了程序規(guī)模,使代碼模塊化。應用程序在執(zhí)行時會按照一定順序在磁盤中搜索并加載其所需的DLL文件,這時如果攻擊者偽造了一個DLL文件并將該文件放置在正確的DLL文件之前,應用程序就會加載錯誤的DLL文件,這種現(xiàn)象形象地講就是系統(tǒng)DLL文件被劫持了。Stuxnet病毒在對伊朗核電站的攻擊中就對西門子軟件的DLL文件進行替換實現(xiàn)了DLL劫持從而改變了PLC的控制功能,造成了嚴重的后果。DLL加載順序146.2.2 DLL劫持DLL劫持防護手段使用絕對路徑:在應用程序中加載DLL時,使用絕對路徑來指定DLL的位置,而不依賴于系統(tǒng)的加載順序。這可以確保只加載明確指定的DLL,而不會受到搜索路徑的影響。文件完整性監(jiān)控:實施文件完整性監(jiān)控措施,以及時檢測到DLL文件的任何未經(jīng)授權的更改。使用數(shù)字簽名:為您的DLL文件和應用程序使用數(shù)字簽名。數(shù)字簽名可以確保文件的完整性和真實性,以防止被篡改。確保僅加載經(jīng)過數(shù)字簽名驗證的DLL文件。156.2.3 整數(shù)溢出整數(shù)溢出漏洞是一種常見的高危漏洞,往往是程序員寫程序時的不嚴謹造成的。在計算機系統(tǒng)中,整數(shù)變量有上下界。當進行算術運算時,若結果超出了整數(shù)類型所能表示的最大值,就會發(fā)生異常錯誤。此時發(fā)生的就是整數(shù)溢出。整數(shù)溢出大體可以分為:上溢、下溢、截斷、符號失配。有符號短整型(shortint)在計算機中的表示范圍為-32768到32767,上述例子中將32767賦給a,再將a+1賦給b,此時即出現(xiàn)整型上溢,b會變成一個很小的數(shù)。運行該代碼的結果如下:下面是一個有符號整數(shù)的例子,試想在計算機中運行以下代碼會產(chǎn)生什么樣的結果呢?166.2.3 整數(shù)溢出同樣的請預測下面這段代碼的運行結果。1與65537顯然不相同,按邏輯看程序應該打印“不相等”,但由于使用的類型為unsignedint,其只占兩個字節(jié),在賦值時var2接受了后兩個字節(jié)然后與var1進行比較,這是整數(shù)溢出中的截斷,從Windows系統(tǒng)打開計算器,打開程序員模式輸入65537觀察其對應的二進制形式就不難理解if判斷成立的原因了,結果如圖所示。176.2.3 整數(shù)溢出整數(shù)溢出防護手段使用更大的數(shù)據(jù)類型:確保使用足夠大的整數(shù)數(shù)據(jù)類型來存儲變量,以避免溢出情況的出現(xiàn)。邊界檢查:在對輸入數(shù)據(jù)進行運算之前,進行邊界檢查以確保數(shù)據(jù)在合理的范圍內。如果輸入數(shù)據(jù)超出了合理范圍,應進行適當處理。使用正確的數(shù)據(jù)類型:在進行運算時,應選擇合適的數(shù)據(jù)類型來存儲和處理,不同類型數(shù)據(jù)具有不同取值范圍和溢出行為,正確選擇數(shù)據(jù)類型可以避免溢出。避免使用不安全的函數(shù):避免使用不安全的整數(shù)操作函數(shù),如memcpy、strcpy、strcat等,因為它們缺乏整數(shù)溢出檢查。186.2.4 指針錯誤程序員對指針往往是愛恨交加的,指針給了程序員直接操縱內存地址的權力,程序員可以借助指針完成很多酷炫的操作,編寫出高質量的程序,但如果使用不當,則可能導致整個程序的崩潰。另外,攻擊者還可能借助指針繞過安全保護或者是讓指針指向其控制的數(shù)據(jù)緩沖區(qū)導致任意代碼執(zhí)行等??偠灾绦騿T必須警惕指針的使用因為其相當危險。思考右側的代碼,首先說明這個例子是特意構造的所以顯得有些刻意,但其能說明問題,目的是在讓大家了解指針的錯誤使用可能帶來的后果。196.2.4 指針錯誤1.下面是正常使用該程序的結果:2.接下來看當構造一些特定數(shù)據(jù)程序又會怎么反應呢?分析結果,第二次程序并沒有執(zhí)行goodfunc函數(shù)將數(shù)組打印出來,而是執(zhí)行了badfunc函數(shù),那么指針func指向的函數(shù)是在什么時候被修改了呢?這就要解釋4199737這個數(shù)字的意義了,4199737對應著十六進制中的0x401539。206.2.4 指針錯誤分析結果,第二次程序并沒有執(zhí)行goodfunc函數(shù)將數(shù)組打印出來,而是執(zhí)行了badfunc函數(shù),那么指針func指向的函數(shù)是在什么時候被修改了呢?這就要解釋4199737這個數(shù)字的意義了,4199737對應著十六進制中的0x401539。IDAPro(InteractiveDisassemblerProfessional)是一款逆向人員常用的靜態(tài)反編譯工具,通過該工具可以對exe程序進行反匯編以分析程序執(zhí)行。此處通過IDAPro對該程序產(chǎn)生的exe文件進行反匯編可以知道0x401539對應著的就是badfunc()函數(shù)的起始地址,如圖所示。通過對內存的分析還能知道number[6]對應的內存位置與指針func的內存位置相同,所以選擇在選擇替換位置時輸入了6,這樣就成功地將指針func指向的函數(shù)改為了badfunc(),再次執(zhí)行func(number)時程序自然就將youhavebeenhacked打印了出來。216.2.4 指針錯誤指針錯誤防護手段檢查空指針:在使用指針之前,始終檢查指針是否為空(null)。這可以防止出現(xiàn)空指針解引用錯誤的情況。避免懸掛指針:確保在引用指針之前,相關的對象或內存塊仍然有效。避免在指針引用后釋放相關內存。指針初始化:在聲明指針變量后,立即將其初始化為有效的內存地址或null,以避免指針引用未初始化的內存。防止緩沖區(qū)溢出:確保不會超出分配給指針的內存塊的邊界。使用malloc、calloc或其他動態(tài)內存分配函數(shù)時,對內存進行合理分配。226.2.5 格式化字符串漏洞首先來看看什么是格式化字符串,以下代碼展示了程序員最常使用格式化字符串的方式,其中%s和%d為占位符,它們分別在格式化字符串后面獲取參數(shù)n,a的值。格式化字符串漏洞發(fā)生在用戶提供的參數(shù)數(shù)量與格式化字符串要求的參數(shù)數(shù)量不匹配時。在C語言庫中,能夠引發(fā)格式化漏洞的函數(shù)數(shù)量有限,主要包括printf、sprintf等print家族的成員函數(shù)。漏洞產(chǎn)生的根源在于該類函數(shù)設計上的缺陷,printf函數(shù)自身并不能確定參數(shù)的個數(shù),當參數(shù)數(shù)量不匹配時會將內存中其他地址上的數(shù)據(jù)作為參數(shù)使用從而產(chǎn)生錯誤或是信息泄露。236.2.5 格式化字符串漏洞通過下面的例子來感受格式化字符串漏洞,以下代碼是格式化字符串的正確用法,用戶輸入字符串計算機能夠正確的將字符串打印出來。但如果程序員錯誤地將第6代碼編寫成了下面這樣,問題就會出現(xiàn)。246.2.5 格式化字符串漏洞多次測試該代碼的結果如右圖,可以看到第一次輸入字符串,結果正常。但第二次計算機打印出了異常數(shù)據(jù),如果正確使用格式化字符串,打印的結果應為“AAAA,%x,%x,%x,%x,”。那么此處打印出的異常結果是什么呢?此處可以認為程序執(zhí)行的printf函數(shù)如下此處的%x并沒有成功從格式化字符串后獲得參數(shù),就出現(xiàn)了格式化字符串要求的參數(shù)與實際參數(shù)不同的情況。%x會讀取內存其他位置的數(shù)據(jù)然后將字符串打印出來。再觀察第三次輸出的結果,計算機在調用printf函數(shù)時會先將其參數(shù)壓入棧中,其中41414141就對應著AAAA,可以由此確定棧中參數(shù)與首地址的偏移量,該例子中偏移量為5。256.2.5 格式化字符串漏洞格式化字符串漏洞防護手段輸入驗證:避免直接將來自用戶或不受信任來源的輸入傳遞給格式化字符串函數(shù)。如果必須使用用戶輸入來構造格式化字符串,確保對輸入進行驗證和過濾,以防止惡意輸入。使用常量格式字符串:將格式字符串硬編碼到代碼中,而不是從用戶輸入中構建。這樣可以防止攻擊者通過輸入構造惡意格式化字符串。使用常量格式字符串:將格式字符串硬編碼到代碼中,而不是從用戶輸入中構建。這樣可以防止攻擊者通過輸入構造惡意格式化字符串。嚴格控制格式字符串:確保只有受信任的用戶或代碼可以訪問格式字符串。不要通過網(wǎng)絡傳遞格式字符串,以防止攻擊者濫用它。266.2.6 SQL注入隨著網(wǎng)絡技術的不斷發(fā)展,越來越多的工控系統(tǒng)設備采用了Web界面,這無疑提升了便捷性與可用性,同時也將Web開發(fā)所存在的安全問題帶到了工控領域。SQL(StructuredQueryLanguage)注入是一種典型的Web安全漏洞,所謂SQL注入攻擊,即攻擊者通過在Web表單提交的數(shù)據(jù)、域名或頁面請求的查詢字符串中嵌入SQL命令,旨在誤導服務器執(zhí)行非預期的、惡意的SQL操作。其產(chǎn)生的根本原因與之前講解的很多漏洞類型相同是盲目地相信了用戶輸入的正確性,沒有對用戶的輸入進行檢驗。觀察下面的代碼,其通過name對數(shù)據(jù)庫中的user表進行查詢并進行了嚴格的校驗,輸入的用戶名必須由字母、數(shù)字、或者下劃線組成,且對長度也進行了限制必須在8-20之間。276.2.6 SQL注入但如果程序員沒有對用戶的輸入進行校驗就可能出現(xiàn)以下情況,以下代碼假定name字段混進了惡意的DELETEFROMusers語句,程序在執(zhí)行時就會刪掉數(shù)據(jù)庫中user表的所有內容,造成數(shù)據(jù)丟失。同樣上述例子中還可以通過注入將SQL語句變?yōu)橛勒媸?,從而暴露出user表中的數(shù)據(jù),如下圖,此時程序執(zhí)行的SQL語句為SELECT*FROMusersWHEREname='DavidOR1=1'。286.2.6 格式化字符串漏洞SQL注入漏洞防護手段輸入驗證:所有從用戶處獲取的數(shù)據(jù),包括表單數(shù)據(jù)、URL參數(shù)和Cookie,都應經(jīng)過仔細的驗證和過濾,以確保數(shù)據(jù)的合法性和安全性。避免動態(tài)拼裝SQL查詢:應該使用參數(shù)化的SQL查詢或者直接采用存儲過程進行數(shù)據(jù)查詢和存取操作,以避免SQL注入的風險。權限管理:對用戶進行分級管理,精確控制用戶權限,最好以最低權限的數(shù)據(jù)庫用戶來訪問數(shù)據(jù)庫,只給予其必要的權限。信息加密:對于敏感信息,如密碼和機密數(shù)據(jù)等,不應明文存儲,而是應該進行加密以確保其安全性。一旦數(shù)據(jù)泄露或被未授權訪問,可能會導致嚴重的后果。296.2.7 目錄遍歷目錄遍歷漏洞產(chǎn)生的原因是Web服務器或Web應用程序沒有對用戶輸入的表示文件路徑的字符串進行安全驗證。攻擊者可以使用特殊字符繞過相關安全機制,訪問服務器上的受限文件,甚至是執(zhí)行系統(tǒng)命令。目前,工控系統(tǒng)中有大量的人機界面和其他設備開始采用基于Web的訪問方式。簡單點說,目錄遍歷漏洞的形成是因為程序在處理用戶輸入時未能徹底過濾掉諸如“../”這樣的目錄跳轉字符。這允許惡意用戶通過提交包含目錄跳轉的請求來訪問服務器上的任何文件。這類目錄跳轉字符不僅包括“../”,還可能包括其ASCII或Unicode編碼等變體。上圖展示了一個使用PHP語言特意構造的典型目錄遍歷漏洞,在接收path變量時沒有對path的內容進行校驗,程序員的本意可能是允許客戶端獲取當前目錄下的文件名,但當攻擊者使用“../”構造惡意輸入如http://192.xxx.xxx.xxx(服務器IP地址)/xxx.php?path=../../時,服務器的其他文件會暴露給攻擊者。306.2.7

目錄遍歷目錄遍歷防護手段檢查輸入:對于所有用戶輸入,尤其是與文件路徑有關的輸入,進行嚴格的驗證和過濾。確保只允許合法字符和合法路徑分隔符,并拒絕包含特殊字符(如../)的輸入。使用白名單:通過設置白名單,限制用戶的輸入范圍,使其只能訪問其權限下的文件,避免攻擊者訪問敏感目錄和文件。文件校驗和驗證:使用文件校驗和技術來確認文件的完整性,確保文件被修改后必須重新計算哈希值,從而及時發(fā)現(xiàn)任何未授權的修改或損壞。文件名限制:在實現(xiàn)文件功能的時候,可以把文件名換成一個動態(tài)的隨機字符串或者編碼的值,可以防止文件信息暴露。316.2.7 目錄遍歷目錄遍歷漏洞產(chǎn)生的原因是Web服務器或Web應用程序沒有對用戶輸入的表示文件路徑的字符串進行安全驗證。攻擊者可以使用特殊字符繞過相關安全機制,訪問服務器上的受限文件,甚至是執(zhí)行系統(tǒng)命令。目前,工控系統(tǒng)中有大量的人機界面和其他設備開始采用基于Web的訪問方式。簡單點說,目錄遍歷漏洞的形成是因為程序在處理用戶輸入時未能徹底過濾掉諸如“../”這樣的目錄跳轉字符。這允許惡意用戶通過提交包含目錄跳轉的請求來訪問服務器上的任何文件。這類目錄跳轉字符不僅包括“../”,還可能包括其ASCII或Unicode編碼等變體。上圖展示了一個使用PHP語言特意構造的典型目錄遍歷漏洞,在接收path變量時沒有對path的內容進行校驗,程序員的本意可能是允許客戶端獲取當前目錄下的文件名,但當攻擊者使用“../”構造惡意輸入如http://192.xxx.xxx.xxx(服務器IP地址)/xxx.php?path=../../時,服務器的其他文件會暴露給攻擊者。6.3案例1-施耐德Modbus串行驅動遠程代碼執(zhí)行漏洞6.3.1

漏洞基本信息漏洞信息漏洞名稱SchneiderElectricModbusSerialDriver基于棧的緩沖區(qū)溢出漏洞CVE編號CVE-2013-0662漏洞類型遠程代碼執(zhí)行漏洞等級9.3高危公開狀態(tài)公開漏洞描述SchneiderElectricModbusSerialDriver是法國施耐德電氣公司的一款串行驅動。該漏洞是SchneiderElectricModbusSerialDriver中的ModbusDrv.exe程序中的棧溢出漏洞。攻擊者可以通過發(fā)送長度超過程序預期的網(wǎng)絡數(shù)據(jù)導致程序中棧溢出,從而實現(xiàn)遠程代碼執(zhí)行。6.3.2

實驗環(huán)境簡介及搭建設備/工具功能WindowsXPSP3目標靶機KaliLinux虛擬機滲透主機Modbusdrv.exe漏洞程序IDAPro7.0(32位)反匯編工具Ollydbgv2.01程序調試器本次實驗所需要的設備及工具如下表所示:本次實驗中的WindowXP虛擬機的IP地址為35,在該虛擬機上安裝漏洞程序Modbusdrv.exe及程序調試器Ollydbg。IDAPro則是在本機使用實現(xiàn)對程序的反匯編。使用IP地址為31的KaliLinux虛擬機作為滲透主機,下圖為環(huán)境搭建成功后的網(wǎng)絡拓撲圖。6.4案例2-紫金橋監(jiān)控組態(tài)軟件DLL劫持漏洞6.4.1

漏洞基本信息漏洞信息漏洞名稱SchneiderElectricModbusSerialDriver基于棧的緩沖區(qū)溢出漏洞CVE編號CVE-2013-0662漏洞類型遠程代碼執(zhí)行漏洞等級9.3高危公開狀態(tài)公開漏洞描述SchneiderElectricModbusSerialDriver是法國施耐德電氣公司的一款串行驅動。該漏洞是SchneiderElectricModbusSerialDriver中的ModbusDrv.exe程序中的棧溢出漏洞。攻擊者可以通過發(fā)送長度超過程序預期的網(wǎng)絡數(shù)據(jù)導致程序中棧溢出,從而實現(xiàn)遠程代碼執(zhí)行。6.4.2

實驗環(huán)境簡介及搭建本次實驗所需要的設備及工具如下表所示:本次實驗中的WindowXP虛擬機的IP地址為33,在該虛擬機上安裝紫金橋監(jiān)控軟件、進程資源管理器ProcessExplore及DLL注入工具DllInject.exe。DLL_Hijacker.py則是在一臺Windows7虛擬機上使用生成相應的cpp文件。使用IP地址為31的KaliLinux虛擬機作為滲透主機,下圖為環(huán)境搭建成功后的網(wǎng)絡拓撲圖。設備/工具功能WindowXPSP3虛擬機目標靶機KaliLinux虛擬機滲透主機紫金橋監(jiān)控組態(tài)軟件6.5漏洞軟件ProcessExplorer進程資源管理器DllInject.exeDLL注入工具DLL_Hijacker.py惡意DLL生成工具MetasploitFramework(MSF)滲透測試框架(Kali自帶)6.4.3

漏洞分析Step01:

安裝好紫金橋組態(tài)軟件后運行該軟件,并使用Procexp查看ProgMan.exe進程所加載的DLL文件,如下圖所示:軟件安裝6.4.3

漏洞分析Step02:

打開WindowsXP系統(tǒng)的注冊表編輯器查看KnownDLLs項,如下圖所示,發(fā)現(xiàn)KnownDLLs注冊表項中不存在ws2help.dll,因此該DLL文件滿足DLL劫持的條件,當惡意的ws2help.dll被放置于ProgMan.exe所在目錄下,運行組態(tài)軟件時惡意DLL文件將被加載。軟件安裝6.4.3

漏洞分析Step03:接下來利用DLL_Hijacker.py生成對應的cpp文件,該文件在Python2環(huán)境下運行并且需要使用第三方庫Pefile,本書在Windows7虛擬機上配置好環(huán)境后執(zhí)行命令DLL_Hijacker.pyc:\WINDOWS\system32\ws2help.dll如下圖所示,成功獲得名為ws2help的cpp文件,接著使用VisualC++6.0編譯得到ws2help.dll文件。漏洞攻擊6.4.3

漏洞分析Step04:將獲得的ws2help.dll文件放入靶機中ProgMan.exe文件所在目錄下,再次嘗試運行組態(tài)軟件,組態(tài)軟件沒有成功開啟,而是出現(xiàn)了彈窗,如圖6-32所示,原因是系統(tǒng)依照一定順序優(yōu)先加載了ProgMan.exe目錄下的惡意的DLL文件,惡意DLL文件以彈窗的形式宣告DLL劫持成功,其中彈窗信息可通過修改DLL_Hijacker.py來改變。漏洞攻擊6.4.3

漏洞分析Step05:接下來嘗試利用Metasploit實現(xiàn)基于DLL劫持的權限提升,首先打開Kali虛擬機執(zhí)行以下命令:漏洞攻擊命令中的LHOST為Kali滲透主機的IP地址,LPORT沒有特別要求,后續(xù)步驟使用相同的端口號即可,該命令在root文件夾下創(chuàng)建了用于反彈shell的DLL文件,運行結果如下圖所示。6.4.3

漏洞分析Step06:將該DLL文件拷貝到XP的靶機上準備用于后續(xù)的DLL注入,在靶機上正常運行紫金橋組態(tài)軟件,然后在Kali虛擬機上利用Msf上的Handler模塊實現(xiàn)監(jiān)聽,具體操作與配置如下圖所示,LHOST和LPORT的值與上文創(chuàng)建反彈shell時使用的相同。漏洞攻擊6.4.3

漏洞分析Step07:DLL注入工具Dllinject.exe將用于反彈shell的DLL文件注入ProgMan進程,使用該工具時注意不要將DLL文件與該工具放于同一目錄下,DLL注入過程如下圖所示。漏洞攻擊6.4.3

漏洞分析Step08:此時返回Kali滲透主機查看,發(fā)現(xiàn)已經(jīng)提權成功,可以通過執(zhí)行sysinfo命令獲得XP虛擬機的相關系統(tǒng)信息,結果如圖6-36所示。漏洞攻擊6.5案例3-LAquisSCADA目錄遍歷漏洞6.5.1

漏洞基本信息漏洞信息漏洞名稱LAquisSCADA目錄遍歷漏洞CVE編號CVE-2017-6020漏洞類型目錄遍歷漏洞等級5.3中等公開狀態(tài)公開漏洞描述LAquisSCADA是巴西LCDS公司的一套用于監(jiān)控和數(shù)據(jù)采集的SCADA軟件。LCDSLTDAMELAquisSCADA237之前版本中存在目錄遍歷漏洞,該漏洞源于程序沒有充分的過濾用戶提交的輸入。遠程攻擊者可通過發(fā)送帶有目錄遍歷序列的請求利用該漏洞檢索敏感信息或更改任意文件。6.5.2

實驗環(huán)境簡介及搭建本次實驗所需要的設備及工具如下表所示。其中漏洞利用腳本可在/上搜索漏洞編號進行下載。本次實驗中的WindowXP虛擬機的IP地址為32,在該虛擬機上安裝LaquisSCADA軟件。使用IP地址為31的KaliLinux虛擬機作為滲透主機,漏洞分析過程中使用到了MSF框架及漏洞利用腳本。下圖為環(huán)境搭建成功后的網(wǎng)絡拓撲圖。設備/工具功能Windows7虛擬機目標靶機KaliLinux虛擬機滲透主機LAquis385漏洞軟件cve_2017_6020.rb漏洞利用腳本MetasploitFramework(MSF)滲透測試框架6.5.3

漏洞分析Step01:運行安裝包完成LAquisSCADA軟件的安裝,安裝過程中所有選項均使用默認配置即可,安裝完成后查看軟件的版本信息如下圖所示。軟件安裝6.5.3

漏洞分析Step02:

為了再現(xiàn)漏洞,首先需激活軟件并保證相關服務處于運行狀態(tài)。在軟件啟動之后,用戶可在窗口中通過“新建”按鈕來創(chuàng)建一個空的工程,但在此步驟中我們選擇不執(zhí)行創(chuàng)建新工程的操作。之后,點擊位于窗口左上角的菜單按鈕,選取“打開”選項,并在C:\ProgramFiles(x86)\LAquis\Apls\Examples\ExemplosCLPs\MODBUS下加載已有的示例工程,如下圖所示。軟件安裝6.5.3

漏洞分析Step03:最后再點擊Menu,在File一欄中選中WEBServer,啟動webserver,通過Win10本機測試Web服務,在網(wǎng)址欄輸入靶機IP地址和端口號1234,發(fā)現(xiàn)服務成功啟動如下圖所示,漏洞利用環(huán)境搭建成功。軟件安裝6.5.3

漏洞分析Step04:通過CVE編號查看LAquisscada的相關漏洞信息,通過/下載漏洞利用腳本,下載完成后,把文件放入Kali虛擬機的如下路徑:/usr/share/metasploit-framework/modules/exploits/windows/scada/,為了方便使用此處將腳本文件重命名為cve_2017_6020.rb如下圖所示。漏洞攻擊6.5.3

漏洞分析Step05:

在終端輸入msfconsole打開metasploit,在msf中輸入reload_all命令重新加載模塊,再輸入useexploit/windows/scada/cve_2017_6020使用該模塊,輸入showoptions查看模塊參數(shù),運行結果如下圖所示。這里簡單解釋重要參數(shù)的含義:DEPTH表示路徑深度,即向上跳轉的次數(shù),如果LAquisSCADA軟件安裝路徑為默認路徑,那么應該將該值設置為10,跳轉10次后正好是C盤的根目錄,F(xiàn)ILE代表想要讀取的文件名,RHOST需設置為靶機的IP地址,本次實驗只需要修改FILE和RHOST參數(shù)就能完成。漏洞攻擊6.5.3

漏洞分析Step06:為驗證漏洞,事先在靶機C:/Windows目錄下上創(chuàng)建success.txt文件,文件具體內容如下圖所示。漏洞攻擊6.5.3

漏洞分析Step07:然后將File設置為windows/success.txt,將RHOSTS設置為32,最后輸入run命令,可以看到模塊成功執(zhí)行將文件下載到Kali主機上的/root/.msf4/loot目錄下,上述過程如下圖所示。漏洞攻擊在Kali上打開該文件發(fā)現(xiàn)其與Win7靶機中內容相同如下圖所示,再次驗證了漏洞的有效性。除了指定的文件,通過該方法還可以遍歷Win7靶機上的任意文件。6.5.3

漏洞分析Step08:

最后通過Wireshark抓包分析漏洞利用過程中的流量可以知道該漏洞指向文件listagem.laquis中的NOME參數(shù),該文件位于當前工程文件目錄即C:\ProgramFiles(x86)\LAquis\Apls\Examples\ExemplosCLPs\MODBUS下。觀察HTTP協(xié)議的請求如下圖所示,可以看到多個“.//”被用于目錄的跳轉,由于沒有對用戶的請求進行校驗,此處存在目錄遍歷漏洞。漏洞攻擊6.6案例4-AdvantechWebAccess遠程命令執(zhí)行漏洞6.6.1

漏洞基本信息漏洞信息漏洞名稱AdvantechWebAccess遠程命令執(zhí)行漏洞CVE編號CVE-2017-16720漏洞類型遠程漏洞執(zhí)行漏洞等級9.3高危公開狀態(tài)公開漏洞描述AdvantechWebAccess8.3.2版本及之前版本中存在未經(jīng)身份驗證的遠程代碼執(zhí)行漏洞,該漏洞具體存在于webvrpcs進程中0x2711IOCTL的實現(xiàn)中,由于在文件操作中使用用戶提供的路徑之前,沒有對它進行適當?shù)尿炞C,導致攻擊者可以利用此漏洞使用RPC(RemoteProcedureCall)通過TCP端口4592以Administrator執(zhí)行遠程命令。6.6.2

實驗環(huán)境簡介及搭建本次實驗所需要的設備及工具如下表所示:本次實驗中的Window7虛擬機的IP地址為29,在該虛擬機上安裝了AdvantechWebAccess軟件,使用IDAPro對程序進行反匯編并分析。使用IP地址為31的KaliLinux虛擬機作為滲透主機,漏洞分析過程中使用到了漏洞利用腳本,下圖為環(huán)境搭建成功后的網(wǎng)絡拓撲圖。設備/工具功能Windows7虛擬機目標靶機KaliLinux虛擬機滲透主機AdvantechWebAccess8.2漏洞軟件CVE_2017_16720.py漏洞利用腳本IDAPro反匯編工具6.6.3

漏洞分析Step01:在Win7靶機運行安裝包完成AdvantechWebAccess8.2軟件的安裝,安裝過程中所有選型均使用默認配置即可,重啟虛擬機后打開軟件,軟件界面如下圖所示。軟件安裝6.6.3

漏洞分析Step02:在Win7虛擬機命令行中輸入netstat-a查看主機的端口開放情況,確定4592端口已經(jīng)成功打開,結果如圖6-49所示。軟件安裝6.6.3

漏洞分析Step03:漏洞的利用過程很簡單,安裝好腳本所需要的Python環(huán)境后直接在Kali虛擬機上以Win7靶機的IP地址作為參數(shù)運行腳本文件即可,運行結果如下圖所示,漏洞攻擊再回到Win7靶機如下圖,發(fā)現(xiàn)計算器被打開,漏洞利用成功。6.6.3

漏洞分析Step04:接下來使用IDAPro工具通過反匯編的方式追根溯源,分析漏洞產(chǎn)生的原因,已知該漏洞存在于webvrpcs進程中0x2711IOCTL的實現(xiàn)上,而DsDaqWebService函數(shù)實現(xiàn)了各個不同IOCTLcode的功能。DsDaWebService函數(shù)源于動態(tài)鏈接庫drawsrv.dll,使用IDA打開drawsrv.dll,定位到DsDaWebService函數(shù)并使用快捷鍵F5進行反匯編,在反匯編代碼中找到0x2711(10001)功能對應的位置如下圖所示。漏洞攻擊6.6.3

漏洞分析Step05:可以看到0x2711(10001)對應的處理函數(shù)為sub_100017B0,通過IDA反匯編該函數(shù),反匯編結果如下圖所示。下第14行該函數(shù)中調用了CreateProcessA()函數(shù)創(chuàng)建進程。其中參數(shù)a1由RPC客戶端發(fā)送,然而此處未a1參數(shù)進行任何校驗。這意味著,如果客戶端發(fā)送一個惡意構造的參數(shù),它可能會被用來啟動一個不受控制的進程。這種缺陷可以被攻擊者利用,以執(zhí)行遠程命令,從而在系統(tǒng)上造成更大的安全風險。漏洞攻擊6.7本章小結和習題66本章小結本章首先通過簡單的案例闡述了常見的工控軟件漏洞如緩沖區(qū)溢出漏洞、DLL劫持漏洞等的原理,然后對真實存在的工控軟件漏洞進行復現(xiàn)并分析漏洞產(chǎn)生的具體原因,過程中使用到了如Ollydbg、IDAPro等常見的漏洞分析工具,通過實踐的方式來闡述工控設備與應用存在的安全問題。67本章習題列舉常見的工控系統(tǒng)漏洞類型。詳細闡述緩沖區(qū)溢出漏洞的原理。詳細闡述DLL劫持漏洞的原理。構造一個簡單的指針錯誤例子,并使用IDAPro進行靜態(tài)分析。動手實踐使用IDA和Ollydbg對施耐德遠程命令執(zhí)行漏洞進行靜態(tài)分析和動態(tài)分析,了解漏洞的成因。從網(wǎng)上找尋其他工控軟件對其進行復現(xiàn),并分析漏洞產(chǎn)生的具體原因。謝謝工業(yè)控制系統(tǒng)安全與實踐第7章工控惡意代碼工業(yè)控制系統(tǒng)安全與實踐70本章學習目標了解計算機系統(tǒng)中惡意代碼的基本概念,了解常見的惡意代碼類型如病毒、蠕蟲、勒索軟件,理解其原理及其特點。了解經(jīng)典工控惡意代碼如Stuxnet、Flame等,理解其攻擊原理,了解工控惡意代碼相關的攻擊事件。了解ICS殺傷鏈和ATT&CK工控框架,從攻擊的角度分析入侵過程。7.1 惡意代碼入門7.2 案例1-Stuxnet分析7.3 案例2-Havex分析7.4 案例3-BlackEnergy分析7.5 案例4-Flame分析7.6 工控網(wǎng)絡攻擊防護7.7本章小結和習題目

錄CONTENT717.1惡意代碼入門737.1 惡意代碼入門惡意代碼可以說是計算機系統(tǒng)與其用戶們的噩夢,從計算機廣泛應用到我們生活中以來,惡意代碼就不斷威脅著計算機系統(tǒng)的安全,相信讀者對熊貓燒香和WannaCry這兩款惡意代碼并不陌生。不幸的是,惡意代碼的威脅同樣適用于工控系統(tǒng),原因是顯而易見的,工控系統(tǒng)依托于計算機完成對生產(chǎn)過程的控制與管理,當工控系統(tǒng)逐漸與互聯(lián)網(wǎng)結合,惡意代碼便有機可乘。747.1惡意代碼入門惡意代碼是指那些有意制作并傳播的有害計算機程序,其通常被用于實現(xiàn)竊取、破環(huán)或監(jiān)控計算機信息,根據(jù)其特點可劃分為多種類型,如病毒、木馬、蠕蟲、勒索軟件等。破壞數(shù)據(jù)和系統(tǒng)盜取敏感信息消耗資源傳播自身控制計算機惡意代碼入侵的危害75起初,Rootkit是為UNIX操作系統(tǒng)設計的一套工具。7.1.1 Rootkit隨后,被黑客用于掩蓋其入侵行為,它能在操作系統(tǒng)中隱藏惡意程序。Rootkit通常需要先獲得系統(tǒng)的root或者admin權限,黑客通過系統(tǒng)的漏洞提權后釋放惡意程序如木馬,后門等,在侵入系統(tǒng)之后,Rootkit能夠將這些程序藏匿起來,有效地隱藏自身或特定文件、進程以及網(wǎng)絡連接等。76Rootkits主要分為兩大類:一類是進程注入式Rootkit,另一類是驅動級Rootkit技術。7.1.1 Rootkit進程注入式Rootkits:通過部署DLL文件,并將這些文件注入到可執(zhí)行程序以及系統(tǒng)服務進程中來實現(xiàn)運行。這種技術有效地阻斷了操作系統(tǒng)和應用程序對受感染文件的訪問,從而使得Rootkit能夠在系統(tǒng)中隱蔽地執(zhí)行惡意活動。驅動級Rootkit技術:在系統(tǒng)啟動時通過加載驅動程序的方式裝入操作系統(tǒng),以獲取合法的操作系統(tǒng)控制權。這種Rootkit技術允許黑客直接與操作系統(tǒng)內核進行交互,從而實現(xiàn)對系統(tǒng)的深層控制和操縱,使其更難被檢測和清除。771987年第一款病毒C-BRAIN誕生。該病毒由一對來自巴基斯坦的兄弟編寫,他們經(jīng)營著一家電腦銷售商店。由于當?shù)仄毡榇嬖诘能浖I版問題,他們的軟件也經(jīng)常遭到非法復制。為了對抗盜版,兄弟倆創(chuàng)造了C-BRAIN病毒。一旦有人試圖復制他們的軟件,該病毒便會消耗掉復制者硬盤上剩余的所有空間。7.1.2 病毒病毒是一種能夠進行自我復制的依附型惡意代碼,它將自己或自己的變種附加到其他正常程序中,病毒可以不斷的自我復制感染計算機系統(tǒng)中的文件以實現(xiàn)對計算機系統(tǒng)的攻擊。一般情況下,病毒需要宿主程序被執(zhí)行或人為交互才能運行。787.1.3 廣告軟件與間諜軟件廣告軟件是一種通過在計算機播放廣告的方式進行盈利的惡意代碼,往往是在用戶安裝免費軟件時捆綁下載的,某些廣告軟件甚至還會通過獲取個人信息和跟蹤用戶行為來定向為廣告商提供用戶。間諜軟件則更加隱秘,其主要目的為獲取用戶的隱私信息,攻擊者可以通過惡意軟件監(jiān)視和記錄用戶的在線行為和個人信息、鍵盤的輸入、計算機系統(tǒng)信息等,此類信息很可能被不法分子用于實施各種惡意活動。797.1.4 蠕蟲相比于病毒來說,蠕蟲是一種能夠自我復制的獨立型惡意代碼,能夠獨立于主機中的其他程序進行自我復制。它能夠獨立運行,無需附著于任何應用程序。蠕蟲利用系統(tǒng)漏洞和不安全的配置進行攻擊和擴散。其傳播方式通常有兩種,計算機網(wǎng)絡與U盤等可移動介質。蠕蟲幾乎總會對網(wǎng)絡造成一定傷害,即使只是消耗網(wǎng)絡帶寬,蠕蟲側重于網(wǎng)絡中的自我復制和傳播能力,而病毒側重于破壞計算機系統(tǒng)和程序的能力。通過網(wǎng)絡,蠕蟲的傳播速度更快,影響更加深遠。807.1.5 木馬木馬最大的特點是它會將自己偽裝成正常的程序以欺騙用戶安裝執(zhí)行,所以木馬的隱蔽性很強,用戶往往不能及時發(fā)現(xiàn)。木馬成功植入計算機后,就可以攻擊計算機系統(tǒng),木馬可以完成對計算機系統(tǒng)的破壞、消耗資源、竊取信息和監(jiān)控等惡意行為。木馬往往可以實現(xiàn)對計算機的遠程控制,攻擊者可以像操作自己的電腦一樣操作你的計算機。817.1.6 勒索軟件勒索軟件,顧名思義是一種會對計算機用戶進行實施勒索的惡意代碼。該類惡意代碼會限制計算機用戶對感染勒索軟件的計算機資源的訪問。限制的方法有騷擾、恐嚇和加密用戶文件等,計算機資源涵蓋了文檔、郵件、數(shù)據(jù)庫、源代碼、圖像、壓縮包等多種類型。勒索軟件會以此為由向用戶索要贖金,用戶往往只能通過交付贖金的方式重新獲得計算機資源的使用權。827.1.7 惡意代碼感染途徑惡意代碼想要實現(xiàn)其攻擊目的,首先要做的就是通過某種途徑進入目標環(huán)境。所以說了解惡意代碼的感染途徑對于制定防范策略以保護工控系統(tǒng)安全非常重要。12345利用漏洞移動存儲設備網(wǎng)頁掛馬水坑攻擊網(wǎng)絡釣魚和魚叉式網(wǎng)絡釣魚7.2案例1-Stuxnet分析84Stuxnet被公認為是世界上第一個實現(xiàn)了真實物理打擊的網(wǎng)絡武器,其向全世界證明了網(wǎng)絡空間武器能夠在軍事行動中發(fā)揮重要作用,也有人將Stuxnet被發(fā)現(xiàn)的2010年稱為工控安全的“元年”。2010年6月Stuxnet被首次發(fā)現(xiàn),到2010年9月為止,該病毒已經(jīng)侵入了超過45000個網(wǎng)絡。在受影響的網(wǎng)絡中,60%位于伊朗,印度和印度尼西亞緊隨其后(約占30%),而美國和巴基斯坦的感染數(shù)量相對較少。7.2 案例1-Stuxnet分析有趣的是雖然Stuxnet感染了如此多的計算機,但其并未破壞這些計算機或者干擾計算機的正常使用,它們并不是Stuxnet的目標。目前廣泛認同的觀點是,伊朗納坦茲的鈾濃縮設施內的離心機是Stuxnet病毒的實際攻擊對象。據(jù)相關資料顯示,Stuxnet可能已經(jīng)對伊朗核設施內的1000臺離心機造成了破壞,至少將伊朗的核計劃拖后了兩年。857.2 案例1-Stuxnet分析Stuxnet使用的漏洞Stuxnet的傳播方式Stuxnet的目的Stuxnet的隱藏手段Stuxnet的攻擊手段867.2.1 Stuxnet使用到的漏洞Stuxnet共使用了5個Windows系統(tǒng)漏洞(4個為0day漏洞),2個西門子WinCC系統(tǒng)漏洞。0day漏洞的價值非常高,Stuxnet中使用數(shù)量無疑是讓人震驚的,這很難不讓人懷疑其幕后主使的背景。12345RPC遠程執(zhí)行漏洞(MS08-067)快捷方式文件解析漏洞(MS10-046)內核模式驅動程序權限提升漏洞(MS10-073)任務計劃程序權限提升漏洞(MS10-092)打印機后臺程序服務漏洞(MS10-061)87RPC遠程執(zhí)行漏洞(MS08-067)快捷方式文件解析漏洞(MS10-046)7.2.1 Stuxnet使用到的漏洞MS08-067漏洞全稱是“WindowsServer服務RPC請求緩沖區(qū)溢出漏洞”,通過目標主機默認啟用的SMB服務端口445,發(fā)送特制的RPC(RemoteProcedureCall)請求,導致棧緩沖區(qū)溢出,并借此執(zhí)行遠程代碼。在解析快捷方式文件的過程中,Windows操作系統(tǒng)存在系統(tǒng)機制上的漏洞。攻擊者可以通過這個漏洞,誘導受害主機加載特定的DLL文件,進而實施攻擊。當Windows系統(tǒng)展示快捷方式文件時,它會依據(jù)文件內的數(shù)據(jù)尋找相應的圖標資源。如果這些圖標資源位于一個DLL文件中,系統(tǒng)便會自動加載該DLL。這一機制被攻擊者利用,他們可以設計特定的快捷方式文件,利用系統(tǒng)的自動加載功能,引導系統(tǒng)加載包含惡意代碼的指定DLL文件。打印機后臺程序服務漏洞(MS10-061)在Windows打印后臺程序中存在權限訪問限制不足的安全問題,這可能使得攻擊者能夠利用特殊的打印請求在系統(tǒng)目錄中創(chuàng)建文件。攻擊者甚至可以指定任意文件名,包括目錄遍歷,利用發(fā)送WritePrinter請求來完全控制所創(chuàng)建文件的內容。倘若攻擊者成功地利用該漏洞,他們可能得以使用系統(tǒng)權限來執(zhí)行任意的代碼,這對系統(tǒng)的安全構成嚴重威脅。88任務計劃程序權限提升漏洞(MS10-092)7.2.1 Stuxnet使用到的漏洞其中除了MS08-067均為0day漏洞,利用WinCC系統(tǒng)漏洞如下:WinCC系統(tǒng)硬編碼漏洞:攻擊者可利用默認的用戶名和密碼嘗試連接后臺數(shù)據(jù)庫。Step7工程文件加載DLL文件時的缺陷:攻擊者可以替換掉Step7原本的DLL文件使系統(tǒng)加載其特意構造的DLL文件完成攻擊行為。Stuxnet病毒樣本典型的運作流程897.2.2 Stuxnet的傳播方式之前講過工控系統(tǒng)的生產(chǎn)網(wǎng)絡與外部網(wǎng)絡是物理隔離的,這樣就徹底斷絕了病毒通過互聯(lián)網(wǎng)進入工廠的可能。那么Stuxnet是如何進入到納坦茲的鈾濃縮工廠內的呢?90Stuxnet的感染思路為先感染外部網(wǎng)絡中的主機再感染U盤,然后通過U盤利用MS10-046將病毒傳播到內部網(wǎng)絡中的主機。內部網(wǎng)絡中的橫向擴散則是通過MS08-067和MS10-061完成,并且當因權限不夠導致無法使用這兩個漏洞時,還會通過MS10-073和MS10-092進行權限提升。最終Stuxnet將會抵達目標主機完成一系列的攻擊行為。并且Stuxnet還可以檢測主機之前是否被Stuxnet感染過,若主機的病毒版本為舊版本,會清除掉舊版本并用新版本替換。7.2.2 Stuxnet的傳播方式Stuxnet傳播方式917.2.3 Stuxnet的目的Stuxnet的目的性很強,只會在WindowsNT系列操作系統(tǒng)中運行,Stuxnet在一開始就會識別被感染主機的操作系統(tǒng)類型,當發(fā)現(xiàn)自己運行在非WindowsNT系列操作系統(tǒng)中時,會選擇退出。該病毒僅針對安裝了西門子Step7和WinCC這兩個專有軟件的計算機系統(tǒng)感興趣,并通過檢查以下兩個注冊表鍵來確定目標主機是否安裝了這些軟件:HKLM\SOFTWARE\SIEMENS\WinCC\SetupHKLM\SOFTWARE\SIEMENS\STEP7若感染的主機沒有安裝,那它將什么也不做。并且軟件所對應的PLC型號還必須是S7-315或S7-417,只有當滿足以上條件時,Stuxnet才會將自己的載荷解密并釋放。甚至Stuxnet最后的物理攻擊還需要PLC所控制的變頻器為特定型號才能達成。這強有力地說明了攻擊者創(chuàng)造Stuxnet的目的就是通過破壞離心機從而阻止或延緩伊朗核計劃。927.2.4 Stuxnet的隱藏手段惡意代碼進入系統(tǒng)后需要想方設法將自己隱藏起來,Stuxnet在當時使用的隱蔽手段是一流的。反病毒人員不禁驚嘆道“從沒見過這么專業(yè)的壞蛋”。937.2.4 Stuxnet的隱藏手段在分析Stuxnet時,反病毒人員發(fā)現(xiàn)被注入到計算機的兩個驅動程序(mrxcls.sys和mrxnet.sys)在沒有彈窗提示的情況下完成安裝。經(jīng)研究發(fā)現(xiàn)Stuxnet先后使用了瑞昱半導體系統(tǒng)公司和智微科技公司的合法數(shù)字簽名,這兩家公司都位于臺灣。安全專家認為很有可能是攻擊者盜取了這兩家公司的證書后對文件進行數(shù)字簽名從而實現(xiàn)了對系統(tǒng)的欺騙。Stuxnet還使用了Rootkit技術來隱藏自身,驅動文件中的mrxnet.sys就扮演著內核級Rootkit的角色。mrxnet.sys通過對一些內核調用的修改,實現(xiàn)了對被復制至U盤上的lnk文件和DLL文件的隱藏。Stuxnet為了躲開反病毒引擎的探測將惡意代碼直接調入內存,當然一般的病毒也是這樣做的,Stuxnet的高明之處在于它獨特的代碼調用方式。947.2.4 Stuxnet的隱藏手段惡意代碼在執(zhí)行時需要加載其他文件中的附加代碼,這易引起反病毒軟件的警覺。然而,Stuxnet將所有必要的代碼打包到一個具有奇特名稱的虛擬文件中,這種做法在常規(guī)情況下是不可行的,因為操作系統(tǒng)在調用代碼時根本無法識別這些異常的文件名。但Stuxnet通過重寫Windows系統(tǒng)的部分API,將奇怪文件與Stuxnet代碼聯(lián)系起來,每當系統(tǒng)訪問奇怪文件時就會將Stuxnet的全部代碼調入內存。Stuxnet還會判斷計算機上的環(huán)境是否適合釋放病毒載荷它會跟蹤自身在計算機上占用的處理器資源情況只有在確定Stuxnet所占用資源不會拖慢計算機速度時才會將其釋放,以免被發(fā)現(xiàn)。957.2.5 Stuxnet的攻擊手段Stuxnet成功進入內部網(wǎng)絡感染了安裝有WinCC和Step7軟件的工控上位機,那么是怎樣實現(xiàn)對離心機的物理破壞呢?967.2.5 Stuxnet的攻擊手段Stuxnet會先確認PLC所控制的是否是芬蘭偉肯公司或伊朗法拉羅巴耶利公司生產(chǎn)的變頻器,這種變頻器運行頻率在807hz到1210hz之間。正式的攻擊開始首先Stuxnet會在PLC上潛伏13天,這期間其會記錄正常運行時的相關數(shù)據(jù)。攻擊者準備的假冒DLL文件具有被替換文件的全部功能,經(jīng)分析該DLL文件是一個后門,該后門通過劫持讀函數(shù)將對攻擊PLC的代碼隱藏起來。Step7是用來為其S7系列PLC編寫、編譯指令和代碼用的工具軟件。Stuxnet利用Step7在加載DLL文件時存在的漏洞,對系統(tǒng)核心文件s7otbxdx.dll實施了替換,將其更名為s7otbxsx.dll。此時Stuxnet已經(jīng)到達了PLC并且準備開始它的破壞行為,經(jīng)反病毒專家分析,Stuxnet的載荷分為兩部分,分別針對S7-315和S7-417。當惡意代碼運行時,就將記錄的正常數(shù)據(jù)發(fā)送給負責監(jiān)控的WinCC組態(tài)軟件,通過中間人攻擊的方式實現(xiàn)了對WinCC過程監(jiān)控系統(tǒng)的欺騙,當工程師檢查運行狀態(tài)時,不會察覺出異常。977.2.5 Stuxnet的攻擊手段隨后,它將轉速降至2hz并保持50分鐘,之后再次回升到1064hz。再過26天,這一攻擊過程將重新上演。接著降低到正常工作頻率1064hz,并保持該頻率26天。Step7是用來為其S7系列PLC編寫、編譯指令和代碼用的工具軟件。在13天的潛伏后,Stuxnet操縱變頻器將離心機的轉速提高到1410hz,并維持此頻率15分鐘在這26天期間,Stuxnet搜集與離心機正常運行相關的數(shù)據(jù)。這樣的攻擊會大大降低離心機的壽命和濃縮鈾的產(chǎn)量。56787.3案例2-Havex分析997.3.1 Havex的背景①②③④Havex于2013年被發(fā)現(xiàn),其是一種在不同行業(yè)和環(huán)境中廣泛使用的惡意代碼。Havex最初的主要構成為通用的遠程木馬(RemoteAccessTrojan,RAT)和用PHP編寫的服務器程序,該木馬針對多種目標都能奏效。該惡意代碼因其服務器的代碼中出現(xiàn)了“Havex”字樣而得名。自2014年起,Havex開始對工控系統(tǒng)展現(xiàn)出特別的興趣,被背后的組織改造成一種新型針對工控系統(tǒng)的遠程攻擊木馬。它通過感染SCADA和工控系統(tǒng)中使用的工業(yè)控制軟件來達到攻擊目的。Stuxnet的攻擊主要針對歐洲眾多使用和制造工業(yè)軟件及機械設備的公司,對水力發(fā)電、核能發(fā)電、能源等多個領域產(chǎn)生了負面影響。這種惡意木馬可能導致水電站大壩的停運,核電站的過載,甚至能夠通過簡單敲擊鍵盤來關閉整個國家的電力供應網(wǎng)絡。Havex相較于之前針對工控系統(tǒng)的惡意代碼的特點是它是第一個公開已知能夠利用工控協(xié)議實現(xiàn)主動掃描的惡意代碼。攻擊者通過OPC協(xié)議來搜集網(wǎng)絡及連接設備的數(shù)據(jù),并將這些數(shù)據(jù)發(fā)送至遠程命令與控制(C&C)服務器。1007.3.1 Havex的背景2014年,安全廠商F-Secure針對Havex進行了深入調查,對其88個變種進行了詳盡分析。分析著重關注Havex的訪問目標、數(shù)據(jù)采集來源以及其在網(wǎng)絡和機器上的活動。調查結果揭示,Havex使用高達146個C&C服務器進行通信,而且發(fā)現(xiàn)有超過1500個IP地址與這些C&C服務器有通訊記錄。Havex攻擊原理1017.3.2 Havex的傳播方式傳播方式通過社會工程方法向相關人員發(fā)送包含惡意代碼的釣魚郵件,誘導工程人員點擊惡意鏈接或惡意附件。網(wǎng)絡釣魚篡改廠商軟件包攻擊相關廠商的網(wǎng)絡站點,將惡意程序注入到合法的應用安裝程序中。漏洞利用工具這種攻擊方式最為直接,利用系統(tǒng)存在的漏洞直接將惡意代碼植入系統(tǒng),但這種方式只適用于某些防護能力相當差的計算機系統(tǒng)。1021非法組織針對OPC制造商的官方站點發(fā)動攻擊,將包含Havex木馬文件的軟件包植入供用戶下載的軟件中。2用戶在安裝了這些被篡改的軟件包后,Havex木馬便被植入到他們的OPC客戶端系統(tǒng)中。3Havex利用OPC協(xié)議發(fā)送非法的數(shù)據(jù)收集命令。4567.3.2 Havex的傳播方式前兩種方式是相對傳統(tǒng)的木馬傳播方式,這里以第三種方式篡改廠商軟件包舉例來看Havex的攻擊流程及原理Havex從OPC服務器上竊取了關鍵的工業(yè)控制、生產(chǎn)和安全監(jiān)控數(shù)據(jù)。Havex將這些信息發(fā)送到被非法組織控制的特定網(wǎng)站,暗中進行數(shù)據(jù)傳輸活動。這些被控制的網(wǎng)站將加密后的數(shù)據(jù)回傳給非法組織。7.4案例3-BlackEnergy分析1047.4.1 BlackEnergy的背景BlackEnergy是一種具有嚴重破壞性的網(wǎng)絡攻擊工具,在2007年,由俄羅斯的一個地下黑客團體所創(chuàng)造。最初,該工具主要被用于構建僵尸網(wǎng)絡,并對特定目標執(zhí)行分布式拒絕服務(DDoS)攻擊。隨著時間推移,BlackEnergy的攻擊焦點逐漸轉向了政治實體。在2008年俄羅斯與格魯吉亞的沖突期間,該工具被用來對格魯吉亞政府實施攻擊,這一行動引起了國際社會的廣泛注意。1057.4.1 BlackEnergy的背景BlackEnergy配備了一套完整的生成器,能夠生成感染目標主機的客戶端程序,并在命令與控制(C&C)服務器上編寫命令生成腳本。攻擊者可以輕松地構建僵尸網(wǎng)絡,并通過C&C服務器發(fā)布指令,操控受害主機執(zhí)行特定操作,從而對網(wǎng)絡安全構成嚴重威脅。BlackEnergy1的生成器界面106攻擊者首先獲取目標用戶的電子郵箱地址,然后向其發(fā)送包含惡意附件的垃圾郵件。BlackEnergy工作原理圖7.4.2 BlackEnergy的工作原理若用戶缺乏網(wǎng)絡安全知識,打開攜帶宏病毒的Office文檔(或利用Office漏洞的文檔),惡意安裝程序(Installer)便會啟動。該程序會釋放并加載Rootkit內核級驅動。Rootkit通過APC線程將main.dll注入到系統(tǒng)關鍵進程svchost.exe中,main.dll隨后會打開本地網(wǎng)絡端口,并通過HTTPS協(xié)議主動與外部網(wǎng)絡中的主控服務器建立連接。一旦連接建立,黑客就能夠遠程下發(fā)指令,將其他工具或插件下載到受害主機上。107四、案例3-BlackEnergy分析BlackEnergy攻擊案例分析攻擊者針對電力部門的工作人員發(fā)送一些看似正常的電子郵件,但其中攜帶了一些帶有惡意代碼的XLS文件。當工作人員打開這些文件時,惡意代碼便得以執(zhí)行。當XLS文件被用戶打開時,惡意代碼便會下載并安裝BlackEnergy惡意軟件至目標計算機。BlackEnergy會部署一個名為killdisk的惡意組件。killdisk組件的功能是損壞系統(tǒng)上所有硬盤的數(shù)據(jù),它會逐一訪問所有硬盤設備,并將它們的數(shù)據(jù)全部覆蓋為零。2015年12月烏克蘭電網(wǎng)遭受攻擊事件中,攻擊者通過控制SCADA系統(tǒng)并發(fā)出斷電指令,導致了烏克蘭部分地區(qū)長達六小時的大面積停電,約23萬用戶受到影響。據(jù)了解,這次攻擊事件是通過魚叉攻擊實現(xiàn)的。此外,killdisk插件還能夠結束特定的進程并刪除關鍵的服務,導致系統(tǒng)無法正常運行。最終,攻擊者通過執(zhí)行shutdown關機命令使系統(tǒng)無法重新啟動,導致電力系統(tǒng)無法恢復正常運行。7.5案例4-Flame分析1097.5.1 Flame的主要特點Flame(Worm.Win32.Flame)于2012年5月被俄羅斯安全公司卡巴斯基發(fā)現(xiàn),彼時國際電信聯(lián)盟等官方組織以及卡巴斯基等知名安全公司均將Flame評定為最為復雜、危險且致命的病毒之一。Flame既是一種后門程序,也是一種木馬,具備迅速傳播的能力。當幕后攻擊者發(fā)出相應指令時,F(xiàn)lame能夠在網(wǎng)絡和移動設備之間進行自我復制和擴散。Flame病毒部分代碼1107.5.1 Flame的主要特點系統(tǒng)一旦遭受Flame感染,它便能夠執(zhí)行網(wǎng)絡流量監(jiān)控、屏幕捕獲、音頻對話錄音以及鍵盤輸入記錄等操作。Flame能夠將感染系統(tǒng)的所有數(shù)據(jù)傳輸至攻擊者指定的服務器,從而使得攻擊者完全掌握系統(tǒng)數(shù)據(jù)。并且一旦完成信息的收集任務,F(xiàn)lame還能夠自動銷毀隱藏痕跡。Flame主要有兩種傳播方式:Stuxnet病毒使用過的快捷方式漏洞(MS10-046),通過USB等移動存儲設備感染系統(tǒng);另常見的通過惡意鏈接和釣魚郵件的方式1117.5.2 Flame的攻擊目標Flame病毒主要的攻擊目標為中東地區(qū),被發(fā)現(xiàn)時其已感染了大量中東地區(qū)的計算機系統(tǒng),其中伊朗、以色列等國家受病毒的影響最嚴重。雖然Flame病毒在2012年才被發(fā)現(xiàn),但很多專家認為其已經(jīng)在中東地區(qū)潛伏了很長的時間,網(wǎng)絡安全專家普遍認為該病毒的主要目的為獲取伊朗石油部門的商業(yè)情報。Flame病毒可視作一個由20個模塊構成的惡意工具集合,這些模塊集成在一個約20MB的模塊包中,每個模塊各自承擔著獨特的攻擊職能。此外,F(xiàn)lame病毒采用了5種不同的加密技術、3種壓縮方法以及至少5種文件格式。它還能將感染的系統(tǒng)信息以高度結構化的形式存儲在本地SQLite數(shù)據(jù)庫中。7.6工控網(wǎng)絡攻擊防護1137.6.1 ICS殺傷鏈美國航空航天制造商洛克希德·馬丁公司的分析師在2011年提出了網(wǎng)絡殺傷鏈模型(CyberKillChain)的概念。網(wǎng)絡殺傷鏈將黑客入侵網(wǎng)絡系統(tǒng)的整個過程分解成多個階段,每個階段環(huán)環(huán)相扣,所以稱之為“鏈”。網(wǎng)絡殺傷鏈的重要性在于,它使我們能夠依據(jù)該模型來洞察攻擊者的行動,進而協(xié)助決策者更有效地監(jiān)控和響應網(wǎng)絡攻擊。這一模型源自軍事領域的殺傷鏈理念,經(jīng)過改編后,在IT和企業(yè)網(wǎng)絡防御領域取得了巨大成功并廣受歡迎。1147.6.1 ICS殺傷鏈①偵察:收集目標相關信息,制定攻擊策略。②武器化:利用安全漏洞開發(fā)相應的惡意程序。③投送:通過各種方法將武器散播出去。④漏洞利用:通過漏洞獲取相關權限。⑤安裝:在目標系統(tǒng)安裝相應后門或遠程訪問木馬。⑥命令與控制:對目標進行持久化控制。⑦行動:任務執(zhí)行如竊取數(shù)據(jù)、破壞系統(tǒng)等。網(wǎng)絡殺傷鏈包括以下7個階段:1157.6.1 ICS殺傷鏈2015年10月,SANS研究所發(fā)布由MichaelJ.Assante和RobertM.Lee撰寫的報告《工控系統(tǒng)殺傷鏈》。本報告闡述了攻擊者針對工業(yè)控制系統(tǒng)(ICS)的攻擊步驟,報告將ICS殺傷鏈劃分為兩個主要階段,并利用Havex和Stuxnet案例來具體闡釋ICS殺傷鏈在實踐中的應用。1167.6.1 ICS殺傷鏈ICS殺傷鏈第一階段類似于常規(guī)的網(wǎng)絡殺傷鏈,包括計劃階段、準備階段、入侵階段、管理和控制階段、維持、鞏固、發(fā)展、執(zhí)行階段五個小階段ICS殺傷鏈第一階段1177.6.1 ICS殺傷鏈ICS殺傷鏈第一階段類似于常規(guī)的網(wǎng)絡殺傷鏈,包括計劃階段、準備階段、入侵階段、管理和控制階段、維持、鞏固、發(fā)展、執(zhí)行階段五個小階段網(wǎng)絡入侵,是攻擊者為了獲得對目標網(wǎng)絡或系統(tǒng)的訪問控制權,而進行的成功或不成功的任何嘗試行為。這一過程涵蓋了攻擊載荷的傳遞,這需要攻擊者采用特定的手段與目標網(wǎng)絡進行交互。利用之前部署的功能組件,或者通過盜用注入VPN等可信通信渠道,來對目標網(wǎng)絡執(zhí)行管理與控制操作。準備階段包括武器化或目標定位。武器化過程涉及對某個原本無害的文件,如一個文檔進行修改,以便在攻擊的后續(xù)階段中加以利用。計劃是第一階段的第1步,主要是對目標進行偵察,通過觀察或其他檢測方法獲取有關信息的活動。1234準備階段計劃階段網(wǎng)絡入侵階段管理和控制階段在此階段,攻擊者通常會進行一系列活動,如探尋新的系統(tǒng)或數(shù)據(jù)、在網(wǎng)絡內部進行橫向移動、部署并執(zhí)行額外功能、激活附加功能、截取傳輸中的通信數(shù)據(jù)、搜集信息、向攻擊者發(fā)送數(shù)據(jù)以及采用反取證技術來消除活動痕跡,以避免被偵測。5維持、鞏固、發(fā)展、執(zhí)行階段1187.6.1 ICS殺傷鏈第二階段旨在完成最終的攻擊目標,如Stuxnet對離心機的破壞、或者是違規(guī)操控機器臂、干擾電梯的正常運行、刪除有價值的生產(chǎn)數(shù)據(jù)等任何攻擊者想做的事情。ICS殺傷鏈第二階段1197.6.1 ICS殺傷鏈第二階段旨在完成最終的攻擊目標,如Stuxnet對離心機的破壞、或者是違規(guī)操控機器臂、干擾電梯的正常運行、刪除有價值的生產(chǎn)數(shù)據(jù)等任何攻擊者想做的事情。最終階段是對工業(yè)控制系統(tǒng)的直接攻擊,攻擊者將部署其開發(fā)的攻擊工具,對現(xiàn)有系統(tǒng)功能進行安裝或修改,并隨后執(zhí)行攻擊操作。攻擊者在成功開發(fā)出攻擊工具之后,便會進入驗證階段。在這一環(huán)節(jié)中,攻擊者會在配置相似或相同的系統(tǒng)上對他們的攻擊工具進行測試,以確保該工具能夠對目標系統(tǒng)造成有意義的的影響。在攻擊的第二階段,即開發(fā)和調整階段,攻擊者需開發(fā)出一項新工具。此工具專門設計用以對特定的目標工業(yè)控制系統(tǒng)(ICS)造成影響。123驗證階段攻擊開發(fā)和調整階段工控系統(tǒng)攻擊階段1207.6.2 ATT&CK工控框架MITRE是一個由美國政府資助的研究機構,它在1958年脫離MIT,并且參與了包括美國軍方的威脅建模項目在內的許多商業(yè)和最高機密項目。2013年,MITRE推出了ATT&CK模型,該模型根據(jù)實際觀測數(shù)據(jù)對對抗行為進行描述和分類。相較于網(wǎng)絡殺傷鏈模型,由MITRE公司發(fā)布的ATT&CK模型強調攻擊過程中所使用到的相關技術。ATT&CK(AdversarialTactics,Techniques,andCommonKnowledge)采用軍事戰(zhàn)爭中的TTPs(Tactics,Techniques&Procedures)方法論,重新編排的網(wǎng)絡安全知識體系,目的是建立一套網(wǎng)絡安全的通用語言。近年來,隨著網(wǎng)絡安全的重要地位逐漸顯現(xiàn),ATT&CK框架在安全行業(yè)中廣為人知。1217.6.2 ATT&CK工控框架簡單來說,ATT&CK這個框架,就是在網(wǎng)絡殺傷鏈的基礎上,提供了更加具體的、更細化的戰(zhàn)術、技術、文檔、工具、描述等等??蚣艿暮诵臑閼?zhàn)術、技術和流程。戰(zhàn)術(Tactics)是指攻擊者的目標和意圖。這些目標包括入侵、持久性訪問、數(shù)據(jù)竊取等。技術(Techniques)是攻擊者實際在攻擊過程中使用的具體方法和手段。每個技術都與相應的戰(zhàn)術相關聯(lián),描述

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論