昌暉儀表在本文分享破解工業(yè)通訊協(xié)議需要的條件和工具,結(jié)合實戰(zhàn)講解工業(yè)通訊破解過程,本破解過程對提高工業(yè)通信的信息安全具有很好的參考作用。
在破解工業(yè)通訊協(xié)議之前,先說一說為什么要破解工業(yè)通訊協(xié)議的原因。
隨著現(xiàn)代工業(yè)化的進一步發(fā)展,信息化建設(shè)的需要,工業(yè)智能設(shè)備或系統(tǒng)與上層信息化系統(tǒng)之間的互聯(lián)互通已成為必需的。雖說現(xiàn)在的工業(yè)現(xiàn)場各類智能設(shè)備都提供了多種行業(yè)標準協(xié)議,但對工業(yè)通訊較為熟悉的人都應(yīng)該有所了解,工業(yè)現(xiàn)場的一些控制系統(tǒng)如PLC,DCS等用于對外提供標準協(xié)議通訊的部分屬于選配件,而非原生就支持,而且都需要增加硬件配件+軟件配置才能實現(xiàn)行業(yè)標準協(xié)議的支持。這樣的方式帶來的一個現(xiàn)實問題就是,當初購買PLC或DCS時,實施工程的人在開發(fā)時并未實現(xiàn)行業(yè)標準協(xié)議的支持。經(jīng)過了多年后,項目都驗收了,而企業(yè)又出現(xiàn)了信息化建設(shè)的需求,這時候矛盾就出現(xiàn)了。企業(yè)的信息化系統(tǒng)需要工業(yè)現(xiàn)場設(shè)備的數(shù)據(jù),但現(xiàn)場設(shè)備的數(shù)據(jù)并未配置實用行業(yè)標準協(xié)議對外發(fā)布。而現(xiàn)場設(shè)備廠家提供的軟件卻是可以從現(xiàn)場設(shè)備獲取數(shù)據(jù)的。
從現(xiàn)場設(shè)備獲取數(shù)據(jù)的路線就有2種方式了。
1、聯(lián)系現(xiàn)場設(shè)備廠家或者原來的工程實施人員,在現(xiàn)場停機檢修的時候?qū)F(xiàn)場設(shè)備的配置進行修改,使得現(xiàn)場設(shè)備的數(shù)據(jù)能以行業(yè)標準協(xié)議對外提供。這種方式對數(shù)據(jù)采集來說是最理想的方式,安全性及可靠性最高。但從實際操作來說,不少情況下是很困難的,因為時間太長,找不到原來的實施人員,或者由于需要修改的站點多而導(dǎo)致成本高,現(xiàn)場設(shè)備廠家也不提供現(xiàn)場設(shè)備或系統(tǒng)的私有通訊協(xié)議(歐美系的PLC廠家?guī)缀醵疾粫峁┰O(shè)備的私有通訊協(xié)議)。
2、讓上層信息化系統(tǒng)廠家來解決此問題,實際上也就是讓新系統(tǒng)的廠家自己想盡一切辦法從現(xiàn)場設(shè)備獲取數(shù)據(jù),修改現(xiàn)場設(shè)備(PLC或DCS)配置的方式一般也不會采用,因為擔心帶來PLC或DCS問題而擔責任,因此上層系統(tǒng)的廠家能干的就是自己想法或拿到現(xiàn)場設(shè)備的私有通訊協(xié)議或破解其通訊協(xié)議。能想任何辦法去搞到現(xiàn)場設(shè)備的私有通訊協(xié)議資料時間對通訊取數(shù)來說也是一種安全性和穩(wěn)定性都很高的方式。而破解私有通訊協(xié)議完全就是通過抓包工具抓取現(xiàn)場設(shè)備和其上位軟件之間通訊報文,然后利用相關(guān)工具對報文進行逐字節(jié)的分析比較,找出其規(guī)律,摸索各個報文之間的不同之處和界面配置參數(shù)的關(guān)系。所以從私有通訊協(xié)議的破解來說,是一件費時費力而且具有較大失敗風險的事情,其中的風險就在也許你已經(jīng)破解了私有協(xié)議的95%,但最后的一點由于廠家使用了加密算法而導(dǎo)致完全的失敗。
破解工業(yè)通訊協(xié)議的條件
①有人能提供給你用做模擬測試的現(xiàn)場設(shè)備以及盡量多的設(shè)備產(chǎn)品資料。
②對于現(xiàn)場設(shè)備的配置及配置軟件的操作自己能搞定或者有人全力配置你。
③有軟件能和現(xiàn)場設(shè)備通訊上,一般來說,設(shè)備廠家自己的上位軟件都沒有問題,于是你也必須對設(shè)備廠家的上位軟件知道如何使用或有人協(xié)助你。
④廠家的私有協(xié)議是明文類協(xié)議,而不是加密類協(xié)議。
⑤足夠多的時間。
破解工業(yè)通訊協(xié)議所需工具
如果以上條件具備,就可以試一試破解工業(yè)通訊協(xié)議了。開始之前,先將協(xié)議分析的相關(guān)工具備好。筆者自己使用的工具如下:
①通訊報文抓取工具,串口協(xié)議使用AccessPort,以太網(wǎng)上的協(xié)議使用Wireshark。
②文本比較工具Beyond Compare。
③各種類型數(shù)據(jù)轉(zhuǎn)16進制的工具。
④能對報文計算各種檢驗算法的工具。
破解工業(yè)通訊協(xié)議實戰(zhàn)
本例中,筆者以一個國外PLC為例來破解它的工業(yè)通訊協(xié)議,這里的工業(yè)通訊協(xié)議僅僅設(shè)備到數(shù)據(jù)交換的部分。
1、搭建環(huán)境。這款國外PLC設(shè)備原生自帶以太網(wǎng)口,默認就可使用私有協(xié)議讀取其寄存器中的數(shù)據(jù)。搭建環(huán)境就按照最簡化的方式,電腦與PLC直連,電腦上除了必須的軟件,不安裝其他任何軟件,這樣可以避免各種干擾信息。我自己習慣使用干凈的虛擬機系統(tǒng),在虛擬機的XP系統(tǒng)中安裝PLC的編程軟件、上位組態(tài)軟件及網(wǎng)絡(luò)轉(zhuǎn)包工具Wireshark。
2、剛開始時先在操作系統(tǒng)中檢測和PLC之間是否能正常通訊,在使用上位組態(tài)軟件測試是否能從PLC中獲取到相關(guān)數(shù)據(jù),一切正常后,再開始抓包分析工作。
3、前兩步都正常后,下面就開始抓包了。在上位組態(tài)軟件中只留下一個IO點,記錄現(xiàn)在IO的配置,一般包含功能區(qū)、開始地址,數(shù)據(jù)類型等設(shè)置,不同的協(xié)議不一樣。實際也就是關(guān)注界面上可以設(shè)置的區(qū)域有哪些,待會兒抓取到多條報文后,進行對比分析,看同類型報文中哪些區(qū)域在變,哪些區(qū)域不變。同時在網(wǎng)絡(luò)轉(zhuǎn)包工具Wireshark中設(shè)置好過濾條件(本來中我對目的端口和源端口進行過濾就可完整無誤的將上位軟件和PLC之間的通訊完整的抓取到而且不會有垃圾報文),這是必須的,因為如果加上過濾條件,抓到的包成百上千,存在大量無用的信息,那么就無從下手了。下面是抓取的報文截圖
4、通過對上位軟件的多次停止然后又啟動進行多次抓包后,先對多次抓包的報文發(fā)送順序和報文長度進行對比,尋找其規(guī)律。通過上面兩次的抓包(其后只是改變了配置界面的一項配置)可以發(fā)現(xiàn)一些規(guī)律,首先是每次開始都是3個固定長度的包,如你對TCP/IP熟悉的話,可以看到這是TCP連接的3此握手。然后再看截圖中的第4個包和第5個包,發(fā)現(xiàn)兩張圖上這兩個包的長度完全一樣,這時候可以對比這兩次抓包中的第4個包和第5個包的應(yīng)用層數(shù)據(jù)是否完全一樣,如果一樣,再多次抓包后看每次在TCP連接建立后發(fā)送的包和回來的包的應(yīng)用層數(shù)據(jù)是否都一樣,如果完全一樣,基本可以確定是PLC登錄驗證的報文。
5、接下來繼續(xù)看后面的報文,通過截圖可以看見后面的包都很有規(guī)律了,在本次場景的抓包中,基本是每4個包一個循環(huán),很有規(guī)律。而且每次抓包看到的都一樣,同時我們再去檢查PLC中提供數(shù)據(jù)的地址和上位軟件中對應(yīng)的IO點的數(shù)據(jù),看看是否一樣,而且是否更隨PLC中的數(shù)據(jù)變化而變化。如果是這么回事,那就恭喜了,破解有向前進了一步?,F(xiàn)在進入到對這很有規(guī)律的4條報文的分析比較。我將3次分別轉(zhuǎn)包得到的報文的第6條報文的應(yīng)用層數(shù)據(jù)分別復(fù)制到記事本中,由于這段16進制的報文不長,就沒有使用專門的分析工具了,從對3條報文的應(yīng)用層數(shù)據(jù)的對比分析,我找到了其中的差異部分。如下圖所示,前面部分完全一樣,不同的部分已經(jīng)用紅框標注。然后再把每次抓包前對上位組態(tài)軟件的設(shè)置參數(shù)列出來,看看是否能找到這個十六進制和設(shè)置參數(shù)的關(guān)系。
很幸運,報文紅框中十六進制和上層組態(tài)軟件的設(shè)置參數(shù)的關(guān)系基本已經(jīng)確定,按照這種理解,再次在改變上層組態(tài)軟件的設(shè)置參數(shù),然后再次抓包,就可以確定所找到的規(guī)則是否正確。本例中的這個報文是從上位組態(tài)軟件發(fā)給PLC的,報文中變化的區(qū)域是上層組態(tài)軟件的設(shè)置參數(shù)開始地址和請求的數(shù)據(jù)長度。
6、接下來的分析方法和第5條中的一樣,如遇到應(yīng)用層數(shù)據(jù)完全相同的報文,那么應(yīng)該是協(xié)議中的確認幀一類的,如果遇到由于上層組態(tài)軟件的設(shè)置參數(shù)變化而變化的,那么就和數(shù)據(jù)有很大關(guān)系了。有關(guān)后續(xù)報文的分析就不一一詳述了。最終的結(jié)果算是對向PLC讀取數(shù)據(jù)的私有通訊協(xié)議有了較為全面的了解。
最后想說的是,對工業(yè)訊協(xié)議破解是一個繁瑣且需要極大耐心的事情。能不能破解工業(yè)訊協(xié)議主要還是看此私有協(xié)議的復(fù)雜程度及是否存在不可逆的加密算法,如是明文類通訊協(xié)議,一般都可破解,需要的是時間和耐心,而對于加密的通訊協(xié)議,一般就選擇放棄工業(yè)訊協(xié)議破解吧。