TLS1.3対応のサービスが増えているが、クライアントアプリケーション側で考慮すべきことも考えてみる
by
iwasa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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