31
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SSL/TLS の変遷と代表的な脆弱性

Last updated at Posted at 2025-08-17

初めに

こんにちは、新卒二年目のセキュリティエンジニアです。
普段は Qiita で主にHackTheBox の WriteUp などを投稿しています。

大学時代は非情報系の専攻だったこともあり、今まであまり暗号系の勉強はしてこなかったのですが、セキュリティを生業にしている以上は流石に知っておかねばという危機感を募らせています。

そこで今回は、 SSL/TLS の歴史と代表的な脆弱性についてまとめていこうと思います。
自分の学びメモの側面が強いですが、少しでも参考になれば幸いです。

SSL/TLS とは

そもそも、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)とは、インターネットで通信を行う際に、データを暗号化して送受信するプロトコルのことを指します。
これにより、インターネット上でのデータの盗聴や改竄、なりすましなどを防いでいます。

代表的な利用例としては HTTPS (HTTP over SSL/TLS) があります。
これは、Web サーバとの通信を SSL/TLS を利用して暗号化したプロトコルであり、現在ほとんどの Web サイトで利用されています。

そんな重要なプロトコルである SSL/TLS ですが、古いバージョンには有名で深刻な脆弱性が既に発見されており、現在では TLS1.2 または TLS 1.3 の利用が推奨されています。

以下では SSL/TLS の歴史をさかのぼりながら、代表的な脆弱性について取り上げていきます。

SSL/TLSのバージョンと代表的な脆弱性

初めに、SSL/TLS の変遷について紹介します。

バージョン 発表年 概要・特徴 現在の扱い
SSL 1.0 非公開 セキュリティ問題により公開されず 廃止(未公開)
SSL 2.0 1994年 初の公開版。セキュリティ不備あり 廃止
SSL 3.0 1995年 多くの改善が加えられたが、後にPOODLE脆弱性発見 廃止
TLS 1.0 1999年 SSL 3.0の後継。標準化されたTLSの初版 廃止
TLS 1.1 2006年 初期化ベクトルの扱い改善など 廃止
TLS 1.2 2008年 現在も広く使われる。高度な暗号方式が利用可能 一部で使用中
TLS 1.3 2018年 最新。高速・安全性向上。不要機能の削除 推奨

TLS 1.1 までには既に深刻な脆弱性が報告されており、公式には廃止(非推奨)となっています。

しかし、組み込み機器や医療・製造機器などのレガシーシステムや、システム更新に時間と費用が掛かる金融・公共機関のシステム、古いブラウザや OS との互換性を維持しているシステムなどでは依然として脆弱なプロトコルが利用されていることがあります。

SSL 3.0

SSL 3.0 は Netscope によって1995年に考案されたプロトコルであり、暗号化・改竄検出・相互認証などの機能を提供しています。

SSL 3.0 に存在する有名な脆弱性としては POODLE 攻撃が挙げられます。

POODLE (Padding Oracle On Downgraded Legacy Encryption) 攻撃

POODLE は SSL 3.0 の CBC モードの暗号を利用した通信から、秘密情報を復元する攻撃です。

CBC (と EBC)に関しては以下の記事で概要が掴めるかと思います。

CBC モードでは平文をブロック単位に分割し、対象の平文ブロックと直前の暗号ブロックとの排他的論理和を取りながら暗号ブロックを生成していきます。
その際、規定のブロック長に足りない箇所はパディングと呼ばれるもので埋めながら、決まった長さの暗号ブロックに整えていきます。このパディングは復号時に検証されるのですが、SSL 3.0 ではこのパディングの形式が曖昧です。

この仕様を利用し、暗号文の最後のブロックを改竄して送信して、返ってくる詳細なパディングエラーをオラクル(外部からのヒント)として平文を一文字ずつ特定する試行が POODLE 攻撃となります。

TLS 1.0

TLS 1.0 では、SSL 3.0 から安全性や拡張性が向上しました。主な特徴として、可変のハッシュアルゴリズムや HMAC の利用が挙げられます。

この TLS 1.0 にも CBC モードが存在し、以下で紹介する BEAST 攻撃の脆弱性が発見されています。

BEAST (Browser Exploit Against SSL/TLS) 攻撃

BEAST攻撃では CBC モードの初期化ベクトル IV が前の暗号ブロックの最後のブロックになっている仕様を悪用します。

IV をランダムにすることで同じ平文でも暗号ブロックが変化し、それが安全性の確保につながるわけですが、IV に前の暗号ブロックの最後を利用すると、攻撃者がある程度 IV を操作可能になってしまいます。

BEAST攻撃では、以下の手順で平文を復元していきます。

  1. 攻撃者はJavaScriptなどを使って、被害者のブラウザで任意のリクエストを何度も送信させる(XSS 等を利用する)。

  2. 各リクエストに少しずつ変更を加えて送り、CBCモードの構造を解析する。

  3. 暗号文と平文の関係から、セッションCookieや認証トークンなどを1バイトずつ推測する。

  4. 数百〜数千回の繰り返しで平文を完全に復元。

その他

その他有名な脆弱性についていくつか紹介します。

