工業“軍刀”出鞘 警惕“軟戰爭”外掛新型ICS攻擊工具攻防解析
第一章 背景
2022年4月13日,美國CISA、DOE、NSA和FBI多個機構發布了一份聯合安全公告,披露了一個專門針對工業控制系統的攻擊工具。Mandiant公司將其命名為“INCONTROLLER”,Dragos公司將其命名為“PIPEDREAM”,下文中會統一使用“INCONTROLLER”。INCONTROLLER可以降低攻擊者對工業知識的依賴,對多個行業的特定工業控制設備進行攻擊,截止目前暫未發現任何組織被攻擊或者感染。但是由于INCONTROLLER具備干擾、破壞或者潛在破壞工業過程的能力,所以還是會對擁有目標設備的工業組織構成嚴重的威脅。
第二章 工具簡介
INCONTROLLER由多個模塊組成,并不利用特定的漏洞,而是使用CodeSys、Modbus和OPC UA等協議的本身功能實現的一個偽造客戶端來連接和攻擊目標設備,本質原因是由于目前工業設備與組態軟件或者SCADA軟件的連接過程沒有做安全的雙向鑒權認證。目前INCONTROLLER包含的攻擊目標有施耐德和歐姆龍PLC產品,以及OPC-UA服務,但是從本質原因來講不排除其他廠商或者產品也會被開發出對應的偽造客戶端,從而存在遭受自動化精密化攻擊的風險。
根據INCONTROLLER利用的功能和PLC設備上的相關配置,攻擊者可以進行如下操作:
- 進行網絡掃描發現目標設備。
- 改變IP地址以與攻擊工具通信或使設備原有鏈接無法到達。
- 發送Modbus協議報文(標準或私有)。
- 自動連接到目標PLC,使用標準的編程協議進行密碼暴力破解。
- 上傳和下載文件(包括但不限于配置、固件、應用、配方等)。
- 執行拒絕服務攻擊,迫使用戶再次驗證,或使設備無法被訪問。
- 對OPC-UA服務器進行讀/寫。
第三章 工具架構
INCONTROLLER攻擊工具組成如圖1及表1所示:

圖1 INCONTROLLER工具架構
表1 INCONTROLLER工具架構

