HTTPS証明書エラー→情報窃盗の怖さが分かるBurp proxy
「HTTPSの証明書エラーが出るサイトで個人情報などを入れては駄目」とネトランでも常日頃書いているが、「なぜ」という疑問を持っている人もいるのではないだろうか。「HTTPSのサイトを利用して個人情報を盗み出す手口」の概要が分かるツール「burp proxy」で、情報窃盗攻撃の仕組みと、HTTPSエラーの怖さを紹介する。
「HTTPSとは」「証明書エラーとは」、という話を長々と書くスペースがないので簡潔にまとめる。
- HTTPSのサイトで行われている情報は暗号化されており、ネットワーク盗聴では盗まれない
- 通信相手が本物かどうか判定するために証明書が必要
この二点から素直に「証明書エラーサイトでは個人情報を入れないようにしよう」と思える人ならそれで良いのだが、以下のような疑問が出るかもしれない(というか出る人の方がむしろ正しい)。
「偽物」とは例えばいわゆるフィッシングサイトだが、「フィッシングサイトにアクセスしてしまうこと」は他の手段によっても防げるのでは?
HTTPS通信が行われている以上、自分とアクセス先ウェブサーバーの間での通信は暗号化されており、第三者によっては覗かれない。
「HTTPS証明書」は「通信盗聴」とは全く別の話であり、いわば「他の手段」を持たない人向け/「他の手段」が機能しない場合のための補助防衛では?
問題が「フィッシングサイトにアクセスしてしまうこと」だけであるなら、上記は一定程度に正しい。が、HTTPS証明書が真に必要な理由は、「フィッシングサイトへのアクセス防止」ではない。ネットワーク上での「なりすまし&盗聴」の防止だ。
どういうことかというと、ユーザーと本物サイト(例えばオンラインバンクサイト)の間に第三者が入り込むケース。イメージが沸かない人向けに書いておくと、例えばネットカフェマシンで接続を行う場合に、ネットカフェのネットワーク管理者(以下「悪者」)が悪意を持ってユーザーと本物サイトの間に入り込んでいると思えば良い(それは基本的にユーザーがマシン内をいくらチェックしても防げない)。
もちろん、上記通り、HTTPSの通信は暗号化されているので、悪者が「ユーザーと本物サイトの間の通信」を盗聴することは不可能だ。しかし、悪者がオンラインバンクに「なりすます」と話は変わる。ユーザーはオンラインバンク相手に暗号化通信を行っているつもりで、実は悪者相手に暗号化通信を行っている、という状況が発生する。「暗号化通信」は、受取手によってのみ解読可能(通常は受取手=オンラインバンク)なので、つまり、ユーザーの送信した情報が、悪者に解読されてしまうのだ。
ユーザーの意識:自分→(暗号化通信)→ウェブサーバー
この状態であれば、仮に悪者が間に立ち、通信を覗いたとしても、その通信は暗号化されているのだから、送信した情報(例えばパスワード)の不正入手は不可能だ。
実際:自分→(暗号化通信)→悪者→ウェブサーバー
この状態では、たしかに「自分」は暗号化通信を行っている。が、その相手は「悪者」。通信相手である悪者は、ユーザーが送信した情報(例えばパスワード)を不正入手することができる。
この状態を見抜くために、HTTPSの証明書エラーが役に立つ。ユーザーはオンラインバンク相手にHTTPS通信を行っているつもりで、実は悪者相手にHTTPS通信を行っている。で、あれば、その「悪者」が正規の証明書を持っていない以上、証明書エラーが出る訳だ。
「証明書エラー」は、このような攻撃を防ぐために重要な存在だ。ユーザーとオンラインバンクの間に入り込み、オンラインバンクに「なりすます」プロクシ、Burp proxyで上記のような状況を作り出し、何が起こるかを実感して欲しい。
Burp proxyは「Burp Suite」として配布されている。作者のページから「free edition」をダウンロードして起動。Javaランタイムが必要だ。ポート番号を「proxy」「options」で設定する。
IEのプロクシ設定を「localhost」「8080」へ。……実際の攻撃時には、別のマシンでBurp proxy的なものを走らせるか、そもそも「HTTPプロクシ」ではない形で動かす訳だが、あくまで「概要を理解するため」ということで(「ブラウザのプロクシ設定を確認すればこの手の攻撃を防げる」ではない)。
IEを起動し、適当なオンラインバンクを開いてみよう。ページ表示が延々と行われない。Burp proxyがリクエストを受信し、止めているからだ。「forward」でリクエストを透過転送させる。
ページが表示される。HTTPSのログインページを開いてみよう。
同様にBurp proxyで透過転送を行うと、IE上で証明書エラーが出る。ブラウザアドレス欄に表示される見かけの接続相手は「みずほ」のサーバーなのだが、HTTPS通信の実際の相手が、みずほサーバーではなくローカルマシン(のBurp proxy)であるためだ。この警告を無視し、閲覧を続行する。
IDやパスワードなどを送信してみよう。HTTPS通信では、本来通信の中身を盗聴によって覗かれないはずなのだが……。
入力した「12345678」が表示されている。「暗号化で盗聴を防げる」というのは、「暗号通信相手がオンラインバンクであるなら、その間にいる第三者には覗かれない」という意味。「暗号通信相手がBurp proxyであるなら、Burp proxyに覗かれる」のだ。ユーザー側で可能な対策は、「HTTPSエラーが出ている場合には、(Burp proxy的な方法で)間に入り込んで盗聴を試みる悪者がいるかもしれないので、個人情報を送信しない」ということだ。
執筆:tokix (tokix.net)