
目次
マイクロアーキテクチャの秘密チャネルは、現代のコンピュータセキュリティにおいて非常に重要な問題です。これらのチャネルは、隔離されたセキュリティ境界間で情報を漏らすために微妙なハードウェアの動作を悪用し、従来のオペレーティングシステムやアプリケーションレベルの防御を回避します。クラウドコンピューティングやマルチテナント環境が普及する中、こうした脅威の自動検出と緩和はこれまで以上に重要です。
AutoCCは、これらの隠れたタイミングチャネルを自動的に発見する革新的なフレームワークであり、攻撃者と防御者の両方が理解と防御を進めることを可能にします。このガイドでは、AutoCCの技術と研究を紹介し、実際の検出のヒントを紹介し、今日の脅威の中でのマイクロアーキテクチャの秘密チャネルの重要性を説明します。
コンピュータセキュリティにおいて、秘密チャネルとは、システムのセキュリティポリシーを違反して情報を転送するために悪用される意図しない通信路です。サイドチャネル(通常は意図しない放射または観察を通してデータを漏らす)は異なり、秘密チャネルは協力するエージェント間で情報を密かに送信するために使用され、しばしばアクセス制御を回避します。
主要な特徴:
マイクロアーキテクチャは、抽象化によりソフトウェアに見えないように設計されたCPUのハードウェアレベルの実装詳細を指します。
マイクロアーキテクチャの秘密チャネルは、これらのハードウェア状態遷移を悪用します。これらは:
研究からの引用:
マイクロアーキテクチャチャネルは、命令セットアーキテクチャ(ISA)に見えないハードウェア状態を悪用して、許可されていない情報の流れを可能にします。
ハードウェアの特性(キャッシュ、バッファ、分岐予測など)とISAが提供する抽象的なビューの間のギャップは、秘密チャネルの機会を提供します。
同じハードウェアを共有するプログラムは、直接的な通信チャネルがなくても互いの実行時間や動作に影響を与えることができます。
タイミングチャネルは、最も一般的なマイクロアーキテクチャの秘密チャネルです。これは以下のように動作します:
通常悪用されるリソース:
チャネルは多くの場合、限られたハードウェアリソース(キャッシュセット、メモリコントローラキューなど)を2つのプロセスが競争するときに発生します。
マイクロアーキテクチャの秘密チャネルは、限られたハードウェアリソースへの競争アクセスに起因する実行タイミングの変化を悪用します。
この競争は測定可能なタイミングの違いを引き起こし、秘密情報をエンコードすることができます。
複数のコア/スレッド間で共有されるCPUキャッシュは、秘密チャネルの悪用にとって貴重なものです。
シナリオ:
Prime+Probe: キャッシュラインが置き換えられたかどうかをチェックするためにアクセスをタイミングします。
Flush+Reload: 共有メモリを利用し、Prime+Probeよりも精度が高い。
# Pseudocode: Prime+Probe loop in Python (conceptual)
import time
CACHE_SET = 0xdeadbeef # シミュレートされたアドレス
def access_memory(addr):
# キャッシュラインへのアクセスをシミュレート
pass
def prime():
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
def probe():
start = time.perf_counter_ns()
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
end = time.perf_counter_ns()
return end - start
# 送信者がプライムし、待機し、受信者がプローブしてアクセスをタイミング
これらの攻撃は純粋な秘密チャネルではありませんが(しばしばサイドチャネルの脆弱性として分類されます)、推測実行やアウトオブオーダー実行がセキュリティ境界を破り、マイクロアーキテクチャのステータス変化を通じて秘密を漏洩する可能性を示すことで、マイクロアーキテクチャの情報漏洩に新たな関心を呼び起こしました。
Spectreスタイルの攻撃: 推測実行を悪用して、攻撃者が管理するデータをマイクロアーキテクチャの構造に注入し、犠牲者のコード実行に可視的な影響を与えます。
AutoCCは、時間における秘密チャネルの自動発見を意味します。これは、CPUマイクロアーキテクチャのリソースにおける隠れたタイミングチャネルを自動的に見つけるために開発された系統的なアプローチとツールです。
From Marcelo et al., MICRO 2023:
AutoCCは:
研究からの主要インサイト:
AutoCCは、一般的なCPUの未文書のチャネルと弱点を見つけ、自動分析と防御の緊急性を示しています。
AutoCCは以下の技法を使用します:
AutoCCを使用することで、攻撃者と防御者の両方が:
秘密チャネルを阻止または緩和することは、ハードウェアレベルで発生するため困難です。しかし、高レベルの戦略には以下が含まれます:
オペレーティングシステムは次の方法で支援できます:
rdtscや類似の命令に制限します。ハードウェアベンダーは:
Linuxは、perfツールを通じてパフォーマンスモニタリングカウンタを提供しており、秘密チャネルの使用を示唆する不審なマイクロアーキテクチャ活動またはパフォーマンスの異常を検出するために利用できます。
perf list
# プロセスID 1234のキャッシュミスとサイクルを記録
sudo perf stat -e cache-misses,cycles -p 1234
# 出力解析(例:出力)
# 1,234,567 キャッシュミス
# 23,456,789 サイクル数
rdtscや/dev/tscを使用するアプリケーションはタイミングベースの攻撃コードの手がかりを提供する可能性があります。
# /dev/tscまたは類似のものを使用するプロセスを一覧表示
lsof | grep '/dev/tsc'
# rdtscオペコード(0f 31)を参照するバイナリを検索
grep -rl -E $'\x0f\x31' /usr/bin /usr/local/bin
# 代替法: straceを使用して、被疑プロセス内の時間関連のシステムコールを監視
strace -e trace=clock_gettime,gettimeofday -p <pid>
import subprocess
def monitor_perf(pid, duration=10):
cmd = [
'perf', 'stat', '-e', 'cache-misses,cycles',
'-p', str(pid), 'sleep', str(duration)
]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
return out.decode(), err.decode()
# 使用例
out, err = monitor_perf(1234)
print("Perf Output:", out)
print("Perf Errors:", err)
より深い自動化のためには、キャッシュミス率の疑わしい変動を解析し、アクティブなキャッシュベースの秘密チャネル活動を示唆するかもしれない出力を解析することができます。
import re
def parse_perf_output(perf_err):
cache_misses = re.search(r'([\d,]+)\s+cache-misses', perf_err)
cycles = re.search(r'([\d,]+)\s+cycles', perf_err)
return {
'cache_misses': int(cache_misses.group(1).replace(',', '')) if cache_misses else 0,
'cycles': int(cycles.group(1).replace(',', '')) if cycles else 0,
}
metrics = parse_perf_output(err)
print(f"Cache Misses: {metrics['cache_misses']}, Cycles: {metrics['cycles']}")
秘密チャネルは、以下の脅威モデルに含めるべきです:
問診事項:
レッドチームは、AutoCCスタイルのツールを展開して実際の攻撃を模倣しつつ、利用可能な情報漏洩方法を特定することができます。
ブルーチームおよびフォレンジックアナリストは、パフォーマンスカウンタ、OSトレースログ、行動プロファイリングを用いて、秘密チャネル活動の兆候を示す異常を捜査することができます。
マイクロアーキテクチャの秘密チャネルは、今日のハードウェアセキュリティにおいて最も陰湿な脅威の1つを表しています。クラシックなネットワークやアプリケーション層の脆弱性のレベルをはるかに超えて、これらは現代のコンピュータの核となる構成要素を悪用し、隔離されたユーザーやプロセス間の許可されていない情報の流れを可能にします。
AutoCCおよび同様の研究は、これらのチャネルを発見し、攻撃者がそれを使用する前に閉じるためのツールとメソッドを提供することで、この分野を前進させています。CPUと防御者の両方が進化し続ける中で、唯一の恒常性は、新たなチャネルが登場するたび、それを探し学ぶことです。
監視、分析、予測的な脅威モデリングをセキュリティプロセスに組み込むことで、組織はこの微妙だが強力な脅威ベクトルに先制することができます。
AutoCC: 時間における秘密チャネルの自動発見
著者: Marcelo Santos et al. MICRO 2023
完全な論文 (PDF)
オープンソースの64ビットRISC-Vプロセッサにおけるマイクロアーキテクチャ秘密チャネルの防止
著者: Wistoff et al.
arXivプレプリント
全文 (PDF)
Linux perf ドキュメント
https://perf.wiki.kernel.org/index.php/Main_Page
Intel® 64 and IA-32 Architectures Optimization Reference Manual
https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html
Spectre and Meltdown アタック
https://meltdownattack.com/
より詳細なガイドに興味がありますか?サイバーセキュリティインサイトニュースレターをご購読ください!
このコンテンツが価値あるものだと感じたなら、私たちの包括的な47週間のエリートトレーニングプログラムで何が達成できるか想像してみてください。ユニット8200の技術でキャリアを transformed した1,200人以上の学生に参加しましょう。