- 室内の犬を観察するために Tapoカメラ を購入したが、思いがけず TP-Link機器とアプリの動作原理 を逆解析することになった
- オンボーディング過程 と 暗号化API通信 の構造を分析するため、MITM、APKデコンパイル、復号スクリプト作成などさまざまな手法を用いた
- 初期管理者パスワード の発見とセッションキー導出過程を通じて暗号化メッセージを復号し、デバイスとクラウドアカウント間の信頼性のない同期問題を把握した
- オンボーディング全体の流れ を分析し、主要なAPI呼び出し、アカウント作成、パスワード変更、Wi‑Fi接続過程などを Bash スクリプトで自動化した
- Tapoファームウェアのセキュリティ設計上の欠陥、洗練されていない暗号化実装、不規則なアカウント同期など、低価格IoTデバイスの特徴を指摘している
プロジェクト概要
- 筆者は室内で犬を見守るために 低価格のTapoカメラ を購入して使用した
- 使用する中で 設定の不便さ とオンライン情報の不足により、製品の動作原理を深く掘り下げる動機を持つようになった
- frigate 連携や 2way audio の有効化などで予想外の問題が発生し、クラウド連携なしの 直接オンボーディング の方法に関心を持った
オンボーディングと認証構造の分析
- Tapoカメラの接続手順を分析するため、MITM proxy と frida の動的フックツールを使ってアプリとカメラ間のトラフィックを傍受した
- 最新のアプリはプロキシ無視や certificate pinning などの耐回避機能を備えているため、動的ツールを用いる手法が有効だった
- このような回避構成を整えた後、カメラのオンボーディングフローで デフォルト管理者アカウントのlogin 過程を正確に確認した
- デフォルトlogin API はクラウドアカウントのパスワードとは別に、デバイス固有の デフォルトパスワード で動作することを発見した
暗号化構造とデフォルトパスワードの探索
- APKデコンパイル(JADX使用) とコード分析を通じて、
admin アカウントの デフォルトパスワード(TPL075526460603)を入手した
- クラウドのパスワードを変更しても、すでに連携済みのカメラ機器は変更を認識できない点から、アプリとカメラ間の パスワード同期が不正確 であることを確認した
- デフォルトパスワードが判明したため、セッションキー(
lsk, ivb)の導出ロジックを実装し、暗号化APIメッセージ をリアルタイムで復号できるようにした
mitmproxyスクリプティングとAPI分析
- PyTapo オープンソースプロジェクトを参考に、実際の Tapoオンボーディング手順のAPIフロー を詳細に分析した
tapo_decrypt_pretty.py スクリプトを通じて
- loginハンドシェイクの検出
- セッションキーの抽出
- 暗号化APIの復号と可読性の高い出力、JSON保存
- オンボーディング全体のAPI呼び出し履歴のうち、有意な主要過程だけを抽出して自動化ワークフローを作成した
- Wi‑Fi一覧取得(
scanApList)
- RTSP/ONVIFアカウントの有効化
- 管理者パスワードの変更
- Wi‑Fi接続
自動化と結果
- Bashスクリプト(
tapo_onboard.sh)で上記のオンボーディング過程を 自動実行 できるよう構成した
- デフォルトadmin login
- Wi‑Fiの選択と接続
- カメラフィードのロゴ削除
- RTSP/ONVIFの使用許可
- 管理者パスワードの再設定
- カメラのファームウェア構造上、次のような特徴と欠陥を発見した
- 一部のAPIは SHA-256ハッシュ を使う一方、いくつかは MD5 など旧式の暗号方式を維持している
- 公開鍵 が2つ存在し、どの状況でどの鍵を使うべきか不明確である
- アプリとデバイス間の パスワード同期 が非常に不安定である
結論と所感
- TapoカメラのファームウェアとAPIのセキュリティ構造は その場しのぎで洗練されていない設計 に感じられた
- 低価格IoT機器の セキュリティ上の欠陥 と不完全なオンボーディングシステムの現実を間接的に体験した
- プロジェクトの最終目標だった犬の見守りには成功し、犬はたいていソファかベッドで寝ていることを確認した
まだコメントはありません。