第一節 TAGRUN
TAGRUN具有掃描和枚舉OPC UA服務器的能力,OPC作為工業系統的通信協議,用于從工業環境的資產中采集和存儲數據。通過訪問這些數據可以為攻擊者提供生產系統和控制過程的詳細描述。
TAGRUN具有的功能如下:
- 掃描網絡上的OPC UA服務器。
- 讀取OPC UA服務器的結構。
- 讀取/寫入OPC UA服務器上的數據。
- 暴力破解憑據。
- 輸出日志文件。
第二節 CODECALL
CODECALL使用Modbus協議與ICS設備進行通信,因為大多數ICS設備都支持Modbus,所以這使其能夠與來自不同制造商的設備進行交互。但是,CODECALL同時包含一個特定模塊,這個特定模塊使用CodeSys V3協議與施耐德電氣的Modicon M251/M241 PLC交互,可能發起掃描和攻擊,同時M221/TM258/TM238等PLC模塊也可能被掃描和攻擊。
CODECALL具有的功能如下:
- 識別網絡上的施耐德電氣和支持Modbus的設備。
- 通過Modbus或CodeSys V3協議連接到特定設備。
- 通過Modbus讀/寫設備寄存器。
- 從Modbus的會話中請求設備ID。
- 定義、轉儲或加載宏命令文件。
- 通過CodeSys V3協議執行設備特定的命令,例如:
- 嘗試使用用戶名/密碼登錄,并使用提供的字典文件暴力破解憑據。
- 下載/上傳文件到PLC設備。
- 查找文件/目錄列表。
- 刪除文件。
- 從PLC設備斷開會話。
- 嘗試DDoS攻擊。
- 使用特制數據包使設備崩潰。
- 如果設備網關IP存在于不同的接口上,則添加路由。
- 發送自定義原始數據包。
第三節 OMSHELL
OMSHELL旨在獲取對Omron PLC的shell訪問權限,包括Omron NX1P2、NJ501、R88D-1SN10F-ECT伺服驅動器,以及可能來自NJ/NX產品線的其他類似設備。OMSHELL主要使用HTTP協議實現對應功能,但它也利用Omron專有的FINS協議進行掃描和設備識別。
OMSHELL具有的功能如下:
- 掃描并識別網絡上的歐姆龍設備。
- 擦除設備的程序存儲器并重置設備。
- 從設備加載備份配置和備份數據或將數據恢復到設備。
- 在設備上激活Telnet守護進程。
- 通過Telnet守護程序連接到設備,上傳和執行任意有效負載或命令。
- 連接到設備上的后門并可執行任意命令。
- 捕獲網絡流量。
- 結束設備上運行的任何進程。
- 將文件傳輸到設備。
- 與網絡內的伺服驅動器連接和通信。
第四章 工具的攻擊場景及影響
INCONTROLLER就像一把“多功能瑞士軍刀”,它能夠掃描、破壞和控制工業系統。由于工業系統非常復雜,需要專業知識,INCONTROLLER在很大程度上降低了攻擊者的攻擊難度,其存在很可能讓更多的人參與到對工業系統的攻擊活動中。在工業系統中,采集生產環境中設備的數據并控制設備狀態是工業系統的核心業務。使設備進入非預期狀態、停機狀態或直接損壞,非法控制設備的操作、篡改設備的配置、修改業務流程等行為,均屬于對工業業務的攻擊。根據攻擊目標不同,針對工業業務的攻擊可分為傳感器攻擊、控制器攻擊、上位機攻擊、服務器攻擊四類。由于INCONTROLLER的多功能性,攻擊目標可覆蓋以上四種類型,若一旦被成功用于能源、化工,尤其是燃氣和石油管道設施,后果將不堪設想。
INCONTROLLER中的三個工具可以獨立使用,也可以組合使用。INCONTROLLER還具備另外兩個可用于Windows系統的工具,一個是利用Windows華擎主板驅動漏洞,刪除華擎主板驅動程序來加載帶簽名的惡意驅動程序;另一個是可提供偵察、指揮和控制功能的后門程序。
攻擊場景:
1.擾亂控制器關閉操作
攻擊者利用OMSHELL或CODECALL能使PLC崩潰,破壞其性能或以其他方式影響其可用性。在大型生產企業、流程工業企業,關鍵PLC可用性的喪失會導致停工停產,再次啟動浪費大量原材料,造成財產損失。
在對工業系統的控制器進行安全測試時,利用Syn Flood對控制器Modbus 502端口發起拒絕服務攻擊,發現能直接造成上位機的數據采集中斷,如果在真實場景下影響難以想象。
2.重新編程控制器破壞工業流程
攻擊者重新編程或向PLC發送未經授權的命令,改變現場設備和物理執行器(如電機)的狀態。非預期的PLC命令可能會導致現場設備或物理執行器故障。
2010年發生的“震網”事件是篡改控制器導致物理設備故障的典型案例。主要借助USB擺渡和漏洞的橫向移動,借助高度復雜的惡意代碼和多個零日漏洞作為攻擊武器在網絡中傳播,以鈾離心機為攻擊目標,重新編程控制器,改變離心機轉子的頻率造成離心機批量損壞,延緩了伊朗核項目進程。
3.禁用控制器安全保護功能造成物理破壞
攻擊者可以禁用PLC的安全保護功能,然后重新編程或破壞其他ICS資產。安全保護功能的喪失可能會對人身安全、環境或設備造成影響。
2014年土耳其輸油管道的爆炸,因為黑客關閉了警報、切斷了通信聯系、破壞了安全保護功能,最終因原油大幅增壓導致爆炸。
結合上述可能的攻擊場景和圖2所示的INCONTROLLER攻擊路徑,并映射到具體的行業應用中做出如下研判:

