Asayomu Tech
注目★★★★Lobsters

コンパイラが生む幽霊読み込み、TOCTOU 脆弱性を復活させる

30秒で把握

  • 1コンパイラが複数回の読み込みを生成、プログラマが書いた 1 回の読み込みが 2 回以上に
  • 2検証済みの値と使用値が異なり、スナップショット対策でも TOCTOU 脆弱性が復活
  • 3複数コンパイラ・アーキテクチャ・フラグ組み合わせで非線形に挙動変化、ビルド検証が必須

要約

セキュリティ研究者が、C コンパイラの最適化によって生成される「発明された読み込み」(invented load)が、TOCTOU(Time-of-Check to Time-of-Use)脆弱性を再発させる仕組みを実証した。プログラマが 1 回だけメモリを読み込むコードを書いた場合でも、コンパイラは複数回の読み込みを生成でき、その間に攻撃者がメモリを改ざんすると、検証を通した値と実際に使う値が異なる可能性がある。スナップショット + 検証という標準的な TOCTOU 対策手法でさえ、コンパイラの最適化により無効化され、バッファオーバーフローが発生し得る。複数のコンパイラ・アーキテクチャ・フラグの組み合わせによって挙動が非線形に変わるため、コードだけでは安全性を判定できず、実際にビルドして検査する必要がある。

あなたへの影響

カーネル・ハイパーバイザー・ファームウェア・ライブラリなど広範なオープンソースプロジェクトで同様のパターンが見つかっており、自社コードにも存在する可能性が高い。

推奨:C で低レイヤの実装やセキュリティ境界を扱うチームは、コンパイラの最適化オプション(特に -O2 以上)による挙動の変化を検証する必要があり、必要に応じて volatile 修飾や asm barrier の導入、あるいはコンパイラフラグの調整を検討すべき。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。