証明書のピン留め – Certificate pinning

English -> Visit Promon Web Page

証明書ピン留めとは何ですか?

証明書ピンニング(ピン留め)は、HTTPS などの TLS (トランスポート層セキュリティ) プロトコルを介した通信のセキュリティを強化するセキュリティ技術です。選択した TLS 証明書または公開キーを API サーバーに排他的に結び付けることで、アプリケーションは接続するたびにサーバーの ID を確実に確認できるようになります。やり取り中に、サーバーは ID を証明するデジタル証明書を提示し、クライアントとサーバー間の API を介して送信されるデータの暗号化を保護します。サーバーが提示した証明書をアプリ内の事前に決定された証明書または「ピン留めされた」証明書と照合することで、証明書ピンニングは追加のセキュリティ レイヤーを確保し、中間者 (MITM) 攻撃を防ぎ、サーバー通信の整合性を確保します。

まとめ

証明書ピン留めは、アプリと指定サーバー間の信頼関係を強化します。既知の特定の証明書または公開キーをアプリケーション内に埋め込むことで、サーバーの ID を確実に検証できるため、攻撃者がデータを傍受したり改ざんしたりすることがはるかに困難になります。この方法は、攻撃者が偽の証明書を提示してサーバーになりすます可能性のある MITM 攻撃から保護する上で特に重要です。証明書ピンニングにより、アプリケーションは正当なサーバーとのみ通信し、TLS 接続中のデータの整合性と機密性を保護することができます。

より詳細な説明

証明書ピンニングは、アプリとサーバー間の信頼できる接続を確立し、中間者 (MITM) 攻撃のリスクを軽減する重要な役割を果たします。これは、既知の信頼できる証明書または公開キーをアプリ自体に埋め込むことで実現されます。アプリがサーバーに接続しようとすると、埋め込まれた証明書に対してサーバーの証明書が検証されます。一致した場合、接続は信頼されます。一致しない場合は、接続がブロックされます。

この方法により、悪意のある人物が接続を傍受し、侵害された、または不正な証明機関 (CA) からの有効な証明書を提示したとしても、固定された証明書と一致しない限り、接続は信頼されないことが保証されます。

証明書ピン留めを数ステップで実装する方法は次のとおりです。

  1. サーバーの証明書または公開キーを取得して保存する: 証明書ピンニングを実装する最初の手順は、サーバーの公開キーまたは証明書全体を取得し、この情報をアプリに直接埋め込むことです。これは、アプリの開発フェーズ中に実行できます。
  2. 固定された証明書を検証するようにアプリを変更する: TLS ハンドシェイク プロセス中にサーバーが提示した証明書 (または公開キー) とアプリ内に保存されている固定された証明書 (または公開キー) を比較する検証チェックを含めるようにアプリのコードを変更する必要があります。証明書が一致する場合、接続は安全であると見なされます。一致しない場合、アプリは接続を終了します。
  3. 証明書の更新の処理: 証明書には有効期限があるため、固定された証明書の更新を計画することが重要です。これには、古い証明書の有効期限が切れる前に新しい証明書でアプリを更新することや、アプリの新しいバージョンをリリースせずに固定された証明書を動的に更新するメカニズムを実装することが含まれます。
  4. テスト: 証明書の更新や潜在的な攻撃のシミュレーションなど、さまざまなシナリオでピン留めの実装が意図したとおりに機能することを確認するには、厳格なテストが不可欠です。

SSL 証明書のピン留めと TLS 証明書のピン留め

トランスポート層セキュリティとセキュア ソケット レイヤー (SSL) は、しばしば同じ意味で使用されますが、両者には大きな違いがあります。SSL は TLS の前身であり、どちらのプロトコルもインターネット上のクライアントとサーバー間の暗号化とデータ整合性を提供します。ただし、TLS はより強力な暗号化アルゴリズムを提供し、安全な Web 通信の標準となっています。証明書ピンニングはどちらにも適用できますが、広く採用され、セキュリティ機能が強化されているため、TLS と関連付けられることが一般的です。

証明書ピン留めと OCSP ステープル留め

証明書ピンニングとオンライン証明書ステータス プロトコル (Online Certificate Status Protocol  – OCSP) ステープリングは、TLS 接続のセキュリティを強化するために設計されたセキュリティ対策ですが、目的が異なり、動作も異なります。セキュリティ ステープリングの形式である OCSP ステープリングを使用すると、サーバーはクライアントに、サーバーの証明書が有効であることを示す OCSP 応答を提供できます。このアプローチでは、MITM 攻撃用の証明書を発行した CA が有効な OCSP 応答を生成してステープリングできるため、MITM 攻撃は依然として可能です。ただし、OCSP ステープリングの有効性は、攻撃者が有効な証明書を持っている場合のなりすましや MITM ではなく、主に証明書の失効に対して発揮されます。