圖2 INCONTROLLER的攻擊路徑
- 考慮到石油化工、冶金、火電、核電等行業流程工藝的特點,中斷運行造成的經濟損失大,可能產生環境污染,發生人員傷亡。
- 交通、電網、水利設施、長輸油氣管線、礦山等行業會分布大量無人、有人值守站,位置分布廣泛,部分公網傳輸和無線傳輸易遭受攻擊,這些行業會影響民生。
- 由于施耐德小型PLC和歐姆龍PLC在我國的機械自動化設備中使用較為廣泛,因此離散制造業遭受攻擊的可能性也較高,攻擊可能會導致工廠停產以及廢品率升高,部分核心工藝、參數泄露,這些會造成經濟損失。
- 對于危險、安全性要求高的工業設施,會有手動、安全儀表或一些備用系統保護,這些保護裝置遭受攻擊可能會發生惡性事故。
第五章 受影響的工業產品
INCONTROLLER影響施耐德電氣MODICON系列PLC、歐姆龍Sysmac NJ和NX PLC,包括(但可能不限于)NX1P2、NX-SL3300、NX-ECC203、NJ501-1300、S8VK和R88D-1SN10F-ECT, 3S公司也針對INCONTROLLER發布了相應的安全通告,提及到了凡是使用CodeSys V3內核的產品均受到影響,如此一來影響到的將不止施耐德一個廠家的PLC,而是成千上百的PLC產品均逃避不了被攻擊的威脅。
第一節 施耐德PLC
INCONTROLLER影響到的施耐德PLC設備如下表2所示:
表2 施耐德受影響的產品

針對施耐德PLC的攻擊端口如表3所列舉:
表3 受影響的施耐德PLC端口及服務

一、Modbus
Modbus是一種串行通信協議,是目前使用最多的工控通信協議之一,通過Modbu協議可以讀取并修改PLC中的變量值,例如操作閥門開關,溫度,壓力等值。由于Modbu協議在設計之初并沒有考慮安全性,缺乏授權機制。INCONTROLLER使用Modbus協議可以無需認證直接連接到PLC中,讀取PLC版本,改寫寄存器值,這會導致PLC控制的代碼邏輯以及輸出發生異常,危害工控生產安全。
二、MachineExpect Discovery
Machine Expect Discovery是用于施耐德PLC的發現協議,INCONTROLLER通過Machine Expect Discovery協議能探測發現工控網絡中存活的施耐德PLC,使用Machine Expect組態軟件連接PLC也會使用Machine Expect Discovery協議掃描PLC,該協議的使用并不意味著存在惡意活動。
當Machine Expect組態軟件連接網絡內的PLC時,會以組播的形式發送加密的廣播字段尋找匹配的施耐德PLC,如圖3所示:

圖3 Machine Expect發送的加密報文
經過解密后的請求報文如圖4所示:

圖4. Machine Expect解密后的報文內容
當同一網段內存在施耐德對應系列的PLC時,PLC也會在網段內組播加密信息的報文,如圖5所示:

圖5 施耐德PLC發送的加密報文
經過解密后的PLC廣播報文明文信息如下所示,其中包含了目標設備MAC地址、IP地址、固件版本、工程文件、設備名稱及型號等詳細信息,如圖6所示:

圖6 施耐德PLC解密后的報文內容
當Machine Expect組態軟件接收到來自 PLC的消息后就會在設備列表中刷新出該PLC的信息,如圖7所示。INCONTROLLER的CODECALL模塊中包含實現上述功能的代碼,會將網內施耐德該系列的PLC做一枚舉,列舉出詳細信息后再次進行下一步攻擊。

圖7 Machine Expect組態軟件接收PLC后顯示的信息
三、CodeSysV3
CodeSys是全球最著名的PLC軟件研發廠家德國3S(SMART,SOFTWARE,SOLUTIONS)公司發布的一款與制造商無關編程軟件及工控設備內核(Runtime SDK),其所使用的通信協議也從V2來到了更加現代化更加安全的V3版本。施耐德的部分TM系列PLC使用了CodeSys V3協議和編程軟件Machine Expect進行通信。CodeSys V3協議與V2協議完全不同,CodeSysV3協議的架構如圖8所示,CodeSys V3數據報文單元可以抽象為一個協議棧,包括四層,分別為塊驅動層(BlockDriver layer)、數據報文層(Datagramlayer)、通道層(Channellayer)、服務層(Serviceslayer)。

圖8 CodeSys V3協議架構
TM241模塊使用了CodeSys V3的通訊協議與Machine Expect組態軟件進行數據交互,如圖9所示,為CodeSys V3協議在TM241中的應用,下圖中的報文是建立連接階段TM241響應客戶端請求的資產信息和ID節點信息。

圖9 TM241響應客戶端請求的報文
CodeSys V3在設計之初就考慮了安全性,當然也包括了授權認證機制,尤其在最新版的內核中已經強制開啟了密碼驗證。所以惡意工具想要利用CodeSys V3協議發起攻擊的話,必須通過驗證,所以INCONTROLLER會內置常見的字典用于對CodeSys V3進行暴力破解。
當CODECALL工具成功破解PLC密碼后,就可以具有和編程軟件一樣的能力,包括上載和下裝工程代碼以及配置,創建、讀取修改PLC中的文件,啟動和停止PLC。該攻擊成功的關鍵是成功破解PLC密碼。
第二節 歐姆龍PLC
針對歐姆龍攻擊端口如表4所示:
表4 受影響的歐姆龍PLC端口及服務

