在破解工業通訊協議之前,先說一說為什么要破解工業通訊協議的原因。
隨著現代工業化的進一步發展,信息化建設的需要,工業智能設備或系統與上層信息化系統之間的互聯互通已成為必需的。雖說現在的工業現場各類智能設備都提供了多種行業標準協議,但對工業通訊較為熟悉的人都應該有所了解,工業現場的一些控制系統如PLC,DCS等用于對外提供標準協議通訊的部分屬于選配件,而非原生就支持,而且都需要增加硬件配件+軟件配置才能實現行業標準協議的支持。這樣的方式帶來的一個現實問題就是,當初購買PLC或DCS時,實施工程的人在開發時并未實現行業標準協議的支持。經過了多年后,項目都驗收了,而企業又出現了信息化建設的需求,這時候矛盾就出現了。企業的信息化系統需要工業現場設備的數據,但現場設備的數據并未配置實用行業標準協議對外發布。而現場設備廠家提供的軟件卻是可以從現場設備獲取數據的。
從現場設備獲取數據的路線就有2種方式了。
1、聯系現場設備廠家或者原來的工程實施人員,在現場停機檢修的時候將現場設備的配置進行修改,使得現場設備的數據能以行業標準協議對外提供。這種方式對數據采集來說是最理想的方式,安全性及可靠性最高。但從實際操作來說,不少情況下是很困難的,因為時間太長,找不到原來的實施人員,或者由于需要修改的站點多而導致成本高,現場設備廠家也不提供現場設備或系統的私有通訊協議(歐美系的PLC廠家幾乎都不會提供設備的私有通訊協議)。
2、讓上層信息化系統廠家來解決此問題,實際上也就是讓新系統的廠家自己想盡一切辦法從現場設備獲取數據,修改現場設備(PLC或DCS)配置的方式一般也不會采用,因為擔心帶來PLC或DCS問題而擔責任,因此上層系統的廠家能干的就是自己想法或拿到現場設備的私有通訊協議或破解其通訊協議。能想任何辦法去搞到現場設備的私有通訊協議資料時間對通訊取數來說也是一種安全性和穩定性都很高的方式。而破解私有通訊協議完全就是通過抓包工具抓取現場設備和其上位軟件之間通訊報文,然后利用相關工具對報文進行逐字節的分析比較,找出其規律,摸索各個報文之間的不同之處和界面配置參數的關系。所以從私有通訊協議的破解來說,是一件費時費力而且具有較大失敗風險的事情,其中的風險就在也許你已經破解了私有協議的95%,但最后的一點由于廠家使用了加密算法而導致完全的失敗。
破解工業通訊協議的條件
①有人能提供給你用做模擬測試的現場設備以及盡量多的設備產品資料。
②對于現場設備的配置及配置軟件的操作自己能搞定或者有人全力配置你。
③有軟件能和現場設備通訊上,一般來說,設備廠家自己的上位軟件都沒有問題,于是你也必須對設備廠家的上位軟件知道如何使用或有人協助你。
④廠家的私有協議是明文類協議,而不是加密類協議。
⑤足夠多的時間。
破解工業通訊協議所需工具
如果以上條件具備,就可以試一試破解工業通訊協議了。開始之前,先將協議分析的相關工具備好。筆者自己使用的工具如下:
①通訊報文抓取工具,串口協議使用AccessPort,以太網上的協議使用Wireshark。
②文本比較工具Beyond Compare。
③各種類型數據轉16進制的工具。
④能對報文計算各種檢驗算法的工具。
破解工業通訊協議實戰
本例中,筆者以一個國外PLC為例來破解它的工業通訊協議,這里的工業通訊協議僅僅設備到數據交換的部分。
1、搭建環境。這款國外PLC設備原生自帶以太網口,默認就可使用私有協議讀取其寄存器中的數據。搭建環境就按照最簡化的方式,電腦與PLC直連,電腦上除了必須的軟件,不安裝其他任何軟件,這樣可以避免各種干擾信息。我自己習慣使用干凈的虛擬機系統,在虛擬機的XP系統中安裝PLC的編程軟件、上位組態軟件及網絡轉包工具Wireshark。
2、剛開始時先在操作系統中檢測和PLC之間是否能正常通訊,在使用上位組態軟件測試是否能從PLC中獲取到相關數據,一切正常后,再開始抓包分析工作。
3、前兩步都正常后,下面就開始抓包了。在上位組態軟件中只留下一個IO點,記錄現在IO的配置,一般包含功能區、開始地址,數據類型等設置,不同的協議不一樣。實際也就是關注界面上可以設置的區域有哪些,待會兒抓取到多條報文后,進行對比分析,看同類型報文中哪些區域在變,哪些區域不變。同時在網絡轉包工具Wireshark中設置好過濾條件(本來中我對目的端口和源端口進行過濾就可完整無誤的將上位軟件和PLC之間的通訊完整的抓取到而且不會有垃圾報文),這是必須的,因為如果加上過濾條件,抓到的包成百上千,存在大量無用的信息,那么就無從下手了。下面是抓取的報文截圖


