こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
03/06/2019に新たな攻撃手法(SMoTherSpectre: exploiting speculative execution through port contention)に関する論文が公開されました。こちらは新たなサイドチャネル攻撃で、PoCコードも公開されています。まだCVEも発行されていない段階ですが、今後、様々な実装での修正が予想されますので、念の為こちらで取り上げてまとめます。
逐次情報は更新していく予定です。
[過去の関連リンク(最新5件)]
新たなハードウェアに依存しないサイドチャネル攻撃(Page Cache Attacks)
複数のTLS実装でのCAT(Cache-like ATacks)の脆弱性 (RSA鍵交換の危険性)
Intel CPUの脆弱性( Portsmash : CVE-2018-5407 )
HW由来の脆弱性 (L1 Terminal Fault : CVE-2018-3615, CVE-2018-3620, CVE-2018-3624)
一次情報源
SMoTherSpectre: exploiting speculative execution through port contention
SMoTherSpectre: exploiting speculative execution through port contention(PDF)
Priority/CVSS
- SuSE
- Red Hat Customer Potal
- CVSS v3 Base Score: 7.1
- Vector: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
- NVD
SW提供情報
修正方法
各ディストリビューションの情報を確認してください。
脆弱性概要(詳細は一次情報源のサイトをご確認ください)
- SMoTherSpectre: exploiting speculative execution through port contention(PDF)
- SMoTherSpectre(サイドチャネル攻撃)の脆弱性
- こちらのスライドにもありますが、最新のOut-of-orderで処理されるProcessorでは、マイクロオペレーションをスケジューリングしていますが、スケジューリングを実行するために5-8個のPort(Networkのポートとは別の話です)があります。Skylakeマイクロアーキテクチャはこちらの画像の通りですが、各ポートがそれぞれ実行ユニット(ALUやSLUを担当しています。
SMTスレッドが同じポートを使用するマイクロオペレーションを待っている際には、ポートをサイクル毎に争うことになります。争われているポートが他のスレッドのマイクロオペレーションのスケジュールを選択した場合、各スレッドは数サイクル待つ必要があり、結果として速度低下が発生します。このrdtscの低下は検出可能であり、特別に細工されたスレッドが配置されたポートの使用率を計測することが可能になります。同じSkylakeコアで攻撃者のスレッドと被害者(Victim)のスレッドが実行される時には、実験では35%の速度低下が発生するそうです。
SMoTherSpectre
SMoTherSpectreは投機的なコード再利用の攻撃です。
例として、攻撃者がブランチターゲットインジェクション(BTI)を、直接的ではないjump/callに続く、同じ場所に存在するVictimプロセス(共有ブランチ予測子)で投機的実行をリダイレクトするのに使用することが出来ます。分岐を含むこのコードシーケンスはBTIガジェットと呼ばれます。以下のコードはBTIガジェットの例です。secretがrdiにロードされ、ポインタがraxに呼ばれ、最終的にraxのポインタターゲットに分岐します。BTI gadget: load rdi, (secret) load rax, (pointer) jmp [rax]
ポイズニングされたターゲットは、Victimのコードのどこかで、Victimに対して異なるデータ依存の制御フローシーケンス(つまり条件分岐)を実行させます。Smother-ガジェットでは、後続の2つのパスがSmother-differentiableな条件分岐の場合には、攻撃者がターゲットとフォールスルーが異なるサイクルが使われている一つ以上のポートで競合を導入することで、分岐が成立したか否かを判断することが出来ます。下記のSmother-ガジェットでは、crc32がSkylakeのPort1でスケジュールされ、rorはPort0とPort6でスケジュールされています。
SMoTher gadget: cmp rdi, 0 jl <mark> crc32 crc32 ... mark: ror ror
crc32命令を実行している攻撃者は、Victimブランチがフォールするーとなりcrc32命令を実行している場合、Port1を争います。この争いによる速度低下は攻撃者によって検知することが出来、rdtscタイムスタンプを用いてサイクルをカウントすることができ、結果としてvictimのsecretが0以上ではないと推測することが出来ます。
これら
- BTIガジェット(投機的実行を誘発するため): C/C++コンパイラでreponline防御を展開しないコードで関数ポインタ/仮想関数呼び出しを使用して実装しています。OpenSSLのEVPライブラリは、そのようなポインタを使用して、暗号化/復号化を行っています。
- SMoTherガジェット(secretを漏洩させるため): 攻撃者はポート競合を使用してターゲットシーケンスとフォールスルーシーケンスを区別できる必要がありますが、glibcに数百から数千そのようなシーケンスが存在するそうです。
の2つのコードベースがVictimコードに必要です。各ステップで1ビットの情報しか漏洩されませんが、SmoTherガジェットが簡単に利用できるため、漏洩した情報を組み合わ焦ることが出来ます。
この脆弱性を発見したチームによると、OpenSSLのエクスプロイトも作成されているようです。これにより、平文の最初のバイトに関する情報が漏洩するようです。
詳細はPDFを御確認ください。
主なディストリビューションの対応状況
詳細は、各ディストリビューションの提供元にご確認ください
- Debian
- Red Hat Enterprise Linux/CentOS
- Ubuntu
- SUSE/openSUSE
対処方法
各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat SatelliteやKatello、Spacewalk等を使うと管理が便利でしょう。
[参考]
SMoTherSpectre: exploiting speculative execution through port contention
SMoTherSpectre: exploiting speculative execution through port contention(PDF)
セキュリティ系連載案内
- OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
- OSSセキュリティ技術の会によるThinkITでの連載「開発者のためのセキュリティ実践講座」がThinkIT上で開始しました。技術の会の中の人間で、最新の代表的なOSSセキュリティ技術を紹介していきます。
- OSSセキュリティ技術の会により、ThinkITでLinuxSecuritySummit 2018のレポートが紹介されています。
- OSSセキュリティ技術の会の面により、@ITで「OSS脆弱性ウォッチ」が連載されています。
- OSSセキュリティ技術の会の面により、@ITで「OpenSCAPで脆弱性対策はどう変わる?」が連載されています。
- OSSセキュリティ技術の会のメンバーにより、@ITで「Berkeley Packet Filter(BPF)入門」が連載されています。