Vid研究者らは、最新の CPU の Spectre 設計上の欠陥を悪用すると、Intel の SGX セキュア環境の壁に穴を開けられる可能性があると主張している。
SGX (Software Guard eXtensions の略) は、通常のアプリケーションが、他のプログラムはもちろんのこと、オペレーティング システムやハイパーバイザーでさえアクセスできないメモリのセクションをリングフェンスで囲むために使用できるメカニズムです。
これらの領域はエンクレーブと呼ばれ、通常、暗号鍵を盗み見られることなく著作権侵害対策コードなどを実行したり、信頼できないリモートマシンで機密性の高い計算コードを実行したりするために使用されます。アテステーションは、あるマシン上のソフトウェアが、別のマシン上のエンクレーブで変更されていないコードと通信していることを確認するために使用されます。
しかし、1月に明らかになった投機的実行の脆弱性は、以下のビデオで示されているように、SGXのセキュリティ境界を危険にさらしています。当然のことながら、チップレベルの脆弱性を悪用するにはローカルアクセスが必要です。つまり、設計上の欠陥を悪用してSGXエンクレーブを攻撃するには、悪意のあるユーザーがログインできるか、マルウェアが実行されている必要があります。
研究者たちは、米国オハイオ州立大学のYinqian Zhang教授、Zhiqiang Lin教授、Ten Lai教授、そして学生のGuoxing Chen教授、Sanchuan Chen教授、Yuan Xiao教授です。彼らはこのエンクレーブスニッフィング技術をSgxPectreと名付け、GitHubで次のように述べています。「SGX以外の手法と同様に、SgxPectre攻撃は、注入され投機的に実行されるメモリ参照と分岐解決の遅延との間の競合状態を悪用します。」
今週オンラインで公開された正式な論文の中で、チームは、悪意のあるプログラムが CPU コアの分岐予測子に影響を与え、プロセッサが SGX エンクレーブ コードを実行しているときに、キャッシュの状態をわずかに変更することで、セキュア環境のプライベート メモリと CPU レジスタの内容を観察できる仕組みについて説明しました。
YouTubeビデオ
Intel SGX SDK、Rust-SGX、Graphene-SGX、または同様のランタイムライブラリを使用して構築されたエンクレーブコードには脆弱性があると報告されています。これらの開発キットには、SgxPectreを介して悪用され、エンクレーブの秘密メモリの内容を読み取れるコードパターンが含まれています。
研究者が禁止された SGX データを盗み見るために実行した手順は次のとおりです。
- 分岐ターゲット バッファをポイズニングしてターゲット アドレスを挿入します。
- エンクレーブ コードの SDK 内の秘密漏洩命令を投機的に実行する可能性が高くなるように CPU を準備します。
- エンクレーブ コードを実行します。
- 「フラッシュ リロード」キャッシュ サイドチャネル攻撃を使用して監視アレイを検査し、エンクレーブの内容を少しずつ公開します。
やったー!Meltdown CPUの修正プログラムがリリースされました。Spectreの脆弱性は今後何年もテクノロジー業界を悩ませ続けるでしょう。
続きを読む
修正方法はあります。エンクレーブ境界で分岐予測履歴をフラッシュする間接分岐制限投機 (IBRS) を導入した Intel のマイクロコード更新です。
しかし、例えばクラウドプロバイダーの悪意あるシステム管理者がパッチを元に戻してしまう可能性があり、「エンクレーブコードがIBRSが有効になっているかどうかを確実に検出する手段がない」のです。つまり、SGXの本来の目的は、遠く離れたマシンでコードを安全に実行することなのに、リモートクラウドマシンで実行されているエンクレーブコードがBOFHによって盗聴される可能性があるということです。
他のマイクロコード緩和策であるシングルスレッド間接分岐予測器(STIBP)と間接分岐予測バリア(IBPB)にも同様の問題があります。投機的実行を緩和するものの、エンクレーブ側ではそれらの存在を検知できないためです。そのため、これらの防御策はリモートマシンから削除することができ、この技術の目的を損ないます。
研究者らによると、Reptolineのソフトウェアのみによる緩和策ではSGXをSgxPectreから保護することはできないという。Intelは彼らの研究内容を認識していると伝えられている。®
追加更新
Intelは、今月後半にSGX SDKをアップデートし、ソフトウェア認証によってSpectre対策の有無を検出できるようにすると発表しました。悪意のあるシステム管理者から保護するには、Enclaveコードをアップデートされた開発キットを使用して再構築し、再デプロイする必要があります。広報担当者は次のように述べています。