一、Fins
Fins協議是歐姆龍公司開發的一種用于工業自動化網絡協議,使用Fins協議可以實現各種網絡的無縫通信。INCONTROLLER不僅可以通過Fins協議掃描發現歐姆龍PLC設備,還可以直接讀寫歐姆龍PLC中的變量值,同樣嚴重危害工業生產安全。
二、HTTP
INCONTROLLER利用PLC提供的HTTP接口,可以直接操作PLC的模式,包括切換運行、停止。
三、Telnet
PLC中存在內置的Telnet服務,INCONTROLLER可以通過激活PLC的Telnet服務然后進行連接執行任意命令。一旦攻擊者成功連上Telnet,相當于已經完全控制PLC,這時候攻擊者可以上傳一個代理模塊,用于持久化滲透。
第三節 基于CodeSys V3內核的PLC
INCONTROLLER使用了CodeSys V3協議對PLC進行訪問操作,所以從理論上來說,所有運行CodeSys V3內核的PLC都會受到影響,CodeSys官方也發布了安全通告,受到潛在影響的產品如下所示:
- CODESYS Control for BeagleBone SL
- CODESYS Control for Beckhoff CX9020 SL
- CODESYS Control for emPC-A/iMX6 SL
- CODESYS Control for IOT2000 SL
- CODESYS Control for Linux SL
- CODESYS Control for PFC100 SL
- CODESYS Control for PFC200 SL
- CODESYS Control for PLCnext SL
- CODESYS Control for Raspberry Pi SL
- CODESYS Control for WAGO Touch Panels 600 SL
- CODESYS Control RTE (SL)
- CODESYS Control RTE (for Beckhoff CX) SL
- CODESYS Control Win (SL)
- CODESYS Gateway
- CODESYS Edge Gateway for Windows
- CODESYS Edge Gateway for Linux
- CODESYS HMI (SL)
上述只是3S公司官方給出的受影響產品,譬如倍福CX9020 SL、WAGO的PFC系列等,還有很多應用CodeSys V3內核但沒有被提及的PLC也在受影響的范圍中,如圖10是使用CodeSys內核的一些工控廠商,還有很多未列舉出,比如匯川、禾川、英威騰、新華、固高等廠商的一些產品中也使用了CodeSys V3內核,目前國產化的工控設備應用越來越廣泛,應該引起重視以應對INCONTROLLER。

圖10 使用CodeSys內核的廠商
一、CodeSysV3的資產探測
CodeSys V3通過subcmd 0xc202獲取CodeSys V3節點的信息,如圖11所示:

圖11 獲取CodeSys節點的信息
返回的數據節點信息如圖12所示,包括版本號、設備名稱、節點名稱、廠商名稱等關鍵信息,通過該探測數據包可以識別網內的CodeSys V3節點。

圖12 返回的數據節點信息
二、CodeSysV3的授權機制
在前面部分已經提到,CodeSys V3從設計之初就考慮了安全,包括授權認證相關的特性。授權流程如圖13所示:

圖13 CodeSys授權流程
1、如圖14所示,CodeSys V3協議的CmpDevice 0x2是請求登錄PLC,如果將這一部分協議特征導入到工控防火墻可以識別出登錄請求,并結合規則庫做出警告或者阻斷的行為。如果頻繁發現該登錄包,說明有可能是攻擊者在爆破密碼。

圖14 登錄請求
2、PLC會返回隨機生成的challenge給客戶端。
3、客戶端通過challenge和密碼計算出認證信息,并和用戶名一起下發到PLC中,PLC通過認證信息判斷密碼是否正確,并返回對應的會話ID。
第四節 OPC-UA服務
INCONTROLLER除了針對工控PLC設備,還會對OPC-UA服務進行攻擊。OPC-UA(OPC Unified Architecture,OPC統一架構)協議由于其跨平臺(不受限于架構平臺)、面向服務的架構、信息通信安全等強大能力,被廣泛應用于工業設備間的通信。一個典型的OPC-UA架構如圖15所示,OPC-UA服務器對上層提供統一的訪問接口,方便SCADA、MES進行訪問。

