《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 西門子PLC代碼本地/遠(yuǎn)程執(zhí)行攻擊演進(jìn)

西門子PLC代碼本地/遠(yuǎn)程執(zhí)行攻擊演進(jìn)

2021-06-01
來源: 關(guān)鍵基礎(chǔ)設(shè)施安全應(yīng)急響應(yīng)中心
關(guān)鍵詞: 西門子 PLC代碼 漏洞

  工業(yè)網(wǎng)絡(luò)安全公司Claroty研究人員近日發(fā)現(xiàn)了一個嚴(yán)重的漏洞,,未經(jīng)認(rèn)證的遠(yuǎn)程攻擊者可以利用這個漏洞攻擊西門子旗下的可編程邏輯控制器(PLC),。該漏洞被編號為CVE-2020-15782,是一個高危的內(nèi)存保護(hù)繞過漏洞,,允許攻擊者通過網(wǎng)絡(luò)訪問TCP 102端口在受保護(hù)的內(nèi)存區(qū)域中寫,、讀數(shù)據(jù),。這一遠(yuǎn)程可利用漏洞引發(fā)了研究者對西門子控制器安全問題的深入思考。

  工業(yè)巨頭西門子公司表示,,該安全漏洞影響其SIMATIC S7-1200和S7-1500 cpu,,可通過新的漏洞遠(yuǎn)程攻擊其PLC產(chǎn)品。西門子已經(jīng)為一些受影響的設(shè)備發(fā)布了固件更新,,并為尚未發(fā)布補(bǔ)丁的產(chǎn)品提供了變通方案,。

  根據(jù)Claroty公司的說法,該漏洞可繞過通常工程代碼運(yùn)行的沙箱,,直接訪問設(shè)備內(nèi)存,,從而在西門子S7 PLC上獲得本機(jī)代碼執(zhí)行。研究人員展示了攻擊者如何繞過保護(hù)直接將shellcode寫入受保護(hù)的內(nèi)存中,。沙箱逃逸意味著攻擊者可以從PLC的任何地方讀寫,,并可用惡意代碼修補(bǔ)內(nèi)存中現(xiàn)有的VM操作碼,從而對設(shè)備進(jìn)行Root權(quán)限的操作,。重點(diǎn)強(qiáng)調(diào)的是,,利用這一漏洞的攻擊將很難被發(fā)現(xiàn),。

  研究成果的披露是西門子和Claroty公司緊密關(guān)系的結(jié)果,這不僅促進(jìn)了工業(yè)網(wǎng)絡(luò)安全研究團(tuán)隊和供應(yīng)商在漏洞披露方面的合作,,也促進(jìn)了整個工業(yè)生態(tài)系統(tǒng)的安全,。西門子和Claroty之間的密切合作包括技術(shù)細(xì)節(jié)、攻擊技術(shù)和緩解建議的交流,,這些都有助于促成西門子及時發(fā)布更新補(bǔ)丁,。西門子和Claroty希望,鑒于此漏洞的關(guān)鍵性質(zhì),,用戶應(yīng)盡快更新S7-1200,、S7-1500 CPU,以及其他受影響產(chǎn)品,。

 1.png2.png

  一

  漏洞簡介及受影響產(chǎn)品

  1.1漏洞概況

  編號:CVE-2020-15782,,在內(nèi)存緩沖區(qū)范圍內(nèi)對操作的不當(dāng)限制。CVSS v3.1得分:8.1,。在知名漏洞網(wǎng)站vuldb.com上給的基本信息如下,。

