世界を動かす技術を、日本語で。

FBIがiPhoneの通知データを利用して削除されたSignalメッセージを復元

概要

  • 404 Media の新レポートによると、FBIがiPhoneの通知データベースから 削除済みのSignalメッセージ を復元
  • Signalアプリ削除後 でも通知履歴からメッセージ内容を取得可能
  • 通知プレビュー設定 が無効だった場合、通知内容が内部データベースに保存される仕組み
  • iOSの内部構造 や通知トークンの扱いが重要な要素
  • iOS 26.4 で通知トークン検証方法に変更、時期的な関連性も指摘

FBIによるSignalメッセージ復元事例

  • 404 Media の報道で、FBIが iPhoneの通知データベース から削除済みのSignalメッセージを復元した事例を紹介
  • 対象事件は ICE Prairieland Detention Facility での放火・器物損壊事件の裁判
  • 被告人 Lynette Sharp のiPhoneから、 Signalアプリ削除後 にもかかわらず通知履歴に残った 受信メッセージ を復元
  • 証拠として提示された Exhibit 158 は「Appleの内部通知ストレージからメッセージを取得」と記載
  • 復元できたのは 受信メッセージのみ で、送信メッセージは取得不可

Signal通知の仕組みとリスク

  • Signal には通知プレビューを 非表示 にする設定が存在
    • 今回のケースでは 設定が無効 だったため、通知内容がiOS内部に保存
  • AppleSignal も通知データの保存仕様について公式コメントなし
  • iOSは 様々なシステム状態 (BFU/AFUなど)によってデータアクセス権限が変化
  • ロック解除後 はより多くのデータにアクセス可能

通知トークンとiOSの仕様変更

  • アプリ削除後 も通知用トークンは 即時無効化されない
    • サーバー側はアプリのインストール状況を把握できないため、通知送信を継続
    • iPhone側で通知の表示・保存を判断
  • iOS 26.4 で通知トークン検証方法が変更
    • この事件との直接的な関連は不明だが、時期的な一致が注目点

法執行機関によるデータ抽出手法

  • FBIは Appleの内部通知ストレージデバイスバックアップ から情報抽出の可能性
  • iOSの脆弱性 を利用した市販のフォレンジックツールが存在
    • これらを用いて 証拠データの取得 が可能

セキュリティ対策とユーザーへの教訓

  • 通知プレビュー非表示設定 の活用推奨
    • 機密性の高いアプリ利用時は特に注意
  • アプリ削除 だけでは完全なデータ消去とならないリスク
  • iOSの システム仕様やアップデート に常に注意を払う必要性

参考リンク・関連商品

  • 404 Media元記事リンク
  • 関連書籍:David Pogue著『Apple: The First 50 Years』
  • 関連製品例:MacBook Neo、Logitech MX Master 4、AirPods Pro 3、AirTag(第2世代)、Apple Watch Series 11、Wireless CarPlayアダプター

Hackerたちの意見

まず、Signalユーザーにとって重要な設定について。「Signalの設定には、通知で実際のメッセージ内容がプレビューされないようにするオプションがあります。でも、被告はその設定を有効にしていなかったようで、それがシステムが内容をデータベースに保存することを可能にしたみたい。」次に、この通知履歴はどうやって見るの?

正確に同じかは分からないけど、CrankというmacOSアプリに「通知が届いたときにイベントをトリガーする」設定を追加しなきゃいけなかったんだ。macOSでのやり方を見せるために、以下のコマンドを使ってるよ:HOURS=6 EPOCH_DIFF=978307200 SINCE=$(echo "$(date +%s) - $EPOCH_DIFF - $HOURS * 3600" | bc) sqlite3 ~/Library/Group\ Containers/group.com.apple.usernoted/db2/db \ "SELECT r.delivered_date, COALESCE(a.identifier, 'unknown'), hex(r.data) FROM record r LEFT JOIN app a ON r.app_id = a.app_id WHERE r.delivered_date > $SINCE ORDER BY r.delivered_date ASC;" \ | while IFS='|' read -r cfdate bundle hexdata; do date -r $(echo "$cfdate + $EPOCH_DIFF" | bc | cut -d. -f1) '+%Y-%m-%d %H:%M:%S' echo " app: $bundle" echo "$hexdata" | xxd -r -p > /tmp/notif.plist plutil -p /tmp/notif.plist 2>/dev/null \ | grep -E '"(titl|title|subt|subtitle|body|message)"' \ | sed 's/^ */ /' echo "---" done 基本的に、通知は~/Library/Group Containers/group.com.apple.usernoted/db2/dbのsqliteデータベースにあって、plistのバイナリとして保存されてる。最近では、macOSとiOSのシステムサービスのファイルシステムパスが収束し始めてるから、jailbreakすればそのデータベースにアクセスできて、同じデータを取り出せるかもね。

