初級編では、「URL」のドメイン名と「錠マーク」の有無だけで、偽サイトのほとんどを見破ることができるというお話をした。上級編では、その裏付けとなるお話や、より巧妙な手口にだまされない知識を身につけていただこうと思う。
本題に入る前に、まずはブラウザ(インターネットエクスプローラー)のメニューから[ツール]→[インターネットオプション]を開き、「詳細設定」タブをクリック。一覧中の「セキュリティ」で次の2つの設定項目がチェックされていることを確認しておこう。これらが選択されていないと、危険を知らせる重要なセキュリティの警告が表示されなくなってしまう。
・保護付き/保護なしサイト間を移動する場合に警告する
・無効なサイト証明書について警告する
●「セキュリティの警告」で偽サイトを見破る1
暗号化通信は、通信中の盗聴や改ざんを防ぐ機能と、サイトの正当性を簡単に判断できるようにする機能を提供する。
「https://」で始まるページを開くと、図1上の「セキュリティの警告」が表示される。これは、アクセス先が「http://」から「https://」に変わるというお知らせなので、「はい」を押せばよい。とくに何事もなくページが開き錠マークが表示されたら、暗号化通信が始まり、高いレベルでサイトの正当性も確認できていると思ってよい。
逆に暗号化通信から通常通信に切り替わるときには、図1下の警告が出る。認証の時だけ暗号化通信を利用しているサイトでは、通信中に切り替わることがあるが、重要情報を入力・送信してよいのは暗号化通信中だけ。すなわち、上の警告から下の警告が出るまでの間だけということを肝に銘じておこう。
たとえばもし、パスワードなどの送信ボタンを押した時に図1下の警告が出たら、必ず「いいえ」を押して送信を中止する。「はい」を押してしまうと、送信情報を盗まれてしまう可能性がある。
●暗号化通信前に入力画面が出てきたら
いくつかのサイトでは、暗号化通信前にパスワードなどの重要情報を入力させ、送信する際に暗号化通信が始まるように設計しているところがある。この場合、表示している入力ページに設定ミスや改ざん等がなければ、予定通り暗号化通信が始まり重要情報は安全にやりとりされる。だが、予定通りに事が運ぶかどうかを、私たち一般ユーザーが予測するのは難しい。
もしそのページが情報を暗号化しないように改ざんされていたら、図1上の警告が出ないまま入力情報が送信され、フィッシャーに盗み取られてしまうことになるかもしれない。
サイトによっては、「送信時に暗号化されるので安全です」というような注意書きがあるかもしれないが、あなたの情報を盗み取ろうとするフィッシャーたちも同じことを言って、あなたを安心させようとするということを覚えておいて欲しい。
暗号化通信前にログインなどの入力画面が出てきたら、アドレスバーの「http://」を「https://」に修正してアクセスしなおしてみる。いくつかのサイトは、この方法で最初から安全な暗号化通信が利用できるようになる。だが、この方法が利用できないサイト(たとえば認証を別サーバで行っているようなサイト)もある。サイトの正当性や処理が正常に行われることを自分で判断できる方はよいが、そうでない方は、この場合にはアクセスするのを見合わせ、暗号化された入力画面を提供してもらうようサイトの管理者に要求することをお勧めする。
「http://」で開いたページは、それが本物のサイトであることも、改ざんされていないことも保証されない、すべて自己判断の世界。偽サイトにだまされないようにするためには、錠マークなしでは絶対に重要情報を入力したり、送信したりしない癖をつけておこう。
●セキュリティの警告で偽サイトを見破る2
暗号化通信が始まるときに、図2のような「セキュリティの警告」が表示されたら偽サイト警報だ。セキュリティ証明書について後述するが、証明書に問題があるというのは、サイトの正当性を自動的に判断する仕組みが機能しないので、すべて自分で判断してくださいという意味。自己判断できる人以外は、「いいえ」を押して中止するのが無難だ。
図2の警告は、3項目すべてに問題がある珍しい例だが、とくに1番目と3番目のエラーは、偽サイトの可能性が極めて高いので注意したい。2番目の「セキュリティ証明書は有効期限が切れたか、まだ有効になっていません」という警告が出た場合には、パソコンの日付設定が間違っている場合もある。コントロールパネルの「日付と時間」を開き、正しい日時に設定されているかどうかチェックしてみよう。また、長期間ブラウザのアップデートを怠っている場合にも、この警告が出ることがある。
サイトによっては、これらの警告に対し『「はい」を押してください』とか『証明書をインストールしてください』としている場合もあるが、そんなガイドの信憑性も含めて、先に進むか否かを自分で判断しなければならない。フィッシャーたちもまた、言葉巧みに「はい」を押させたり、証明書をインストールさせようとするので注意が必要だ。
●セキュリティ証明書
Webの暗号化通信で使う「セキュリティ証明書」は「サーバ証明書」と呼ばれるもので、ある証明機関(認証局ともいう)が「このサーバは確かにこのドメインのものです」ということを証明する、サーバの身分証明書のこと。So-netが使用しているベリサインから発行されたサーバ証明書の場合には、それが「Sony Communication Network Corporation」という実在の会社であることも保証している。
SSLで暗号化通信を行う際には、この証明書の真偽が自動的にチェックされ、問題がなければ錠マークが表示される。が、たとえばフィッシャーが偽造証明書でなりすましを行おうとすると、先ほどの「セキュリティの警告」の1番目の項目が点灯して知らせてくれる。盗んだ証明書でなりすまそうとすると今度は3番目が点灯し、偽サイトであることを警告してくれる。
試しに、正常に接続できた時のサーバ証明書をのぞいてみよう。表示方法は、ステータスバーの錠アイコンをダブルクリックするか、ページのプロパティで「証明書」ボタンを押す。「詳細」タブのリストから「サブジェクト」を選択すると、このサーバの証明されている諸情報がわかる。
略称と英語ばかりなのでとっつきにくいかもしれないが、各項目は次のようなことを意味している。
CN(Common Name):一般名(ドメイン名を含むサーバ名)
OU(Organizational Unit):部門名(部署名など)
O(Organizational Name):組織名(会社名や団体名など)
L(Locality):市区町村名
S(State):都道府県名
C(Country):国名(JP=Japan)
最小限の証明書はサーバの実在だけを証明するが、組織名を持つ場合には、その組織が実在していることも証明している。
●誰でも作れるサーバ証明書
私たちが使う身分証明書には、運転免許証もあれば社員証もある。同じ証明書だからといって、はたして同じように信用できるだろうか。もちろんそれが本物なのかどうかも問題だが、たとえ本物の身分証明書であっても発行元次第。うかつに信用することができないのは、サーバ証明書も同じだ。
実はこのサーバ証明書は、ソフトさえあれば誰でも証明機関になって、適当な証明書を発行することができる。ただし、そんな証明書を使うと図2の1番目の警告が出ることになる。システムには、予め信頼できる証明機関の証明書がいくつかインストールされていて、未登録の証明機関は怪しいかもしれないとして警告を出すのだ。逆にどんなに怪しい証明機関であっても、証明書をインストールしてしまえば、この警告は出なくなってしまう。
登録済みの証明機関は、それをビジネスとしている会社なので、いい加減な運営をすると命取りだし、そんな証明機関の証明書を取得するには、それなりの手間と時間とお金もかかる。証明書を持つサイトが悪いことをしないという保証はどこにもないが、少なくとも使い捨てのフィッシングサイトが正規のサーバ証明書を持つのは、なかなか難しいことなのだ。
「セキュリティの警告」が3つとも点灯した、怪しいサイトのセキュリティ証明書。発行先は、アドレスバーのサーバと違うし、有効期間もとっくに過ぎている。おまけに発行者自らが「Snake Oil CA(インチキ認証局)」と名乗っていたりする。
●SSLの暗号化の仕組み
ではここで、証明書の本質を理解するために、SSLの仕組みについて簡単にふれておこう。SSLには、サーバ認証、クライアント認証、暗号化の機能があるが、私たちがふだん接しているのは「サーバ認証+暗号化」というプロセスだ。
SSL通信では、最初にサーバがブラウザに特殊な鍵のひとつを渡す。この鍵は、一方の鍵で暗号化したものが、もう一方の鍵でしか復号化できないという、特殊なペアの鍵の片方だ。ブラウザに渡す鍵を「公開鍵」といい、サーバが保管しておく鍵を「秘密鍵」という。
公開鍵を受け取ったブラウザは、暗号化と複合化の両方に使うランダムな鍵をその場で生成する。これを「共通鍵」といい、ブラウザはこの共通鍵を公開鍵によって暗号化し、サーバに送る。公開鍵で暗号化したデータは、サーバが保管している秘密鍵を使わないと復号化できないので、生成したブラウザと公開鍵の送り主であるサーバだけが、この共通鍵を利用できることになる。以後、この共通鍵を使って通信内容を暗号化すれば、安全にやりとりできるという仕組みになっている。
●サーバ証明書は署名付きの公開鍵
サーバ証明書は、簡単に言うとサーバが持つ公開鍵が本物であることを、証明機関が確認し署名したものと考えればよい。
先ほど、SSL通信では最初にサーバが公開鍵を渡すと説明したが、サーバの正当性を確認する「サーバ認証」を行うために、実際にはここで公開鍵とサーバに関する情報、証明機関の署名などが含まれたサーバ証明書を渡す。ブラウザは、インストールされている証明機関の証明書をチェックし、証明機関の正当な署名であることと正当なサーバの公開鍵であることを認知する。
ここでいう署名というのは、先ほどの公開鍵と秘密鍵を使った暗号化と似た仕組みで生成されるデジタル署名のことである。証明機関は、申請者から出された公開鍵とサーバの身元を示す情報などの証明書の内容から、メッセージダイジェストと呼ばれる一定の長さのデータを生成。これを、証明機関の秘密鍵で暗号化したのが、証明書のデジタル署名の実体だ。
(執筆:現代フォーラム 鈴木)