HEMSのローカルデータストレージの漏洩
黒林檎です。
IoT機器の脆弱性診断の報告対象に「ローカルデータストレージの漏洩」というものがあります。
これは、IoT機器などから資格情報やPII(個人を特定できる情報)・PHI(健康情報)などの情報を抽出できる場合に指摘されるものです。
そこで今日は、IoT機器として注目を良く浴びるようになったHEMS(Home Energy Management System)を見ていきます。
この脆弱性の範囲として、ユーザーが廃棄したIoT機器を攻撃者が拾った場合に上記の情報を攻撃者が取得し悪用できる可能性がある場合なども含むこともあると思います。(Trash can attackっていう名前で呼ばれているらしいですが、ここは日本なのでゴミ箱攻撃と呼んでいきます。)
[+]Trash can attack 参考
攻撃までの流れを図解していくと・・・
(図)ゴミ箱攻撃の流れ
名前の通り、ユーザーがー故障などでIoT機器(ここではHEMS)を廃棄した際にOther work(ゴミ収集など)が回収する前に悪意ある攻撃者が回収してしまう事が始まりです。
ゴミ箱攻撃の現実性でいえば、「まぼろし博覧会」の”村崎百郎の部屋”という展示場所に村崎氏がゴミから拾い上げた手紙や写真などがそのまま展示されていたりしました。
同じように会社が廃棄した物を集めているコレクターもいるかもしれません。
余談を含みましたが、ゴミ箱から回収した想定で基板を取り出していきます。
(図)HEMSの基板取り出し
電子機器に詳しい方であれば一目瞭然であると思いますが、赤外線を用いて家電操作を行うHEMSです。(※LED電球に見えるものは赤外線送信機で、黒く四角いものは赤外線受信機になります。)
基板からハッキングに使える箇所がないか見ていきます。
(図)HEMS基板
RX・TXでUARTがあるのと、TRST・TCKなどでJTAGがあることがわかります。
難易度でいうと、UARTの方が容易であるため接続するインターフェースとしてUARTを今回選択しました。
今回、デバッグピン用に基板に穴が既に空いていたためはんだ付け作業はする必要性が無かったためPCに接続してどの様な情報が出力されるか見ていきます。。
(図)UART接続
実際にUART経由で正常に接続が成功し、文字列が表示されました。
出力された文字列を精査していきます。
※問題点を明確化するために、HEMSがWiFiなどに繋がらない環境でUART接続を行いました。
===========表示された文字列===========
# python baudrate.py -p /dev/ttyUSB1
Starting baudrate detection on /dev/ttyUSB1, turn on your serial device now.
Press Ctl+C to quit.
@@@@ Baudrate: 115200 @@@@@
[wlcm] got wifi message: 8 0 0x00000000
[wlcm] got event: scan result
[wlcm] 11D enabled, re-scanning
[wlcm] initiating scan for network "default"
[wscan] Channel: 1 Type: Active
[wscan] Channel: 2 Type: Passive
[wscan] Channel: 3 Type: Passive
[wscan] Channel: 4 Type: Active
[wscan] Channel: 5 Type: Passive
[wscan] Channel: 6 Type: Passive
[wscan] Channel: 7 Type: Passive
[wscan] Channel: 8 Type: Passive
[wscan] Channel: 9 Type: Active
[wscan] Channel: 10 Type: Passive
[wscan] Channel: 11 Type: Active
[wscan] Channel: 12 Type: Passive
[wscan] Channel: 13 Type: Passive
[wscan] Channel: 14 Type: Passive
app_wifi_connect Timer out.
ssid r00tapple psk wifi-password-is-password need broad 0
type 3
ssid r00tapple psk wifi-password-is-password psklen 8, type 5 special 0
[af] Error: network_mgr: failed to remove network
[af] Warn: network_mgr: valid network already loaded
app_network_status_set to status. 6.....
[af] Warn: app_ctrl: Ignored event 6 in state 12
[wlcm] got wifi message: 8 0 0x00000000
[wlcm] got event: scan result
[wlcm] rescan limit exceeded, giving up
[wlcm] Warn: connecting to "default" failed
[af] Warn: network_mgr: WLAN: network not found
[wlcm] got wifi message: 32 0 0x00000000
[wlcm] starting connection to network: 0
[wlcm] initiating scan for network "default"
[wscan] Channel: 1 Type: Active
[wscan] Channel: 2 Type: Passive
[wscan] Channel: 3 Type: Passive
[wscan] Channel: 4 Type: Active
[wscan] Channel: 5 Type: Passive
[wscan] Channel: 6 Type: Passive
[wscan] Channel: 7 Type: Active
[wscan] Channel: 8 Type: Active
[wscan] Channel: 9 Type: Active
[wscan] Channel: 10 Type: Passive
[wscan] Channel: 11 Type: Active
[wscan] Channel: 12 Type: Passive
[wscan] Channel: 13 Type: Passive
[wscan] Channel: 14 Type: Passive
[wlcm] got wifi message: 8 0 0x00000000
[wlcm] got event: scan result
[wlcm] 11D enabled, re-scanning
[wlcm] initiating scan for network "default"
[wscan] Channel: 1 Type: Active
[wscan] Channel: 2 Type: Passive
[wscan] Channel: 3 Type: Passive
[wscan] Channel: 4 Type: Active
[wscan] Channel: 5 Type: Passive
[wscan] Channel: 6 Type: Passive
[wscan] Channel: 7 Type: Active
[wscan] Channel: 8 Type: Active
[wscan] Channel: 9 Type: Active
[wscan] Channel: 10 Type: Passive
[wscan] Channel: 11 Type: Active
[wscan] Channel: 12 Type: Passive
[wscan] Channel: 13 Type: Passive
[wscan] Channel: 14 Type: Passive
[wlcm] got wifi message: 8 0 0x00000000
[wlcm] got event: scan result
[wlcm] 11D enabled, re-scanning
[wlcm] initiating scan for network "default"
[wscan] Channel: 1 Type: Active
[wscan] Channel: 2 Type: Passive
[wscan] Channel: 3 Type: Passive
[wscan] Channel: 4 Type: Active
[wscan] Channel: 5 Type: Passive
[wscan] Channel: 6 Type: Passive
[wscan] Channel: 7 Type: Active
[wscan] Channel: 8 Type: Active
[wscan] Channel: 9 Type: Active
[wscan] Channel: 10 Type: Passive
[wscan] Channel: 11 Type: Active
[wscan] Channel: 12 Type: Passive
[wscan] Channel: 13 Type: Passive
===========表示された文字列===========
HEMSから出力された情報の一部に、WiFiのSSID(r00tapple)とパスワード(wifi-password-is-password)が出力されていることがわかります。
今回の場合、接続していたWiFiがHEMS周辺に無い場合(HEMSが接続していない)でもデバッグ情報に表示されていました。
====該当箇所====
app_wifi_connect Timer out.
ssid r00tapple psk wifi-password-is-password need broad 0
type 3
ssid r00tapple psk wifi-password-is-password psklen 8, type 5 special 0
[af] Error: network_mgr: failed to remove network
[af] Warn: network_mgr: valid network already loaded
===============
さて、IoTの流れに伴い会社のWiFiに接続しているIoTも増えていることでしょう。
そのIoTが故障し廃棄する際に、一般家電のように廃棄するリスクも検討する必要性がありそうです。
今回はWiFiのパスワードを抽出できたため、下記のような流れで社内ネットワークを侵害される可能性もあります。
(図)廃棄したIoTから漏洩した資格情報で社内ネットワークを侵害
IoTが普及し故障などで廃棄されていく未来で、廃棄機器を利用した資格情報の漏洩は問題視されて来るかと思います。
[+]関連する黒林檎ドキュメント
黒林檎のお部屋-IoTハッキング編-
http://ruffnex.net/kuroringo/pdf/IoTHack.pdf
IoTセキュリティ対策 診断・解析入門(※社員ではありません。)
IoTセキュリティ対策 診断・解析入門 | SECURITY BLOG by Ierae Security, Inc.