Slide 1

Slide 1 text

TLS1.3対応のサービスが増えているが クライアントアプリケーション側で考慮すべきことも考えてみる 2024 年 4 月 25 日
 NW X Security JAWS勉強会#3
 1

Slide 2

Slide 2 text

2 自己紹介 岩浅 貴大 (いわさ) クラスメソッド株式会社 ➢ 2020年12月入社 ○ ソリューションアーキテクト ○ 札幌オフィス ➢ 前職まで ○ アプリケーションエンジニア ○ 業務アプリ、モバイルアプリ、Webア プリ、色々 ➢ 得意な領域:アプリケーション ➢ 苦手な領域:ネットワーク、セキュリティ

Slide 3

Slide 3 text

3 今日はなさないこと 0-RTT や QUIC のはなし

Slide 4

Slide 4 text

4 今日はなすこと バージョン・互換性などもっと単純なところのはなし TLS に関する特にバージョン周りについて サーバーとクライアントの関係を知っておく

Slide 5

Slide 5 text

5 アジェンダ ● TLS1.3対応のAWSサービスとクライアントアプリケーション 1. はじめに 2. TLS1.3対応の AWS サービス 3. クライアントアプリケーション側での考慮 4. まとめ

Slide 6

Slide 6 text

6 アジェンダ ● TLS1.3対応のAWSサービスとクライアントアプリケーション 1. はじめに 2. TLS1.3対応の AWS サービス 3. クライアントアプリケーション側での考慮 4. まとめ

Slide 7

Slide 7 text

7 はじめに SSL/TLS 使ってますか?

Slide 8

Slide 8 text

SSL/TLS はセッション層に位置するセキュアプロトコルで、通信の暗号 化、データ完全性の確保、サーバ(場合によりクライアント)の認証を行 うことができる。 IPA TLS暗号設定ガイドライン より https://www.ipa.go.jp/security/crypto/guideline/ssl_crypt_config.html 8 SSL/TLS プロトコル概要

Slide 9

Slide 9 text

● 様々なプロトコル、アプリケーションで使われる ○ HTTP, SMTP, FTP … ○ 昨今は TLS1.0/1.1 が非推奨になったこともあり、特にWeb アプリ ケーションで HTTPS を構成する際にはバージョンまで気にすることが 多いのでは 9 多くの人が使っているであろうTLS

Slide 10

Slide 10 text

10 はじめに バージョンまわり

Slide 11

Slide 11 text

● サーバーサイド ○ どのバージョン、どの暗号スイート? ○ AWS だと「セキュリティポリシー」どうする? ● クライアントサイド ○ ライブラリによってはTLSバージョンを指定するオプションあるが? ○ どのバージョンで接続しにいこうとしているのか? 11 TLS のバージョンどうする?

Slide 12

Slide 12 text

12 アジェンダ ● TLS1.3対応のAWSサービスとクライアントアプリケーション 1. はじめに 2. TLS1.3対応の AWS サービス 3. クライアントアプリケーション側での考慮 4. まとめ

Slide 13

Slide 13 text

13 TLS1.3対応の AWS サービス TLS 1.3 ?

Slide 14

Slide 14 text

14 TLS の歴史 1994年 - SSL 2.0 1995年 - SSL 3.0 1999年 - TLS 1.0 2006年 - TLS 1.1 2008年 - TLS 1.2 2018年 - TLS 1.3 基本的に、プロトコルのバージョンが後になるほど、以前の攻撃に対する対策が盛り込まれるため、より安全性が高くなる

Slide 15

Slide 15 text

15 TLS の歴史 1994年 - SSL 2.0 1995年 - SSL 3.0 1999年 - TLS 1.0 2006年 - TLS 1.1 2008年 - TLS 1.2 2018年 - TLS 1.3 基本的に、プロトコルのバージョンが後になるほど、以前の攻撃に対する対策が盛り込まれるため、より安全性が高くなる 非推奨 非推奨 非推奨 非推奨

Slide 16

Slide 16 text

