2019年からiPhoneのSafariでhttpのサイトを開くと「安全ではありません」と表示されるようになりました。よく見ていたサイトに安全ではないと表示され、理由がわからずびっくりした方も多かったと思います。では、この「安全ではありません」は具体的に何が安全ではないのでしょうか?詳しくみていきましょう。
httpってなに?
httpはHypertext Transfer Protocolの略で、ブラウザとウェブサーバーが情報のやり取りをするためのルールのことです。このルールに従うことによって、どのブラウザからもアドレスバーにURLを入力することで、ウェブページを表示することができるようになります。
具体的に何が安全でないかをきちんと理解するために、まずブラウザにURLを入力したところからページが表示されるまでの間のデータの移動を詳しく見ていきます。
基本的には、以下の5つのプロセスを経てブラウザにページが表示されます。
①ユーザがアドレスバーにURLを入力する
②ブラウザに入力された文字に対応するIPアドレスをDNSサーバーから見つける
DNSサーバーはDomain Name Systemサーバーの略で、インターネットアドレス(IP)のためのイエローページ(電話帳)のようなものです。
例えば、アドレスバーにGoogle.comと入力されると、ブラウザはDNSサーバーでGoogle.comのIPアドレスを探しに行きます。GoogleのIPアドレスが「172.217.10.14」であることを見つけて次のステップに進みます。
もしDNSサーバーがなければ、ユーザ自身がアドレスバーにGoogle.comではなく、「172.217.10.14」と入力しないといけなるので、非常に面倒なことになっていたと思います。
③ブラウザが上記②で見つけたIPアドレスにあるサーバーにHTTPリクエストを送る
HTTPリクエストは、HTTPのルールにそってデータのやり取りをしたいので、このページを表示するのに必要なデータを送ってくださいというブラウザからサーバーへの連絡です。
④サーバーがリクエストを受け取り、問題がなければリクエストされたページのデータを送り返す
リクエストされたページを構成するデータがきちんと存在し、非公開の設定になっていない限りサーバーはデータをブラウザに送り返します。
データがない場合は、通常「404 Page Not Found」 などと記載されたページが表示されます。
ページのデータは、複数のユーザが一度にリクエストを送っても処理できるように、パケットと呼ばれるこま切れにされたデータの形で転送されます。また、こま切れのデータを元のページの形に戻すための設計図のような情報もこのHTTPリクエストに含まれています。
⑤ブラウザがサーバーから受け取ったデータを使ってページを表示する
最後は、ブラウザがこま切れのデータをパズルを組み立てるように一つにまとめるステップです。
ウェブサイトを表示するために処理されるデータの流れの概要がだいたい分かったところで、httpがどのように危険なのか見ていきましょう。
httpが危険な理由
1.同じネットワークにつないでいるパソコンにウェブサイトに入力したデータが筒抜けになる
これは、上記の③で解説したブラウザからサーバーへHTTPリクエストを送る過程で起こるリスクです。
例えば、ユーザがあるウェブサイトにログインするには、ユーザ名やパスワードのログイン情報をHTTPリクエストとしてWebサーバーに送る必要があります。同じネットワーク内のパソコンからは、このHTTPリクエストを比較的簡単に傍受することが可能です。httpでは、このリクエストの内容が暗号化されないため、傍受されること=パスワードを盗み見らることに直接つながります。
2.気づかないうちに別のページに誘導される(DNSハイジャッキング)
これは上記の②で解説したブラウザがDNSサーバーからIPアドレスを探し出す過程でおこるリスクです。
電話帳の例で言えば、嘘の電話帳を作って使わせるようなものです。銀行のサイトにアクセスしているつもりが、偽の銀行サイトに誘導されてしまうというのがよくあるパターンです。その偽のサイトでログイン情報を入力すると、上記の1番を実行しなくてもパスワードが簡単に盗まれてしまいます。
3.気づかないうちに見えないソフトウェアがインストールされる
これは、上記の④番で解説した部分で、本当のサーバーから受け取ったデータにインストーラを自動実行するプログラムを挿入されてしまうリスクです。
最近では、ビットコインなどのデジタル通貨(暗号通貨)をマイニング(作り出す)ソフトウェアをインストールさせるのが大きな問題となっています。
4.元のサイトとは関係のない広告やコンテンツが表示される
基本は上記の3番と同様でプログラムの代わりに広告や別のコンテンツを元のページが挿入されてしまうリスクです。巨大なパズルの一部のピースを少しだけ別のものに入れ替えるようなものなので、ユーザ自身が本当のコンテンツとの違いに気づく可能性は低いです。医療や金融など情報の正確性が重要になるサイトの他、子供が見るサイトなどは、この攻撃を受けると被害が大きくなる可能性があります。
次にhttpの最後に「s」をつけたhttpsでページ、つまりSafariで「安全ではありません」の代わりに鍵アイコンが表示されるサイトは何が違うのかみていきます。
Httpsは何が違う?
httpsはHTTP Secureの意味で、httpの接続をより安全にしたものです。
具体的には以下の2つによって安全性を確保します。
- データの暗号化
- SSL証明
データの暗号化
HTTPリクエストの情報が暗号化されます。暗号化されることで、当然中身を見ることもなにか情報を付け加えることもできなくなります。これだけで、上記の1番、4番のリスクをなくすことができます。
例えるなら、鍵付きの金属の封筒の手紙の中身を盗み見ようとしたり、書き加えたりしようとするようなものです。
SSL証明書
SSL証明書は、Secure Sockets Layer証明書の略で、ウェブサイトの運転免許書のようなものです。
ブラウザがこの証明書をサーバーから受け取り、証明書が本物かどうか発行機関に確認します。この証明は各ウェブサイト固有のものなので、アクセスしようとしているウェブサイト以外の証明書をサーバーが提示された場合は、ブラウザがサイトが偽物だと判断してブロックします。
このSSL証明があれば、リスクの2番、3番のリスクを回避することができます。
まとめ
以上ウェブサイトを表示する際のデータの流れ、httpコネクションが危険な理由、httpsが安全な理由を解説しました。
以前は、安全なコネクションであるhttpsが必要なのは、パスワードを入力が求められるようなサイトのみであるというように誤解されていました。しかし、危険な理由の項目の2,3,4番で解説したように、ユーザのデータ入力をともわない閲覧のみのサイトであっても、大きな問題が起こるリスクがあります。
基本的に、httpのサイトにアクセスする時は、少なからずリスクがあり誰でもターゲットになりうるということを理解する必要があります。この数年でhttpsのサイトは確実に増えてきましたが、日本ではまだメジャーなサイトでもhttpを使い続けているところもあります。
そのようなサイトの扱いについては、リスクを理解した上で次の順番でどうするかの選択するのが良いと思います。
- そのようなサイトにはアクセスしない
- 自分が管理するネットワーク内・携帯のLTEのみでアクセスする
- パスワード付きの有料Wi-Fiでアクセスする
- パスワード付きの無料Wi-Fiでアクセスする
- 不特定多数の人が使う無料のWi-Fiでアクセスする