てきとうなメモ

本の感想とか技術メモとか

BREACH攻撃

HTTPの圧縮機能を用いて、HTTPS上の通信をみてCSRF tokenなどの秘密を推測することができるという脆弱性。

以前CRIMEという脆弱性があったのだが、あれはHTTPSの圧縮機能というあまり使われていない機能を用いていたので、その機能をオフにすればよかった。

しかし、今回のはHTTP上のgzip圧縮などが該当するので使っているところは多そうなので、なかなかオフにはしづらい。そしてそれ以外の対策がCSRF tokenの生成方法を変更するなどめんどくさいので対策がとりにくい。

ただし、攻撃者はユーザのHTTPS通信を盗聴でき、かつ、攻撃者がユーザに脆弱性のあるサイトにHTTPリクエストを送信させることができなければならないので、そこまで問題視しなくてもいいのかも。

攻撃方法

GET /hoge?foo=XXXXXX

を実行すると

<html>
...
<a href=/fuga?bar=XXXXX>
..
<a href=/heso?canary=61BAAES23CA89213>
...
</html>

というレスポンスボディを返すようなサイトを想定している。ここで、ユーザが入力されたXXXXXがレスポンスボディにそのまま表示されている。また、canary=以下は攻撃者が取得しようとしているCSRF tokenである。

gzipなどの圧縮アルゴリズムは同じ文字列があれば圧縮後のサイズは小さくなる。ゆえに、id=の部分に「canary=5」と入れた時より「canary=6」と入れた時の方がサイズは小さくなるし、「canary=63」と入れた時より「canary=61」と入れた時の方がサイズは小さくなる。このように入力を変更しつつサイズの大小を観察することにより、徐々に正解となるCSRF tokenに近づけることができる。

攻撃方法はだいたい上記のような内容。CRIMEもほぼ同じ内容みたいで、HTTPSだけでなく、HTTPの圧縮機能でもできるだろうということはこれまでも言われていたっぽい。

ただ、実際は同じ文字列がある時だけサイズが小さくなるわけではなく、ハフマン符号化によっても小さくなるので、必ずしも正解の時のみ小さくなるわけではない。ただし、その場合の対策も論文にかかれている。