- サポートされている対称暗号化アルゴリズムのリストは、レガシーと見なされるすべてのアルゴリズムから削除されました。 残っているのは、すべて関連データを使用した認証暗号化 (AEAD)アルゴリズムです。 暗号スイートの概念が変更され、認証とキー交換メカニズムをレコード保護アルゴリズム(秘密キーの長さを含む)およびキー派生機能とハンドシェイクメッ セージ認証コード(MAC)の両方で使用されるハッシュから分離しました。 - ゼロラウンドトリップタイム(0-RTT)モードが追加され、特定のセキュリティプロパティを犠牲にして、一部のアプリケーションデータの接続セットアップ時のラウンドトリップが節約され ました。 - 静的RSAおよびDiffie-Hellman暗号スイートが削除されました。 すべての公開鍵ベースの鍵交換メカニズムは、前方秘密を提供するようになりました。 - ServerHello後のすべてのハンドシェイクメッセージが暗号化されます。 新しく導入されたEncryptedExtensionsメッセージにより、ServerHelloで以前に平文で送信されたさまざまな拡張機能 も機密保護を享受できます。 - 主要な派生関数が再設計されました。 新しい設計により、鍵分離特性が改善されているため、暗号作成者による分析が容易になります。 HMACベースの抽出および拡張キー派生関数(HKDF) は、基になるプリミティブとして使用されます。 - ハンドシェイクステートマシンが大幅に再構築されて、一貫性が向上し、ChangeCipherSpecなどの不要なメッセージが削除されました(ミドルボックスの互換性に必要な場合を除く)。 - 現在、楕円曲線アルゴリズムは基本仕様に含まれており、EdDSAなどの新しい署名アルゴリズムが含まれています。 TLS 1.3は、各曲線の単一のポイント形式を支持して、ポイント形式のネゴ シエーションを削除しました。 - RSA確率的署名スキーム(RSASSA-PSS)を使用するためのRSAパディングの変更、圧縮の削除、デジタル署名アルゴリズム(DSA)、およびカスタムEphemeral Diffie-Hellman(DHE)グルー プを含む、その他の暗号化の改善が行われました。 - TLS 1.2バージョンネゴシエーションメカニズムは、拡張機能のバージョンリストを優先して廃止されました。 これにより、バージョンネゴシエーションを誤って実装した既存のサーバーとの 互換性が向上します。 - サーバー側の状態がある場合とない場合のセッション再開、および以前のTLSバージョンのPSKベースの暗号スイートは、単一の新しいPSK交換に置き換えられました。 - 必要に応じて、RFCの更新されたバージョンを指すように参照が更新されました(RFC 3280ではなくRFC 5280など)。 RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc8446.html 16 TLS 1.3 は TLS 1.2 から 何が変わったのか

Slide 17

Slide 17 text

- サポートされている対称暗号化アルゴリズムのリストは、レガシーと見なされるすべてのアルゴリズムから削除されました。 残っているのは、すべて関連データを使用した認証暗号化 (AEAD)アルゴリズムです。 暗号スイートの概念が変更され、認証とキー交換メカニズムをレコード保護アルゴリズム(秘密キーの長さを含む)およびキー派生機能とハンドシェイクメッ セージ認証コード(MAC)の両方で使用されるハッシュから分離しました。 - ゼロラウンドトリップタイム(0-RTT)モードが追加され、特定のセキュリティプロパティを犠牲にして、一部のアプリケーションデータの接続セットアップ時のラウンドトリップが節約され ました。 - 静的RSAおよびDiffie-Hellman暗号スイートが削除されました。 すべての公開鍵ベースの鍵交換メカニズムは、前方秘密を提供するようになりました。 - ServerHello後のすべてのハンドシェイクメッセージが暗号化されます。 新しく導入されたEncryptedExtensionsメッセージにより、ServerHelloで以前に平文で送信されたさまざまな拡張機能 も機密保護を享受できます。 - 主要な派生関数が再設計されました。 新しい設計により、鍵分離特性が改善されているため、暗号作成者による分析が容易になります。 HMACベースの抽出および拡張キー派生関数(HKDF) は、基になるプリミティブとして使用されます。 - ハンドシェイクステートマシンが大幅に再構築されて、一貫性が向上し、ChangeCipherSpecなどの不要なメッセージが削除されました(ミドルボックスの互換性に必要な場合を除く)。 - 現在、楕円曲線アルゴリズムは基本仕様に含まれており、EdDSAなどの新しい署名アルゴリズムが含まれています。 TLS 1.3は、各曲線の単一のポイント形式を支持して、ポイント形式のネゴ シエーションを削除しました。 - RSA確率的署名スキーム(RSASSA-PSS)を使用するためのRSAパディングの変更、圧縮の削除、デジタル署名アルゴリズム(DSA)、およびカスタムEphemeral Diffie-Hellman(DHE)グルー プを含む、その他の暗号化の改善が行われました。 - TLS 1.2バージョンネゴシエーションメカニズムは、拡張機能のバージョンリストを優先して廃止されました。 これにより、バージョンネゴシエーションを誤って実装した既存のサーバーとの 互換性が向上します。 - サーバー側の状態がある場合とない場合のセッション再開、および以前のTLSバージョンのPSKベースの暗号スイートは、単一の新しいPSK交換に置き換えられました。 - 必要に応じて、RFCの更新されたバージョンを指すように参照が更新されました(RFC 3280ではなくRFC 5280など)。 RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc8446.html 17 TLS 1.3 の TLS 1.2 からの主な違い よりセキュアで、パフォーマンス良い