Pixelでは、Android > 設定 > 通知 > 管理 > 通知履歴に行くと、いくつかの履歴が見れるよ。

Androidには履歴を見れるアプリがあって、たまにNotiStarを使って重要な通知をうっかり消しちゃったか確認してる。デバイスから履歴を消すのを手伝うアプリや設定もあると思う。でも、これは中央集権的な通知インフラ(FCMやAPNs)が通知内容を保存していることを思い出させるね(アプリが内容を送信するように指示されている場合 - 設定が有効なSignalは内容を送信しないけど)。ローカルの履歴を消しても、これらの仲介者はまだ保持してるんだよね。

Androidだと結構簡単だよね。プロトコルアドレスのページがあって、そこにすべての通知が表示されるんだ。昔はそこへのショートカットを作ってたけど、Androidを使ってからもう何年も経っちゃった。でも、通知が見逃したときにはすごく便利だったよ。編集:タイプミス

これについてちょっと考えちゃうな。404メディアの記事からの引用はこうだよ:「特にiPhoneでは、Signalアプリの設定でメッセージ通知やプレビューがロック画面に表示される場合、iPhoneは内部メモリにそれらの通知やメッセージプレビューを保存することが分かりました」と、裁判中にメモを取っていた被告側の支持者が404メディアに話してた。デフォルト設定はロック解除時にのみ通知プレビューを表示するようだね。その通知は通知ストレージに暗号化されずに保存されるのか、それともAFUのプレビューがあるから暗号化されたストアに入るのか。ロック画面にプレビューされる通知は暗号化されてない方が理にかなってる(暗号化されていても、暗号化キーが隣に保存されている場合を含む)。これはユーザーが引き起こしたOPSECの問題で、Signalは正しいデフォルトを持っていたように思える。

設定 > 通知 > 通知内容 > 表示:「名前のみ」または「名前や内容なし」これを有効にしておくことで、誰かにスマホを見せるときに敏感なメッセージが丸見えにならないようにしてるけど、これも一つの利点だね。

ちなみに、AndroidのSignalアプリではこの設定は設定 > 通知 > メッセージ > 表示にあるよ。

ロックダウンモードを有効にすれば、この問題も避けられるかもしれないし、他にも色々なことができるよね。

ちょっと説明すると、これはSignalアプリの設定内の話で、OS(iOSやAndroid)のシステム設定じゃないんだ。これ、めっちゃ大事なポイントで、OSの通知設定を変えるだけだと、通知内容が画面に表示されないだけだからね。

敏感なアプリの通知については、Apple Intelligenceの要約を無効にした方がいいよ。

Androidでは、WhatsAppを使っていてグループの通知をオフにしても、通知が一瞬届いてすぐ消えるのが見える(左上のアイコンが消える)。これって、同じ理由でグループメッセージの内容を暗号化されていないデータトレースに押し込む方法なのかなってよく考える。

通知にデータが含まれてれば、そうだね。通知を聞くアプリを作るのは簡単だよ。SamsungもNotiStarっていうアプリを持ってて、Androidの通知履歴機能を再現してる。

なんでAppleは、ユーザーがアプリを削除したときに、そのアプリに関連する通知データを内部データベースから「ただ」削除しないんだろう?古い通知内容をずっと残しておくのは問題を引き起こすだけな気がするんだけど。

誰かが気づいた瞬間、なんで誰も気づかなかったのかって感じの問題だよね。これから改善されないわけがないと思う。運営の仕方としては良くないし、今やニュースになってるし。

フラッシュに当たらなければそれでいけるかも。でも、フラッシュストレージにある場合、ダンプされる頃にはブロックが消去されてないかもしれない。NANDコントローラーが「削除された」データのブロックから生データのリクエストにどう反応するかは正確には分からないし、フラッシュのデカッピングが必要になるかもしれない。一部のフラッシュはデータを見せてくれて、消去を遅らせることもある。一般的に、フラッシュはブロックがいつ消去されるかについて非決定的なんだ。ウェアレベリングアルゴリズムのせいで、ブロックが再利用されるまでに何年もかかることもあって、その間データを保持しているかもしれない。敏感なデータを持つ電話のコントローラーがもっとアクティブであることを願ってるよ。

「データベース」が他のほとんどのデータベース(例えば、PostgresやSQLite)と同じように動くなら、行を削除してもすぐにはディスクからデータが消去されないんだ。パフォーマンスの理由でね。で、他の人が言ってたように、その上にファイルシステムやSSDのロジックがあって、似たようなことをするんだ。

元の記事: FBIがiPhoneの通知データベースから容疑者の削除されたSignalメッセージを抽出[0] 0. https://www.404media.co/fbi-extracts-suspects-deleted-signal...

残念ながら、彼らのサブスクじゃないとあんまり情報が得られないよね。

