close search bar

Sorry, not available in this language yet

close language selection
 

侵害の被害に遭う前に、ハードコーディングされた機密情報を見つける

ハードコーディングされた機密情報を適切に処理しないと、組織が危険にさらされるおそれがあります。SynopsysのASTポートフォリオは、SDLCのあらゆる段階でお客様をサポートします。

作成者:Ksenia PegueroNaveen TiwariLijesh KrishnanDeWang Li

システムやアプリケーションの最も深刻な脆弱性は、簡単に見過ごされてしまうような問題によって引き起こされることがあります。たとえば、ハードコーディングされた機密情報が漏洩すると、攻撃者にデータが盗まれたり、システムが危険にさらされたりする可能性があります。この問題に対処するため、SynopsysはRapid Scan Staticエンジンを強化しました。このエンジンは、ソースコードのセキュリティと品質のリスクを分析し、埋め込まれた機密情報や重要情報を検出します。

ここでは、ハードコーディングされた機密情報とは何か、それらがどのようにして漏洩するのか、ソフトウェアを本番環境にプッシュする前に検出する方法について説明します。

ハードコーディングされた機密情報を理解する

ハードコーディングされた機密情報には、ユーザー名、パスワード、SSHキー、アクセス・トークンなど、あらゆる種類の重要情報が含まれます。アプリケーションのソースや構成にそれらが含まれていると、攻撃者に簡単に漏洩する可能性があります。このような状況がなぜ発生するのかを理解するために、次のJavaコード・スニペットで考えてみましょう。

[php]private bool isAdmin (String username, String password)
{
if (username.equals(“admin”) && password.equals(“letmepass”))
return true;
else
return false;
}
[/php]

開発者は、ローカル・テストためにこのようなコード・ブロックを挿入し、それを削除し忘れるかもしれません。このJavaソース・コードをコンパイルすると、生成される実行可能なJARファイルには「admin」と「letmepass」という文字列が含まれます。この実行可能ファイルがどこに置かれても、アプリ・ストアを通じてモバイル端末にダウンロードされても、サーバーに展開されても、あらゆる種類のシステムにドロッされても、ハッカーがその基盤となるストレージにアクセスできれば、この文字列がスクレイピングされる可能性があります。

多くの場合、記録にアクセスする最も簡単な方法は、簡単に入手できる漏洩したパスワードまたはアクセス・トークンを使用してシステムにログインすることです。

ハードコーディングされた機密情報が漏洩する問題の範囲を確認する

機密情報が漏れることはよくあることです。最近報告された大規模なインシデントをいくつかご紹介します。

  • この2022年8月2日の記事では、3,207個のモバイル・アプリからTwitterのAPIキーが流出したことが明らかになりました。このタイプの流出では、攻撃者は、関連するアプリを通じてTwitterユーザー間で送信されたダイレクト・メッセージなど、さまざまなカテゴリの機密情報にアクセスできるようになります。
  • 2022年9月1日、Symantec社が発表した記事には、1,859個のアプリ(iOSおよびAndroid)にAWSトークンが含まれ、その77%からAWSのプライベート・クラウド・サービスにアクセスでき、47%からS3バケット内の数百万のファイルにアクセス可能であることが記載されています。
  • 2022年9月15日、トヨタ社は、GitHubにアップロードしたソースコードのキーを不注意で流出させたことに気づきました。これにより、攻撃者はEメール・アドレスを使用して29万6,019件の顧客レコードにアクセスできるようになりました。この漏洩を発見したトヨタ社は直ちに、影響を受けるお客様にフィッシング攻撃に注意するよう通知しました。
  • 最も注目を集めたデータ漏洩の一つはTargetで、4,000万件の購買者のクレジットカードとデビットカードの記録が盗まれました。その結果、複数の州で数百万ドルの損害賠償を求める訴訟が少なくとも5件提起され、Targetの売上は前年同期比で最大4%減少しました。被害を最小限に抑えるため、被害を受けた顧客に10%の割引と無料のクレジット・モニタリング・サービスを提供しました。ニューヨーク・タイムズ紙によると、数年後にようやく事態が収束したとき、Targetは訴訟費用と損害賠償に2億200万ドルを費やすことになりました。

この時点でどうしても知りたいことは、「なぜこれらの企業は、ソフトウェアを本番環境またはGitHubの公開リポジトリに置く前に漏洩を見つけられなかったのか?」ということです。埋め込まれた機密情報を検出するための手順と仕組み(IDE内、プル・リクエストまたはマージ・リクエスト時、あるいは夜間のスキャンなどで開発者のコードをスキャン)が導入されていれば、漏洩を検出できた可能性はかなり高いでしょう。これをDevOpsワークフローの早い段階で行うことで、機密情報が後工程に押し出されないようにし、修正にかかるコストと遅延を削減することができます。