3.png

  1.2受影響產(chǎn)品

  受影響的設(shè)備容易受到內(nèi)存保護(hù)繞過而實施特定的操作。對TCP端口102進(jìn)行網(wǎng)絡(luò)訪問的遠(yuǎn)程未經(jīng)身份驗證的攻擊者可能會將任意數(shù)據(jù)和代碼寫入受保護(hù)的內(nèi)存區(qū)域,,或讀取敏感數(shù)據(jù)以發(fā)動進(jìn)一步攻擊,。

  5月28日,西門子發(fā)布了警告SSA-434534,,向用戶通報該漏相關(guān)信息,。西門子還發(fā)布了包括S7-1500、S7-1200的各種產(chǎn)品的更新,,建議用戶更新到最新版本以彌補(bǔ)漏洞,。該公司表示,正在為尚未更新的產(chǎn)品準(zhǔn)備進(jìn)一步更新,。西門子還提供了用戶可用于降低風(fēng)險的具體緩解措施,。

 4.png

  二

  西門子PLC本地代碼執(zhí)行的演進(jìn)

  CVE-2020-15782之所以受到如此關(guān)注,主要是這一漏洞的成功利用,,將有可能將工業(yè)網(wǎng)絡(luò)安全研究者對西門子控制器攻擊研究提高到新層次,,而攻擊者實施成功攻擊的限制則越少越易,原因就是該漏洞的條件太優(yōu)越,。

  在可編程邏輯控制器(PLC)等工業(yè)控制系統(tǒng)上實現(xiàn)本機(jī)代碼執(zhí)行是那些高級水平高能力攻擊者已經(jīng)實現(xiàn)的最終目標(biāo),。因為這些復(fù)雜的系統(tǒng)有許多內(nèi)存保護(hù),攻擊者不僅為了能夠運(yùn)行他們選擇的代碼,,而且還要不被發(fā)現(xiàn),,因此必須要跨越這些保護(hù)措施。

  早期的攻擊嘗試需要對PLC的物理訪問和連接,或者以工程師工作站為目標(biāo)的技術(shù)和通向PLC的其他鏈接,,以獲得那種級別的代碼執(zhí)行,。而此次Claroty公司利用一個新發(fā)現(xiàn)的漏洞,在西門子SIMATIC S7-1200和S7-1500 PLC cpu內(nèi)繞過PLC沙箱,,在內(nèi)存保護(hù)區(qū)域運(yùn)行本機(jī)代碼,進(jìn)一步提升了這種攻擊思路的遠(yuǎn)程可行性,。攻擊者可以利用這個CVE-2020-15782漏洞,,遠(yuǎn)程獲取難以檢測和刪除的讀寫內(nèi)存訪問。

  從攻擊者的角度來看,,PLC漏洞利用的終極目標(biāo)就是在PLC上實現(xiàn)不受限制和不被檢測的代碼執(zhí)行,。這意味著,能夠?qū)⒋a隱藏在PLC內(nèi)部深處,,而不被操作系統(tǒng)或任何診斷軟件檢測到,。

  多年來,鑒于西門子PLC在市場上的領(lǐng)先地位,,已經(jīng)出現(xiàn)了許多在西門子PLC上實現(xiàn)這種能力的嘗試,。

  首先,史上最著名的震網(wǎng)攻擊(Stuxnet),,它在舊的SIMATIC S7-300和S7-400上獲得了用戶級的代碼執(zhí)行,。代碼修改本身是通過操作本地step7項目文件來完成。然后,,Stuxnet能夠通過操縱本地工程站上的WinCC二進(jìn)制文件來隱藏PLC上的代碼更改,。這樣一來,惡意軟件不僅可以偷偷地將自己安裝在PLC上,,而且當(dāng)控制軟件試圖從PLC讀取受感染的內(nèi)存塊時,,還可以保護(hù)自己不受WInCC檢測。當(dāng)然,,通過對其Windows操作系統(tǒng)的Microsoft更新和SSA-110665和SSA-027884中記錄的西門子產(chǎn)品更新的組合,,這個問題早已得到解決。

  第二個經(jīng)典型的PLC攻擊,,是2019年的Rogue7的攻擊(出自論文Rogue7:Rogue Engineering-Station attacks on S7 Simatic PLCs),。《Rogue7》背后的研究人員能夠創(chuàng)建一個流氓工程站,,它可以偽裝成TIA(TIA Portal是一系列無縫集成的自動化解決方案)通往PLC的門戶,,并注入任何有利于攻擊者的信息。通過理解密碼信息是如何交換的,,他們能夠?qū)⒋a隱藏在用戶內(nèi)存中,,而TIA工程站是看不見的。西門子部分解決了此問題,并提供了緩解措施,,詳見SSA-232418,。

  第三個,同在2019年,,德國波鴻魯爾大學(xué)(Ruhr University Bochum)安全研究專家Ali Abbasi和Tobias Scharnowski介紹了他們?nèi)绾瓮ㄟ^物理攻擊SIMATIC 1200來獲得在西門子S7 PLC上的代碼執(zhí)行,。他們使用UART(通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,。它將要傳輸?shù)馁Y料在串行通信與并行通信之間加以轉(zhuǎn)換,。作為把并行輸入信號轉(zhuǎn)成串行輸出信號的芯片,UART通常被集成于其他通訊接口的連結(jié)上,。)物理連接來轉(zhuǎn)儲固件,,并發(fā)現(xiàn)了一個漏洞鏈,使他們能夠?qū)⒋a隱藏在系統(tǒng)中更深的地方,,并獲得不受限制的代碼執(zhí)行,。西門子在SSA-686531中解決了這個問題。

  本次,,claroty研究團(tuán)隊將這項研究向前推進(jìn)了一大步,,他們展示了一種新的復(fù)雜的遠(yuǎn)程攻擊,它允許攻擊者在西門子S7 PLC上獲得本機(jī)代碼執(zhí)行,。攻擊目標(biāo)是內(nèi)核的深處,,并避免了任何檢測,因為能夠逃離用戶沙箱,,并在受保護(hù)的內(nèi)存區(qū)域中編寫shellcode,。CVE-2020-15782漏洞恰恰是促成PLC沙箱逃逸的關(guān)鍵條件。

 5.png

  西門子PLCs本地代碼執(zhí)行攻擊發(fā)展歷程

  三

  PLC沙箱逃逸

  PLC的完整性對操作人員和工程師來說至關(guān)重要,,而攻擊者的目標(biāo)就是通過隱藏于控制器上的代碼和提升權(quán)限來破壞這種完整性,。本次利用的漏洞CVE-2020-15782,繞過了PLC執(zhí)行環(huán)境中的現(xiàn)有保護(hù),,包括工程代碼通常會運(yùn)行的沙箱,。Claroty能夠利用這個漏洞實現(xiàn)沙箱逃逸,以便直接訪問內(nèi)存,,然后編寫并注入shellcode來執(zhí)行其對西門子1200/1500 PLC的攻擊,。

  為了執(zhí)行這種攻擊,需要對PLC進(jìn)行網(wǎng)絡(luò)訪問,。此外,,攻擊者還需要PLC下載權(quán)限。自從TIA Portal V12以來,,西門子提供了各種緩解控制,,以限制用戶網(wǎng)絡(luò)和對PLC的讀寫訪問,,特別是口令保護(hù)機(jī)制。此外,,從V17開始,,西門子引入了在PLC、HMI和TIA Portal之間使用個人證書的TLS通信,,這大大減少了潛在的攻擊面,。

  3.1PLC的通用結(jié)構(gòu)(以S7 PLC為例)

  為了理解Claroty的具體攻擊,首先要概述一個標(biāo)準(zhǔn)PLC的通用結(jié)構(gòu),。它的CPU是一個16或32位微處理器,,由一個內(nèi)存芯片和集成電路組成,管理控制邏輯,、過程監(jiān)控和通信。CPU指導(dǎo)PLC執(zhí)行控制指令,,與其他設(shè)備通信,,執(zhí)行邏輯和算術(shù)操作,并執(zhí)行內(nèi)部診斷,。它還運(yùn)行內(nèi)存例程,,不斷檢查PLC,以避免編程錯誤,,并確保內(nèi)存沒有損壞,。邏輯運(yùn)行在沙盒環(huán)境(有時也被稱為“監(jiān)獄”)中。傳輸?shù)娇刂破鞯倪壿媰H限于供應(yīng)商提供的特定內(nèi)存區(qū)域和API,。

  以西門子S7 PLC為例,,它運(yùn)行在ADONIS內(nèi)核和ARM或MIPS處理器上,有許多編程語言可用于配置控制器,,包括語句列表(STL),、梯形圖(LD)、功能框圖(FBD)和結(jié)構(gòu)化控制語言(SCL),。

  不管何種輸入源,,PLC程序都會編譯成MC7/MC7+字節(jié)碼,這是一種低級別的代碼表示,。經(jīng)工程站編譯后-西門子TIA門戶-代碼塊(MC7/MC7+格式)通過西門子的S7Comm/S7Comm+協(xié)議下載并安裝到PLC中,。然后,PLC中的MC7虛擬機(jī)將對代碼塊進(jìn)行分派,,并對字節(jié)碼進(jìn)行解釋和執(zhí)行,。

