概要
- Kickstarterで入手したスマートスリープマスクの技術的詳細
- Bluetoothプロトコルのリバースエンジニアリング過程
- Flutterアプリの解析によるプロトコル解明
- MQTT経由で他人の脳波データ取得・EMS制御の危険性
- セキュリティ上の重大な問題点と開発元への通知
Kickstarter製スマートスリープマスクのリバースエンジニアリング体験
- Kickstarter で購入した中国製スマートスリープマスクの入手
- EEG脳波計測、EMS(電気筋肉刺激)、バイブレーション、加熱、オーディオ機能搭載の高性能ハードウェア
- 公式アプリの完成度が低く、Bluetooth切断も多発
- Claude(Opus 4.6) によるBluetoothプロトコル解析依頼
Bluetoothプロトコル解析
- 周囲の BLEデバイス35台 から当該マスクを特定・接続
- 2つのデータチャネル(コマンド送信用、データストリーム用)を発見
- 標準的なコマンド(Modbus、JSON、バイト列など)を100パターン以上送信も、 非標準プロトコル で応答なし
アプリケーション解析
- Android APK を取得しjadxでデコンパイル
- アプリが Flutter 製であることを確認、Dart→ARM64のネイティブコード化により通常のJava解析が困難
- 9MBバイナリブロブ 内の文字列抽出(エラーメッセージ、URL、デバッグログ等)
- 会社の MQTTブローカー用ハードコーディング認証情報
- クラウドAPIエンドポイント
- 15種類のコマンドビルダー関数名(バイブ、加熱、EMS等)
- パケット構造を示すデバッグメッセージ(ヘッダー、方向バイト、コマンド種別、ペイロード、フッター)
コマンドバイト値の特定
- blutter というFlutterバイナリ解析ツールを使用
- 関数のアノテーションを読解し、 全15コマンドのバイト列 を直接取得
Webダッシュボードの構築
- 6バイトのクエリパケット送信で、153バイトの詳細データを取得
- モデル番号、ファームウェアバージョン、シリアル番号
- 8chセンサー設定(EEG 250Hz、呼吸、3軸加速度、3軸ジャイロ)
- バッテリー残量(83%)
- バイブ、加熱、EMS、音楽の各機能を Webダッシュボード から制御可能に
MQTTサーバーの脆弱性発覚
- アプリから抽出した 共通認証情報 でMQTTブローカーに接続
- 全デバイス共通の認証情報 で他ユーザーのデータにもアクセス可能
- 約25台のデバイスが同時接続
- スリープマスク: リアルタイムEEG脳波データ 配信
- 空気質モニター:温度、湿度、CO2
- プレゼンスセンサー:部屋の在室検知
- 他人のスリープマスクから REM睡眠・徐波睡眠の脳波データ を取得
EMS(電気筋肉刺激)の危険性
- EMS制御も単なるコマンド送信で可能(モード、周波数、強度、持続時間)
- 認証情報共通化のため、第三者が他人のマスクへEMS信号を送信可能
セキュリティ問題と対応
- 製品名・会社名は非公開だが、 開発元には脆弱性を通知済み
- KarpathyのDigital Hygiene投稿 の再読を推奨
- リバースエンジニアリング作業は Claude(Opus 4.6) が約30分で自律的に完了
IoTデバイスのセキュリティ課題
- IoT製品の認証情報共通化 による深刻なリスク
- MQTT等の 標準プロトコル利用時のセキュリティ設計不備
- 個人情報・生体データ漏洩 の危険性
- 遠隔からのデバイス制御 による身体的リスク(EMS等)
今後の注意点・推奨事項
- IoTデバイス購入時のセキュリティ確認 の重要性
- 認証情報の個別化・アクセス制御 の徹底
- 開発者・利用者ともに デジタル衛生意識 の向上
- 脆弱性発見時の適切な開発元通知 と情報共有