一方、証明書ピンニングでは、サーバーの証明書または公開キーをアプリまたはクライアントにハードコードします。つまり、アプリは特定の証明書または公開キーを信頼するように構成されます。アプリがサーバーに接続すると、サーバーが提示した証明書または公開キーがハードコードされたものと一致するかどうかが確認されます。一致する場合、接続が続行されます。一致しない場合は、接続が終了します。

両方のセキュリティ対策には、異なる利点があります。OCSP ステープリングは、証明書失効チェック プロセスにおけるプライバシーとパフォーマンスを向上させ、証明書ピンニングは、特定のサーバー証明書または公開キーとの事前定義された信頼を確立することで、特定の種類の MITM 攻撃に対する強力な防御を提供します。

Android 証明書のピン留め

Android アプリには証明書のピン留めが実装されており、サーバーとの通信が安全に保たれるようにします。Android 開発者には、ネットワーク セキュリティ構成機能など、このためのさまざまなツールがあります。この機能では、構成ファイル内またはコード内で、ピン留めされた証明書に対してサーバー証明書を検証する API を使用して、信頼できる証明書とドメインを指定できます。開発者は、OkHttp などのサードパーティ ライブラリを使用して、ピン留め機能を強化することもできます。アプリの機能とセキュリティを維持するために、ピン留めされた証明書は有効期限が切れる前に更新する必要があるため、効果的な証明書管理が重要です。

iOS 証明書のピン留め

iOS での証明書のピン留めは、サーバーの証明書または公開鍵をアプリにプリロードされている証明書または公開鍵と比較することで実現されます。iOS 開発者は、通常、URLSession デリゲート メソッド内でピン留めを実装し、すべてのサーバー接続がこの重要なセキュリティ チェックを受けるようにします。利便性と機能性を高めるために、Alamofire などのサードパーティ ライブラリが用意されており、Swift ベースのアプリでのピン留めが簡素化されています。ただし、開発者は、期限切れに対処するためにピン留めされた証明書を積極的に管理および更新し、シームレスで安全なアプリ操作を維持する必要があります。

証明書のピン留めをバイパスする

証明書ピン留めの主な課題の 1 つは、ピン留めされた証明書の管理です。証明書が更新または置き換えられた場合、アプリが同時に更新されてこの変更が反映されないと、ユーザーがロックアウトされ、アプリの機能が中断される可能性があります。さらに、熟練した攻撃者は、実装の弱点を悪用したり、侵入テスト用に設計されたツールを使用して暗号化されたトラフィックを傍受して分析したりして、証明書ピン留めをバイパスする方法を開発しています。

攻撃者が安全な HTTPS 接続を安全でない HTTP 接続にダウングレードする SSL ストリッピングや、プロキシ ツールを使用して有効なように見える偽造証明書を提示するなどの手法により、ピンニング保護を回避できる場合があります。

さらに、攻撃者はアプリのリバース エンジニアリング、アプリの修正と再パッケージ化、または証明書のピン留めを回避するための動的攻撃を直接使用する可能性があります。難読化はコードの分析を困難にすることでセキュリティ レイヤーを提供できますが、暗号化は攻撃者がコードにアクセスした場合でも重要なデータにアクセスできないようにすることでより強力な保護を提供します。ただし、難読化も暗号化も、単独では攻撃者に対して十分ではありません。操作を防御し、アプリの動作の整合性を確保するには、ランタイム保護を実装することが重要です。

上記の方法は、包括的なセキュリティ戦略の一環として証明書ピンニングを実装することの重要性を強調しています。このような戦略には、定期的な更新、脆弱性の定期的な監視、アプリのシールド、安全な暗号化、ランタイム保護などの追加のセキュリティ対策を含め、進化する脅威の状況から保護する必要があります。

  1. 銀行および金融アプリ: これらのアプリは、口座の詳細や取引履歴など、機密性の高い金融データを取り扱います。証明書のピン留めにより、ユーザーは正規の銀行サーバーと直接通信できるようになり、詐欺やデータ盗難から保護されます。
  2. 電子商取引アプリ:ユーザーは支払い情報や個人情報を入力するため、証明書のピン留めは MITM 攻撃を防ぎ、安全なトランザクションを確保し、ユーザー データを保護する上で不可欠です。
  3. エンタープライズ アプリは、企業が独自の機密情報にリモートでアクセスするために使用されます。証明書のピン留めは、企業データを傍受や不正アクセスから保護するのに役立ちます。

歴史

