MAD: Memory Allocation meets Software Diversity

DRAM 誤差に起因する RowHammer 攻撃に対する新たな防御策として、ソフトウェア多様性の原理をメモリ割当てに応用し、メモリサブシステム内のエントロピー不足という課題を克服するとともに、実装の容易さや性能への影響の少なさを両立させる「MAD」と呼ばれる手法が提案されています。

Manuel Wiesinger, Daniel Dorfmeister, Stefan Brunthaler

公開日 Thu, 12 Ma
📖 1 分で読めます☕ さくっと読める

Each language version is independently generated for its own context, not a direct translation.

🍎 1. 問題:「行ハンマー」攻撃とは何か?

まず、敵が何をしているのかを理解しましょう。

  • RowHammer(行ハンマー)の仕組み:
    コンピューターのメモリは、無数の小さな部屋(行)が並んでいる巨大なアパートだと想像してください。通常、ある部屋に入っているデータは、隣の部屋には影響しません。
    しかし、RowHammer 攻撃者は、**「隣の部屋のドアを激しく叩き続ける(アクセスし続ける)」という行為を行います。その振動(電気的な影響)が、実は「隣の隣の部屋」**の壁を揺らし、中に入っているデータ(0 か 1)を勝手に書き換えてしまうのです。

  • なぜ厄介なのか?
    これまで、攻撃者は「特定の部屋(メモリ領域)」を特定して攻撃していました。しかし、最近の攻撃者は、「どの部屋がどの位置にあるか」を特定しなくても、あるいは「壁を叩く回数」を増やせば、どこでもデータを壊せるようになっています。従来の「特定の部屋だけを守る」という防御策は、もう通用しなくなっています。

🏰 2. 解決策:「MAD(記憶の多様化)」の登場

この論文が提案するMADは、攻撃者が「部屋を特定して叩く」ことを極めて難しくする、**「記憶の配置を常にランダムに変える」**というアイデアです。

🎭 比喩:「変幻自在のチェス盤」

攻撃者がメモリを操作しようとするとき、彼らは通常、**「メモリの地図(どこに何があるか)」**を頭の中で作ります。

  • 従来のメモリ管理: 地図が固定されています。「A 地点に部屋があるなら、次に A 地点を空けて、また A 地点に新しい部屋を置けば、同じ場所が使える」と予測できます。攻撃者はこの予測を利用して、狙った部屋にデータを配置させます。
  • MAD のアプローチ: MAD は、**「チェス盤のマス目自体が、動くたびにランダムに移動する」**ような状態を作ります。

攻撃者が「ここを叩けばデータが変わる!」と狙っても、MAD は**「いや、その部屋はさっきまでここにあったけど、今はあっちの隅っこに移動しちゃったよ」**と、常に場所を変えてしまいます。

🔄 3. MAD が使う 2 つの「魔法」

MAD は、この「場所をずらす」ために、2 つのテクニックを組み合わせています。

① 水平の多様性(Horizontal Diversity):「使い回しの部屋」

  • 仕組み: 通常、部屋を空けると「空き地」に戻されますが、MAD はそれを**「隠し部屋(シャドウキャッシュ)」**に一旦しまいます。
  • 効果: 攻撃者が「部屋を空けて、また新しい部屋を貸して」と頼んでも、MAD は**「さっき使った同じ部屋を、またあなたに貸してあげるよ(ただし、どこに置くかはランダム)」**とします。
  • メリット: 攻撃者が「新しい部屋を探して、あちこち試す(メモリを探索する)」という作業を、**「同じ部屋を何度も使わされる」**状態にします。これにより、攻撃者が「狙った部屋」を見つけるまでの時間が、劇的に延びます。

② 垂直の多様性(Vertical Diversity):「部屋を合体・分裂させる」

  • 仕組み: 小さな部屋(4KB など)が余っているとき、MAD はそれらを**「大きな部屋に合体」させたり、逆に「大きな部屋を小さな部屋に分割」**したりします。
  • 効果: 攻撃者が「大きな部屋が欲しい」と頼んでも、MAD は「今は大きな部屋がないから、小さな部屋を 2 つくっつけてあげようか?」と、部屋のサイズや形さえもランダムに変えて対応します。
  • メリット: 攻撃者が「特定のサイズの部屋」を狙って配置しようとしても、MAD の「部屋の合体・分裂」によって、狙った配置が成立しなくなります。

🕵️‍♂️ 4. 攻撃者の「足跡」を暴く(検知機能)

MAD は単に「場所を隠す」だけでなく、「攻撃者の動き」を検知することもできます。

  • 通常の利用: 普通のユーザーは、部屋を借りて、使ったら返すという「借りて返す」のサイクルを自然に行います。
  • 攻撃者の行動: 攻撃者は、**「部屋を大量に借りて、絶対に返さない(メモリを枯渇させる)」**という行動をとることが多いです。
  • MAD の検知: MAD は、この「借りて返さない」異常な動きを、**「部屋が満杯になって、新しい部屋が作れなくなった」**という信号として捉えます。
    • 例え話で言うと、**「ホテルの客室が、特定の客によって『借りっぱなし』で埋め尽くされ、他の客が入れなくなった」**という状況です。MAD はこれを「不審な動き」として検知し、システムを再起動させたり、攻撃を止めるためのアラートを鳴らしたりできます。

🌟 まとめ:なぜ MAD はすごいのか?

  1. ハードウェア不要: 新しい特殊なチップを買う必要はありません。ソフトウェアだけで実現できます。
  2. どんな攻撃にも通用する: 「行ハンマー」が「2 部屋叩く」攻撃から「10 部屋叩く」攻撃に進化しても、MAD は「場所をランダムにする」という基本戦略で対応し続けます。
  3. 遅らせることが勝利: 完全に攻撃をゼロにするのは難しいかもしれませんが、「攻撃を成功させるまでに、何十億回も試行錯誤させ」、その間に攻撃者が気づいて逃げたり、システムが防御態勢に入ったりする時間を稼げます。

一言で言うと:
MAD は、攻撃者にとって**「狙った的(メモリ)が、常に動き回り、形も変え、さらに同じ場所を何度も使わされる」という、まるで「風船を掴もうとする」**ようなイライラする状態を作り出し、攻撃を不可能に近づける技術です。