Slide 18

Slide 18 text

18 TLS 1.3 が推奨されるということは TLS 1.2 も非推奨に?

Slide 19

Slide 19 text

- このドキュメントの推奨事項が既知の攻撃を緩和する場合、TLS 1.2の使 用はTLS 1.3の使用と同じくらい安全です - TLS 1.3は、プロトコルの大きなオーバーホールであり、TLS 1.2の多くのセキュリティ問題を解決 します。実装がTLS 1.2をサポートする限り(TLS 1.3にデフォルトであっても)、このドキュメン トで指定されたTLS 1.2に関する推奨事項に従う必要があります。 - TLSとDTLを再利用するほとんどのアプリケーションプロトコルでは、 TLS 1.3のみに移行する必要はありません。 RFC 9325 - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc9325.html 19 本日時点で TLS 1.2 は非推奨ではない

Slide 20

Slide 20 text

- このドキュメントの推奨事項が既知の攻撃を緩和する場合、TLS 1.2の使 用はTLS 1.3の使用と同じくらい安全です - TLS 1.3は、プロトコルの大きなオーバーホールであり、TLS 1.2の多くのセキュリティ問題を解決 します。実装がTLS 1.2をサポートする限り(TLS 1.3にデフォルトであっても)、このドキュメ ントで指定されたTLS 1.2に関する推奨事項に従う必要があります。 - TLSとDTLを再利用するほとんどのアプリケーションプロトコルでは、 TLS 1.3のみに移行する必要はありません。 RFC 9325 - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc9325.html 20 本日時点で TLS 1.2 は非推奨ではない

Slide 21

Slide 21 text

21 AWS サービスで TLS 1.3 ?

Slide 22

Slide 22 text

22 AWS サービスで TLS 1.3 AWS サービス サポート時期 DevelopersIO CloudFront 2020.09.04 TLSv1.3 をサポートしたCloudFrontの動作を弊社のカフェサイトで確認してみた Network Load Balancer 2021.10.18 [アップデート]NLBがTLS1.3に対応しました! Application Load Balancer 2023.03.23 [アップデート] Application Load Balance (ALB) がTLS 1.3をサポートしました RDS for PostgreSQL 2023.11.17 Amazon RDS for PostgreSQL 16.1 から TLS 1.3 がサポートされていたので確認し てみた OpenSearch Service 2023.01.04 Amazon OpenSearch Service と Amazon OpenSearch Serverless が TLS 1.3 を サポートしていたので有効化方法や注意点などを確認してみた OpenSearch Serverless 2023.02.14 API Gateway 2024.02.16 [アップデート] Amazon API Gateway で TLS 1.3 をサポートする API タイプ、エンドポ イントタイプが増えました Lightsail 2024.04.03 [アップデート] Amazon Lightsail でディストリビューションの最低 TLS バージョンを設 定出来るようになりました

Slide 23

Slide 23 text

23 AWS サービスで TLS 1.3 セキュリティポリシー

Slide 24

Slide 24 text

24 セキュリティポリシー 「Application Load Balancer 用の HTTPS リスナーを作成する」より

Slide 25

Slide 25 text

25 セキュリティポリシー 「Application Load Balancer 用の HTTPS リスナーを作成する」より

Slide 26

Slide 26 text

26 セキュリティポリシー変更出来ないものも https://dev.classmethod.jp/articles/app-runner-amplify-hosting-tls-version/

Slide 27

Slide 27 text

27 セキュリティポリシー変更出来ないものも https://dev.classmethod.jp/articles/app-runner-amplify-hosting-tls-version/

Slide 28

Slide 28 text

28 セキュリティポリシー変更出来ないものも

Slide 29

Slide 29 text

29 TLS1.3対応の AWS サービス TLS1.3サポートが増えている サポートというか勝手に適用されてる かなり限定されたポリシーも含まれている

Slide 30

Slide 30 text

