てきとうなメモ

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

ALPACA Attack

ALPACA Attack

論文ちょっと読んでみた。

サーバAへのリクエストを同じサーバ証明書を利用している別プロトコルのサーバBに流すことで、秘密情報を盗んだり、XSS攻撃をすることができるという話。攻撃者はクライアントとサーバの間にいて、TLS通信を本来のサーバAからサーバBに流すことで攻撃している。

Attack Overview

公式サイトにあるこの図を用いて説明すると、被害者は攻撃者が用意したサイト(www.atacker.com)にいる。このサイトでクロスサイトのリクエストをwww.bank.com:443に投げる。www.attacker.comは攻撃者のサイトなので、POSTの内容は攻撃者が指定することができる。

被害者のクライアントとwww.bank.com:443の間に攻撃者は存在し、リクエストをftp.bank.com:990などに流す。TLSは(SNIやAPLNを利用しないと)プロトコル、ホスト名、ポート番号が意図していたものかを確認しないため、攻撃者はリクエストを別ホスト、別ポート、別プロトコルに流すことができる。

この時点でcookie等秘密情報をftp.bank.comに流すことができている。ftp.bank.comの実装がこの情報をログに出すなどしており、攻撃者がftp.bank.comのログを見ることができるのであれば、この秘密情報を盗むことができる(Upload Attack)。

さらに、攻撃者はftp.bank.comのレスポンスをクライアントにwww.bank.comのレスポンスとして返すことができる。ここに含まれるJavaScriptがクライアント(ブラウザ)上で実行されるとXSS攻撃となる(Download Attack)。

別の方法として、www.attacker.com上でFTPとして解釈するとエラーメッセージを返すようなリクエスト「HELP 」をwww.bank.com:443に投げる。中間者攻撃をしてこれをftp.bank.com:990に流す。そうすると、ftp.bank.comはFTPのエラーメッセージとして「Unknown command: 」を返す。しかし、クライアントはブラウザなので、HTTPのレスポンスとして解釈され、スクリプトが実行される(Reflection Attack)。

図ではFTPサーバにリクエストを流して攻撃しているが、論文では他にSMTP,POP3,IMAPなどメールサーバを使っても攻撃可能としている。

攻撃条件

攻撃が可能である条件は

  • 被害者をwww.attacker.comに誘導する
  • 被害者と攻撃対象サイト(www.bank.com:443)に対して中間者攻撃ができる
  • HTTPのリクエストが来てもリクエストを流す先のサーバがエラーにしないような実装になっている必要がある
    • この条件が厳しそうに見えるが、そういう実装はそれなりにあることが論文で指摘されている
  • Download AttackやReflect Attackの場合、ブラウザがIEや古いEdge(非Chromium)のようにContent Sniffingする仕組みを持っている必要がある
    • HTTP上のHTMLではないレスポンスが返るのが、それをブラウザにHTTP上でHTMLを返していると誤解させる必要がある
  • 攻撃対象のサーバと中間者がリクエストを流す先のサーバが同じ証明書を利用している

と、かなり難しい。

HTTPのリクエストを受け入れるHTTP以外のサーバ実装

そんなになさそうに見えるのだが、調査したほとんどのSMTP/POP3/IMAP/FTP実装では「POST / HTTP/1.1」のようなリクエストラインやリクエストヘッダまでは受け入れる動作をしている。ただし、そこから先のリクエストをエラーでコネクションが切れることなく攻撃可能かとなると難しい。ただし、SendMail(SMTP)、Cyrus(IMAP)、Courier(POP3)、Microsoft IIS、vsftpd、FileZilla Server(FTP)などの有名所のサーバ実装を利用して攻撃が可能になるようだ。

対策

別のサーバには別の証明書を用いれば良いのではとなるが、実運用上はワイルドカードの証明書使いたいだろうし、難しいよねとしている。

ALPNやSNIを正しく実装することで、TLSを使っているが、そのプロトコルはHTTPなのかFTPなのか、ホスト名はwww.bank.comなのかftp.bank.comなのかを決めてから通信すれば、今回のような攻撃を防ぐことができる。ALPNはHTTP/2が広まったため実装しているHTTPクライアント/サーバは増えている。しかし、プロトコルネゴシエーションに失敗しても通信を切るような実装になっていなかったり、HTTP以外のTLS通信可能なサーバがALPNをほとんどサポートしていないという問題がある。