工業(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)品,。
一
漏洞簡介及受影響產(chǎn)品
1.1漏洞概況
編號:CVE-2020-15782,,在內(nèi)存緩沖區(qū)范圍內(nèi)對操作的不當(dāng)限制。CVSS v3.1得分:8.1,。在知名漏洞網(wǎng)站vuldb.com上給的基本信息如下,。
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)險的具體緩解措施,。
二
西門子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)鍵條件。
西門子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í)行,。
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)一步攻擊,。
利用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)的安全,。