View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法
  • 概要
  • トランスクリプト
  • Memory Integrity Enforcementによるアプリの保護

    新しいセキュリティテクノロジーである、Memory Integrity Enforcement(MIE)について解説します。このテクノロジーは、ハードウェア、オペレーティングシステム、コンパイラを連携させることで、無効なメモリへのアクセスを防止し、脆弱性が悪用される前にプログラムの実行を安全に停止します。MIEを導入することで、攻撃者がメモリ破損によるバグを悪用するのがはるかに困難になります。MIEをアプリに組み込んで、ユーザーとデータを保護するとともに、検出の難しいメモリの問題をコードベースから一掃する方法をご確認ください。

    関連する章

    • 0:05 - イントロダクション
    • 1:29 - メモリオーバーフローと解放後の使用による脆弱性
    • 3:08 - Memory Integrity Enforcement
    • 4:42 - デモ:解放後の使用によるメモリ破損バグ
    • 5:52 - ハードウェアメモリのタグ付けの有効化
    • 6:20 - デモ:ハードウェアメモリのタグ付けによる悪用の阻止
    • 6:44 - 追加の構成オプション
    • 7:25 - デモ:メモリ破損バグの修正
    • 9:32 - デモ:メモリ破損バグの修正
    • 10:10 - ポインタのビットへのタグ付け
    • 10:30 - ポインタ値のハッシュ化、比較、算術演算
    • 11:02 - ソフトモード
    • 11:31 - 次のステップ

    リソース

    • Enabling enhanced security for your app
    • Memory Integrity Enforcement: A complete vision for memory safety in Apple devices
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC15

    • Advanced Debugging and the Address Sanitizer
  • このビデオを検索

    こんにちは Julianです Developer Security Toolsチームで エンジニアを務めています このビデオでは Memory Integrity Enforcement(MIE)を使って アプリを保護する方法を説明します アプリは生活に欠かせない重要なツールです 誰もがアプリを信頼して 位置情報、閲覧履歴、写真、 メッセージ、連絡先、財務などの 様々な個人情報を保存しています 一方で アプリはインターネットに 接続されるため セキュリティ上の脆弱性があると ユーザーが攻撃を受ける可能性があります 個人への攻撃には 詐欺、 個人情報の窃盗、脅迫メールなどがあり 命が危険にさらされる場合もあります ユーザーデータの プライバシーと安全性を守るという 約束を果たさなければ 信頼を裏切ることになります セキュリティはプライバシーを 守るための技術基盤です メッセージ、ソーシャルメディア、ブラウザは セキュリティが特に重要なアプリです 対象領域が広く 信頼できない 多数の入力を処理するこれらのアプリは 攻撃者の標的になる可能性があります 最も一般的な脆弱性の1つに メモリ破損があります 攻撃者はメモリのバグを利用して アプリの制御を奪い ユーザーの機密データを盗みます

    例えば バッファオーバーフロー破損は バッファの境界を越えてデータを書き込み 隣接するメモリを破壊することです その後 別のポインタが そのメモリを読み取ると データが破損して 再現困難なクラッシュが発生します さらに悪いことに 攻撃者は 巧妙な書き込みを作成してアプリをだまし 任意のコードを実行させることができます Use-after-freeバグも 悪用される可能性があります アプリがメモリの割り当てを解除した後も ダングリングポインタが残っているとします その後 アプリが新しい割り当てを作成し それがメモリの同じ場所に配置された場合 誤ってダングリングポインタを使って 読み書きを行うと メモリが破損してしまいます

    Swiftなどメモリセーフな言語を使用すれば メモリの破損を防ぐことができます メモリセーフな言語は メモリを管理することで プログラミングエラーが メモリ破損につながらないよう保護します

    ただし 新しいコードをSwiftで記述しても アプリの既存のコードベースにCやC++の コードが含まれている可能性があります あるいは 使用する外部ライブラリが メモリセーフでない言語で 記述されている場合もあります MIEは 攻撃者によるメモリ破損バグの 悪用を極めて困難にする 新しいテクノロジーです メモリの安全性が大幅に向上します ハードウェア、OS、コンパイラが連携して プログラムの実行を安全に停止することで 無効なメモリへのアクセスを防止します iPhone 17、iPhone Air、iPhone 17 Pro、 Pro Maxに初めて導入されました 対応しているその他の Appleデバイスについては 「Enabling enhanced security for your app」を参照してください 仕組みは次のとおりです MIEでは システムアロケータが 各ヒープ領域にタグを割り当て リターンポインタで そのタグをエンコードします メモリからの読み込みと保存のたびに ポインタのタグとメモリ領域のタグが一致 するかどうかをハードウェアが照合します 例えば タグAのポインタを使用して 同じくタグAのメモリを 読み書きしようとした場合 アクセスが許可され 処理を実行できます

    Use-after-freeのシナリオでは ダングリングポインタAは タグが異なる 新しいメモリ領域にアクセスしようとします タグが一致しないため ハードウェアはプログラムの実行を中止し 攻撃者によるメモリの破損を阻止します このアプローチでは 隣接する領域に 異なるタグが割り当てられるため バッファオーバーフローの破損からも デバイスを保護できます このデモアプリには メモリ破損の脆弱性が含まれています アプリ自体はSwiftで記述されていますが 画像解析には外部のCライブラリを使用します Use-after-freeバグがありそうですが その場所はわかりません アプリを実行しましょう

    メッセージを受け取ったようです 写真が見たいので タップします

    おや おかしいですね 可愛い犬の写真ではなく 悪意のある攻撃者から送信された 不正画像であることがわかりました この画像は ひそかに Use-after-freeバグを悪用して 個人的なメッセージをインターネット上の サーバに送信していました

    とても恐ろしいことです ここでは 攻撃の様子を わかりやすく誇張していますが 通常 攻撃者は その活動をできるだけ隠そうとします

    実際の攻撃では まったく気付かないうちに ユーザーデータが侵害されます XcodeでMIEを使用して アプリを保護するには アプリターゲットの エディタに移動して をクリックし を選択します

    これでハードウェアメモリのタグ付けなど 多数の強力な セキュリティ保護が有効になります

    ローカルテストではが無効であることを確認します Soft Modeについては後で詳しく説明します ハードウェアメモリのタグ付けを有効にして アプリを再起動しました 不正な画像をもう一度タップしましょう

    攻撃者がメッセージを盗むのを阻止して アプリが終了しました アプリ終了の理由をクリックすると タグの不一致が原因であることがわかります

    ハードウェアメモリのタグ付けには 他にもいくつかの設定オプションがあります オプションは 保護領域をさらに拡張します アプリでインタープリタまたは JITコンパイラを使用している場合は を 有効にします を 必ず有効にしてください Use-after-freeバグの悪用に対して 重要なメリットを提供し メモリのタグ付けと組み合わせて 強固な保護を実現できます さらにでは メモリのタグ付け へのアプリの対応状況を検証できます これで攻撃者による悪用を 阻止できるようになりました

    しかしユーザー体験は改善の余地があります アプリがクラッシュするのを防ぐには メモリ破損の根本的なバグを 修正する必要があります Xcodeでは ユーザーに影響が及ぶ前に これらのバグを開発環境で見つけて 修正することができます そのためには スキームエディタに移動して ペインで を有効にします アプリを再実行しましょう 画像をタップして再度バグをトリガーします

    ここでもアプリは終了しますが 問題の把握に役立つ 追加情報が提供されます まず タグの不一致は 割り当て解除された メモリの使用が原因だとわかります Use-after-freeです デバッグナビゲータには メモリの割り当て解除の場所を示す 便利なスタックトレースが表示されます

    ここでは process_image_message関数です

    クラッシュポイントに戻りましょう 非同期にディスパッチされたブロックです

    何が問題かわかりました メインスレッドは バックグラウンドスレッドが処理する前に メッセージの割り当てを解除しています この問題を修正するため メッセージの割り当て解除を メインスレッドから

    非同期ブロックの末尾に移動し 処理後にのみ 割り当て解除されるようにします

    アプリを再起動して 根本的なバグが 修正されたことを確認しましょう

    もう一度画像をタップします 今度は良さそうです アプリは不正な画像を受け取りましたが 攻撃者によるアプリの乗っ取りを 阻止できました

    次に アプリをMIE対応にする際の 考慮事項について説明します アプリの通常の使用時に発生する バッファオーバーフローと Use-after-freeのバグをすべて修正しましょう これらのバグを見つけて理解するには テストで 診断を有効にします

    これにより 再現が難しい多くのメモリ破損 バグが対処可能なクラッシュに変わります MIE対応のデバイスがない場合は 代わりにAddress Sanitizerを使用します では ポインタの 上位ビットにタグを格納して領域を保護します アプリがこれらのビットを使用または 変更しないことを確認する必要があります カスタムタグのポインタスキームを使用する 場合は この情報を別の場所に保存します

    ポインタに対してハッシュ化、比較、 算術演算を行う時も注意が必要です メモリのタグ付けを有効にすると 異なる 領域へのポインタには固有のタグが付けられ よって 異なる上位ビットセットが 設定されます これによるポインタ値のハッシュ化、比較、 算術演算への影響を検討してください 異なる領域に関連付けられた ポインタの比較は避けてください また 必要に応じて タグビットをマスクします

    Soft Modeは アプリでメモリ破損バグを見つけて 修正したことを検証するのに役立ちます 実行を終了しなくても タグ不一致のテレメトリを疑似的な クラッシュログの形式で確認できます TestFlightまたはユーザー向けビルドで このモードを有効にすると メモリ破損バグが残っていないことを 確認できます メモリ破損バグを修正したら Soft Modeを 無効にしてユーザーを保護します 次のステップを紹介しましょう アプリで未検証の入力を処理する場合は MIEを適用してユーザーを保護します これはメッセージ、ソーシャルメディア、 ブラウザのアプリで特に重要です 既知のメモリ破損バグを修正しましょう ポインタタグビットを 他の目的で使用していないことを確認します 診断を使って アプリをテストします Soft Modeを使用して 適切に修正されていることを確認します 最後にSoft Modeを無効にして ユーザーを保護します MIEの導入については以上です ありがとうございました

Developer Footer

  • ビデオ
  • Meet With Apple
  • Memory Integrity Enforcementによるアプリの保護
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習とAI
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン