新たな攻撃手法(SMoTherSpectre) による情報の漏洩

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

03/06/2019に新たな攻撃手法(SMoTherSpectre: exploiting speculative execution through port contention)に関する論文が公開されました。こちらは新たなサイドチャネル攻撃で、PoCコードも公開されています。まだCVEも発行されていない段階ですが、今後、様々な実装での修正が予想されますので、念の為こちらで取り上げてまとめます。

逐次情報は更新していく予定です。




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マイクロアーキテクチャこちらの画像の通りですが、各ポートがそれぞれ実行ユニット(ALUSLUを担当しています。

      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以上ではないと推測することが出来ます。

      これら

      1. BTIガジェット(投機的実行を誘発するため): C/C++コンパイラでreponline防御を展開しないコードで関数ポインタ/仮想関数呼び出しを使用して実装しています。OpenSSLのEVPライブラリは、そのようなポインタを使用して、暗号化/復号化を行っています。
      2. 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等を使うと管理が便利でしょう。


セキュリティ系連載案内


タイトルとURLをコピーしました