工業(yè)網(wǎng)絡(luò)安全公司Claroty研究人員近日發(fā)現(xiàn)了一個嚴重的漏洞,未經(jīng)認證的遠程攻擊者可以利用這個漏洞攻擊西門子旗下的可編程邏輯控制器(PLC),。該漏洞被編號為CVE-2020-15782,,是一個高危的內(nèi)存保護繞過漏洞,,允許攻擊者通過網(wǎng)絡(luò)訪問TCP 102端口在受保護的內(nèi)存區(qū)域中寫,、讀數(shù)據(jù),。這一遠程可利用漏洞引發(fā)了研究者對西門子控制器安全問題的深入思考,。
工業(yè)巨頭西門子公司表示,,該安全漏洞影響其SIMATIC S7-1200和S7-1500 cpu,,可通過新的漏洞遠程攻擊其PLC產(chǎn)品,。西門子已經(jīng)為一些受影響的設(shè)備發(fā)布了固件更新,并為尚未發(fā)布補丁的產(chǎn)品提供了變通方案,。
根據(jù)Claroty公司的說法,,該漏洞可繞過通常工程代碼運行的沙箱,直接訪問設(shè)備內(nèi)存,,從而在西門子S7 PLC上獲得本機代碼執(zhí)行,。研究人員展示了攻擊者如何繞過保護直接將shellcode寫入受保護的內(nèi)存中。沙箱逃逸意味著攻擊者可以從PLC的任何地方讀寫,,并可用惡意代碼修補內(nèi)存中現(xiàn)有的VM操作碼,,從而對設(shè)備進行Root權(quán)限的操作。重點強調(diào)的是,,利用這一漏洞的攻擊將很難被發(fā)現(xiàn),。
研究成果的披露是西門子和Claroty公司緊密關(guān)系的結(jié)果,這不僅促進了工業(yè)網(wǎng)絡(luò)安全研究團隊和供應(yīng)商在漏洞披露方面的合作,,也促進了整個工業(yè)生態(tài)系統(tǒng)的安全,。西門子和Claroty之間的密切合作包括技術(shù)細節(jié)、攻擊技術(shù)和緩解建議的交流,,這些都有助于促成西門子及時發(fā)布更新補丁,。西門子和Claroty希望,鑒于此漏洞的關(guān)鍵性質(zhì),,用戶應(yīng)盡快更新S7-1200,、S7-1500 CPU,以及其他受影響產(chǎn)品,。
一
漏洞簡介及受影響產(chǎn)品
1.1漏洞概況
編號:CVE-2020-15782,,在內(nèi)存緩沖區(qū)范圍內(nèi)對操作的不當限制。CVSS v3.1得分:8.1,。在知名漏洞網(wǎng)站vuldb.com上給的基本信息如下,。
1.2受影響產(chǎn)品
受影響的設(shè)備容易受到內(nèi)存保護繞過而實施特定的操作。對TCP端口102進行網(wǎng)絡(luò)訪問的遠程未經(jīng)身份驗證的攻擊者可能會將任意數(shù)據(jù)和代碼寫入受保護的內(nèi)存區(qū)域,,或讀取敏感數(shù)據(jù)以發(fā)動進一步攻擊,。
5月28日,西門子發(fā)布了警告SSA-434534,向用戶通報該漏相關(guān)信息,。西門子還發(fā)布了包括S7-1500,、S7-1200的各種產(chǎn)品的更新,建議用戶更新到最新版本以彌補漏洞,。該公司表示,,正在為尚未更新的產(chǎn)品準備進一步更新。西門子還提供了用戶可用于降低風(fēng)險的具體緩解措施,。
二
西門子PLC本地代碼執(zhí)行的演進
CVE-2020-15782之所以受到如此關(guān)注,,主要是這一漏洞的成功利用,將有可能將工業(yè)網(wǎng)絡(luò)安全研究者對西門子控制器攻擊研究提高到新層次,,而攻擊者實施成功攻擊的限制則越少越易,,原因就是該漏洞的條件太優(yōu)越。
在可編程邏輯控制器(PLC)等工業(yè)控制系統(tǒng)上實現(xiàn)本機代碼執(zhí)行是那些高級水平高能力攻擊者已經(jīng)實現(xiàn)的最終目標,。因為這些復(fù)雜的系統(tǒng)有許多內(nèi)存保護,,攻擊者不僅為了能夠運行他們選擇的代碼,,而且還要不被發(fā)現(xiàn),,因此必須要跨越這些保護措施。
早期的攻擊嘗試需要對PLC的物理訪問和連接,,或者以工程師工作站為目標的技術(shù)和通向PLC的其他鏈接,,以獲得那種級別的代碼執(zhí)行。而此次Claroty公司利用一個新發(fā)現(xiàn)的漏洞,,在西門子SIMATIC S7-1200和S7-1500 PLC cpu內(nèi)繞過PLC沙箱,,在內(nèi)存保護區(qū)域運行本機代碼,進一步提升了這種攻擊思路的遠程可行性,。攻擊者可以利用這個CVE-2020-15782漏洞,,遠程獲取難以檢測和刪除的讀寫內(nèi)存訪問。
從攻擊者的角度來看,,PLC漏洞利用的終極目標就是在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二進制文件來隱藏PLC上的代碼更改,。這樣一來,,惡意軟件不僅可以偷偷地將自己安裝在PLC上,而且當控制軟件試圖從PLC讀取受感染的內(nèi)存塊時,,還可以保護自己不受WInCC檢測,。當然,通過對其Windows操作系統(tǒng)的Microsoft更新和SSA-110665和SSA-027884中記錄的西門子產(chǎn)品更新的組合,,這個問題早已得到解決,。
第二個經(jīng)典型的PLC攻擊,是2019年的Rogue7的攻擊(出自論文Rogue7:Rogue Engineering-Station attacks on S7 Simatic PLCs),?!禦ogue7》背后的研究人員能夠創(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研究團隊將這項研究向前推進了一大步,,他們展示了一種新的復(fù)雜的遠程攻擊,它允許攻擊者在西門子S7 PLC上獲得本機代碼執(zhí)行,。攻擊目標是內(nèi)核的深處,,并避免了任何檢測,,因為能夠逃離用戶沙箱,并在受保護的內(nèi)存區(qū)域中編寫shellcode,。CVE-2020-15782漏洞恰恰是促成PLC沙箱逃逸的關(guān)鍵條件,。
西門子PLCs本地代碼執(zhí)行攻擊發(fā)展歷程
三
PLC沙箱逃逸
PLC的完整性對操作人員和工程師來說至關(guān)重要,而攻擊者的目標就是通過隱藏于控制器上的代碼和提升權(quán)限來破壞這種完整性,。本次利用的漏洞CVE-2020-15782,,繞過了PLC執(zhí)行環(huán)境中的現(xiàn)有保護,包括工程代碼通常會運行的沙箱,。Claroty能夠利用這個漏洞實現(xiàn)沙箱逃逸,,以便直接訪問內(nèi)存,然后編寫并注入shellcode來執(zhí)行其對西門子1200/1500 PLC的攻擊,。
為了執(zhí)行這種攻擊,,需要對PLC進行網(wǎng)絡(luò)訪問。此外,,攻擊者還需要PLC下載權(quán)限,。自從TIA Portal V12以來,西門子提供了各種緩解控制,,以限制用戶網(wǎng)絡(luò)和對PLC的讀寫訪問,,特別是口令保護機制。此外,,從V17開始,,西門子引入了在PLC,、HMI和TIA Portal之間使用個人證書的TLS通信,,這大大減少了潛在的攻擊面。
3.1PLC的通用結(jié)構(gòu)(以S7 PLC為例)
為了理解Claroty的具體攻擊,,首先要概述一個標準PLC的通用結(jié)構(gòu),。它的CPU是一個16或32位微處理器,由一個內(nèi)存芯片和集成電路組成,,管理控制邏輯,、過程監(jiān)控和通信。CPU指導(dǎo)PLC執(zhí)行控制指令,,與其他設(shè)備通信,,執(zhí)行邏輯和算術(shù)操作,并執(zhí)行內(nèi)部診斷,。它還運行內(nèi)存例程,,不斷檢查PLC,以避免編程錯誤,,并確保內(nèi)存沒有損壞,。邏輯運行在沙盒環(huán)境(有時也被稱為“監(jiān)獄”)中。傳輸?shù)娇刂破鞯倪壿媰H限于供應(yīng)商提供的特定內(nèi)存區(qū)域和API。
以西門子S7 PLC為例,,它運行在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虛擬機將對代碼塊進行分派,并對字節(jié)碼進行解釋和執(zhí)行,。
PLC程序執(zhí)行過程
如果不具備逆向工程能力,,是不可能解碼MC7/MC7+字節(jié)碼的,因為西門子沒有公開提供這種技術(shù)文檔,。因此,,研究才必須用逆向工程分析MC7/MC7+字節(jié)碼語言集,以便理解其內(nèi)部機制并發(fā)現(xiàn)bug,。
3.2S7PLC沙箱逃逸
由于虛擬機限制了用戶程序訪問的資源,,因此編譯后的字節(jié)碼只能用于訪問操作系統(tǒng)允許的資源,而不能直接用于硬件操作,。這是為了將用戶和運行代碼限制在一組被認為是安全且已定義的操作中,。例如,操作系統(tǒng)將限制對受保護內(nèi)存的任何直接訪問,,但會允許使用Siemens提供的標準庫中的任何函數(shù)(例如ADD_I - Add Integer子例程),。換句話說,操作系統(tǒng)將用戶代碼“鎖定”在一個沙盒/容器中,,對資源,、內(nèi)存和功能的訪問是有限的,這可能會破壞PLC和/或整個進程,。
為了逃逸或“越獄”本地SIMATIC S7-1200和S7-1500沙箱,,Claroty利用了其內(nèi)存保護繞過漏洞。該漏洞使攻擊者能夠?qū)⑷我鈹?shù)據(jù)和代碼寫入所謂的受保護的內(nèi)存區(qū)域,,或讀取敏感數(shù)據(jù)以發(fā)動進一步攻擊,。
利用CVE-2020-15782實現(xiàn)沙箱逃逸
沙箱逃逸意味著攻擊者可以從PLC上的任何地方讀寫,并可以用惡意代碼修補內(nèi)存中現(xiàn)有的VM操作碼來實現(xiàn)對設(shè)備的ROOT權(quán)限操作,。例如,,Claroty能夠直接將ARM/MIPS shellcode注入到內(nèi)部操作系統(tǒng)結(jié)構(gòu)中,,這樣當操作系統(tǒng)使用其選擇的特定操作碼時,惡意shellcode就會執(zhí)行,,從而遠程執(zhí)行代碼,。Claroty使用這種技術(shù)安裝了一個內(nèi)核級程序,它具有一些對操作系統(tǒng)完全隱藏的功能,。
四,、防范建議
4.14.1 緩解措施
西門子已經(jīng)確定了以下具體的解決方案和緩解措施,并強烈建議客戶采用它們來降低風(fēng)險:
S7通信采用口令保護
通過S7-1200或S7-1500CPU的ENDIS_PW指令禁止客戶端連接(這將阻塞遠程客戶端連接,,即使客戶端可以提供正確的口令)
使用顯示配置額外的訪問保護S7-1500 CPU(這將阻止遠程客戶端連接,,即使客戶端可以提供正確的口令)
應(yīng)用“縱深防御”,如工業(yè)操作指南第12ff頁所述安全措施,,特別是:
1.工廠安全:對關(guān)鍵部件的物理防護,;
2.網(wǎng)絡(luò)安全:確保PLC系統(tǒng)沒有連接到不可信的網(wǎng)絡(luò);
3.系統(tǒng)完整性:配置,、維護和保護設(shè)備應(yīng)用適用的補償飽和控制和使用內(nèi)置的安全能力,。
將整個解決方案更新到TIA Portal V17,并使用PLC,、HMI和PG/PC之間的個人證書TLS通信
4.2通用的安全建議
作為一種通用的安全措施,,西門子強烈建議使用適當?shù)谋Wo機制對設(shè)備網(wǎng)絡(luò)訪問。為了在受保護的IT環(huán)境中運行設(shè)備,,西門子建議按照西門子工業(yè)安全操作指南進行環(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漏洞可以繞過通常工程代碼運行的沙箱,,直接訪問設(shè)備的內(nèi)存,從而在西門子S7 PLC上獲得本機代碼執(zhí)行,。Claroty研究人員展示了攻擊者如何繞過保護,,直接將shellcode寫入受保護的內(nèi)存中,。沙箱逃逸意味著攻擊者可以從PLC的任何地方讀寫,,并可以用惡意代碼修補內(nèi)存中現(xiàn)有的VM操作碼,從而對設(shè)備進行Root權(quán)限的操作,。需要特別注意的是,,該漏洞如果被攻擊者利用發(fā)起惡意攻擊,將很難被檢測發(fā)現(xiàn),。該項成果披露是西門子和Claroty公司緊密合作的結(jié)果,,這有利于促進工業(yè)網(wǎng)絡(luò)安全行業(yè)和工業(yè)設(shè)備供應(yīng)商在漏洞披露方面的合作,也有利于整個工業(yè)生態(tài)系統(tǒng)的安全,。