コンピュータセキュリティと様々なサイドチャネル攻撃

コンピュータセキュリティというのは微妙なもので、正面からの攻撃には安全でも、攻撃対象とは思われていなかった部分を突くとあっさり情報が盗めるパターンがある。そういう攻撃手法をサイドチャネル攻撃という。ここではサイドチャネル攻撃についていくつか見てみよう。

たとえば社外秘の文書をセキュアにブラウズしたいとしよう。VMwareなどを使って仮想マシンにOSを2つインストールして、通常利用環境とセキュア環境を完全に分離して、セキュア環境からしか社内ネットワークにアクセスできないようにして、そちら側をインターネットから完全に隔絶しておけば、仮に両方のOSが乗っ取られたとしても、VMware自体が乗っ取られない限りは依然として分離が有効に機能しているので、インターネットに情報がリークすることは原理的になさそうだ。

しかし実際にはこのような分離は完全な防護壁にはなってくれない。たとえばセキュア環境は「なにもしない」のと「CPUを激しく使う」という方法で通常利用環境に1ビットずつ情報を伝えることができる。このような本来想定されていない通信手段を「隠れチャネル」というのだが、攻撃者が両方のOSを乗っ取ることに成功したら、隠れチャネルを使って徐々に社外秘文書を外部に送信することができてしまう。

現在最も有名なセキュリティの問題は、本来読めないはずのメモリ領域を読めてしまう攻撃手法Meltdown/Spectreだろう。この攻撃では、隠れチャネルの送信元としてCPUに投機的実行されるコードを用意しておいて、CPUキャッシュを隠れチャネルに使って、ユーザプロセスからカーネルメモリを読み取るということを行う。実際にMeltdownでは500KB/sのペースでカーネルメモリを読むことに成功したらしいので [1]、相当大きな穴だったということがわかる。

意図しないところで本来秘密の情報がバレてしまうケースもある。例えば鍵によって計算負荷が異なる暗号の場合、暗号チップから結果が返ってくるまでの時間を測ることで鍵を推測することができる。チップ側で待ち時間を入れて時間を揃えたとしても、チップの消費電力を計測すれば本当に計算しているのかを見分けることができる。さらには、チップのカバーを外して赤外線カメラで撮影すれば、どの部分が熱を発しているかわかるので、そこからどういった演算が行われているのかある程度推測することもできる。セキュアなチップを作るときにはこれらの攻撃手法をすべて考慮に入れなければいけない。

CPUとメモリはバスを通じて繋がっていて、メモリアクセスはバス上の電気的な信号として送られる。つまりメモリアクセスを行うとノイズが電磁波としてバスから放射されるので、これを使うとメモリアクセスのパターンを推測することができる。逆に、正確なタイミングでメモリアクセスを繰り返し行うだけで、人が聞けるAMラジオ信号を普通のMacbookから送信するというプログラムも書かれている [2](「メリーさんの羊」を送信するデモ)。似たような話で、文鎮化したApple NewtonをメモリアクセスとAMラジオだけを使ってデバッグしたエピソードもあるようだ。

他にもHTTPSを使っていてもマップタイルのサイズ(圧縮率)は画像ごとに違うので、地図を航空写真モードで見ている場所をトラフィックパターンだけから推測するということが2012年に行われていたりもする [3]。

というわけで、想定内の攻撃に対しては実際に安全なセキュリティメカニズムでも、想像もしなかった方法を使うことでセキュリティを破れてしまうことがあるのだ。クリエイティブな攻撃手法を考えつく人には本当に感心するしかない。

53

Rui Ueyama

#エンジニア 系記事まとめ

noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。