【ITニュース解説】Memory Integrity Enforcement

2025年09月10日に「Hacker News」が公開したITニュース「Memory Integrity Enforcement」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Appleは、ハードウェアの機能でメモリの安全性を高める新技術を導入した。プログラム実行時にポインタなどのデータ改ざんを検知し、メモリの脆弱性を悪用する高度なサイバー攻撃をブロックする。これによりOS全体のセキュリティを強化する。

出典: Memory Integrity Enforcement | Hacker News公開日:

ITニュース解説

ソフトウェアにおける脆弱性の多くは、プログラムがメモリを不適切に扱うことに起因する。特に「メモリ破損」と呼ばれるタイプの脆弱性は、攻撃者によって古くから悪用されてきた。これは、プログラムが意図しないメモリ領域にデータを書き込んでしまうことで発生し、最悪の場合、攻撃者がシステムを乗っ取るための足がかりとなる。Appleは、iPhoneやMacなどに搭載されている自社製チップのハードウェア機能を活用し、こうしたメモリを悪用する攻撃からシステムを保護するための新たな仕組みとして「Memory Integrity Enforcement(MIE)」を導入した。この技術は、既存のセキュリティ機能である「Pointer Authentication Codes(PAC)」と連携し、より強固な防御層を築くものである。

まず、メモリを利用した攻撃の基本を理解する必要がある。プログラムが動作する際、次に実行すべき命令のアドレスや、データが格納されている場所のアドレスなど、様々な「アドレス情報」がメモリ上に保持されている。このアドレス情報を「ポインタ」と呼ぶ。攻撃者は、プログラムの脆弱性を突いてこのポインタを不正に書き換え、本来実行されるべきではないコードを実行させようと試みる。代表的な攻撃手法として、Return-Oriented Programming(ROP)やJump-Oriented Programming(JOP)がある。これらは、既存のプログラム内に存在する短いコード断片(ガジェット)を巧妙につなぎ合わせ、あたかも攻撃者が用意したプログラムであるかのように動作させる攻撃である。この攻撃を防ぐため、Appleは以前からPACという技術を導入していた。PACは、ポインタに暗号学的な署名を付与する技術だ。ポインタが作成される際に、コンテキスト情報(例えば、それがどこで使われるべきか)と秘密鍵を使って署名が生成され、ポインタの値に埋め込まれる。そして、そのポインタが実際に使用される直前に、ハードウェアがこの署名を検証する。もしポインタが不正に書き換えられていれば署名の検証に失敗し、プログラムはクラッシュして攻撃の実行を未然に防ぐ。これにより、攻撃者がポインタを改ざんしてプログラムの実行フローを乗っ取ることを極めて困難にした。

しかし、PACはポインタそのものの完全性を保護するが、ポインタが指し示す先にあるメモリの内容、特にプログラムのコード自体の完全性を直接保護するものではない。攻撃者が何らかの方法で、実行されるべきプログラムのコードが格納されているメモリ領域を直接書き換えることができれば、PACの保護を迂回して不正な処理を実行させることが可能になる。ここで登場するのがMIEである。MIEは、メモリページのアクセス権限をハードウェアレベルで強制する仕組みだ。オペレーティングシステム(OS)は、メモリを「ページ」という単位で管理しており、各ページには「読み取り可能」「書き込み可能」「実行可能」といった権限が設定されている。通常、プログラムのコードが置かれるメモリページは「実行可能」かつ「読み取り可能」であるが、「書き込み可能」にはなっていない。これは、プログラムの実行中にそのコード自身が誤って書き換えられてしまうのを防ぐためである。この原則は「Write XOR Execute(W^X)」として知られる。MIEは、この原則をさらに強化し、実行可能なページへの書き込み権限をハードウェアレベルで恒久的に剥奪する。たとえOSの中核であるカーネルが攻撃によって乗っ取られ、メモリページの権限を変更しようとしても、ハードウェアがその変更を拒否するため、実行コードの改ざんが不可能になる。

MIEの実装には、CPUのメモリ管理ユニット(MMU)が深く関わっている。OSは「ページテーブル」というデータ構造を使って、仮想メモリアドレスと物理メモリアドレスの対応関係や、各ページのアクセス権限を管理している。MIEが有効なシステムでは、一度「実行可能」とマークされたページテーブルエントリ(PTE)は、ハードウェアによって保護される。これにより、後からそのページに書き込み権限を追加しようとする試みは、CPUレベルでブロックされる。この保護は、システムの最も根幹であるカーネル自身にも適用されるため、カーネル内に存在する脆弱性を悪用して保護を無効化することも極めて難しい。

このように、PACが「誰が指示を出すか(ポインタの正当性)」を検証し、MIEが「指示の内容そのもの(コードの完全性)」を保護することで、多層的な防御が実現される。攻撃者がプログラムの実行フローを乗っ取るには、ポインタの署名を偽造し、かつ、ハードウェアに保護された実行メモリを書き換えるという、二つの非常に困難な障壁を突破しなければならなくなった。Appleは、これらの高度なセキュリティ機能を、パフォーマンスへの影響を最小限に抑えながら実装している。これは、同社がチップの設計からOS、アプリケーションまでを垂直統合で開発しているからこそ可能な、ハードウェアとソフトウェアが密に連携したセキュリティ対策の好例である。システムエンジニアを目指す上で、ソフトウェアの脆弱性対策だけでなく、それを支えるハードウェアレベルの保護機構について理解することは、より安全なシステムを構築するための重要な知識となるだろう。