4、通過對上位軟件的多次停止然后又啟動進行多次抓包后,先對多次抓包的報文發送順序和報文長度進行對比,尋找其規律。通過上面兩次的抓包(其后只是改變了配置界面的一項配置)可以發現一些規律,首先是每次開始都是3個固定長度的包,如你對TCP/IP熟悉的話,可以看到這是TCP連接的3此握手。然后再看截圖中的第4個包和第5個包,發現兩張圖上這兩個包的長度完全一樣,這時候可以對比這兩次抓包中的第4個包和第5個包的應用層數據是否完全一樣,如果一樣,再多次抓包后看每次在TCP連接建立后發送的包和回來的包的應用層數據是否都一樣,如果完全一樣,基本可以確定是PLC登錄驗證的報文。
5、接下來繼續看后面的報文,通過截圖可以看見后面的包都很有規律了,在本次場景的抓包中,基本是每4個包一個循環,很有規律。而且每次抓包看到的都一樣,同時我們再去檢查PLC中提供數據的地址和上位軟件中對應的IO點的數據,看看是否一樣,而且是否更隨PLC中的數據變化而變化。如果是這么回事,那就恭喜了,破解有向前進了一步。現在進入到對這很有規律的4條報文的分析比較。我將3次分別轉包得到的報文的第6條報文的應用層數據分別復制到記事本中,由于這段16進制的報文不長,就沒有使用專門的分析工具了,從對3條報文的應用層數據的對比分析,我找到了其中的差異部分。如下圖所示,前面部分完全一樣,不同的部分已經用紅框標注。然后再把每次抓包前對上位組態軟件的設置參數列出來,看看是否能找到這個十六進制和設置參數的關系。

很幸運,報文紅框中十六進制和上層組態軟件的設置參數的關系基本已經確定,按照這種理解,再次在改變上層組態軟件的設置參數,然后再次抓包,就可以確定所找到的規則是否正確。本例中的這個報文是從上位組態軟件發給PLC的,報文中變化的區域是上層組態軟件的設置參數開始地址和請求的數據長度。
6、接下來的分析方法和第5條中的一樣,如遇到應用層數據完全相同的報文,那么應該是協議中的確認幀一類的,如果遇到由于上層組態軟件的設置參數變化而變化的,那么就和數據有很大關系了。有關后續報文的分析就不一一詳述了。最終的結果算是對向PLC讀取數據的私有通訊協議有了較為全面的了解。
最后想說的是,對工業訊協議破解是一個繁瑣且需要極大耐心的事情。能不能破解工業訊協議主要還是看此私有協議的復雜程度及是否存在不可逆的加密算法,如是明文類通訊協議,一般都可破解,需要的是時間和耐心,而對于加密的通訊協議,一般就選擇放棄工業訊協議破解吧。