Amazon EC2でのサイドチャネル攻撃

ちょっと気になった記事とか論文などをメモっておこうと思います。

ACM CCS 2009で発表された、Amazon EC2のサイドチャネル攻撃に関するUCSDとMITの論文。

Hey, You, Get Off of My Cloud: Exploring Information Leakage in Third-Party Compute Clouds, Thomas Ristenpart, Eran Tromer, Hovav Shacham, Stefan Sava, ACM CCS 2009.

ComputerWorld にも記事が出てます)

論文のポイントは4つ

  • Cloudの中で、攻撃対象のVMがどの物理マシン上にいるかを特定できるか
  • 二つのVMが同じ物理マシン上にいるかどうかをチェックできるか
  • 攻撃者が意図的に、攻撃用VMを攻撃対象VMと同じ物理マシン上に配置できるか
  • 同じ物理マシン上にVMが配置されたときに、サイドチャネル攻撃で情報を盗むことができるか

実験に使ったのはAmazon EC2

  • m1.small, c1.medium, m1.large, m1.xlarge, c1.xlargeという5つのVMインスタンスタイプがある。(それぞれ異なるレベルの計算資源を提供)
  • 物理インフラはUSとヨーロッパに2箇所あるが、それぞれに3つの Availability Zoneがある。Availability Zone はネットワークや電源などが別系統になっていて、当然物理マシンもZoneごとに別になってると思われる。ユーザはどこのZoneを使うか選べる。
  • EC2で使ってるVMMはXen。Dom0 (admin VM) が DomU に対するGatewayになるので、Tracerouteを使ってDomUの第1HOPを見るとDom0のIPアドレスが特定できる。

1. Cloudの中で、攻撃対象のVMがどの物理マシン上にいるかを特定できるか

  • Availability Zoneや、VMのタイプごとに、異なる範囲のIPアドレスが付与されるだろうという前提を立てて実験
  • 3x5=15通りのZoneとVMタイプの組み合わせで、1ユーザアカウントから300VMを生成する実験をしたら、タイプごといだいたいまとまった範囲のIPアドレスが付与されることがわかった
  • つぎに、時間をあけてひとつのZone内に、2つの別のユーザアカウントから、100インスタンス生成してみたところ、両者の傾向は同じだった。ここから、IPアドレスは物理マシンごとにスタティックに付与されていると推測。

2. 二つのVMが同じ物理マシン上にいるかどうかをチェックできるか

  • Dom0のIPアドレスが同じなら、多分同じ物理マシン
  • パケットのRound-tripが小さければ多分同じ物理マシン
  • IPアドレスが近い(差が7以下)なら多分同じ物理マシン

これらの推測が正しいかどうか、HDDによる covert channel で検証したところ、Dom0が同じなら同じ物理マシンというのはほぼ正しいと分かった。

3. 攻撃者が意図的に、攻撃用VMを攻撃対象VMと同じ物理マシン上に配置できるか

  • brute force方式。攻撃対象と同じZone/Typeで、沢山VMを生成して、偶然同じ物理マシン上に配置されるのを狙う。
  • EC2のVM配備の傾向を分析して、もっと意図的に同じ物理マシンへの配備を狙う。EC2の動きを分析すると、次のような傾向があった。
    • sequential placement locality : ひとつのVMが終了した直後に別のVMを立ち上げるとき、同じVMに配置される傾向がある
    • parallel placement locality :異なるアカウントからほぼ同時にVMインスタンスを生成すると、高い確率で同じ物理マシン上に配置される。(同じアカウントから続けてVMインスタンスを生成すると、異なるVMになる) →これを利用して instance floodingを行う


4. 同じ物理マシン上にVMが配置されたときに、サイドチャネル攻撃で情報を盗むことができるか

サイドチャネルは、CPUキャッシュの使用状態を検知する Prime + Trigger + Probe テクニックというのを使う。これは、大まかに言って次のような感じ。

  • 1) Prime: まず十分に大きなサイズのバッファをアロケートしてreadし、内容がキャッシュされるようにしておく。
  • 2) Trigger: ビジーループの中でCPUサイクルのカウンタがジャンプする瞬間まで待つ。つまり他のVMがアクティブになって何か処理が行われるまで待つということ。
  • 3) Probe: 再度バッファをreadして、アクセスにかかった時間を計測する。他のVMの処理によりキャッシュが上書きされていると、readに時間がかかるはずなので、ここから他のVMの負荷を推測する。


キャッシュへのアクセス時間を使ったサイドチャネル攻撃で、以下の3つの攻撃を試行してよい結果を得た

感想:
Amazon EC2VM配備のロジックをブラックボックスな実験から見つけ出しているところは面白いし、この分野での他にも攻撃手法が可能性を示唆していると思う。
ただ現状のユーザにとって非常に危険な攻撃かというと、そうでもないと思う。サイドチャネル攻撃というと暗号鍵を盗むのが有名だが、この攻撃ではそういう精度は出ない。
また、ユーザのキーストロークを盗めるといっているのも、非常に限定的な環境での実験結果。EC2の上では、攻撃者と攻撃対象以外のVMが存在したりすると、それがノイズになってしまって精度が出ないはず。キーストロークのタイミングから打っている文字を推測したりする攻撃は有名だが、そもそもログインのタイミングなどで一文字打つごとに十分なCPU負荷が発生するか微妙だし、ネットワークレイテンシなども考慮されてないような気がする。。。