ハードコーディングされた機密情報の種類を理解する

ハードコーティングされた機密情報には、ユーザー名、パスワード、キー、アクセス・トークンなど、さまざまな種類があります。このような機密情報の詳細と意味、そしてSynopsys Rapid Scan StaticエンジンがSynopsys Code Sight™でどのようにこれらの機密情報を検出するかについて説明します。

パスワード

変数の割り当て、文字列の比較、またはコード内のあらゆる種類の操作で、ソースコード内に明示的なパスワード文字列があると、最終的な実行可能ファイルまたはアプリケーションでパスワードが漏洩します。infrastructure-as-code(IaC)構成ファイル、スクリプト、およびその他の場所にパスワードを置くこともセキュリティ・リスクとなります。これは、オープンソース・コンポーネントの脆弱性、安全でないソースコード、またはその他の方法により、決定的な攻撃者が基になるストレージにアクセスできる可能性があるためです。

ハードコーディングされたパスワードを検出するVS CodeのSynopsys Code Sight | Synopsys図1: IaC構成ファイル内でハードコーディングされたパスワードを検出するVS CodeのSynopsys Code Sight

SSHキー

SSHキーは、公開鍵暗号方式でのシステムに対するユーザー認証(ユーザーに対するシステム認証)に広く使用されています。より広範なSSHプロトコルは、トラフィックを保護するための強力な暗号化機能を備えており、インターネット上でのシステム・アクセスやファイル転送によく使用されています。管理者のSSHキーが漏洩するということは、攻撃者がそのシステムにフルアクセスできるようになる可能性があることを意味します。

この例では、SSHキーがソースコード内でどのように明かされるかについて、いくつかのコンテキストを示します。


SSHキーを検出するVS CodeのSynopsys Code Sight | Synopsys
図2:Javaソースファイルの漏洩したSSHキーを検出するVS CodeのSynopsys Code Sight
アクセス・トークン

アクセス・トークンは、ユーザーに代わってサービスへのアクセスを承認するために、インターネット上でのAPI、HTTP、RPCの呼び出しによく使用されます。このトークンには資格情報とその他の関連情報(アクセスされているリソースなど)が含まれているため、機密情報です。サーバー側では、ユーザーのリソースまたはサービスが特定のトークンに対して許可されており、その特定のトークンがリクエストで提示されれば、呼び出しは成功します。ハッカーがソースコードに埋め込まれたアクセス・トークンを利用して攻撃を広めることは簡単に想像できます。

漏洩したアクセス・トークンを検出するVS CodeのSynopsys Code Sight | Synopsys図3:Javaソースファイルの漏洩したアクセス・トークンを検出するVS CodeのSynopsys Code Sight

クラウド・プロバイダーの機密情報

Rapid Scan Staticは、一般的なハードコーディングされた機密情報を識別し、以下のようなクラウド・プロバイダーから特定の機密情報を探します。

Rapid Scan、50以上のサービスでハードコーディングされた機密情報を検出 | Synopsys

ファイルのタイプ | Synopsys

埋め込まれた機密情報を検出する際の誤検知を最小限に抑える

多くの場合、ソースコードには、テスト時に使用され、出荷される製品には反映されないハードコーディングされた値が含まれています。このようなテスト・コードは出荷される製品には含まれないため、コードベースのこれらのセクションで報告された問題は通常、誤検知と見なされます。ソースコード内に機密情報が存在しても、本番環境でリスクが表面化しない可能性のあるコンテキストを定義することが重要です。たとえば、セキュリティ、DevOps、エンジニアリングの各チームは、特定のファイルやディレクトリをスキャン対象に明示的に含めるか除外するかをRapid Scan Staticで設定することができます。

Rapid Scan Staticは、精度を上げるために、正規表現によるパターン・マッチングだけに頼らず、ハードコーディングされた機密情報を検出することができます。ある種の機密情報は、分析から誤って除外されることなく検出されるように、ソース言語や構成ファイル内の変数、値、その他のコンテキストを意味的に理解する必要があります。Synopsysが採用しているアプローチでは、正規表現のパターンや構成を指定するという事前の作業を回避できます。これにより、機密情報の検出が簡素化され、設定ミスや確立されたパターンからの逸脱による潜在的な障害点が排除されます。逆に、正規表現のみのソリューションでは、パターン・マッチングが唯一の手法である場合にノイズが多くなる可能性があります。

あらゆるコンテキストで機密情報を探す

機密情報は通常、個人がソースコードや構成ファイルを作成することで取り込まれますが、ソフトウェア開発ライフサイクル(SDLC)には多くの段階があり、それらが誤って追加される可能性もあります。たとえば、デプロイ・ビルド中や最終テスト用のステージング環境へのデプロイ中に、自動化スクリプトが機密情報を含む一連のファイルを誤ってコピーしてしまう場合があります。最終的に本番環境にデプロイする前に、このような最終段階のシナリオを考慮することが重要です。