Heartbleed 攻撃

Heartbleed 攻撃とは、2014年4月に公開された、OpenSSLライブラリの致命的な脆弱性です。これにより、攻撃者はサーバやクライアントのメモリ内部情報(最大64KB)を読み取ることが可能となり、情報漏洩の危険があります。

脆弱性があったのは、クライアントとサーバの間で定期的にハートビートを送ることによって、接続中であることを確認する Hearbeat 拡張です。

この通信においてクライアントは、メッセージ(xバイト)とその長さ(x)をサーバに送信し、受け取ったサーバはそれと同じ長さのデータを返送します。

脆弱な Heartbeat 拡張では以下のような作りとなっていました。

// 擬似コード
payload = malloc(payload_length); 
memcpy(payload, received_data, payload_length);

これによりクライアントは、実際に送るデータの長さとは異なる長さ情報をサーバに送ることができ、サーバはそれを信じて余計なデータをメモリから読みだして送信してしまいます。

この Heartbleed には Exploit があります。

また、この脆弱性を悪用する HackTheBox のマシンに「Valentain」がありますので、興味のある方はぜひトライしてみてください(盛大にネタバレしてしまってたらすみません)。

TLS 圧縮攻撃

TLS 圧縮攻撃とは、TLS 通信におけるデータ圧縮機能を悪用して機密情報を漏洩させる攻撃です。

  1. 攻撃者は、被害者のブラウザ上で任意のリクエストを繰り返し送信(JavaScriptなどで)

  2. リクエストに機密情報に似た文字列を含めて送信

  3. サーバはTLS圧縮をかけてレスポンスを返す

  4. 攻撃者はレスポンスのサイズの違いから、どの文字が一致しているかを推測

  5. 1バイトずつ推測し、最終的にCookieやセッショントークンを復元

SSLScanによる調査

上で SSL/TLS の脆弱性をいくつか紹介してきましたが、最後に HTTPS で利用されている SSL/TLS の調査ができる SSLScan を紹介します。

これは kali にデフォルトで入っているツールになります。

一例として、HackTheBox の Monitored のマシンに対して回してみます。

┌──(kali㉿kali)-[~]
└─$ sslscan 10.10.11.248
Version: 2.1.5
OpenSSL 3.5.1 1 Jul 2025

Connected to 10.10.11.248

Testing SSL server 10.10.11.248 on port 443 using SNI name 10.10.11.248                                                     

  SSL/TLS Protocols:
SSLv2     disabled
SSLv3     disabled
TLSv1.0   enabled
TLSv1.1   enabled
TLSv1.2   enabled
TLSv1.3   disabled

  TLS Fallback SCSV:
Server supports TLS Fallback SCSV

  TLS renegotiation:
Secure session renegotiation supported

  TLS Compression:
Compression disabled

  Heartbleed:
TLSv1.2 not vulnerable to heartbleed
TLSv1.1 not vulnerable to heartbleed
TLSv1.0 not vulnerable to heartbleed

  Supported Server Cipher(s):
Preferred TLSv1.2  256 bits  ECDHE-RSA-AES256-GCM-SHA384   Curve 25519 DHE 253
Accepted  TLSv1.2  256 bits  DHE-RSA-AES256-GCM-SHA384     DHE 2048 bits
Accepted  TLSv1.2  256 bits  ECDHE-RSA-CHACHA20-POLY1305   Curve 25519 DHE 253
Accepted  TLSv1.2  256 bits  DHE-RSA-CHACHA20-POLY1305     DHE 2048 bits
Accepted  TLSv1.2  256 bits  DHE-RSA-AES256-CCM            DHE 2048 bits
...       
Accepted  TLSv1.0  128 bits  CAMELLIA128-SHA              

  Server Key Exchange Group(s):
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  192 bits  secp384r1 (NIST P-384)
TLSv1.2  260 bits  secp521r1 (NIST P-521)
TLSv1.2  128 bits  x25519
TLSv1.2  224 bits  x448

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  nagios.monitored.htb
Issuer:   nagios.monitored.htb

Not valid before: Nov 11 21:46:55 2023 GMT
Not valid after:  Aug 25 21:46:55 2297 GMT

スキャン結果を分析してみます。

  1. SSL/TLS Protocols では、利用できるプロトコルのバージョンが表示されます。今回は TLS1.0TLS1.1TLS1.2 が利用可能となっており、ダウングレード攻撃を受けると脆弱なバージョン1.0、1.1での通信を強要される危険があります。

  2. TLS Compression は disable とあります。これにより TLS の圧縮は無効化されており、TLS 圧縮攻撃のリスクはないと判断できます。

  3. Heartbleednot vulnerable になっており、Heartbleed 攻撃のリスクも低いと判断できます。

  4. SubjectIssuer が一致しており、自己署名証明書を利用しているので信用の低い証明書を利用していることが分かります。ついでにこのマシンの仮想ホスト名も分かりました。

あとがき

今回は SSL/TLS についてまとめていきました。今後は暗号まわりの記事(PQC とか?)もどんどん書いていけたらよいなと考えています。

31
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?