証明書ピンニングは、サイバー攻撃、特に MITM 攻撃の高度化への対応として登場しました。MITM 攻撃では、攻撃者は侵害された CA または安全性の低い CA からの偽造証明書を提示することで、TLS の信頼モデルを悪用する可能性があります。証明書ピンニングの開発は、アプリケーションが従来の CA ベースのシステムよりも厳格な信頼モデルを適用できるようにすることで、このような脅威を軽減することを目的としていました。

未来

証明書の透明性は、証明書のピン留めを補完することができます。証明書の透明性は、CA によって発行されたすべての証明書を公開ログに記録することを義務付けることで、誤って発行された証明書や悪意のある証明書を迅速に検出するのに役立ちます。この開発により、セキュリティと透明性がさらに強化され、侵害された CA に関連するリスクの一部を軽減するのに役立ちます。

証明書のピン留め以外にも、アプリのセキュリティを強化できる対策はいくつかあります。

アプリ シールドは、リバース エンジニアリングや改ざんなどのさまざまな攻撃ベクトルからモバイル アプリを保護します。Promon SHIELD などのツールは、複数の防御手法を使用します。

  • 再パッケージ化保護: 攻撃者がアプリを変更し、再パッケージ化し、変更されたバージョンを配布することを防ぎます。
  • アンチデバッグ: アプリの動作を理解したり脆弱性を見つけたりするためによく使用される手法である攻撃者によるアプリケーションのデバッグの試みをブロックします。
  • エミュレータ対策技術: 悪意のある分析によく使用されるエミュレータ環境でのアプリの実行を攻撃者が阻止します。
  • フッキング検出: この機能は、攻撃者がカスタム コードを挿入してアプリ内の関数呼び出しやメッセージを傍受するフッキング攻撃を検出して防止します。

これらの機能は、証明書のピン留めなどのアプリの整合性と通信プロトコルを保護し、機密データが安全に保たれるようにします。

データを安全に暗号化する

  • 証明書のピン留めに加えて、API キーなどのデータを暗号化すると、セキュリティに重要なレイヤーが追加されます。これにより、データが傍受された場合でも、復号化キーがなければ理解できないため、不正アクセスや悪用を防止できます。
  • API キーやその他の機密資産の安全な暗号化と保管を容易にします。アプリのシールド プロセス中にこれらの資産を暗号化し、実行時に必要な場合にのみ復号化することで、Promon Asset Protection などのソリューションは漏洩や不正アクセスのリスクを最小限に抑えます。

相互トランスポート層セキュリティ (Mutual Transport Layer Security – mTLS)は、安全な接続を確立する前にクライアント (アプリ) とサーバー (API) の両方が相互に認証することを要求することで、TLS の概念を拡張します。この相互認証により、双方が検証され、セキュリティが大幅に強化されます。ただし、mTLS には課題があります。

  • 証明書の検証の問題: 両側で証明書の継続的な整合性と有効性を確保することは複雑になる可能性があります。
  • 単一障害点: どちらかの側の秘密鍵が侵害された場合、通信チャネル全体のセキュリティが危険にさらされる可能性があります。
  • 証明書の有効期限と失効: 更新や失効を含む証明書のライフサイクルを管理するには、セキュリティの欠陥を回避するための注意深い監視が必要です。

App Attestation は、複数の API と通信するアプリに追加の検証レイヤーを提供します。

  • Promon App Attestation などのソリューションは、API 接続を許可する前にアプリの信頼性を検証し、正当なアプリのみが機密リソースにアクセスできるようにします。
  • この検証により、許可されていないアプリや侵害されたアプリによる API の悪用が阻止され、API がオープンとして公開されている場合でもセキュリティが強化されます。

App Attestation を統合することで、組織はモバイル アプリケーションとそれがやり取りする API をさらに保護できます。これにより、他のセキュリティ対策が回避された場合でも、アプリ自体の整合性と信頼性が不正アクセスに対する強力な障壁となります。

アプリ シールド、安全なデータ暗号化、mTLS、アプリ認証を総合的に見ると、多面的な防御戦略が構成され、モバイル アプリケーションとその通信インフラストラクチャのセキュリティ体制が大幅に強化されます。

出典

セキュリティソフトウェア用語集

アプリケーション・ハーデニングアプリケーションシールドアプリの改ざん
証明書のピン留めコードの難読化デバイスのクローン作成
フッキングフレームワーク脱獄キーロギング
モバイルアプリのセキュリティルート化リバースエンジニアリング
ランタイム保護ソフトウェア開発キットホワイトボックス暗号化

Promon 関連情報

エキスパートによるアプリセキュリティ | Promon
インターネットで利用される、モバイル、デスクトップアプリのセキュリティを確保します。