次の図は、CI/CDパイプラインのさまざまな段階を示しています。機密情報が取り込まれる段階は、その段階のコンテキスト内で最も適切なツールを使用してテストする必要があります。この例では、SynopsysのASTツールを構成して、パイプライン全体と一連のデジタル資産を保護します。

Code Sightを使用してIDE(総合ソフトウェア開発環境)で機密情報を検出する

埋め込まれた機密情報は、いつ、またはどのようなコンテキストで検出するのが最適なのでしょうか? 機密情報を後工程に押し出すリスクを最小限に抑えることが最善です。そのため、IDE内での作業中に機密情報を検出することで、機密情報を公開するリスクを最小限に抑えるだけでなく、修正作業を減らすことができます。遅い段階での検出は、チケットのクローズや追加コミットなど、自分自身を含め、すべての人の作業が増えることになります。Code Sightは、VS CodeIntelliJなどのIDE内で動作するため、機密情報の検出はリアルタイムで行われます。開発者は、問題の詳細な説明をすばやく確認し、リスクを軽減または排除するための修正アドバイスを得ることができます。

VS CodeでRapid Scan Staticを実行しているCode Sight | Synopsys図5:VS CodeでRapid Scan Staticを実行するCode Sightは、開発者コードとして機密情報の漏洩を検出

Coverity SASTを使用して静的テスト時に機密情報を検出する

Coverity®は既に機密情報の検出機能を備えていました。Rapid Scan Staticでは、より広範なファイル・タイプ、特定のサービス・プロバイダー形式、およびIaC形式で機密情報を検出できるようになりました。そして何より、Rapid Scan StaticはCoverity内で自動的に実行され、検出された脆弱性は自動的に既存の修正ワークフローの一部になります。

Black Duck Binary Analysisを使用してビルド後のソフトウェア・コンポジション解析で機密情報を検出する

Black Duck® Binary Analysis(BDBA)は、出荷される最終製品や、クラウド・アプリケーションの場合はコンテナの内容をスキャンします。この段階で、コンテナにはJAR、IaC、バイナリ実行可能ファイルが含まれます。BDBAは、アーカイブとバイナリを分解して機密情報を探すことができます。

また、出荷された製品やコンテナにソースコードが存在する場合もあります。Rapid Scan Staticを使用すると、BDBAは、IaC、JavaScript(node.jsやその他のフレームワーク)、サポートされているその他の種類のソース言語ファイルを自動的にスキャンします。

漏洩したパスワードを表示するBlack Duck Binary Analysis | Synopsys図6:JavaScriptファイルで漏洩したパスワードを表示するBlack Duck Binary Analysis

Seekerを使用したインタラクティブな解析で機密情報を検出する

Seeker®は、Rapid Scan Staticを含むインタラクティブ・アプリケーション・セキュリティ・テスト(IAST)ソリューションです。Seekerは、実行時に現れる脆弱性を探します。脆弱性は多くの場合、QAテストに組み込まれ、機能テストを効果的にセキュリティ・テストに変換します。たとえば、Webサーバーは、個人向けバンキング・アプリケーションの一部としてiOS上のモバイル・アプリケーションにJavaScriptコードを送信する場合があります。このようなシナリオでは、SeekerはRapid Scan Staticを介してこのコードをルーティングし、漏洩した機密情報を探すことができます。

Javascriptコードを介して漏洩した機密情報を表示するSeeker | Synopsys図7:JavaScriptコードを介して漏洩した機密情報をアプリケーションまたはWebブラウザに表示するSeeker

Black Duck SCAを使用して、ソフトウェア・サプライ・チェーン経由で取り込まれた機密情報を検出する

Black Duckソフトウェア・コンポジション解析(SCA)は、セキュリティ・チームや法務チームがオープン ソースの脆弱性(CVEなど)を管理し、オープンソース・ライセンスのコンプライアンスをサポートするために使用されます。これにより、セキュリティ・チームは機密情報を含むオープンソース・コンポーネントを特定し、優先的に是正することができます。

漏洩したハードコーディングされた機密情報のリストを示すBlack Duck | Synopsys図8:IaC構成で漏洩したハードコーディングされた機密情報のリストを表示するBlack Duck

機密情報をリアルタイムで検出するためのCode Sight IDEプラグインをダウンロードする

Rapid Scan Staticの機密情報検出機能を体験する最も簡単な方法は、Code Sightを使用することです。VS Code MarketplaceまたはJetBrains Marketplace(IntelliJ)からCode Sightをダウンロードし、無料トライアルに参加します。既にCoverityまたはBlack Duckのユーザーの場合は、チームのライセンスをインポートしてください。

 
Ksenia Peguero

投稿者

Ksenia Peguero


More from セキュアなソフトウェアの構築