最近の裁判での証言 裁判はセキュリティを監査する本当の方法だよ。セキュリティについての妄想を語ったり、企業が裁判所の命令に応じることに文句を言っても、結局は限界がある。実際に何が起こっているかを見る方がずっと役に立つ。

最近のTrivy / LiteLLMの問題もセキュリティ関連だったし、かなり違う印象だね。

現在の不正直で腐敗した国家の環境では、「実際に何が起こるか」と「裁判で起こること」は同じじゃないんだよね、パラレルコンストラクションのせいで。

Signalの問題には関係ないけど、これが目に留まったんだ。「テロリストに物質的支援を提供した罪を認めた」って。アンティファの「組織」に関する長い声明がついてくる。この週のリマインダーとして、私たちはオーウェル的な政権の下に生きているってことを忘れないでね。

これでわかるのは、e2eの一端がアプリじゃなくて電話だってことだね。半分関連するけど、WhatsAppでは通知のテキストを読んでもメッセージが既読にならないから、OSがちょっと中間者的な役割を果たしてる。

Signalが通知を作成するんじゃないの?それは「echo "my_private_data" | notify-sendが安全じゃないって言ってるようなもんだよ。暗号化されたコンテンツをパイプしたらプレーンテキストの通知が出るなら、心配するのも当然だよね。

「しかし、被告はその設定を有効にしていなかったようで、それが結果的にシステムがコンテンツをデータベースに保存することを許可したようです。」「システムがコンテンツをデータベースに保存することを許可する」ってのは、Appleや政府などの第三者がアクセスできる電話のデフォルトだよ。設定や変更方法を知っているのはほんの一部のユーザーだけで、大多数のユーザーはデフォルト設定を変更しないんだ。Appleもそれを知ってるよ。

ユーザーのほんの少数しか設定を知っていて、どうやって変更するかもわからない。これを信じられなかったから、データを調べに行ったんだ。マジで暗い状況だね。もっとコンピュータ教育が必要だよ。「タイピングの仕方」だけじゃなくてさ。

セキュリティを気にするなら、ロック画面のプレビューは全部無効にするべきだよ。ロック画面は定義上、誰でも見えるから、何かを表示するとすぐに秘密が壊れちゃう。基本的な論理推論ができる人には明らかだと思うけど。無効にする方法がわからないなら、好きな検索エンジンやLLM、知識のある親戚に聞いて調べて無効にするべきだよ。でも、ただ注意を払ってなかったり、「考えたこともなかった」なら、セキュリティに興味がないってことだから、どんな技術的手段も役に立たないよ、ごめんね。

みんなアップルか政府のどっちが悪いかで議論してるけど、実際の問題は認証方法そのものだよね。クレジットカード、運転免許証、パスカードの3つの選択肢があって、それぞれがあなたの本当の身分をデバイスにリンクさせる中央集権的なデータベースを作るんだ。年齢確認って、実は「身分確認」をちょっと優しい名前にしただけ。認証は他の人のクレジットカードやIDも受け入れちゃうから、'年齢ゲート'はデバイスを使ってる人を確認するんじゃなくて、ただ誰かがクレジットカードに触れたことがあるかどうかを確認してるだけ。プライバシーのコストは身分確認と同じなのに、子供の安全に関するはずのメリットは全然ないってことだよ。

何に対して責めるの?犯罪者の行動を責めるんじゃなくて、法を守る人や企業を責めるって思ってたんだけど。

ちょっと気になるんだけど、どうして毎月少なくとも一回はSignalが通知をオンにするように促してくるの?毎回理由があって「いいえ」って言ってるのに、なんでずっと聞いてくるの?悪意があるわけじゃないけど、ちょっと変な感じがする、特にこれがあった後だと。

Signalの開発者だよ。通知の信頼性がサポートの不満のトップだから、たくさんの人が通知をオフにしてることに気づいてないんだ。確かに、月に一回はちょっと攻撃的かもしれないね。

NSLかな?

なんでずっと聞いてくるんだろう?なんでソフトウェアは、明確にやりたくないって言ったことを何度も聞いてくるの?それは、ソフトウェア開発者にとって、ユーザーの利益じゃなくて、自分たちの利益を優先するからだよ。もう、ソフトウェアがユーザーのために働くなんて期待できない時代になっちゃった。今は、ユーザーがソフトウェアの利益のために、無理やり動かされることが期待されてるんだ。編集:どうやら、別のコメントで開発者がこれを確認してるみたい。「それが彼らのサポート問題を解決するから、しつこく聞いてくるんだよ。」

メッセージプラットフォームは、人々がメッセージを受け取ってすぐに返事をする場所の方が、長期的には成功するんだよ。だから、SMSがメールを超えたんだ。もしメッセージプラットフォームを持ってるなら、通知をオンにするように促すこと自体は、特に悪いことじゃないよ。