cyber kill chain手法

[1.偵查]wireshark 撈modbus封包

wireshark撈modbus 做分析

基本上在一些工業控制或是OT物聯網的環境內,很難不會去碰到Modbus這個東西,假設你的環境網路上有一個modbus設備,你剛好知道他的Modbus有getway幫你連網這時候你就可以透過wireshark去掃描,如下圖所示。

你可以在你的wireshark設定filter是modbus或是port 502 (modbus預設範例port)這時候就會看到封包出來了,當然前提是對方的modbus設備沒改port,有改的話就不會這樣顯示了。

如上圖你可以發現該modbus的IP是192.168.2.224,這是某公司的示範電盤modbus設備

這邊就要稍微講解一下modbus的基本運作原理,你才會看得懂wireshark

通常一個modbus getway這個IP下面可以串很多個modbus設備,getway只是讓這些OT設備(如冷氣、電盤、除濕機、電燈、門禁、鐵捲門…)變成可以上網而已。這些OT設備都透過rs485協定連線到同一個getway上面,我怎知道這個getway下面這些設備誰是誰,要怎控制他們。

所以這些OT設備每個人都會有一個專屬且不重複的modbus id ,ModbusID號為1bytes(0~255),但是前面有提過,slave最多只能設定成247,這是因為0是廣播模式,而剩餘的248~255是Modbus的保留ID

所以我們要控制或是讀取一個設備,我們會需要了解一下下面modbus協定。首先modbus id上面提過,再來就是功能碼

  • [控制碼01]READ_COILS
  • [控制碼02]READ_DISCRETE_INPUTS
  • [控制碼03]READ_HOLDING_REGISTERS 讀取輸入寄存器
  • [控制碼04]READ_INPUT_REGISTERS 讀取輸入寄存器
  • [控制碼05]WRITE_SINGLE_COIL
  • [控制碼06]WRITE_SINGLE_REGISTER
  • [控制碼15]WRITE_MULTIPLE_COILS
  • [控制碼16]WRITE_MULTIPLE_REGISTERS

通常我們主要只會用到03跟04而已,這兩個控制碼是拿來讀取資料用的,如果要控制、寫入設備就會是05跟06。

之後就是寄存器的地址這個,這個網路上文件其實寫的都有點難懂,你可以想像每個OT設備都有一個excel表一樣,那個表格存了很多欄位,代表著該設備的一些資訊(如電壓、電流、冷氣溫度、濕度…等等),所以你要告訴那個設備你要從哪個欄位開始讀取,而寄存器數量這個就是告訴她你一次要多取多少個欄位,最後就是CRC檢查碼。

只是通常上面這些資料都會是給hex 16進位的,你要使用要記得轉換回10進位你比較好理解

我通常是用這個網站 Hexadecimal to Decimal converter (通常工控軟體如:modbus poll 也都可以直接幫你轉好啦)

這時候我們可以回到wireshark跟Modbus poll軟體來參考一下對應一下資料。這樣應該就會清楚很多。你在wireshark欄位上點下去,他其實也會標色出來說他對應過去的碼是哪一個就是

所以回傳過來的也是這樣解法,可以看到modbus id=10

function code=4

地址4352欄位的資料是[hex]6d 91(地址4352這個封包上沒有寫,他是由你query那邊說要從4352開始抓而來的)

地址4353欄位的資料是[hex]42 e0 後面每兩個欄位為一組依序類推,總共會有72組的資料

至於4352這個欄位的數值28049([hex]6d 91)是代表甚麼意思,你就非得要看那個設備的文件他會有一個表格參考了,沒這個表格你要猜出來是啥欄位大概真的太難…

[後面這段看看就好,你沒文件根本就會是天書] 像是這個V_a這個電壓數值,他說他的地址在4353-4354這邊,因為地址從0開始的關係,所以要看wireshark的4352-4353這兩個欄位,分別值是6d 91跟42 e0,而這邊文件其實是走ieeee-754的轉換格式,所以你其實要把這兩個欄位對調後再組合再一起看,也就是變成42e06d91這時候套進去

ieee-754這個線上轉換器 可以得到數值為1.1222139968…..而他其實還要再乘上100倍,所以電壓就會是112.2V,就是這個設備的電壓值,轉換如下圖

真實世界的Modbus不一定都是走ieee-754這樣轉換,也有直接數值直接吃,也有直接hex轉10進位就是答案,這完全看該設備廠商怎定義的而已,所以除非你能拿到該設備文件拉,不然要猜他欄位真的很吃運氣就是,我就這樣猜過某些設備,看了很久很久才猜中幾個欄位…。

參考資料:簡介 Modbus TCP

Modbus RTU簡介(上)

PYTHON讀取MODBUS範例

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)