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