著者プロフィール

前田 典彦(まえだ のりひこ)
カスペルスキー 情報セキュリティラボ チーフセキュリティ
エヴァンゲリスト

マルウェアを中心としたインターネット上のさまざまな脅威解析調査の結果をもとにし、講演や執筆活動を中心とした情報セキュリティ普及啓発活動に従事。

ホームページをはじめとするWebサイトへのアクセスは、パソコンやスマートフォンを所有している人であれば、毎日のように行っていると思います。その際、多くの人はInternet ExplorerやMicrosoft Edge、Google Chrome、FirefoxといったWebブラウザを使用していることでしょう。

しかし、Webブラウザ以外のソフトウェアであっても、技術的には同じ仕組みを使用するものが増えています。ここでいう「同じ仕組み」とは、通信を行う技術の1つ(インターネット通信の規格や取り決めを「プロトコル」と言います)を指しており、Web通信に使用するプロトコルとしてHTTPとHTTPSがあります。

Webブラウザを例にとると、上部にアドレスバーがあり、例えば筆者が所属しているカスペルスキー社のホームページにアクセスしたときは、http://www.kaspersky.co.jp/という文字列が表示されます。

これは、Hyper Text Transfer Protocolの略称 「HTTP」というプロトコルを使用して「www.kaspersky.co.jp」というWebサーバにアクセスしてデータのやり取りをしていることを表しています。

このように、Webブラウザであれば、アドレスバーを非表示にしていない限り、どのページに何のプロトコルでアクセスしているかを確認できますが、例えばスマートフォンのアプリの多くは、アドレスバーに類するものを備えていません。しかし、プロトコルとしてHTTPやHTTPSを使用するアプリであれば、通信としては同じようなことを行っていると考えてください(通信規格としてのHTTPやHTTPSに正しく準拠しているかどうかは別問題ですが……)。

HTTPとHTTPSの違い

では次に、HTTPとHTTPSの違いを説明します。まず、主にWebアクセスのために考案・開発されたプロトコルが「HTTP」です。対するHTTPSは、Webアクセス用という目的はHTTPと変わりませんが、HTTPを基にセキュリティをより担保できる形に機能拡張されたものです。HTTPSの末尾に付いている「S」は、英語の複数形のSではなくSSL/TLSを意味しており、正式にはHyper Text Transfer Protocol over SSL/TLSとなります。SSL/TLSは、通信データを暗号化して送受信するための仕組みの一種で、SSLはSecure Sockets Layer、TLSはTransport Layer Securityの略です。SSL/TLSについては、後述します。

HTTPSの機能

HTTPSに特有の機能は、大きく分けて2つあります。1つは通信の暗号化、もう1つは通信先の信憑性を担保することです。HTTPSで通信が行われた場合、通信先と通信元のアドレスなど通信開始に必要な若干の情報以外、すべての通信内容が暗号化されます。これにより、仮に第三者が通信を盗み見したとしても、通信内容を判読することができなくなります。

また、通信開始時にサーバとクライアント(Webブラウザなど)との間で証明書をやり取りし、その正当性を検証することで、Webサーバの信憑性を確認します。HTTPS通信の場合、この証明書のことを「SSLサーバ証明書」と呼びます。通信先サーバの信憑性が確認されて通信が暗号化されている場合は、Webブラウザのアドレスバーの左端などに「緑色の錠前が閉じられたマーク」などが表示され、ページが表示されます。

なお、これら一連の作業は、WebサーバとWebブラウザが自動的に行ってくれます。反対に、SSLサーバー証明書が信頼できる「認証局」から発行されたものでないか、そのサーバ用に発行されたものであるという確認が取れない場合、Webブラウザでは「セキュリティ証明書に問題がある、信頼ができない」「安全に接続できない」といった主旨の警告が表示されます(図1)。

図1:FirefoxでのSSLサーバ証明書エラーの警告画面

HTTPSであれば万事安心か?

HTTPSでは、先述のようにSSL/TLSの仕組みが使われます。SSL/TLSでは、SSLサーバ証明書・秘密鍵・公開鍵・共通鍵を使用します。SSLサーバ証明書は、Webサーバが保持しており、HTTPS通信開始時にWebサーバから送られてきます。SSLサーバー証明書の正当性が確認できない場合は、Webブラウザ上に図1のような警告が表示されます。これは、閲覧しようとしているホームページが本物かどうかの確認が取れないことを意味します。

一般的に多くのWebブラウザでは、そのまま閲覧を続行するためのボタンなどが警告画面に現れる(図1の例では、左下の「例外を追加..」ボタンがそれに該当)のですが、サーバの管理者に問題がないことを確認できない限り、アクセスは控えるべきでしょう。信憑性を確認できないまま閲覧を続行することはできますが、その場合、通信が暗号化されているだけであることを理解しておく必要があります。仮に、攻撃者など悪い人が用意したサーバとの通信を暗号化しても、セキュリティとしては意味を成しません。

また、SSL/TLSは、SSLとTLSという2つの技術要素を総称したものです。中でも、SSLは既に時代遅れで古い技術となっており、数々の問題点が解消されていない(かつ今後も解消される可能性はほとんどない)ので使用することは好ましくありません。使用しないことを強く推奨するといっても良いでしょう。

これは、SSLが先に開発され、その後継としてTLSが考案されたという歴史的経緯を理解する必要があります。いまだにSSLも有効にしているWebサーバもありますが、今日にあっては、SSLは使わずTLSを使用すべきです。

皆さんが日々使用するWebブラウザ、例えばInternet ExplorerやGoogle Chromeでは、「SSL2.0を使用する」「SSL3.0を使用する」という設定を必ずオフにするようにしてください(図2)。仮にこれらが有効な場合、非常に深刻な問題が起きる可能性があります。一例としては、SSLには、サーバ側にしか保管されていない「秘密鍵」が漏洩するセキュリティホールが存在します。秘密鍵が奪われたWebサーバにアクセスすると、暗号化されたはずの通信がすべて攻撃者によって解読されてしまう可能性もあります。

図2:Internet Explorer / Google ChromeのSSL2.0/3.0の設定

HTTPSとマルウェアとの関係

HTTPSは、安全なWebアクセスのために必須なものですが、実は、マルウェアにもHTTPSの通信手法を実装するものがあります。先述の通り、証明書が正当なものでなくてもHTTPSによる通信の暗号化は実現できるため、マルウェアがHTTPSを使い通信を暗号化した場合は、調査や解析が非常に困難になります。また、暗号化などは一切行わないのに、HTTPSが一般的に使用する443/TCPを外部向けの通信ポートとして使用するマルウェアも存在します。

一般的なユーザーは普段意識する必要はありませんが、ネットワーク管理者やセキュリティ担当者は、こうした事実も認知しておくべきでしょう。