精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

物聯網設備安全分析之MAX! Cube LAN Gateway篇

安全
在這篇文章中,我們將為讀者介紹如何對物聯網設備進行安全評估。

[[179849]]

前言

在這篇文章中,我們將為讀者介紹如何對物聯網設備進行安全評估。這里將會詳細介紹進行評估所需的基本方法:對于不同的任務需要使用哪些工具,以及如何解決在分析過程中可能出現的問題。本文的目標讀者對為對物聯網設備安全分析感興趣的朋友,對逆向工程感興趣的讀者,或者只想了解如何通過技術手段來處理未知設備的讀者。

本文的重點不在于揭示某種設備的某種漏洞,而在于闡釋影響各種IoT設備的安全弱點,因此,本文介紹的內容同樣適用于其他的設備和場景。

分析對象

本文的分析對象是來自eQ-3公司的 MAX! Cube LAN Gateway (以下稱為“Cube”)。實際上,許多產品都捆綁了該設備,比如我的加熱控制系統中就帶有該設備。通過該設備名稱中的“Cube”不難猜出,它只是一個LAN網關,通過RF技術實現真正的“物聯網設備”或“智能設備”之間的通信。在本文中,我們將重點介紹以太網通信,因為它是管理軟件的主要通信方式。

搭建中間人攻擊場景

為了全面地了解該設備的通信狀況,我搭建了一個簡單的中間人攻擊場景。我在自己的系統上使用了一個USB網卡,并將其直接連接到Cube。首先,打開Cube,但是不要使用任何管理客戶端或其他需要通信的軟件,這樣就能了解Cube自身發送了什么數據包。我們發現,它只是試圖通過DHCP獲得IP,然后開始解析ntp.homematic.com。

為了讓Cube可以訪問互聯網,我已將自己的USB網卡配置為Cube的路由器。為了在不使用DHCP的時候可以通過192.168.0.222訪問Cube,我把設備的IP地址設為192.168.0.1/24,并進行了如下所示的配置,以允許通過USB網卡的NAT訪問互聯網:

  1. sysctl net.ipv4.ip_forward=1 
  2. iptables -t nat -A POSTROUTING -o enp0s25 -j MASQUERADE 
  3. iptables -A FORWARD -i enp0s20u9u3 -o enp0s25 -j ACCEPT 
  4. iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 

注意:設備enp0s20u9u3是連接到Cube的USB網卡,enp0s25是系統上的另一個網卡,該網卡連接到具有互聯網連接的路由器上。

因為Cube會向默認的路由器發送DNS查詢,所以,我們可以在機器上設置一個DNS服務器,或者直接將DNS查詢轉發給相應的域名服務器(例如OpenDNS服務器):

  1. iptables -t nat -A PREROUTING -i enp0s20u9u3 -p udp --dport 53 -j DNAT --to 208.67.222.222:53 
  2. iptables -t nat -A PREROUTING -i enp0s20u9u3 -p tcp --dport 53 -j DNAT --to 208.67.222.222:53 

這樣一來,我們就能設法觀察Cube發送的所有的數據了,例如使用Wireshark或tcpdump等工具來嗅探連接到Cube的NIC上通信數據。

發現網絡中的Cube設備

為了方便管理員自動識別本地網絡上的Cube設備,Cube提供了相應的網絡發現功能。下面的Wireshark屏幕截圖展示了由本地管理軟件發送的數據包:

Wireshark屏幕截圖

該軟件會向23272端口上的多播組地址224.0.01發送UDP數據包。在右下方,標記出來的hexdump部分是有效載荷(eQ3Max * \ x00 ********** I)。這是一個所謂的身份消息,用來命令Cube向數據包的源主機報告其序列號。下面的截圖顯示了Cube的響應:

Wireshark屏幕截圖

同樣,這里響應的有效載荷也在右下側(eQ3MaxApKMD1016788> I)做了標記。 我的設備的序列號是KMD1016788,所以一切正常。現在,我們只要發送這樣的UDP數據包,就能輕松找出本地網絡上所有的Cube設備。同時,我們也可以檢查某個主機是否是使用單播數據包的Cube設備。

