AWS関連

【AWS】ELBセキュリティポリシー変更してTLS 1.0/1.1 無効化

先日、社内の某サービスにおいて、

「TLS 1.0/1.1 を利用したアクセスを拒否する」こととなり
対応を仰せつかりました。

先輩から「やっといてくれる〜?」

と言われたので

「承知しましたー!!」

と即答したものの

恥ずかしながら、
当初この作業の趣旨がピンときていなかったというのが正直なところですが、、

最終的には
「ALBのセキュリティポリシーの変更」
により対応が完了しました。

色々と調べながら、教えてもらいながらの作業となりましたが
対応が完了しましたので簡単にまとめてみようと思います。

ただただ基礎知識が足りなかっただけですが、今回も学びが多かった。。。

TLSとは(ざっくり概要)

データを暗号化し安全にやり取りを行う技術であり、Transport Layer Security (TLS)のこと。

TLSの最新バージョンは2018年3月に規定されたTLS 1.3で、現状最も広く使われているのはTLS 1.2(2008年8月に規定)。

古いバージョンのTLS 1.0とTLS 1.1にはセキュリティ上の弱点があるため、より安全な TLS プロトコルのバージョンである TLS 1.2 以降の利用が推奨されており、TLS 1.0/1.1 の廃止が進められている。

2018年10月には、主要Webブラウザベンダーが2020年3月以降にTLS 1.0/1.1 を無効にすることを発表した。

今回の無効化による影響度の確認

一応、影響度の確認として
どれぐらいのアクセスがあるものなのか確認してみました。

確認対象は、ALB とCloudFront のアクセスログです。

特定のログから ssl_protocol ごとの件数を抽出し、TLS 1.0/1.1 が使用されていない(または想定内である) ことを確認します。

詳細な手順は省略しますが、概要と参考になる記事を紹介します。

ALB ログの確認

手順の概要は以下の通り。

  1. Athenaにてテーブルを作成する(テーブル作成方法は後述のリンクを参照)
  2. クエリを実行し、プロトコルごとの件数を確認する
  3. TLS 1.0/1.1 の使用状況を確認する

CloudFront ログの確認

ログの確認方法は基本的にALBログと同様で、Athenaにてテーブルを作成し、クエリで確認する。
※ログの出力がONになっていない場合は、事前に設定変更する必要あり。

設定変更作業

冒頭でお伝えした通り、ALBのセキュリティポリシー変更にて対応します。

現状で適用されていたセキュリティポリシーは、
「ELBSecurityPolicy-2015-05(デフォルトの2016-08 と同じもの)」。

これを、
「ELBSecurityPolicy-FS-1-2-2019-08」
に変更することで対応完了です。

作業手順は以下の通り。(今回はGUIベースで作業を実施)

  • EC2コンソール画面の左ペインにて[ロードバランサー] を選択する
  • 対象のロードバランサーを選択した状態で[リスナー] タブを選択する
  • セキュリティポリシー欄に「ELBSecurityPolicy-2015-05」が表示されていることを確認する
  • 対象のセキュリティポリシーにチェックを入れ、[編集] ボタンをクリックする
  • セキュリティポリシー「ELBSecurityPolicy-FS-1-2-2019-08」を選択する
  • [更新] ボタンをクリックする
  • セキュリティポリシー欄に「ELBSecurityPolicy-FS-1-2-2019-08」が表示されていることを確認する

Elastic Load Balancing (ELB) のセキュリティポリシー

AWSの公式ドキュメントを確認すると、
現状利用されているポリシー「ELBSecurityPolicy-2016-08(デフォルト)」と
今回指定するポリシー「ELBSecurityPolicy-FS-1-2-2019-08」の違い(赤枠) を確認することが可能です。

結果確認

設定変更の結果が正しく反映されていることを確認するために、下記方法にて前後比較を行いました。

前後比較の結果については省略しますが、使い方などについて軽く触れてみます。

方法1:sslscan

sslscan コマンド実行により確認する方法です。

インストール

Mac でsslscan を使用する場合、Homebrew で簡単にインストールすることが可能です。

# Homebrew にてインストール
$ brew install sslscan

# バージョン確認してインストールが完了していることを確認
$ sslscan --version

実行結果

コマンドは「 $ sslscan www.yahoo.co.jp 」の形式で実行します。

このコマンドを実行すると大量の結果が返ってきますが、
SSL/TLS Protocols の部分(下記)を確認することで
どのバージョンが有効/無効になっているか確認することができます。

# コマンド実行結果(一部抜粋)
$ sslscan www.yahoo.co.jp
Version: 2.0.6-static
OpenSSL 1.1.1i  8 Dec 2020

Connected to 182.22.25.252

Testing SSL server www.yahoo.co.jp on port 443 using SNI name www.yahoo.co.jp

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

(以下省略)

方法2:SSL Server Test

こちらは、専用サイトにドメイン名を入力して確認を行う方法。
インストールなどを行う必要がなく、簡単ですね。

実行結果

使い方は簡単。
Qualys SSL Labs の SSL Server Test にアクセスして、Hostname を入力してSubmit ボタンをクリックするだけ。(ここでは”www.yahoo.co.jp” を対象として実行)

しばらくすると次のようなSSL Report ページが表示される。

同ページで下の方にスクロールすると、TLS プロトコルの有効/無効状況がわかります。
(これは”www.yahoo.co.jp” の実行結果です)

余談

今回の作業時に見つけた “理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話” は、ちょっと古い記事ですが面白かったのでご紹介しておきます。
歴史に関する話は、どこかで聞いたことあった話でしたが、すっかり忘れておりましたorz…

まとめ

  • TLS 1.0/1.1 は非推奨となっているので、早めに対応進めましょう
  • TLS プロトコルの状況確認は

プロトコルの状態確認は、どちらの方法も手軽に実行できるので、どちらかで確認したらOKかなと思います。

最後まで読んでいただきありがとうございました。