
公開日: [今日の日付]
サイドチャネル攻撃 は、重要な情報を得るために設計されたセキュリティ攻撃クラスであり、攻撃者はキャッシュアクセスパターンやタイミング、電力、電磁(EM)放射、さらには音や振動などの実装アーティファクトを研究することによって行います。
簡単に言うと、サイドチャネルはあらゆる計算における「偶発的な」漏洩です。これは、保護された情報を処理する際に物理的または論理的なコンポーネントが残す微細なデータの痕跡です。
現実世界の例:
鍵のピッキングのシナリオを考えてみてください。鍵を力ずくで開けるのではなく、各ピンがどのようにはまっているかをじっと聞きます—音とタイミングが情報を漏らします!
一般的なサイドチャネル:
なぜそれが重要なのか:
サイドチャネル攻撃は、ソフトウェアの脆弱性がなくても、最も数学的に堅牢な暗号システムをも無効化することができ、地理的に近い場所や共有されたコンピューティングリソースへのアクセスがあるだけで十分です。
インテル Optane 永続メモリ (PMem) は、新しいメモリクラスである**不揮発性メモリ(NVM)**に属しています。従来のDRAMとは異なり、電源が切れた際に内容を失うことはありません。Optaneはデータを保持し、RAMと記憶ストレージの境界を曖昧にします。
主要機能:
典型的なOptaneシステム:
[CPU] <---> [L1/L2/L3 CPUキャッシュ] <---> [メモリコントローラー] <---> [Optane永続メモリ (PMem)]
^
[従来のDRAM] -------------------------------/
Optane PMの永続性、高密度、およびCPUキャッシュとの緊密な統合により、サイドチャネル攻撃者にとって魅力的でありながら複雑なターゲットとなっています。最近まで、ほとんどのサイドチャネル研究はDRAMまたはCPUキャッシュに焦点を当てていましたが、Optaneの独自のハードウェアと新しい内部キャッシュ構造は新たな攻撃ベクトルをもたらしています。
論文 "Persistent State Side-channel Attacks on Intel Optane Persistent Memory" は、Optaneの最初の体系的なサイドチャネルセキュリティ解析を提示し、以前の安全な仮定がもはや通じず、新たな防御戦略を動機づけていることを明らかにしました。
従来のメモリアーキテクチャには、CPU上のL1、L2、L3やDRAM内の行やバンクバッファなど、よく知られたキャッシュ階層があります。Optane PMは、内部に未文書化のキャッシュを持っています。
USENIX 2023スタディは、Optaneのバッファアーキテクチャを明らかにするためにマイクロベンチマークを用いました。内部キャッシュ階層は大まかに次の通りです:
| 機能 | DRAM | Optane PM |
|---|---|---|
| 揮発性 | 揮発性 | 不揮発性 |
| 行バッファサイズ | 約8KB | ラインバッファ: 最大256KB(リバースエンジニアリングによる) |
| バッファ寿命 | 電源オフで消去 | 永続的または半永続的 |
| 攻撃対象 | DRAMに限定 | 大きく、永続的なバッファによる拡張 |
Optaneラインバッファのサイズと永続性により、新しい、高解像度の時間的および空間的サイドチャネルが可能になります。
Prime+Probe は、共有メモリエンvironmentsではアクセスパターンを推測するために一般的に使用されるキャッシュタイミング攻撃です。
Optaneの内部ラインバッファが大きく永続的であるため、Prime+Probeには新たな能力が加わります:
実際の影響:
マルウェアやテナントAがOptaneのバッファ占有率をプローブすることにより、クラッシュや再起動後もテナントBがアクセスしているメモリ領域を知ることが可能です。
セキュリティ評価において重要なステップはハードウェアの理解です。研究論文は、タイミングマイクロベンチマークを使用して以下を経験的に明らかにしました:
研究者たちは、メモリアドレスの急速なアクセス(読み書き)シーケンスを行い、応答時間を記録する低レベルのツールを作成しました。タイミングの変化はキャッシュ/バッファヒットまたはミスを示しています。
import time
import mmap
ADDR = 0x10000000 # 例の物理アドレスのマップ
with open("/dev/mem", "rb") as f:
mem = mmap.mmap(f.fileno(), 4096, offset=ADDR)
t1 = time.perf_counter_ns()
data = mem.read(64)
t2 = time.perf_counter_ns()
latency = t2 - t1
print(f"読み取りレイテンシ: {latency} ns")
mem.close()
注:/dev/memや物理アドレスへのアクセスにはroot権限が必要です! 制御されたラボ環境で使用してください。
階段を変化させ、レイテンシを測定することで、バッファ内に共存するアドレスの数、エビクションの発生する条件からバッファの相関性を逆に測定します。
たとえば、クラウド環境でハードウェアを共有する2つのテナントが、それぞれOptane対応メモリを使用しているとします。テナントAがOptaneのラインバッファに対してPrime+Probe攻撃を実行します:
たとえば、Optaneのバッファが電源喪失後にクリアされなかった場合(またはバッファの持続性があり、すぐに復帰した場合)は:
研究者やRed Teamerにとって、自分のマイクロベンチマークを実行することは示唆に富んでいます。以下はOptaneバッファのスキャンとタイミングデータ解析用の基本的なコードサンプルをBashとPythonで紹介します。
#!/bin/bash
# マップされたメモリの読み取り時間を測定
FILE="/mnt/pmem0/testfile"
dd if=/dev/zero of=$FILE bs=64K count=1 # ファイルを準備
for i in {1..1000}; do
t1=$(date +%s%N)
dd if=$FILE of=/dev/null bs=64 count=1 iflag=direct 2>/dev/null
t2=$(date +%s%N)
echo "$(($t2 - $t1))"
done > timings.txt
import matplotlib.pyplot as plt
with open("timings.txt") as f:
times = [int(line.strip()) for line in f]
plt.plot(times)
plt.xlabel("反復")
plt.ylabel("時間(ns)")
plt.title("Optaneアクセスレイテンシマイクロベンチマーク")
plt.show()
気をつけるべきこと:
繰り返しパターン—アクセス時間の「スパイク」は通常バッファミス(他のプロセスによるエビクション)を示しています。
より高度なツールでは、大規模な配列を直接Optane PMにマップし、特定のラインバッファをターゲットとするように計算されたパターンでアクセスし、その後、タイミングデータを用いてマッピングを再構築します。
注意:
研究には有用ですが、これらの行為はプロダクションハードウェアではプロバイダーポリシーに違反する可能性があります。エアギャップされた専用テスト環境で制限してください。
サイドチャネル抵抗性は、ハードウェア、システムソフトウェア、およびアプリケーションレベルの緩和策を伴います。
暗号や敏感データのアクセスを定数時間かつ定数パターンで実装:
ツールとリソース:
Intel Optane PMのような永続メモリ技術がデータセンター、クラウド、AIインフラストラクチャ全体に広がる中で、サイドチャネル攻撃の対象面は進化しています。内部バッファアーキテクチャ—これまで脅威として無視されていたもの—は今や、業界と研究から体系的な注目が必要とされています。
重要なポイント:
情報を得ておこう:
定期的にハードウェアの通知、セキュリティ研究をレビューし、先取りの軽減策を展開して、新興技術のサイドチャネルを悪用する攻撃者に先行する。
この記事はハードウェアセキュリティと新興メモリ技術に関するシリーズの一部です。興味深かった場合は、チームと共有し、次世代サイバーセキュリティに関するアップデートを購読してください。
*注:サイドチャネル攻撃の試行は専用の、合法的かつ許可された環境で行いましょう。*
このコンテンツが価値あるものだと感じたなら、私たちの包括的な47週間のエリートトレーニングプログラムで何が達成できるか想像してみてください。ユニット8200の技術でキャリアを transformed した1,200人以上の学生に参加しましょう。