我們自己也可以發送所有這些數據包,甚至單播數據包。對于這些任務,我更喜歡使用Scapy來完成。因為有了它,我們就可以在交互式Python shell中創建、發送/接收和操作數據包,這樣做是很方便的,因為這樣可以同時進行其他任務,如進行計算或數據轉換。Cube使用的UDP端口是23272。我們可以從前面的示例中獲取相應字符串(這是一個“身份消息(identity message)”,由有效載荷末尾的“I”表示),并將其發送到目標主機:

  1. >>> p = Ether()/IP(src="192.168.0.1"dst="192.168.0.222")/UDP(sport=23272dport=23272)/Raw("eQ3Max*\x00**********I") 
  2. >>> sendp(p, iface="enp0s20u9u3"

響應的有效載荷的內容如下所示:

  1. 00000000  65 51 33 4d 61 78 41 70  4b 4d 44 31 30 31 36 37 eQ3MaxAp KMD10167 
  2. 00000010  38 38 3e 49 00 09 9c 3e  01 13                   88>I...> .. 

注意:Cube發送的響應數據包的源和目標端口總是23272。所以,你要么一直使用23272作為源端口來獲得響應,要么使用pcap進行帶外捕獲——如果你使用隨機源端口的話。

實際上身份消息是非常有用的:所有其他UDP消息都需要該Cube的序列號,它將被放入請求的響應中。有了這個序列號,我們就可以發送其他消息類型了,例如 “重新啟動消息(reboot message)”(在有效載荷末尾用“R”進行標識):

  1. >>> p = Ether()/IP(src="192.168.0.1"dst="192.168.0.10")/UDP(sport=23272dport=23272)/Raw("eQ3Max*\x00KMD1016788R") 
  2. >>> sendp(p, iface="enp0s20u9u3"

就像該消息的名稱所示,它會重新啟動該設備。這種消息可以從本地網絡上的任何設備發出,無需任何身份驗證。

如何管理Cube

Cube的管理方式有三種:

本地管理軟件:這是一個可安裝在Windows上的EXE程序,它會在一個較大的隨機端口上啟動一個本地Web服務器,用于java applet…

遠程管理軟件:功能與登錄界面基本相同,只不過是托管在云中而已。

移動應用:我還沒有見過。

本地和遠程管理軟件的主要區別是遠程軟件的通信是加密的,這一點將在下文詳細介紹。

本地管理軟件非常有助于深入了解Cube的內部工作原理,因為通過觸發不同的功能,我們就可以觀察發送給Cube的相應請求了。為此,我們可以每次執行一個功能,然后捕獲相應的流量,從而大概了解哪些事情是可以通過Cube的遠程管理來執行的。

與“遠程代理”進行交互

為了使用遠程管理軟件,您必須在本地管理軟件中配置遠程管理所需的用戶名和密碼。請注意,對于Cube來說,每次只能通過一個客戶端進行管理。 因此,當本地管理軟件運行時,移動應用程序或遠程管理將無法工作。 只要在端口62910上有一個打開的TCP會話,那么其他客戶端就無法與此端口通信了。所以,本地網絡中可以到達Cube的62910端口的每個客戶端,都可以通過連接到Cube的這個端口來阻止其他客戶端登陸。

Cube和遠程管理工具之間的通信是加密形式的,但不是SSL / TLS ...它們的通信是借助HTTP POST請求來完成的,但是只對POST主體進行了加密。HTTP的頭部如下所示:

  1. POST /cube HTTP/1.1 
  2. Host: smarthome.md.de 
  3. connection: close 
  4. Content-Length: 32 
  5. Opt: "http://www.eq-3.com/MAX", ns=MAX 
  6. MAX-Serial: KMD1016788 

這些請求將發送到http://smarthome.md.de:8080。其中,一個相當重要的頭部是MAX-Serial。它必須包括有效的序列號,否則服務器將只是返回500 Internal Server Errors。

AES密碼

AES密碼用于加密發送到遠程管理工具的POST主體。Cube能夠支持"e"消息和"d"消息,這兩類消息分別實現了“加密”和“解密”功能。這樣的話,我們不僅可以對任意字符串進行加密,還能對Cube加密的任何字符串進行解密。下面有一個簡單的例子:

  1. ~ » ncat 192.168.0.222 62910 
  2. [...] 
  3. e:TEST^M 
  4. E:kvJcZ8bVAoyXaE7gK+q2Ug== 
  5. d:kvJcZ8bVAoyXaE7gK+q2Ug==^M 
  6. D:TESTAAAAAAAAAAAAAAAAAA== 

注意:Cube要求命令必須以“\ r \ n”結尾,否則它不會給予響應。為此,在netcat / ncat這樣的工具中發送命令時,不要直接按下RETURN,而應該先按CTRL + v,然后再按RETURN(由行末尾的“^ M”表示)。

該示例展示了Cube是如何對字符串TEST進行加密的,返回的密文是以Base64編碼的字符串kvJcZ8bVAoyXaE7gK + q2Ug ==。 為了對這個字符串進行解密,您可以使用它的解密功能,這樣就可以得到明文字符串TEST了。字符串的其余部分只是經過編碼的空字節(0x00),用于填充密文,使其符合AES塊大小的要求。

加密的字符串通常使用Base64編碼。下面,讓我們看一個真實的例子:為了使用遠程登錄,我們需要設置用戶名和密碼。從Cube發送到遠程系統的明文請求如下所示:

  1. H:KMD1016788,099c3e,0113 
  2. B:FOOBAR1,5a8a4a5d3c1bd612b8bf1e2fecf609f7,1,SuperSecret 

第一行包括的內容是序列號、RF地址和固件版本。 第二行包括用戶名(FOOBAR1)、MD5哈希值,數字(1)和實際密碼(SuperSecret)。MD5哈希值是 password||serial_number的哈希值:

  1. ~ » echo -n "SuperSecretKMD1016788"|openssl md5 
  2. (stdin)= 5a8a4a5d3c1bd612b8bf1e2fecf609f7 

為了將這個有效載荷發送到遠程系統,我們必須進行Base64編碼:

  1. ~ » echo -n "H:KMD1016788,099c3e,0113 
  2. B:FOOBAR1,5a8a4a5d3c1bd612b8bf1e2fecf609f7,1,SuperSecret"|base64 -w0 
  3. SDpLTUQxMDE2Nzg4LDA5OWMzZSwwMTEzCkI6Rk9PQkFSMSw1YThhNGE1ZDNjMWJkNjEyYjhiZjFlMmZlY2Y2MDlmNywxLFN1cGVyU2VjcmV0 

然后進行加密:

  1. e:SDpLTUQxMDE2Nzg4LDA5OWMzZSwwMTEzCkI6Rk9PQkFSMSw1YThhNGE1ZDNjMWJkNjEyYjhiZjFlMmZlY2Y2MDlmNywxLFN1cGVyU2VjcmV0^M 
  2. E:kGxTXPZVm8CQGcurInyvX3z4C+6zKKKcuS8Wp259XC1yKUfN8tFIfRt0s3qRliIcUGSAcuhuDzl7fpT6fWOnyysSxk9TG1cXtrcVkeNWUzgeO5poXjS5tJlXWgV64ibG 

我們現在可以將該Base64字符串復制到Burpsuite的中繼器中,進行Base64解碼(選中它,然后按CTRL + Shift + b),并將其發送到服務器,具體如下圖所示:

服務器返回了一個200 OK響應

如圖所示,服務器返回了一個200 OK響應,說明我們的請求成功了。之后,我們就可以使用用戶名FOOBAR1和密碼SuperSecret登錄到http://smarthome.md.de/的Web界面了。 為了給響應消息進行解密,我們可以對響應的主體進行Base64編碼(只選中響應的主體,并按CTRL + b),然后將其發送到Cube,利用其解密功能進行處理:

  1. d:QAINuzPCglmG1nNNI/ylrbV6AXKdtBQbkNXT/pMobpXSeuP6/tZtCIq8GD5YSHjK^M 
  2. D:aTowMDAwNTFiMSwwMDAwMDAwMCxmZmZmZmZmZg0KYjpPSw0KAAAAAAAAAAAAAAAA 

然后,對得到的Base64字符串進行解碼:

  1. ~ » echo -n "aTowMDAwNTFiMSwwMDAwMDAwMCxmZmZmZmZmZg0KYjpPSw0KAAAAAAAAAAAAAAAA"|base64 -d 
  2. i:000051b1,00000000,ffffffff 
  3. b:OK 

這里的重要問題是:該設備是如何加密該字符串的,加密密鑰是什么? 當談論AES加密時,你必須弄清楚:

使用的密鑰大小是多少? AES支持128、192和256位密鑰。

使用什么操作模式?

根據操作模式:初始化向量(IV)是什么?

第一個問題很容易回答:在供應商頁面上,他們說它使用的是AES-128。 那么操作模式是什么呢? 知道了它,我們就可以加密任意字符串。 最基本的操作模式是ECB:每個16字節塊都被獨立加密,對于它來說,如果對明文加密兩次后會得到相同的密文。 我已經通過字符串( 16 * “\xff”的Base64編碼)進行了測試,這個字符串的大小正好等于AES密碼的塊大小:

  1. e://///////////////////w==^M 
  2. E:XQfNd8PcLZgnJbwGTuTx5A== 
  3. e://///////////////////w==^M 
  4. E:XQfNd8PcLZgnJbwGTuTx5A== 

我們可以看到,對相同的明文(///////////////////// w ==)加密兩次,得到的密文是一致的,那么這可能意味著使用的是ECB 。 但是,讓我們看看多個塊是否是單獨進行加密的。 以下示例將會加密32 *“\ xff”(兩個塊):

  1. e://///////////////////w==^M 
  2. E:XQfNd8PcLZgnJbwGTuTx5A== 
  3. e://////////////////////////////////////////8=^M 
  4. E:XQfNd8PcLZgnJbwGTuTx5LM36fXWGGUjgVLWxtzwCgo

如果它使用了ECB模式,那么密文應包含兩份先前看到的字節序列:

  1. cryptotest » echo -n "XQfNd8PcLZgnJbwGTuTx5A=="|base64 -d |xxd 
  2. 00000000: 5d07 cd77 c3dc 2d98 2725 bc06 4ee4 f1e4 ]..w..-.'%..N... 
  3. cryptotest » echo -n "XQfNd8PcLZgnJbwGTuTx5LM36fXWGGUjgVLWxtzwCgo="|base64 -d |xxd 
  4. 00000000: 5d07 cd77 c3dc 2d98 2725 bc06 4ee4 f1e4 ]..w..-.'%..N... 
  5. 00000010: b337 e9f5 d618 6523 8152 d6c6 dcf0 0a0a .7....e#.R...... 

我們可以在hexdump中看到,第一個16字節的確與以前的加密結果一致,但是第二個塊是完全不同的。 實際上,ECB加密結果應該是這樣的:

  1. cryptotest » xxd plain_16 
  2. 00000000: ffff ffff ffff ffff ffff ffff ffff ffff ................ 
  3. cryptotest » xxd plain_32 
  4. 00000000: ffff ffff ffff ffff ffff ffff ffff ffff ................ 
  5. 00000010: ffff ffff ffff ffff ffff ffff ffff ffff ................ 
  6. cryptotest » openssl enc -aes-128-ecb -in plain_16 -nosalt -nopad -k TEST |xxd 
  7. 00000000: cb30 66d5 3db8 89f6 da4b 5831 d29c 6b9f .0f.=....KX1..k. 
  8. cryptotest » openssl enc -aes-128-ecb -in plain_32 -nosalt -nopad -k TEST |xxd 
  9. 00000000: cb30 66d5 3db8 89f6 da4b 5831 d29c 6b9f .0f.=....KX1..k. 
  10. 00000010: cb30 66d5 3db8 89f6 da4b 5831 d29c 6b9f .0f.=....KX1..k. 

我們現在知道,它不是ECB。第二種猜測是使用CBC模式進行的加密。CBC在進行AES加密之前,先對第一個塊用初始向量IV進行XOR運算,而所有后續塊將與前一塊的密文進行XOR運算。這樣做的好處是防止相同的明文加密兩次,會產生兩份相同的密文。對于這個IV來說,就是每次加密時生成的一個隨機數字。所以這里合理的猜測是,這個Cube使用的是靜態IV的CBC。

但是,要想解密密文的話,我們首先需要獲得相應的加密密鑰。我這里的猜測是,密鑰可能是基于序列號的,因為如果MAX-serial頭部中包含的是另一個序列號(即使有效)的話,那么遠程服務器就不會接受密文。然而,密鑰從未露面,同時Cube和遠程服務器在磋商加密參數的時候也沒有進行握手。所以,我猜測這個密鑰可能是通過序列號計算得到的。

除了軟件方面之外,我還還考察了Cube的硬件。結果是,電路板本身是很小,正面除了序列號之外,好像也沒有其他有用的信息。但是,我把它翻過來的時候,有趣的東西出現了……

電路板

背面有幾個QR碼,包括MAC地址,RF地址,序列號,以及一個...KEY ...?

標識為KEY的QR碼包含以“k”(可能是"key"的意思)為前綴的MD5哈希值,所以,我們不妨嘗試用這個密鑰來解密密文:

  1. ~ » echo -n "XQfNd8PcLZgnJbwGTuTx5LM36fXWGGUjgVLWxtzwCgo="|base64 -d |openssl enc -aes-128-cbc -d -nopad -nosalt -K 98bbce3f1b25df8e6894b779456d330e -iv 00 |xxd 
  2. 00000000: c975 1589 ed36 536c c975 1589 ed36 536c  .u...6Sl.u...6Sl 
  3. 00000010: ffff ffff ffff ffff ffff ffff ffff ffff  ................ 

棒極了!您可以看到,第二個塊已正確解密了。 實際上,第一個塊應該是相同的,但它看起來卻是完全隨機的。 在上一個命令中,我使用了空字節來作為IV(-iv 00)。但是,不要忘了,在解密CBC模式中的最后一個塊之后,需要將最后一個塊與IV進行XOR。這樣就好理解了:由于第一個塊(在解密期間將被最后處理)與一個錯誤的值進行了異或運算,所以才導致了不同的明文。

然而,在這種情況下獲得IV是相當容易的,因為我們知道明文。我們只要將前面得到的第一個塊與明文(即16 *“\ xff”)進行異或運算,就能得到正確的IV了。現在,請打開一個Python shell,只需要進行如下所示的操作即可:

  1. >>> hex(0xc9751589ed36536cc9751589ed36536c^0xffffffffffffffffffffffffffffffff) 
  2. '0x368aea7612c9ac93368aea7612c9ac93L' 

現在,讓我們用這里的IV再次對密文進行解密:

  1. ~ » echo -n "XQfNd8PcLZgnJbwGTuTx5LM36fXWGGUjgVLWxtzwCgo="|base64 -d |openssl enc -aes-128-cbc -d -nopad -nosalt -K 98bbce3f1b25df8e6894b779456d330e -iv 368aea7612c9ac93368aea7612c9ac93 |xxd 
  2. 00000000: ffff ffff ffff ffff ffff ffff ffff ffff  ................ 
  3. 00000010: ffff ffff ffff ffff ffff ffff ffff ffff  ................ 

如你所見,我們的明文已經完全恢復了!我們還可以解密遠程服務器的響應:

  1. ~ » echo -n "QAINuzPCglmG1nNNI/ylrbV6AXKdtBQbkNXT/pMobpXSeuP6/tZtCIq8GD5YSHjK"|base64 -d |openssl enc -aes-128-cbc -d -nopad -nosalt -K 98bbce3f1b25df8e6894b779456d330e -iv 368aea7612c9ac93368aea7612c9ac93     
  2. i:000051b1,00000000,ffffffff 
  3. b:OK 

現在,我們已經掌握了在Cube和遠程服務器上對字符串進行加密和解密的所有秘密。同時,我還實現了一個小的Python腳本,不僅使得加密/解密字符串變得更加簡單,同時還能完成適當的填充操作。

網絡發現的自動化

在我看來,分析未知設備的一個重要部分,就是讓其他人也能使用已獲得的信息,以支持他人的進一步研究,或能夠讓人們用通用工具來發現這樣的設備。當涉及到發現網絡上的設備時,我選擇的通用工具是Nmap。除了純端口掃描之外,它還提供了大量已知服務的簽名,同時,我們還可以通過NSE腳本來對其功能進行擴展。

NSE腳本是用Lua語言編寫的,而Lua又是一種相當簡單和易于理解的腳本語言。 開始編寫自己的腳本時,最簡單的方法是就是學習現有的腳本(腳本通常位于/usr/share/nmap/scripts目錄中,或者在線查找)。例如,對于身份請求來說,我們只需要發送一個UDP包,然后檢索響應的有效載荷即可。一個淺顯易懂例子是daytime.nse腳本,具體如下所示:

  1. portrule = shortport.port_or_service(13, "daytime", {"tcp", "udp"}) 
  2. action = function(host, port) 
  3.   local status, result = comm.exchange(host, port, "dummy", {lines=1}) 
  4.   if status then 
  5.     return result 
  6.   end 
  7. end 

在開頭部分,只是定義了一些元數據,實際上對于每個NSE腳本來說,真正的起始位置都是從portrule這里開始的。它定義了該腳本的運行時機。就本例來說,如果13端口已經打開了,并且與端口13或TCP或UDP服務匹配的時候,就會運行該腳本。 NSE腳本中的第二個重要的事情是action,它可以被看作是NSE腳本的main()函數。action總是需要兩個參數:主機和端口。應當指出,這些不僅僅是一個包含主機名或IP地址和端口號的字符串,每個都是一個保存了諸如主機表(host.mac_addr)中的MAC地址或端口表(port.protocol)中的協議(TCP或UDP)之類附加信息的表。

這個腳本使用了comm模塊中的exchange()函數,而該模塊是Nmap提供的諸多LUA模塊之一。這個函數的作用,只是發送一個有效載荷并返回響應。如果腳本需要向用戶返回信息的話,可以通過純字符串或LUA表的形式來返回。

作為Nmap腳本的第一個例子,這里只是在TCP端口62910連接Cube設備,并解析該設備返回的第一行內容,從而輸出該Cube設備的序列號、RF地址和固件版本 。

  1. H:KMD1016788,099c3e,0113,00000000,7ee2b5d7,00,32,100408,002c,03,0000 
  2. [...] 

所以,我們的腳本只需要連接到該端口,獲得響應并解析值KMD1016788(序列號)、099c3e(RF地址)和0113(固件版本),代碼具體如下所示:

  1. local shortport = require "shortport" 
  2. local stdnse = require "stdnse" 
  3. description = [[ 
  4. ]] 
  5. author = "CHANGEME" 
  6. license = "Same as Nmap--See https://nmap.org/book/man-legal.html" 
  7. categories = {"discovery", "safe"} 
  8. portrule = shortport.portnumber(0, "tcp") 
  9. action = function(host, port) 
  10. end 

在上面的代碼的基礎之上,可以繼續添加所需的功能。 因為我們只需要連接到一個端口來獲取響應而不發送任何東西,所以最簡單的方法是使用一個簡單的套接字。有了Nmap后,利用NSE腳本進行socket通信變得異常輕松:

  1. local sock = nmap.new_socket() 
  2. local status, err = sock:connect(host, port, "tcp") 
  3. if not status then 
  4.   stdnse.debug1("%s", err) 
  5.   return 
  6. end 
  7. local status, data = sock:receive() 
  8. if not status or not data then 
  9.   stdnse.debug1("%s", "Could not receive any data") 
  10.   return 
  11. end 

這樣就可以在變量ret中接收響應了,然后解析該變量,就能提取所需的信息了:

  1. local output = stdnse.output_table() 
  2. local serial, rf_address, firmware 
  3. for serial,rf_address,firmware in data:gmatch("H:(%u%u%u%d%d%d%d%d%d%d),(%x%x%x%x%x%x),(%d%d%d%d),") do 
  4.     output["MAX Serial:"] = serial 
  5.     output["RF Address"] = rf_address 
  6.     output["Firmware Version"] = firmware 
  7. end 

現在,我們就有了一個輸出表,其中包含了需要返回給用戶的所有信息。正如前面說過的一樣,為此只需在action的末尾放上一個“return output”即可。 完整的腳本可以在這里下載。

我們可以測試該腳本,檢查是否能夠正常工作:

  1. max-cube/nse » nmap --script maxcube-info.nse -Pn -p 62910 192.168.0.222 
  2. Starting Nmap 7.12SVN ( https://nmap.org ) at 2016-04-08 01:11 CEST 
  3. Nmap scan report for 192.168.0.222 
  4. Host is up (0.0051s latency). 
  5. PORT      STATE SERVICE 
  6. 62910/tcp open  unknown 
  7. | maxcube-info:  
  8. |   MAX Serial:: KMD1016788 
  9. |   RF Address: 099c3e 
  10. |_  Firmware Version: 0113 

從上面的結果來看,我們的腳本工作正常。但它可能是非常不可靠的:就像我前面提到的,當端口62910上有一個開放的TCP連接(例如管理軟件正在運行或有人通過netcat連接該端口)的時候,Nmap將無法與該端口進行通信,那么這個腳本自然就無法正常工作了。

一些有用的提示:

stdnse模塊提供了debug()函數,可以用來在腳本中打印所有的調試輸出。為此,至少需要提供一個-d命令行參數。

命令行參數-script-trace能夠提供調試NSE腳本所需的更詳細的輸出結果。

為了在已標識為打開的所有端口上運行該腳本,請在腳本名稱前面加上前綴+,例如不要用“-script myscript.nse”,而是使用“-script + myscript.nse”

接下來要做什么?

還有兩個大問題需要解決:

加密密鑰來自哪里?

我認為加密密鑰(看起來像一個MD5哈希值)是只有供應商知道的密碼串與序列號的哈希值。由于供應商可以區分密文,這意味著每個設備都可能有一個自己的密鑰(我只有一個設備可以測試)。

一個不同的論點:我在電路板上的QR碼中發現的密鑰。這可能表示,密鑰在設備的制造期間就已經確定下來了。 加密密鑰可以是完全隨機的,并且甚至可能不是包括序列號的任何明文的散列值。但這意味著供應商將需要建立一個列表,以便在制造期間將所有的序列號都映射為相應的密鑰。

文件firmware.enc是如何加密的?

Cube提供了更新功能,也就是可以通過UDP數據包發送一些新版本的固件(記住,這是未經驗證的)。 然而,固件文件是不可讀的,并且需要在該設備上進行解密,因為管理軟件只能解析文件,但無法解密它們。我已經編寫了一個簡單的解析代碼(地址https://github.com/ernw/insinuator-snippets/tree/master/maxcube/firmware/parser),但固件本身似乎是加密的。

不過,我猜修改固件是一件很酷的事情。

編寫其他Nmap腳本

正如在文章開頭所看到的那樣,至少有兩種方法可以識別網絡上的Cube:多播或單播UDP數據包。然而,這些方法還是需要一點技巧的,因為響應的源端口是靜態的(總是23272)。所以,如果你打算在腳本中使用Nmap的comm.exchange()函數的話,那么是無法在函數中獲得任何響應的,因為它會使用隨機的源端口。

這個問題的解決方案是發送組播數據包,然后使用pcap捕獲響應。實際上,Nmap的一些腳本已經可以做到這一點了,例如我就寫過一個腳本,專門利用類似的技術來尋找KNX設備。

結束語

根據我們分析IoT設備的經驗,大部分物聯網設備都存在許多常見的安全漏洞,如缺乏身份驗證或驗證不足等。 此外,在網絡上識別這樣的設備通常是輕而易舉的事情,因為它們具有一些“奇異”的屬性,例如響應分組中的固定源端口或者僅允許單個TCP連接等。所以,我希望分析未知設備的研究人員也開始共享他們的研究成果,例如向Nmap等項目貢獻代碼,以便幫助更多的人。

責任編輯:趙寧寧 來源: 安全客
相關推薦

2018-08-03 16:09:09

2023-05-11 12:17:08

2022-11-08 10:19:15

2022-04-13 13:42:55

物聯網漏洞安全

2021-08-06 11:12:58

物聯網安全設備

2021-07-06 14:00:54

物聯網IOT

2018-10-18 05:29:04

物聯網設備物聯網安全IOT

2018-11-01 11:16:11

2020-08-10 00:12:42

物聯網設備物聯網安全物聯網

2018-12-17 13:45:19

2019-03-14 09:41:28

物聯網安全惡意攻擊僵尸網絡

2022-11-04 15:13:29

2019-07-11 13:58:42

物聯網安全DDOS

2016-04-08 10:18:55

2023-08-25 11:49:40

2020-01-31 11:25:02

物聯網安全網絡安全

2021-10-25 14:05:00

物聯網安全設備

2021-03-15 14:59:28

物聯網互聯網IoT

2018-06-06 01:02:31

2021-01-05 18:32:12

物聯網安全
點贊
收藏

51CTO技術棧公眾號

国产精品女主播| 中文字幕日韩av电影| 日本午夜激情视频| 韩国三级在线观看久| 国产精品一二三四五| 777精品视频| 久久爱一区二区| 国产伦理久久久久久妇女| 富二代精品短视频| 亚洲精品日韩在线观看| 丰满熟妇人妻中文字幕| 男男视频亚洲欧美| 97在线日本国产| 欧美成人777| 黄色免费大全亚洲| 91精品免费观看| 美女黄色片视频| 99爱在线观看| 亚洲精品亚洲人成人网| 日韩精品久久久| 天堂网在线播放| 精彩视频一区二区| 欧美又大又粗又长| 国产亚洲精品成人| 亚洲91久久| 中文字幕精品视频| 日韩精品卡通动漫网站| 国产成人一二片| 91精品蜜臀在线一区尤物| 亚洲福利精品视频| 伊人久久视频| 欧美日韩一区二区在线 | 精品国产乱码久久久久久蜜柚| 中日韩精品视频在线观看| 99re6这里只有精品| 亚洲欧美激情一区| 又黄又爽的网站| 91精品国产自产在线丝袜啪| 欧美老年两性高潮| 天天色综合天天色| 手机看片久久| 在线免费一区三区| 一本久道综合色婷婷五月| 国产精品xx| 亚洲成人第一页| 被灌满精子的波多野结衣| av软件在线观看| 亚洲欧美日韩国产综合在线 | youjizz.com国产| 精品亚洲二区| 日韩一区二区三区三四区视频在线观看| 污版视频在线观看| 国产精品久久久久久久久免费高清| 色综合亚洲欧洲| 国语对白做受xxxxx在线中国| 热色播在线视频| 欧美日韩中文字幕日韩欧美| heyzo国产| 一个人www视频在线免费观看| 天天亚洲美女在线视频| 国产 福利 在线| 欧美一区久久久| 色婷婷狠狠综合| 国产成人无码av在线播放dvd| jizz内谢中国亚洲jizz| 色就色 综合激情| 中文字幕网av| 国产高清亚洲| 精品精品国产高清一毛片一天堂| 国产综合内射日韩久| 国产一区福利| 亚洲欧洲一区二区三区在线观看| 欧美 日韩 成人| 91欧美在线| 欧美激情亚洲视频| 国产在线观看黄色| 麻豆freexxxx性91精品| 亚洲在线免费看| 天堂在线中文网| 国产亚洲欧美在线| 异国色恋浪漫潭| 丁香花在线电影| 91电影在线观看| 亚洲综合123| 免费成人蒂法| 中文字幕精品久久久久| 欧美黄色一区二区三区| 乱码第一页成人| 91久久精品在线| 亚州视频一区二区三区| 国产精品亲子乱子伦xxxx裸| 男女裸体影院高潮| 欧美天堂视频| 日韩欧美另类在线| 中文字幕网站在线观看| 欧美96在线丨欧| 国产精品国产三级国产aⅴ浪潮| 99热在线只有精品| 久久五月婷婷丁香社区| 亚洲图片都市激情| 3344国产永久在线观看视频| 欧美日韩在线三区| 性久久久久久久久久久| 99久久亚洲精品| 91精品国产91久久| 国产精品熟女久久久久久| 91尤物视频在线观看| 中文一区一区三区免费| 亚洲色图官网| 精品久久久久久久久久久久包黑料 | 久久午夜夜伦鲁鲁一区二区| 日韩影片在线观看| 永久555www成人免费| 欧美成人aaaaⅴ片在线看| 看片的网站亚洲| 欧美三级华人主播| 草美女在线观看| 欧美日韩美少妇| 性欧美13一14内谢| 极品尤物久久久av免费看| 国产日韩欧美中文在线播放| 你懂的在线网址| 午夜精品久久一牛影视| 午夜影院免费版| 91综合视频| 国产精品嫩草影院久久久| 日本免费不卡| 亚洲成人av在线电影| 中文字幕第10页| 欧美大黑bbbbbbbbb在线| 国产99视频精品免视看7| 天天操天天爱天天干| 亚洲狠狠丁香婷婷综合久久久| wwwwwxxxx日本| 久久一本综合| 国产精品伦子伦免费视频| 亚洲av片在线观看| 午夜久久久久久电影| 美国黄色一级视频| 国产精品vip| 动漫一区二区在线| 欧洲成人综合网| 精品日韩欧美在线| 免费在线视频观看| 成人深夜福利app| 成人免费观看在线| 开心激情综合| 91禁外国网站| 久久久久久女乱国产| 一本久道中文字幕精品亚洲嫩| 亚洲黄色在线网站| 亚洲欧美日韩国产| 欧美精品与人动性物交免费看| 在线天堂资源| 亚洲人成人99网站| 精品乱码一区内射人妻无码| 国产欧美精品区一区二区三区| 亚洲男人天堂色| 999视频精品| 97netav| 久久香蕉一区| 精品亚洲一区二区三区在线观看| 中文人妻av久久人妻18| 中文字幕精品一区二区精品绿巨人| 亚洲36d大奶网| 91精品一区二区三区综合在线爱| 91手机在线观看| heyzo高清在线| 日韩精品在线第一页| 波多野结衣网站| 亚洲欧洲成人av每日更新| 青娱乐国产精品视频| 伊人激情综合| 欧美专区一二三| 欧美韩国日本| 久久久久国色av免费观看性色| 天天综合在线视频| 91国偷自产一区二区三区观看| 免费一级suv好看的国产网站| 国内一区二区在线| 欧美精品自拍视频| 日本黄色精品| 国产高清精品一区二区三区| 三上悠亚国产精品一区二区三区| 日韩天堂在线视频| 欧美性受xxxx狂喷水| 欧美最猛性xxxxx直播| 婷婷在线精品视频| 久久色.com| 伊人五月天婷婷| 亚洲女同在线| 久久久99精品视频| 精品国产乱码| 国产伦精品一区二区三区四区免费| 欧美18—19sex性hd| 美女久久久久久久久久久| 性xxxxbbbb| 欧美一区二区三区免费观看视频 | а√天堂在线官网| 亚洲精品色婷婷福利天堂| 国产精品无码一区二区桃花视频| 黄色精品一区二区| 在线观看美女av| 久久影视一区二区| 无套白嫩进入乌克兰美女| 日韩精品电影一区亚洲| 欧美久久久久久久久久久久久久| 国产午夜一区| 国产一区免费在线| 精品亚洲a∨一区二区三区18| 国产精品久久久久国产a级| sm久久捆绑调教精品一区| 精品国产一区二区三区在线观看 | 成人h动漫精品一区二区器材| 国产精品久久99久久| 丁香影院在线| 久久99热精品| 成人影院在线观看| 伊人久久免费视频| 黄色的视频在线免费观看| 精品国产自在久精品国产| 国产精品久久综合青草亚洲AV| 色综合久久综合| 国产尤物在线视频| 亚洲二区视频在线| 欧美成人精品一区二区免费看片| 国产精品福利影院| 青娱乐国产视频| 国产亚洲综合色| 亚洲精品在线视频免费观看| 成人美女视频在线观看| 日本少妇激三级做爰在线| 精品在线免费视频| 久久婷五月综合| 欧美aⅴ一区二区三区视频| 成人在线激情网| 午夜影院日韩| 97成人在线观看视频| 国产一区二区三区成人欧美日韩在线观看 | 午夜日韩av| 激情视频小说图片| 影音先锋成人在线电影| 在线成人性视频| 91一区二区三区四区| 中日韩在线视频| 天天av综合| 午夜探花在线观看| 亚洲天天影视网| 日本一道在线观看| 欧美激情在线| 欧美一级中文字幕| 亚洲精品激情| 人妻熟妇乱又伦精品视频| 亚洲在线观看| 韩国中文字幕av| 麻豆中文一区二区| 搡的我好爽在线观看免费视频| 国产一区二区导航在线播放| 一级黄色大片儿| 成人av午夜电影| 少妇按摩一区二区三区| 国产欧美日韩另类一区| 18啪啪污污免费网站| 亚洲女同ⅹxx女同tv| 久久久久久久久精| 精品美女国产在线| 中文字幕手机在线视频| 欧美日韩精品一区二区| 精品人妻一区二区三区日产乱码| 精品国产一区二区三区av性色 | 伊人久久大香线蕉av一区二区| 91精品国产91久久久久游泳池| 操人视频在线观看欧美| 懂色av一区| 国产精品亚洲激情| 97久久综合区小说区图片区| 免费在线观看91| 天天天综合网| 国产网站免费在线观看| 免费成人美女在线观看.| 国产黄色一区二区三区| 91在线精品一区二区三区| 少妇av片在线观看| 亚洲激情自拍视频| 中文字幕免费在线观看视频| 欧美人xxxx| 亚洲精品一区二区口爆| 国产香蕉精品视频一区二区三区| 岛国最新视频免费在线观看| 欧美美女18p| 欧美成人h版| 69堂成人精品视频免费| 宅男在线一区| 996这里只有精品| 青青国产91久久久久久| 中文字幕无人区二| 亚洲国产精品激情在线观看| 国产一级生活片| 欧美日韩国产三级| 亚洲区小说区图片区| 伦伦影院午夜日韩欧美限制| 午夜激情成人网| 国产精品一区在线播放| 国产精品久久久久蜜臀| 毛片一区二区三区四区| 国产成人免费视频网站| 卡一卡二卡三在线观看| 午夜欧美视频在线观看| 91色在线播放| 亚洲午夜久久久影院| 黄色激情在线播放| 91传媒视频在线观看| 第四色成人网| 国内外成人激情视频| 不卡在线观看av| 欧美成人片在线观看| 欧美日韩免费不卡视频一区二区三区 | 亚洲天堂成人在线| 国产精品一二三产区| 91久久大香伊蕉在人线| 青青草原综合久久大伊人精品| 国产二区视频在线播放| 粉嫩在线一区二区三区视频| 成人自拍小视频| 欧美裸体bbwbbwbbw| 欧美一区二区三区少妇| 97久久久免费福利网址| 日韩中文字幕一区二区高清99| 中文字幕日韩一区二区三区不卡| 日韩国产成人精品| 欧美18—19性高清hd4k| 一本到不卡免费一区二区| 污污视频在线观看网站| 久久久最新网址| 成人福利免费在线观看| 黄色特一级视频| 国产成人av一区二区三区在线观看| 精品久久中出| 综合久久2019| 91久久久久久久久| 亚洲第一天堂| 国内精品国产三级国产aⅴ久| 26uuu国产| 中文字幕第一区二区| 凹凸精品一区二区三区| 亚洲天堂av女优| 日本.亚洲电影| 午夜精品区一区二区三| 日韩精品福利网| 中文字幕第69页| 717成人午夜免费福利电影| 免费在线看a| 亚洲一区二区免费| 欧美久久综合| 日韩综合第一页| 精品久久久久久中文字幕大豆网| 少妇精品高潮欲妇又嫩中文字幕 | 国产成人久久精品77777最新版本| 国产男女猛烈无遮挡在线喷水| 欧美欧美欧美欧美首页| 成人黄视频在线观看| 超碰97人人人人人蜜桃| 亚洲国产裸拍裸体视频在线观看乱了中文| 涩视频在线观看| 日韩欧美亚洲综合| av在线免费观看网| 成人黄色生活片| 亚洲福利一区| xxxx日本黄色| 4438x成人网最大色成网站| 在线观看免费视频你懂的| 国产综合动作在线观看| 老司机久久99久久精品播放免费| 日韩精品久久久久久久的张开腿让 | 精品中文字幕乱| 精品综合久久88少妇激情| 欧美一级黄色片视频| 国产精品国产三级国产普通话99| 国产成人精品白浆久久69| 97国产在线视频| 成人在线国产| 成人欧美精品一区二区| 一本大道久久a久久综合| 理论片午午伦夜理片在线播放| 国产精品国产精品| 视频在线观看国产精品| 欧美偷拍第一页| 亚洲美女激情视频| 成人动漫视频在线观看| 成人在线免费观看av| 成人欧美一区二区三区白人| 熟妇人妻系列aⅴ无码专区友真希| 国产精品极品美女在线观看免费| 黄色工厂这里只有精品| 少妇av片在线观看| 亚洲国内高清视频| 亚洲视频自拍| 国产精品第12页| 亚洲综合色丁香婷婷六月图片| 国产视频网址在线|