在工業(yè)控制系統(tǒng)中,各種不同的型號(hào)系列的PLC除了使用公開(kāi)的工業(yè)控制協(xié)議(例如 modbus,opcua等),還使用了廠家自己開(kāi)發(fā)的私有協(xié)議(例如施耐德的UMAS,西門(mén)子的S7comm/S7commPlus等),這一系列協(xié)議主要用于和自家的組態(tài)軟件進(jìn)行通信來(lái)執(zhí)行一些高權(quán)限的操作,例如啟動(dòng)停止,工程的上載和下裝等。這些操作無(wú)疑會(huì)給工業(yè)現(xiàn)場(chǎng)造成巨大的安全隱患,對(duì)工業(yè)控制私有協(xié)議分析也成了工業(yè)控制系統(tǒng)安全的重點(diǎn)和難點(diǎn)。本文通過(guò)分析如今的PLC私有協(xié)議的現(xiàn)狀,提出一些研究思路和安全建議。
私有協(xié)議實(shí)例
施耐德UMAS
施耐德UMAS協(xié)議是施耐德M340/M580和上位組態(tài)軟件Unity Pro通信使用的一種私有協(xié)議,由于其下層協(xié)議使用的modbus 90功能碼,所以服務(wù)端口也是502端口。通過(guò)閱讀isf(https://github.com/dark-lbp/isf/)工業(yè)控制系統(tǒng)漏洞利用框架的源碼找到針對(duì)施耐德系列PLC的啟停腳本源碼可以分析該協(xié)議的基本流程,如下:
該攻擊腳本先是通過(guò)0x10功能碼獲取UMAS的會(huì)話key,再通過(guò)0x40(啟動(dòng)功能碼)/0x41(停止功能碼)來(lái)控制PLC設(shè)備的啟動(dòng)停止。如下即為Wireshark抓取到的數(shù)據(jù)包,UMAS協(xié)議解析插件可以自己編寫(xiě)。
通過(guò)協(xié)議分析可以知道,該協(xié)議是未加密的狀態(tài),可以使用簡(jiǎn)單的重放進(jìn)行PLC攻擊,該種私有協(xié)議相對(duì)簡(jiǎn)單,沒(méi)有加密流量以及完整性校驗(yàn),安全性相對(duì)不足。
西門(mén)子S7comm系列
S7comm是S7-300/S7-400和上位組態(tài)軟件TIA通信的私有協(xié)議,下層協(xié)議為COTP,使用的服務(wù)端口號(hào)為102。通過(guò)閱讀isf框架源碼可以知道到該協(xié)議也沒(méi)有加密,也沒(méi)有完整性校驗(yàn)。
抓取到的數(shù)據(jù)流量如下所示,這種類(lèi)型的協(xié)議也可以通過(guò)的簡(jiǎn)單的重放來(lái)控制PLC。
但是S7-1200/S7-1500使用的是S7協(xié)議加強(qiáng)版S7commPlus,該協(xié)議握手階段使用了一系列復(fù)雜的算法來(lái)建立安全的會(huì)話鏈接,同時(shí)為接下來(lái)的每一個(gè)操作數(shù)據(jù)包都加上了完整性校驗(yàn)。
如下選中的地方即為完整性校驗(yàn)字段:
針對(duì)這類(lèi)復(fù)雜的算法協(xié)議可以通過(guò)逆向關(guān)鍵的dll或者直接調(diào)用核心的dll來(lái)完成對(duì)PLC的攻擊。下圖為針對(duì)S7commPlus攻擊工具。
密碼設(shè)置
通過(guò)上面的分析可以知道,現(xiàn)在的工業(yè)控制私有協(xié)議安全性還有很大的不足,為了在工業(yè)系統(tǒng)中限制其他人使用私有協(xié)議執(zhí)行高權(quán)限的操作,可以使用組態(tài)軟件給PLC加上保護(hù)密碼。
施耐德unitypro設(shè)置如下:
西門(mén)子TIA可以進(jìn)行如下設(shè)置:
在設(shè)置密碼后,可以有效保護(hù)PLC,阻止利用私有協(xié)議發(fā)起的惡意操作。
密碼繞過(guò)
密碼繞過(guò)屬于工業(yè)控制系統(tǒng)安全里面的高級(jí)技術(shù),只要繞過(guò)PLC中的密碼,基本上就可以讓PLC執(zhí)行惡意操作,比如替換一個(gè)惡意工程等。在今年的看雪峰會(huì)上,已經(jīng)有工控安全研究員著手這方面的研究,通過(guò)包括物理接觸和非物理接觸方式突破了施耐德,西門(mén)子,羅克韋爾等多個(gè)PLC的密碼保護(hù)機(jī)制??偨Y(jié)如下兩點(diǎn):
1. 不正確的校驗(yàn)方式,包括把密碼從PLC讀到組態(tài)軟件進(jìn)行比較的設(shè)計(jì)。
2. 廠商留下的后門(mén),包括未文檔化的PLC內(nèi)存讀寫(xiě)功能。
詳情請(qǐng)參考
https://zhuanlan.kanxue.com/article-14166.htm
總結(jié)
通過(guò)分析可以看出,工業(yè)控制系統(tǒng)上私有協(xié)議有復(fù)雜的、也有簡(jiǎn)單的,種類(lèi)繁雜。不同的廠商有不同的私有協(xié)議,這對(duì)工控安全研究人員的協(xié)議逆向分析能力提出了較大的要求。同時(shí)本文還提到了通過(guò)設(shè)置密碼來(lái)阻止私有協(xié)議的濫用,然而設(shè)置PLC密碼不是萬(wàn)能的,它依賴(lài)于工業(yè)控制系統(tǒng)廠商在密碼保護(hù)機(jī)制實(shí)現(xiàn)上的安全性。為了限制私有協(xié)議的訪問(wèn),最好還是在工業(yè)現(xiàn)場(chǎng)部署專(zhuān)門(mén)針對(duì)工業(yè)控制業(yè)務(wù)環(huán)境的IDS/IPS,最大程度的提高工業(yè)現(xiàn)場(chǎng)的安全性。