30 アジェンダ ● TLS1.3対応のAWSサービスとクライアントアプリケーション 1. はじめに 2. TLS1.3対応の AWS サービス 3. クライアントアプリケーション側での考慮 4. まとめ

Slide 31

Slide 31 text

31 クライアントのはなし AWS サービス側でTLS1.3がいつの間にか使われ ているが大丈夫なのか

Slide 32

Slide 32 text

- TLS 1.3は以前のバージョンと直接の互換性はありません - TLSのすべてのバージョンには、クライアントとサーバーが両方のピアで サポートされている場合に共通バージョンを相互運用可能にネゴシエート できるバージョン管理メカニズムが組み込まれています。 RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc8446.html 32 TLS と互換性のはなし

Slide 33

Slide 33 text

33 クライアントのはなし バージョン管理メカニズム ?

Slide 34

Slide 34 text

34 バージョンネゴシエーション

Slide 35

Slide 35 text

35 バージョンネゴシエーション

Slide 36

Slide 36 text

36 バージョンネゴシエーション

Slide 37

Slide 37 text

37 バージョンネゴシエーション

Slide 38

Slide 38 text

38 バージョンネゴシエーション

Slide 39

Slide 39 text

39 バージョンネゴシエーション

Slide 40

Slide 40 text

40 バージョンネゴシエーション

Slide 41

Slide 41 text

41 バージョンネゴシエーションでうまいこと クライアントがまだTLS1.3に対応していなくても サーバーがTLS1.3以外のバージョンもサポートしていれば使える

Slide 42

Slide 42 text

42 クライアントがサポートする TLS バージョン 把握したい

Slide 43

Slide 43 text

43 クライアントごとの対応状況 クライアント 状況 備考 Web フロントエンド ブラウザバージョンに依存 モバイルアプリ OSバージョンに依存 独自実装している場合もある その他クライアント クライアントによりバラバラ OSに依存している場合もあれば、依存せずに HTTPクライアントが独 自実装している場合もある Webフロントエンド以外のクライアントは個別に確認を推奨

Slide 44

Slide 44 text

44 TLS 1.3 が使えないクライアント

Slide 45

Slide 45 text

● 古いOS、古いブラウザバージョン → レガシークライアントと呼ばれる ○ ブラウザバージョン ○ モバイルOS(下位バージョンで独自実装による接続も可能) 45 TLS 1.3 が使えないクライアント ブラウザ デフォルト有効 備考 Chrome 70以上 下位バージョンオプトインあり Edge 79以上 Safari 14以上 macOSバージョンにも依存 Firefox 63以上 モバイルOS デフォルト有効 備考 Android Android 10 (API 29) iOS iOS 12.2以上 ※ SecureTransport API は対象外

Slide 46

Slide 46 text

● クライアントライブラリに制限がある場合 ○ .NET HttpClient の MacOSサポートなど ■ MacOS で HttpClient を使う場合は .NET 8 時点では TLS 1.3 がサ ポートされていない 46 TLS 1.3 が使えないクライアント https://dev.classmethod.jp/articles/dotnet-httpclinet-tls-version-macos/

Slide 47

Slide 47 text

● 独自でバージョン指定していて使えない場合もある ○ 独自でバージョン指定していて使えない場合もある 47 TLS 1.3 が使えないクライアント https://dev.classmethod.jp/articles/node-js-tlsv12-max-version/

Slide 48

Slide 48 text

● サードパーティの検証サイトなど 48 クライアントごとの対応状況を実際に検証する https://dev.classmethod.jp/articles/check-your-client-side-ssl-tls-support-via-api/

Slide 49

Slide 49 text

49 クライアントで考慮しておきたい バージョンネゴシエーションを把握 クライアントがサポートするバージョンを確認

Slide 50

Slide 50 text

50 アジェンダ ● TLS1.3対応のAWSサービスとクライアントアプリケーション 1. はじめに 2. TLS1.3対応の AWS サービス 3. クライアントアプリケーション側での考慮 4. まとめ

Slide 51

Slide 51 text

● セキュリティポリシーを TLS 1.3 のみにする場合は注意 ○ 互換性がなくなるのでクライアントアプリケーションに影響でるかも ● TLS 1.2 = セキュアとは限らない ○ TLS 1.2 は非推奨ではないが、使う場合は推奨構成に準拠 ● クライアント実装 ○ クライアントでバージョン固定などの独自実装は避けたほうが無難 ○ レガシーAPIは使わない 51 まとめ

Slide 52

Slide 52 text

52