コードサイニング 01-31-2023

コードサイニング証明書鍵が盗まれたgithubの失敗と、それを防ぐ方法

Dave Roche
GitHub Blog Hero Image

1月31日、人気のコードホスティングプラットフォームGitHubは、2022年12月6日に不正なユーザーが同社のシステムにアクセスし、暗号化されたコードサイニング証明書3枚(Apple Developer ID証明書1枚、現在期限切れのデジサート証明書2枚)が盗まれたことを報告(英語リンク)しました。発見後、GitHubは直ちに不正なアカウントを取り消し、ちょうど今週、同社は盗まれた3つの証明書を2月2日に失効させると発表しました。

コードサイニング証明書は、ソフトウェアアプリケーションの開発者が自分のコードに「署名」することで、その出所を証明する方法であり、ソフトウェアのサプライチェーンに信頼を築くために不可欠なものです。デジサートは、デジタル技術の信頼性を提供するリーディングカンパニーとして、この機会にこの問題に光を当て、デジタルコード署名鍵を安全に保つためのガイダンスを提供し、この問題の再発防止に貢献したいと考えています。先日、Nvidia の事件(英語リンク)で示されたように、コード・サイニング証明書に対する攻撃が深刻化し、頻度が高まっていることをお伝えし、コード・サイニングのセキュリティを確保するためのベスト・プラクティスを挙げました。この記事では、GitHubの事件で何が起こったのか、そして企業がどのようにそれを防ぐことができるのかについて説明します。

GitHubが盗まれたコードサイニング署名鍵で何が起きたか

GitHubの発表によると、"2022年12月6日、マシンアカウントに関連する漏洩したパーソナルアクセストークン(PAT)によって、私たちのATOM、デスクトップ、およびその他のGitHub所有組織のリポジトリが複製されました。"という。同社は12月7日に不正ユーザーのアクセス権を取り消し、その後、GitHubのコードサイニング証明書3枚が盗まれたことを発見しましたが、攻撃者が証明書を解読して使用できた形跡はありません。最初のデジサート証明書は1月4日に、2番目の証明書は2月1日に有効期限が切れています。しかし、Apple Developer IDの証明書は2027年まで有効であったため、Appleはこの証明書で署名された実行ファイルを監視しています。

詳しくは、GitHubのブログ(英文)をご覧ください。

コードサイニング証明書署名鍵が盗まれた結果

コード・サイニング証明書・署名鍵が盗まれた場合、企業の評判や収益に多大な損害を与える可能性があります。ユーザーは信頼できる鍵で署名されたソフトウェアを信用するため、盗まれた鍵で署名された悪意のあるソフトウェアでも、迅速かつ容易に拡散することができます。その結果、セキュリティ侵害やデータ盗難、さらには重要なインフラへの被害が拡大する可能性があります。コードサイニング証明書鍵の盗難は現実的な問題を意味するため、米国では最近、国家のサイバーセキュリティを改善するための大統領令が出され、コードの完全性を保証するためのコードサイニングの使用が重要な手順の1つに含まれています。

今回のケースでは、GitHubの調査(英語リンク)により、「今回の不正アクセスによってGitHub.comのサービスにリスクが生じることはなく、これらのプロジェクトに不正な変更は加えられていない」ことが判明しています。さらに、"証明書はパスワードで保護されており、悪意を持って使用された証拠は見つかってない "としています。GitHubは、証明書の取り消しは予防策だとしているが、証明書がパスワードで保護されていなければ、被害はもっと大きくなっていたかもしれません。

コードサイニング証明書と署名鍵を保護する方法

幸いなことに、同じような事故が起こらないようにするために、できることがあります。第一に、組織がコード署名鍵の使用を保護し、管理することが重要です。このように、署名鍵を保護するためには、管理と可視化が重要です。署名権の行使、署名鍵へのアクセス権の管理、誰がいつどこで何に署名したかを示すレポートの作成が可能なため、高い可視性が得られ、発生し得る問題に迅速に対処することができます。

さらに、コード署名の安全性を確保するためには、鍵のローテーション戦略が重要でしょう。すべての署名を一つの鍵に依存しているため、鍵が漏洩した場合、大きな混乱が生じる可能性があります。強力かつ頻繁な鍵のローテーション戦略を実施し、ユニークな鍵を使用し、オンデマンドの鍵にアクセスすることで、セキュリティ侵害による被害を抑えることができます。

最後に、鍵の保護自体には直接関係しませんが、コードに署名する前にウイルススキャンを行い、コードが悪意のある内容でないことを確認することが重要です。これにより、安心感を与え、セキュリティ上の脅威を未然に防ぐことができます。スキャンは、ソースコードレベル(静的アプリケーションセキュリティテスト:SAST)またはコンパイルされたソフトウェア(動的セキュリティテスト:DAST)で行うことができ、両方がベストプラクティスです。これらの対策は、コード署名を補完し、ソフトウェアのサプライチェーンの安全確保に貢献します。

マネージド・ソフトウェア署名ソリューションは、インシデントの検出と保護に役立ちます。

マネージド署名ソリューションは、安全なコード・サイニングの実践と、鍵の盗難リスクの防止を支援します。デジサートは、DigiCert® ONEプラットフォームの一部として、包括的なソリューションであるSoftware Trust Managerを提供しており、組織がコード署名のベストプラクティスに従うことを支援し、証明書と署名管理を簡素化するよう設計されています。Software Trust Managerを使用することで、企業はクラウド署名を行うことができ、鍵はオフラインのHSMに保存され、署名の時だけオンラインにすることができます。また、デジサートは、発行者に関係なく、パブリックおよびプライベートトラストに関連する鍵をサポートしているため、Appleバイナリに署名するために使用される鍵やApple ルートからの証明書もサポートすることが可能です。

さらに、CA/B フォーラムのコードサイニング証明書 Working Groupが定めたコード署名鍵の保護に関する要求事項の改善など、変化する規制への準拠を維持するのに貢献します。DigiCert Software Trust Managerのようなマネージドソリューションでは、鍵の安全性の確保、鍵の一元管理、ポリシーの適用、CI/CDとの統合、柔軟な実装オプションの選択が可能です。

今回のGitHubのコード署名鍵の盗難事件は、デジタルコード署名鍵を安全に保管することの重要性を再認識させるものです。鍵の保護に必要な措置を講じることで、同様の事件の発生を防ぎ、ソフトウェアの安全性と信頼性を確保することができます。デジサートは、デジタル・トラストの信頼できるプロバイダとして、お客様がコード・サイニング署名鍵を安全に保つことができるよう支援することをお約束します。そこで、コードサイニングのベストプラクティスを容易に実現するために、Software Trust Managerを開発しました。コードサイニングソリューションの詳細については、弊社までお問い合わせください。

UP NEXT