晏騰飛
摘 要:DCP協(xié)議作為PROFINET協(xié)議的一部分,作用是對(duì)PROFINET設(shè)備進(jìn)行名稱分配以及設(shè)置網(wǎng)絡(luò)參數(shù)等。介紹DCP報(bào)文的基本格式、含義,以菲尼克斯PLC模塊及管理型交換機(jī)搭建的簡單PROFINET工業(yè)以太網(wǎng)為例,結(jié)合網(wǎng)絡(luò)報(bào)文分析工具Wireshark,對(duì)PROFINET設(shè)備名稱、IP地址等網(wǎng)絡(luò)參數(shù)設(shè)置的過程細(xì)節(jié)進(jìn)行了分析,總結(jié)DCP的特點(diǎn)以及應(yīng)用注意事項(xiàng)。
關(guān)鍵詞:PROFINET;DCP;Wireshark;協(xié)議
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-6903(2022)08-0123-03
0 引言
PROFINET是一個(gè)開放式的工業(yè)以太網(wǎng)通訊協(xié)議,由PROFIBUS & PROFINET國際組織(PI)所提出。PROFINET吸收了多年成熟應(yīng)用的PROFIBUS和工業(yè)以太網(wǎng)的技術(shù)特點(diǎn),采用開放的IT標(biāo)準(zhǔn),與以太網(wǎng)的TCP/IP標(biāo)準(zhǔn)兼容,并提供了實(shí)時(shí)功能,能滿足所有自動(dòng)化的需求[1]。自2003年起,PROFINET成為IEC 61158及IEC 61784標(biāo)準(zhǔn)中的一部分。成為市場上領(lǐng)先的工業(yè)以太網(wǎng)標(biāo)準(zhǔn)。根據(jù)PROFIBUS & PROFINET國際組織(PI)發(fā)布的最新數(shù)據(jù),截至2021年底,總計(jì)已有4800多萬臺(tái)PROFINET設(shè)備安裝于工業(yè)現(xiàn)場,與2019年相比增加了850萬臺(tái),增長率22%。
分析PROFINET使用DCP協(xié)議對(duì)設(shè)備進(jìn)行發(fā)現(xiàn)、名稱分配、設(shè)定網(wǎng)絡(luò)參數(shù)的過程,采用管理型交換機(jī)以及Wireshark對(duì)設(shè)備間的真實(shí)網(wǎng)絡(luò)報(bào)文進(jìn)行捕獲與解析,以了解DCP協(xié)議工作的細(xì)節(jié)與特點(diǎn)。
1?DCP簡介
DCP全稱Discovery and Basic Configuration Protocol,意為發(fā)現(xiàn)和基本配置協(xié)議。在將PROFINET設(shè)備投入使用前,需要通過工程工具或者控制器設(shè)置該設(shè)備的名稱、IP地址等參數(shù)。設(shè)備名稱(Name of Station)對(duì)于PROFINET網(wǎng)絡(luò)中設(shè)備來說是必須的,且同一網(wǎng)絡(luò)中的設(shè)備名稱不能重復(fù)。為防止重啟后失效,參數(shù)需永久性地保存在設(shè)備的設(shè)置中[2]。
DCP工作在數(shù)據(jù)鏈路層,依靠設(shè)備的MAC地址區(qū)分不同設(shè)備,因此無須設(shè)置IP地址即可發(fā)現(xiàn)或者設(shè)定PROFINET設(shè)備,這個(gè)特性還帶來一個(gè)影響:計(jì)算機(jī)只能發(fā)現(xiàn)和設(shè)定在同一子網(wǎng)中的PROFINET設(shè)備,即DCP數(shù)據(jù)幀不能穿過NAT設(shè)備,例如路由器。
2DCP幀結(jié)構(gòu)
一個(gè)DCP幀具有以太網(wǎng)類型0x8892(表示PROFINET),其結(jié)構(gòu)如圖1所示,其中數(shù)據(jù)字段的長度及取值見表1。
服務(wù)ID代表了DCP的四大功能:Get、Set、Identify、Hello,最常用的功能是Set和Indentify。Set表明這是一個(gè)設(shè)置幀,當(dāng)服務(wù)類型是Request時(shí),收到該幀的設(shè)備將按照數(shù)據(jù)塊中的內(nèi)容設(shè)置自己的名稱、IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、閃爍識(shí)別、恢復(fù)出廠設(shè)置等,設(shè)置完成便向?qū)Ψ桨l(fā)送服務(wù)類型為Response Success的設(shè)置幀表示應(yīng)答。Identify表明這是一個(gè)識(shí)別幀,功能是PROFINET設(shè)備的識(shí)別和應(yīng)答,收到該幀的設(shè)備會(huì)向控制器回復(fù)自己的信息,包括設(shè)備名、型號(hào)、廠商、IP地址等。工程工具掃描網(wǎng)絡(luò)中有一些PROFINET設(shè)備便是使用此功能。
Xid:請(qǐng)求和響應(yīng)通常是成對(duì)出現(xiàn),所有的響應(yīng)都要包含和請(qǐng)求同樣的Xid,以便控制器確定收到的響應(yīng)是屬于哪一個(gè)請(qǐng)求。
響應(yīng)延遲:由于 DCP 可能同時(shí)查詢網(wǎng)絡(luò)上的所有設(shè)備,它們也會(huì)或多或少地立即發(fā)送回復(fù),因此可能出現(xiàn)同時(shí)發(fā)送的情況。這將導(dǎo)致流量大幅增加,并可能導(dǎo)致?lián)砣瑥亩蓴_設(shè)備間關(guān)鍵過程數(shù)據(jù)的交換。為了防止這種情況,響應(yīng)延遲字段用于定義一個(gè)時(shí)間間隔,所有響應(yīng)都應(yīng)在該時(shí)間間隔內(nèi)展開。有效值是從 1 到 6400,這意味著響應(yīng)可以是最小10 ms和最大64 s。
3DCP報(bào)文監(jiān)聽
3.1 硬件設(shè)置
以菲尼克斯型號(hào)為AXC 3050的PLC及BK PN子站為主要研究對(duì)象,使用管理型交換機(jī)以及Wireshark網(wǎng)絡(luò)分析工具來對(duì)DCP的工作過程進(jìn)行具體分析。
將控制器AXC 3050連接至交換機(jī)端口1,將子站BK PN連接到交換機(jī)端口3,安裝了Wireshark的計(jì)算機(jī)連接到交換機(jī)端口5,如圖2所示。
3.2 軟件設(shè)置
設(shè)置管理型交換機(jī),將端口5作為端口1 的鏡像端口,即端口1的所有數(shù)據(jù)幀將會(huì)被復(fù)制到端口5,包括流出和流入的數(shù)據(jù),接到端口5的Wireshark便可以捕獲并分析所有AXC 3050與BK PN模塊之間的通信。打開Wireshark,選擇連接了交換機(jī)端口5的網(wǎng)卡,點(diǎn)擊捕獲,開始記錄端口5上的數(shù)據(jù)。
在工程軟件中新建一個(gè)項(xiàng)目DcpTest,將各設(shè)備做如表2的配置,其中,AXC 3050的MAC地址為a8:74:1d:02:6e:12,BK PN的MAC地址為00:a0:45:91:cf:c9。
在將項(xiàng)目下載到AXC 3050前,應(yīng)先設(shè)置其名稱及IP地址、子網(wǎng)掩碼等,步驟如下,打開DCP Tool,掃描設(shè)備,找到AXC 3050,設(shè)置其名稱為axc-30503,IP地址為10.11.11.2。
3.3 DCP數(shù)據(jù)幀分析
在Wireshark過濾器中輸入pn_dpc以過濾掉無關(guān)的幀??梢杂^察到DCP Tool設(shè)置設(shè)備名稱及IP的過程(如圖3所示):
幀4為DCP Tool發(fā)送的設(shè)置名稱請(qǐng)求,目的地址正是AXC 3050的MAC地址。內(nèi)容是“站名稱:axc-30503”。
幀5為AXC 3050的回復(fù):設(shè)置完成,響應(yīng)正常。
幀10為DCP Tool發(fā)送的設(shè)置IP請(qǐng)求,內(nèi)容是“永久保存,IP地址10.11.11.2,子網(wǎng)掩碼255.255.255.0等”。
幀11是AXC 3050的回復(fù):設(shè)置完成,響應(yīng)正常。
將項(xiàng)目下載到AXC 3050中,等控制器啟動(dòng)完成,可以觀察到若干個(gè)識(shí)別請(qǐng)求。應(yīng)該注意,DCP 識(shí)別請(qǐng)求對(duì)于 PROFINET 設(shè)備的識(shí)別和參數(shù)化至關(guān)重要。在控制器啟動(dòng)時(shí),它們用于搜索組態(tài)中的 PROFINET 設(shè)備,這個(gè)過程循環(huán)重復(fù),直到相應(yīng)的設(shè)備響應(yīng)??稍趫D4中觀察到這種現(xiàn)象。
幀17~47表明控制器向MAC地址01:0e:cf:00:00:00發(fā)送識(shí)別請(qǐng)求幀,這個(gè)特殊的MAC是PROFINET的組播地址。這些報(bào)文的含義如下:哪個(gè)站的名稱是axl-f-bk-pn,收到請(qǐng)響應(yīng)。因?yàn)锽K PN的設(shè)備名稱還未設(shè)置,所以網(wǎng)絡(luò)中沒有設(shè)備能響應(yīng)控制器的請(qǐng)求,控制器就一直重復(fù)發(fā)送這個(gè)組播幀。
控制器啟動(dòng)完成后,通常在 PROFINET 網(wǎng)絡(luò)中不再發(fā)生DCP多播??赡艿睦馐桥R時(shí)可訪問設(shè)備的配置,例如由于工具更改或無線鏈接。應(yīng)該根據(jù)情況決定采取措施(例如臨時(shí)注銷節(jié)點(diǎn))來最小化 DCP 多播的數(shù)量。如果控制器啟動(dòng)后需搜尋的設(shè)備數(shù)量大于20,則會(huì)導(dǎo)致組播負(fù)載太高,不能保證無故障運(yùn)行[4]。
下一步使用DCP Tool設(shè)置BK PN模塊的名稱為axl-f-bk-pn,然后觀察控制器和子站間的數(shù)據(jù)(如圖5所示)。
幀89,控制器請(qǐng)求:設(shè)置子站的名稱為axl-f-bk-pn。
幀90,子站回復(fù):設(shè)置完成。
幀96,控制器組播:哪個(gè)站的名稱是axl-f-bk-pn。
幀97,子站回復(fù):本站的名字是axl-f-bk-pn。
幀117,控制器:設(shè)置IP為10.11.11.30等參數(shù)。
幀118,子站回復(fù):設(shè)置完成。
打開DCP Tool,重新掃描設(shè)備,可以觀察到子站BK PN的IP地址等網(wǎng)絡(luò)參數(shù)已經(jīng)分配,與DcpTest項(xiàng)目中的設(shè)置保持一致。
可以看出,DCP與常見的DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議)有相似之處[3],都是對(duì)網(wǎng)絡(luò)中的設(shè)備分配IP地址等參數(shù)的協(xié)議,主要不同點(diǎn)是DCP由控制器主動(dòng)查找設(shè)備,對(duì)符合硬件組態(tài)的設(shè)備主動(dòng)進(jìn)行分配設(shè)置,不能跨網(wǎng)段,而DHCP是設(shè)備向主機(jī)發(fā)起請(qǐng)求,主機(jī)再進(jìn)行響應(yīng),其作用范圍是跨網(wǎng)段的。
4 基于DCP的網(wǎng)絡(luò)攻擊
目前的DCP協(xié)議中并沒有設(shè)計(jì)身份驗(yàn)證字段,而該協(xié)議又負(fù)責(zé)設(shè)備的配置,因此通過偽造報(bào)文,可以發(fā)動(dòng)對(duì)PROFINET網(wǎng)絡(luò)的攻擊。例如數(shù)據(jù)包洪流攻擊、數(shù)據(jù)包嗅探、Xid欺騙等[5]。以數(shù)據(jù)包洪流攻擊為例,正常網(wǎng)絡(luò)中,控制器識(shí)別出設(shè)備并收到響應(yīng)之后便不再發(fā)送識(shí)別請(qǐng)求。而偽裝成控制器的攻擊者可以掃描出網(wǎng)絡(luò)中的所有設(shè)備的名稱,然后向網(wǎng)絡(luò)中組播大量的識(shí)別請(qǐng)求,設(shè)備可能會(huì)忙于進(jìn)行響應(yīng)而不能處理正常的數(shù)據(jù),甚至導(dǎo)致宕機(jī)(如圖6所示)。
不過,正因?yàn)镈CP報(bào)文使用的是第二層協(xié)議,不能通過路由設(shè)備,惡意設(shè)備必須能訪問到控制器所在的同一網(wǎng)段才能起到作用,所以影響較小。當(dāng)網(wǎng)絡(luò)規(guī)模較大,難以控制接入設(shè)備時(shí),被入侵的風(fēng)險(xiǎn)也隨之增加了。
5結(jié)語
通過搭建一個(gè)PLC主站及子站構(gòu)成的簡單PROFINET網(wǎng)絡(luò),分析了DCP發(fā)揮作用的過程,挖掘DCP工具不能跨子網(wǎng)進(jìn)行設(shè)置的原因,以及控制器如何發(fā)現(xiàn)并管理PROFINET設(shè)備的細(xì)節(jié),還對(duì)利用DCP進(jìn)行網(wǎng)絡(luò)攻擊的可能性進(jìn)行了分析。有助于厘清DCP工作的基本原理、抓包網(wǎng)絡(luò)的搭建以及工程工具的適用環(huán)境。
參考文獻(xiàn)
[1] 廖常初,祖正容.西門子工業(yè)通信網(wǎng)絡(luò)組態(tài)編程與故障診斷[M].北京:機(jī)械工業(yè)出版社,2009:336.
[2] 和淑芬,沈勇,范雄濤,等.深入解析 ProfiNet IO 系統(tǒng)啟動(dòng)前尋址的實(shí)時(shí)報(bào)文[J].電氣技術(shù),2018(2):96-101.
[3] 陳曦.PROFINET IO技術(shù)中的DCP協(xié)議[J].中國儀器儀表, 2016(10):27-30.
[4] PNO, PI.PROFINET Commissioning Guideline for PROFINET[C].PROFIBUS Germany,2019.
[5] Sangkyo Oh, Hyunji Chung, Sangjin Lee, et al. Advanced Protocol to Prevent Man-in-the-middle Attack in SCADA System[J].International Journal of Security and its Applications,2014(2):1-8.