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