圖15 典型的OPC-UA架構
幸運的是OPC-UA本身就是一個安全協議,支持TLS以及授權驗證機制,惡意軟件要想鏈接到OPC-UA服務,就必須對密碼進行暴力破解。一旦暴力破解成功,攻擊者就可以列出OPC-UA中的標簽名稱,例如溫度,壓力標簽,讓攻擊者可以對工控網絡有個大概了解,通過讀寫OPC-UA中的標簽值從而破壞工業網絡的生產活動。
第六章 安全檢查
雖然在現階段,調查人員得出結論為沒有組織受到INCONTROLLER的影響,但是其調查范圍是國外數量有限的工業組織,因此這里提供一套便于自查的方法顯得尤為必要,防患于未然。以下提供幾種檢查方法:
1、將如上描述的資產識別,以及登錄請求報文特征錄入到工控IDS/IPS中,對相關敏感操作發出警告。
2、檢查windows系統上的可執行文件是否包含“AsrDrv_exploit.pdb”字符串,如果是的話本系統可能受到INCONTROLLER的惡意入侵。
3、查看OPC UA審計記錄是否存在暴力破解憑據、惡意證書使用、不規則連接嘗試、配置更改和OPC標簽更改的行為記錄。
4、查看近期的流量記錄中是否存在ARP、ping掃描活動,是否存在不同于安全基線的Telnet流量、HTTP流量、Modbus流量、CodeSys V3協議流量。
5、檢查PLC上的日志,檢查異常的憑證暴力破解、與異常設備崩潰/重啟相關的錯誤代碼、上傳或下載的文件、文件刪除、未經授權更改設備配置和執行命令的日志記錄。
第七章 緩解措施
施耐德PLC
1、在防火墻上針對目標TCP 502以及UDP 1740進行訪問控制配置,嚴格限制對控制端口的訪問權限。
2、使用對應編程軟件對施耐德PLC進行設置,啟用PLC中的安全保護策略,并設置強訪問口令。
歐姆龍PLC
在防火墻上針對目標TCP/UDP 9600、TCP 80以及TCP 23進行訪問控制配置,嚴格限制控制端口的訪問權限。
基于CodeSys的通用PLC
1.在防火墻上針對目標UDP 1740行訪問控制配置,嚴格限制控制端口的訪問權限。
2.使用PLC編程軟件設置強密碼,保證PLC不被未授權訪問。
3.啟用PLC中的TLS設置,保證通信安全。
OPC-UA服務器
在OPC-UA服務端開啟訪問密碼,并設置強口令,以防止暴力破解攻擊。
網絡類的隔離和防護遵循以下原則:
1.將ICS/SCADA系統與企業網絡、互聯網進行網絡隔離,并限制任何進入或離開ICS/SCADA邊界的通信。
2.盡可能為所有對ICS網絡和設備的遠程訪問執行多因素身份驗證。
3.提前備份工程文件,并對固件和控制器配置文件進行完整性檢查,以確保這些備份的有效性。
4.將ICS/SCADA系統的網絡鏈接限制為僅允許的管理和工程工作站訪問。
5.制定網絡事件應急響應計劃,并定期開展可落地可實施的演練。
第八章 總結
從披露的報告來看,除了Windows平臺的漏洞利用,INCONTROLLER針對設備側并沒有使用任何漏洞,更多的是利用工控協議(公開協議Modbus/OPC-UA,私有協議CodeSys/Fins)來實現的一個偽客戶端。如果事先針對有授權保護的協議設置強密碼就能夠很好的保護設備,但是針對沒有授權設計的協議,例如Modbus之類的協議,這就需要借助工控安全設備對不安全的訪問進行限制。
從攻擊工具的成熟度來說,雖然INCONTROLLER比不上“震網”病毒具有高度的隱蔽性和先進性,但是可以看出,INCONTROLLER內置了PLC資產識別功能,能夠自動化識別和串接后續的攻擊,這需要工具開發者對私有協議CodeSys和Fins協議有大量的逆向工程經驗。從INCONTROLLER的功能和覆蓋面來看,INCONTROLLER目標范圍廣、功能相互依賴性較弱,可稱之為進階性的攻擊工具,以此來看針對工控系統的攻擊工具在逐步演進而且會越來越成熟和易用。