歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

工控安全EthernetIP協議分析

來源:本站整理 作者:佚名 時間:2019-11-07 TAG: 我要投稿

Ethernet/IP協議是由控制網國際有限公司(ControlNet International)的技術工作組聯合ODVA(Open DeviceNet Vendor Association)于二十世紀九十年代構建的,相較于Modbus協議它是一個很年輕的協議,制定這個協議的原因是在二十世紀九十年代隨著現場總線控制技術的成熟,PLC等智能設備更多的也更方便的接入,現場總線控制技術(FCS)就應運而生了,但是在當時的技術條件下,商業以太網有著較高的延遲性,商業以太網在工業應用中傳輸延滯在2~30ms之間,這是影響以太網進入工業領域的重要原因,從而開始了對工業以太網的研究。時至今日,隨著技術的發展工業以太網已經成功的應用到工業的生產當中,但是也出現了多種現場總線標準,現場總線國際標準IEC 61158承認的現在有10種類型總線的國際標準,其中就有著Modbus-IDA、Ethernet-IP等,本次我們就來介紹一下Ethernet/IP協議。
Ethernet/IP協議簡介
上文中我們也提到過Ethernet/IP協議是由ControlNet International和ODVA兩個組織推出的,所以它和DeviceNet和ControlNet一樣是基于CIP(Common Industrial Protocol通用工業協議)作為應用層協議基礎上開發的,這是一種面向對象的協議,可以提供一系列標準服務,包括通過隱式和顯示的方式對網絡設備進行控制,后文我們再對CIP進行詳細介紹。回到正題,Ethernet/IP協議的流行是因為主要的自動化系統制造商Rockwell公司和Allen-Bradley公司圍繞Ethernet/IP協議對設備進行了標準化,此后如Omron等公司也對設備添加了支持,自此Ethernet/IP協議開始流行(主要在美國)。
Ethernet/IP數據包的組成結構可以分成兩部分,CIP協議部分和Ethernet/IP協議部分

Ethernet/IP數據包結構
我們從CIP開始講起,Ethernet/IP協議中的CIP幀包括了命令、數據點和報文信息,CIP幀主要包括CIP設備概要信息層、應用層、表示層和會話層,這里多提幾句,CIP數據包在通過以太網發送前必須要經過封裝,而且要根據請求的不同給不同的報頭,報頭體現了數據的重要性,CIP數據包在以太網中傳輸的時候具有特殊以太網報頭(IP頭、TCP頭和封裝頭)這種方式使得CIP數據包通過TCP或UDP傳輸并能夠由接收方解包但是對比于DeviceNet和ControlNet協議,這種方法使得協議效率降低,報文頭長度可能比數據還要長,占用網絡負擔增大,所以Ethernet/IP更適合傳輸大的數據包。
這里我們先對上圖中的一些名詞做一下解釋,設備概要信息就不多說了,就是對象結構和行為的一個完整的說明,通過這個來實現設備的互操作性和互換性。主要來看一下這個CIP應用層對象庫,在CIP協議里定義了大量的對象**,一共定義了一系列46個對象,但之前提到的三個協議都存在部分不通用的對象,其中Ethernet/IP協議由一個,ControlNet有三個,DeviceNet有一個,CIP對象類可以分為三類,這種專有的叫做網絡特定對象,第二種是通用對象比如標識對象、報文路由對象都屬于這一類,最后一種是應用特定對象如寄存器對象。之后的CIP數據管理服務顯示報文、I/O報文(隱式報文)和后面的CIP報文路由管理可以合成報文協議和數據管理來講,報文協議就是在CIP和應用間連接建立后發送節點和接受節點通過雙方的連接標識符對連接和報文進行確認。而數據管理是對對象的數據結構和編址類型進行定義。最后我們再區分一下顯示報文和隱式報文
顯示報文:用于在傳輸時不追求實時性,對時間要求不嚴格內容,比如程序的上傳下載,設備配置信息等。
隱式報文:傳輸I/O數據。
Ethernet/IP協議
首先我們來看一下CIP協議封裝數據包的結構

那我們就從頭來看,
命令:兩字節整數,要求與通用工業協議規范中某條特定指令相關,在CIP協議中,即使設備不認識這個命令是什么也必須接收,而且異常處理時必須確保連接不中斷,這種設計很好的保證了協議的穩定性,降低了中斷連接的風險。CIP協議本身有著實時性、確定性、可重復性、可靠性等特點。
長度:兩字節整數,表示數據部分長度,不存在則為0,比如說請求數據包就不存在數據部分
會話句柄:由目標設備生成,返回至會話發起方,作為一種憑證,證明你可以和我進行對話,這個憑證在接下來的對話里還會用到。
狀態碼:反應了接收方對設備發送的命令的執行能力,0為成功執行,在請求數據包中永遠為0,下面列出其他幾種狀態碼。
0×0001無效或不支持的命令(這種命令異常處理時不中斷運行)
0×0002接收方處理命令資源不足(這里我沒找到相關資料描述,但根據CIP協議高穩定性原則推測應該會進行不中斷運行等待資源足的時候進行執行)
0×0003數據格式不正確或數據不正確
0×0065接收到無效數據長度
最大延遲:由于工業以太網對實時性要求高,這里的內容是這個包經歷的最大延遲。
發送方上下文:命令發送方會生成六個字節的值,接收方要原封不動的發回去,這個內容可以理解為回復的一種編號,發送方知道接收方收到了對應編號的報文,回復的是對相應報文的回復。
選項:始終為0,不為0的話包會被拋棄。
命令相關數據:這就和我們接受和發送的命令和自身情況有關了。
Ethernet/IP協議分析
這一部分我并沒有找到源碼,但是找到了一份用python3實現的模仿版本,就這份代碼簡單分析一Ethernet/IP的工作流程,下面進行重要部分的介紹。

先看一下初始變量。
首先出現的就是目標ip和端口,可以看到默認的設置中目的ip是空目的端口是44818,這就解釋了為什么Ethernet/IP協議一般運行在44818端口上,接著往下看,會話句柄session_handle,因為這個是在會話發生后目標設備生成,所以初始為空,后面是保持會話時間60s。第二部分就我們知道的來推斷應該是最大延遲部分,設置兩個列猜測是用來進行出入,上面內容是數據流和數據報。再看第三部分,分別設立ignoring_sender_context和internal_sender_context來進行上下文處理,下面開辟緩存區來用于接收數據。最后一部分是存在目標端口時候進行下一步。

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.gkrbnd.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        福彩原副主任