6.png

  PLC程序執(zhí)行過程

  如果不具備逆向工程能力,是不可能解碼MC7/MC7+字節(jié)碼的,,因為西門子沒有公開提供這種技術(shù)文檔,。因此,研究才必須用逆向工程分析MC7/MC7+字節(jié)碼語言集,以便理解其內(nèi)部機(jī)制并發(fā)現(xiàn)bug,。

  3.2S7PLC沙箱逃逸

  由于虛擬機(jī)限制了用戶程序訪問的資源,,因此編譯后的字節(jié)碼只能用于訪問操作系統(tǒng)允許的資源,而不能直接用于硬件操作,。這是為了將用戶和運(yùn)行代碼限制在一組被認(rèn)為是安全且已定義的操作中,。例如,操作系統(tǒng)將限制對受保護(hù)內(nèi)存的任何直接訪問,,但會允許使用Siemens提供的標(biāo)準(zhǔn)庫中的任何函數(shù)(例如ADD_I - Add Integer子例程),。換句話說,操作系統(tǒng)將用戶代碼“鎖定”在一個沙盒/容器中,,對資源,、內(nèi)存和功能的訪問是有限的,這可能會破壞PLC和/或整個進(jìn)程,。

  為了逃逸或“越獄”本地SIMATIC S7-1200和S7-1500沙箱,,Claroty利用了其內(nèi)存保護(hù)繞過漏洞。該漏洞使攻擊者能夠?qū)⑷我鈹?shù)據(jù)和代碼寫入所謂的受保護(hù)的內(nèi)存區(qū)域,,或讀取敏感數(shù)據(jù)以發(fā)動進(jìn)一步攻擊,。

  7.png

  利用CVE-2020-15782實現(xiàn)沙箱逃逸

  沙箱逃逸意味著攻擊者可以從PLC上的任何地方讀寫,并可以用惡意代碼修補(bǔ)內(nèi)存中現(xiàn)有的VM操作碼來實現(xiàn)對設(shè)備的ROOT權(quán)限操作,。例如,,Claroty能夠直接將ARM/MIPS shellcode注入到內(nèi)部操作系統(tǒng)結(jié)構(gòu)中,這樣當(dāng)操作系統(tǒng)使用其選擇的特定操作碼時,,惡意shellcode就會執(zhí)行,,從而遠(yuǎn)程執(zhí)行代碼。Claroty使用這種技術(shù)安裝了一個內(nèi)核級程序,,它具有一些對操作系統(tǒng)完全隱藏的功能,。

 

  四、防范建議

  4.14.1 緩解措施

  西門子已經(jīng)確定了以下具體的解決方案和緩解措施,,并強(qiáng)烈建議客戶采用它們來降低風(fēng)險:

  S7通信采用口令保護(hù)

  通過S7-1200或S7-1500CPU的ENDIS_PW指令禁止客戶端連接(這將阻塞遠(yuǎn)程客戶端連接,,即使客戶端可以提供正確的口令)

  使用顯示配置額外的訪問保護(hù)S7-1500 CPU(這將阻止遠(yuǎn)程客戶端連接,即使客戶端可以提供正確的口令)

  應(yīng)用“縱深防御”,,如工業(yè)操作指南第12ff頁所述安全措施,,特別是:

  1.工廠安全:對關(guān)鍵部件的物理防護(hù);

  2.網(wǎng)絡(luò)安全:確保PLC系統(tǒng)沒有連接到不可信的網(wǎng)絡(luò),;

  3.系統(tǒng)完整性:配置,、維護(hù)和保護(hù)設(shè)備應(yīng)用適用的補(bǔ)償飽和控制和使用內(nèi)置的安全能力。

  將整個解決方案更新到TIA Portal V17,,并使用PLC,、HMI和PG/PC之間的個人證書TLS通信

  4.2通用的安全建議

  作為一種通用的安全措施,,西門子強(qiáng)烈建議使用適當(dāng)?shù)谋Wo(hù)機(jī)制對設(shè)備網(wǎng)絡(luò)訪問。為了在受保護(hù)的IT環(huán)境中運(yùn)行設(shè)備,,西門子建議按照西門子工業(yè)安全操作指南進(jìn)行環(huán)境配置(https://www.siemens.com/cert/operational-guidelines-industrial-security),。

  請按照產(chǎn)品手冊中的建議操作。關(guān)于西門子工業(yè)安全的更多信息可以在

  https://www.siemens.com/industrialsecurity上找到,。

  五

  小結(jié)

  CVE-2020-15782漏洞可以繞過通常工程代碼運(yùn)行的沙箱,,直接訪問設(shè)備的內(nèi)存,從而在西門子S7 PLC上獲得本機(jī)代碼執(zhí)行,。Claroty研究人員展示了攻擊者如何繞過保護(hù),,直接將shellcode寫入受保護(hù)的內(nèi)存中。沙箱逃逸意味著攻擊者可以從PLC的任何地方讀寫,,并可以用惡意代碼修補(bǔ)內(nèi)存中現(xiàn)有的VM操作碼,,從而對設(shè)備進(jìn)行Root權(quán)限的操作。需要特別注意的是,,該漏洞如果被攻擊者利用發(fā)起惡意攻擊,,將很難被檢測發(fā)現(xiàn)。該項成果披露是西門子和Claroty公司緊密合作的結(jié)果,,這有利于促進(jìn)工業(yè)網(wǎng)絡(luò)安全行業(yè)和工業(yè)設(shè)備供應(yīng)商在漏洞披露方面的合作,也有利于整個工業(yè)生態(tài)系統(tǒng)的安全,。

 


微信圖片_20210517164139.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]