Covert Channel

Covert Channel(偽装通信)とは

もう旬を過ぎてしまった気がするが,Hyper Threading脆弱性に関する論文(Hyper-Threading considered harmful)を,ようやく読んだ.そこに書かれていたCovert Channelという通信手段が非常に興味深かったので,紹介したい.

論文の中では,Covert Channelの例として,キャッシュのレイテンシによる方法を紹介している.

  • プロセスAがあるキャッシュラインに対応するメモリにアクセスする.
  • プロセスBが同じキャッシュラインに対応するメモリにアクセスして,そのキャッシュラインの内容を置き換える(もしくはアクセスせずに置き換えない)
  • 再びプロセスAが最初のメモリにアクセスし,そのレイテンシを計測する.

このレイテンシが大きければ,プロセスBが1を送信し,小さければ0を送信した,と解釈することで通信が可能となる.このような,キャッシュのアクセスパターンによって生じるレイテンシの差によって,P4 2.8GHzの場合、L1キャッシュで約400KB/sec,L2キャッシュで約100KB/secの通信が可能である,ということらしい.

これが興味深かったので,同様のテクニックを網羅的に紹介したサイトはないものか,と探すと「IP covert timing channels: design and detection」の論文を題材にした大学の授業のサイトがかなりよさそう.Course Syllabus - 600.624 --- Spring 05のFeb. 17/18の分.

学生のプレゼン資料(pdf)が置いてあるのだが,74ページの大作なので,内容の紹介は,また明日(以降)に.

参考にもともとの論文の内容

HTの脆弱性に関する論文自体の具体的な内容は,最後の示すリンク先が詳しい.ちなみに,論文で指摘されている脆弱性は,「キャッシュのレイテンシの差で他プロセスのメモリアクセスパターンを推測できる」ことに起因している.ただ,各種ノイズによって,推測はどんどん困難になるため,実環境においては,この脆弱性による脅威は現実的なものとはならないだろう.(ここでノイズというのは,L1キャッシュに比較し,L2キャッシュでは,命令キャッシュとデータキャッシュが統合されている,ということや,TLBによる仮想メモリのページング機構によるレイテンシの変化する,ということや,もちろん,他プロセスの動作によっても増大する.)

ちなみに,レイテンシの差を見つけることで,二つある式のどちらが実行されているか,が分かるらしいのだけど,それから,どういう訳でOpenSSLの鍵が漏れるのかは,OpenSSLの計算アルゴリズムを知らないので,まったくわかっていない.サルでも分かるまとめはないもんだろうか.

  • 論文のまとめ:
なんか詳細が気になってしまったので、 このページにあった論文 Colin Percival "Cache Missing For Fun And Profit", 2005 を簡単にまとめてみた。
FreeBSDのカンファレンスBSDCan(2005年5月13日、日本時間14日に米オタワで開催)でColin Precival氏が発表した論文(CACHE MISSING FOR FUN AND PROFIT)は、Hyper-Threading脆弱性があり、実際に脆弱性を使った攻撃が可能であることを示した。PCユーザーへの影響はほとんど考えられないが、Hyper-Threadingのメカニズムそのものに絡む脆弱性だけに、そのメカニズムは興味深いものだ。どのような方法でHyper-Threadingに対する攻撃が可能なのか、論文の内容を検討してみたい。