概述
PLC Program Tool 是一個工程工作站程序,用于OT 環境中對信捷PLC 進行配置和組態。從安全角度來看,獲得對包含工程工作站程序的機器的訪問權限可以讓攻擊者完全干預 PLC 和其他高度敏感的 OT 設備,從而產生不利后果。因此,攻擊者可以利用這些應用程序中的漏洞作為完全控制 OT 網絡的Zui后一步。針對工程工作站的攻擊者可能會感染較低級別的設備,例如 PLC、傳感器或泵。
一類漏洞核心的惡意項目文件
項目文件通常是包含 OLE 文件、SQLite 數據庫、專有二進制格式、文本文件和在工程工作站內創建的目錄的存檔文件格式。工程師使用這些程序來監視、配置可編程邏輯控制器 (PLC) 和其他控制系統并與之通信。
項目文件中包含的程序邏輯管理 ICS 設備并監督流程,它還可能包括網絡配置數據,有時還包括完整的 OT 網絡布局。對于以工業網絡為目標的攻擊者來說,武器化的項目文件可能是此類活動的核心。
當用工程師站程序打開工程文件時,該程序可以快速與相關設備進行通訊。或者,OT 工程師有時可以從 PLC 上傳項目文件,但這需要運行網絡發現工具來查找 PLC 的網絡地址或手動輸入相關網絡參數。因此,許多公司選擇使用項目文件,每個文件都包含一個或多個 PLC 的配置。
當工程師站程序打開時,攻擊者編寫的特制項目文件可能會觸發漏洞。例如,在這種情況下,攻擊者可以將用于存儲文件的網絡共享中的合法文件替換為會觸發程序漏洞的特制文件。我們在PLC Program Tool 中發現了此類漏洞,該漏洞可讓攻擊者在打開被利用的項目文件后在易受攻擊的端點上運行任意代碼。
OT環境建立
(1)在實驗室設置中運行的信捷 PLC在信捷組態軟件,“PLC Program Tool”的工程工作站程序。查找工程文件漏洞首先要調查工程工作站程序使用的工程文件的結構。以信捷PLC Program Tool為例,相關文件為*.xdp文件:
(2)信捷PLC工程文件結構為.xdp文件這些項目文件可以很容易地識別為 zip 文件,如下面的PK\x03\x04所示:
幾乎任何存檔實用程序(例如 7z)都可以提取它們。更有趣的是,當程序打開一個項目文件時,它會立即將其解壓縮到位于其安裝目錄中的一個臨時目錄中:
XDPPro.exe 將幾個文件寫入 C:\Program Files\XINJE\XDPPro\tmp
此行為表明程序假定它正在以管理員權限執行。這與提取的文件是 zip 文件相結合,立即讓人懷疑是否可以利用 zip slip 漏洞(任意文件覆蓋漏洞)來獲得任意寫入權限。
很快,確實發現了一個 zip slip 漏洞(CVE-2021-34605),該漏洞可以為攻擊者提供具有程序權限的任意寫入權限;在大多數情況下,這些將是管理員權限。下一個問題是如何從任意文件寫入中執行代碼。由于在加載項目文件后立即執行代碼Zui有意義,可以在打開項目文件時檢查程序在做什么:
XDPPro.exe 嘗試從 C:\Program Files\XINJE\XDPPro 加載 DNSAPI.dll,沒有找到它并回退到 C:\Windows\System32
有趣的是,它正在嘗試使用LoadLibrary從其本地目錄加載 .dll 文件。當 LoadLibrary 沒有找到它們時,它會恢復到在 C:\Windows\System32 中搜索它們。在這里,我們發現了第二個漏洞 CVE-2021-34606,這是一個經典的 DLL 劫持漏洞。
為了創建一個完整的漏洞利用,鏈接了兩個漏洞:一旦一個特制的惡意項目文件被信捷PLC程序工具打開,就會觸發zip slip漏洞并將一個.dll文件寫入程序目錄在程序文件中。稍后在加載新項目的過程中,將加載此 DLL 而不是真正的 DLL(位于Windows\System32中)。
加載 DLL 后,惡意代碼會在其 DLLMain 過程或程序導入的函數之一中執行。攻擊者現在可能會在 OT 網絡上站穩腳跟。