URLが"HTTP "ではなく、"HTTPS "で開始されるウェブサイトが増えてきました。これらのサイトでは、SSL/TLSという仕組みを実装しています。
SSL/TLSはオンラインセキュリティの標準といえますが、脆弱性への対応が不十分だと恐ろしい攻撃の対象になります。
SSL/TLSは、ウェブトラフィックの機密性とメッセージの完全性を提供するために設計された安全なトランスポート(データの転送)およびセッション(通信の開始と終了の制御)に関するプロトコルであり、暗号化およびハッシュ機構の組み合わせを使用しています。
暗号化とは、データをスクランブル化することで、許可された関係者だけが情報を理解できるようにする方法です。つまり、万全な状態で対応すれば、もし誰か(ハッカー)がデータを傍受しても、そのデータを読むことも使うこともできません。
今回は、SSL/TLSについて、よくある攻撃とその対策を紹介します。
目次
- SSLとTLSは同じもの?
- よくある攻撃とその対策
- まとめ
SSLとTLSは同じもの?
SSLは "Secure Socket Layer" の略称で、TLSは "Transport Layer Security" の略称です。 SSLはTLSの前身となるものです。
1995年にNetscape社がSSLの最初のバージョンを開発しました。1999年、インターネット技術タスクフォース(IETF)はSSLのアップデートを提案しましたが、その際、所有権を示すために、IETFは名前をTLSに変更しました。SSLとTLSという用語は密接に関連しているため、混同されやすい使われ方をしています。しかし、SSLのすべてのバージョンは脆弱性が発見され、すべて非推奨となっていることに気を付けなければなりません。SSL の最終バージョンは SSL 3.0 で、1996 年以来更新されていません。簡単に言えば、TLSはSSLをアップグレードしたものです。
一般的な攻撃
POODLE
2014年10月にSSLで保護されたサイトに対して成功したことが証明された最初の攻撃の1つ、「POODLE(プードル)」という攻撃タイプを最初に紹介します。
「POODLE」は、"Padding Oracle on Downgraded Legacy Encryption "の略称です。「POODLE」は、SSL3.0に存在する2つの欠陥を悪用した攻撃です。 1つ目の欠陥は、一部のサーバー/クライアントがまだSSL3.0をサポートしていること。以下の画像の通りです。
ほとんどのWebサイトでは、TLSがSSL3.0に取って代わりましたが、まだSSL3.0を使用しているWebサイトがあります。POODLE攻撃は、TLSによる安全な接続が失敗すると、一部のサーバーが安全性が低いSSL3.0にフォールバックする(性能の低い仕組みで代替する)ことを利用しています。このため、攻撃者が意図的にTLS接続に失敗させたうえで、SSL3.0を強制的に使用して新しい攻撃を開始することができます。
POODLE攻撃が利用している2つ目の欠陥は、SSL3.0がブロック暗号モードのパディングを処理する方法です。Cipher Block Chaining (CBC) モードを悪用する攻撃で、具体的には、暗号化されている内容が簡単に読み取られてしまいます。
CBCは、固定長のブロックを必要とする暗号化アルゴリズムです。最後のブロックのデータがブロックサイズの倍数でない場合、余分なスペースを埋めるためにパディングが使用されます。サーバーはパディングの長さが正しいかどうかを確認し、平文のメッセージ認証コード(MAC)をチェックしますが、パディングの中身は無視されます。攻撃者は、この仕組みを悪用することで、暗号化方式を知らなくても、、パディングバイトを変更し、サーバーの応答を見るだけで、平文(暗号化されていないデータ)を入手することができてしまいます。
有効な防止策
- SSL3.0を完全に無効化する。
- ブラウザ(クライアント)を最新版にアップグレードする。どうしても古いバージョンを使用したい場合は、SSLv2、SSLv3を無効化する。
- TLS 1.0/1.1の一部の実装は、不正なパディングを受け入れるため、POODLEの脆弱性がある。このため、最新のTLSバージョンに更新をする必要がある(現在のバージョンはTLS 1.3)。
Heartbleed
次に紹介する「Heartbleed」は、OpenSSLライブラリのheartbeat拡張の実装の不備に起因する、重大な脆弱性です。OpenSSLは、SSL/TLS通信のためのソフトウェアで、Heartbeatという拡張機能は、本来、クライアントとサーバー間の接続を、両者が利用可能である限り継続させるために使用されます。
「Heartbleed」という脆弱性は、クライアントが誤ったデータ長を送信した場合、サーバーはクライアントが受信したデータと、クライアントが指定した長さの要件を満たすためにサーバーのメモリからランダムなデータで応答するという仕組みに起因していました。
つまり、意図的にデータの長さを変える細工をしてサーバーに送信したら、サーバー上のデータがその長さに合わせてランダムに盗まれてしまう、ということです。この脆弱性が発見された当時、Heartbleedは恐ろしい被害をもたらしました。例えば、カナダ歳入庁(Canada Revenue Agency)への攻撃で、 数千人のカナダ国民の社会ID番号が盗まれました。以下の画像の通りです。
有効な防止策
OpenSSLの最新バージョンにアップデートする。
まとめ
TLSは、データ漏洩やその他の攻撃からWebサイトを保護するのに役立ちます。しかし、サーバーの設定が不十分な場合、データを保護する代わりに、データが漏洩してしまう可能性があります。
SSL対応が、GoogleでWebサイトを上位に表示するSEOに役立つということはよく知られるようになってきました。このため、一部の企業や個人が、証明書を購入したり、無料のSSL証明書を使用したりすることが増えてきています。
その結果、不備が発生することも多く、時代遅れのSSL暗号化通信が使用され、セキュリティ上の問題も多く発生しています。 多くの場合、SSL/TLS関連の攻撃を防御するためには、古いバージョンのプロトコルを無効化し、最新のSSL/TLSバージョンを確保することが最善の方法です。
また、SSL/TLSの設定や証明書の管理、脆弱性に関する情報の収集や対応の負担を軽減するために、専門家にSSL/TLSアーキテクチャの管理・保守を依頼することをお勧めします。