ハードコーディングされた機密情報を適切に処理しないと、組織が危険にさらされるおそれがあります。SynopsysのASTポートフォリオは、SDLCのあらゆる段階でお客様をサポートします。
作成者:Ksenia Peguero、Naveen Tiwari、Lijesh Krishnan、DeWang 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」という文字列が含まれます。この実行可能ファイルがどこに置かれても、アプリ・ストアを通じてモバイル端末にダウンロードされても、サーバーに展開されても、あらゆる種類のシステムにドロッされても、ハッカーがその基盤となるストレージにアクセスできれば、この文字列がスクレイピングされる可能性があります。
多くの場合、記録にアクセスする最も簡単な方法は、簡単に入手できる漏洩したパスワードまたはアクセス・トークンを使用してシステムにログインすることです。
機密情報が漏れることはよくあることです。最近報告された大規模なインシデントをいくつかご紹介します。
この時点でどうしても知りたいことは、「なぜこれらの企業は、ソフトウェアを本番環境またはGitHubの公開リポジトリに置く前に漏洩を見つけられなかったのか?」ということです。埋め込まれた機密情報を検出するための手順と仕組み(IDE内、プル・リクエストまたはマージ・リクエスト時、あるいは夜間のスキャンなどで開発者のコードをスキャン)が導入されていれば、漏洩を検出できた可能性はかなり高いでしょう。これをDevOpsワークフローの早い段階で行うことで、機密情報が後工程に押し出されないようにし、修正にかかるコストと遅延を削減することができます。
ハードコーティングされた機密情報には、ユーザー名、パスワード、キー、アクセス・トークンなど、さまざまな種類があります。このような機密情報の詳細と意味、そしてSynopsys Rapid Scan StaticエンジンがSynopsys Code Sight™でどのようにこれらの機密情報を検出するかについて説明します。
変数の割り当て、文字列の比較、またはコード内のあらゆる種類の操作で、ソースコード内に明示的なパスワード文字列があると、最終的な実行可能ファイルまたはアプリケーションでパスワードが漏洩します。infrastructure-as-code(IaC)構成ファイル、スクリプト、およびその他の場所にパスワードを置くこともセキュリティ・リスクとなります。これは、オープンソース・コンポーネントの脆弱性、安全でないソースコード、またはその他の方法により、決定的な攻撃者が基になるストレージにアクセスできる可能性があるためです。
SSHキーは、公開鍵暗号方式でのシステムに対するユーザー認証(ユーザーに対するシステム認証)に広く使用されています。より広範なSSHプロトコルは、トラフィックを保護するための強力な暗号化機能を備えており、インターネット上でのシステム・アクセスやファイル転送によく使用されています。管理者のSSHキーが漏洩するということは、攻撃者がそのシステムにフルアクセスできるようになる可能性があることを意味します。
この例では、SSHキーがソースコード内でどのように明かされるかについて、いくつかのコンテキストを示します。
アクセス・トークンは、ユーザーに代わってサービスへのアクセスを承認するために、インターネット上でのAPI、HTTP、RPCの呼び出しによく使用されます。このトークンには資格情報とその他の関連情報(アクセスされているリソースなど)が含まれているため、機密情報です。サーバー側では、ユーザーのリソースまたはサービスが特定のトークンに対して許可されており、その特定のトークンがリクエストで提示されれば、呼び出しは成功します。ハッカーがソースコードに埋め込まれたアクセス・トークンを利用して攻撃を広めることは簡単に想像できます。
Rapid Scan Staticは、一般的なハードコーディングされた機密情報を識別し、以下のようなクラウド・プロバイダーから特定の機密情報を探します。
多くの場合、ソースコードには、テスト時に使用され、出荷される製品には反映されないハードコーディングされた値が含まれています。このようなテスト・コードは出荷される製品には含まれないため、コードベースのこれらのセクションで報告された問題は通常、誤検知と見なされます。ソースコード内に機密情報が存在しても、本番環境でリスクが表面化しない可能性のあるコンテキストを定義することが重要です。たとえば、セキュリティ、DevOps、エンジニアリングの各チームは、特定のファイルやディレクトリをスキャン対象に明示的に含めるか除外するかをRapid Scan Staticで設定することができます。
Rapid Scan Staticは、精度を上げるために、正規表現によるパターン・マッチングだけに頼らず、ハードコーディングされた機密情報を検出することができます。ある種の機密情報は、分析から誤って除外されることなく検出されるように、ソース言語や構成ファイル内の変数、値、その他のコンテキストを意味的に理解する必要があります。Synopsysが採用しているアプローチでは、正規表現のパターンや構成を指定するという事前の作業を回避できます。これにより、機密情報の検出が簡素化され、設定ミスや確立されたパターンからの逸脱による潜在的な障害点が排除されます。逆に、正規表現のみのソリューションでは、パターン・マッチングが唯一の手法である場合にノイズが多くなる可能性があります。
機密情報は通常、個人がソースコードや構成ファイルを作成することで取り込まれますが、ソフトウェア開発ライフサイクル(SDLC)には多くの段階があり、それらが誤って追加される可能性もあります。たとえば、デプロイ・ビルド中や最終テスト用のステージング環境へのデプロイ中に、自動化スクリプトが機密情報を含む一連のファイルを誤ってコピーしてしまう場合があります。最終的に本番環境にデプロイする前に、このような最終段階のシナリオを考慮することが重要です。
次の図は、CI/CDパイプラインのさまざまな段階を示しています。機密情報が取り込まれる段階は、その段階のコンテキスト内で最も適切なツールを使用してテストする必要があります。この例では、SynopsysのASTツールを構成して、パイプライン全体と一連のデジタル資産を保護します。
埋め込まれた機密情報は、いつ、またはどのようなコンテキストで検出するのが最適なのでしょうか? 機密情報を後工程に押し出すリスクを最小限に抑えることが最善です。そのため、IDE内での作業中に機密情報を検出することで、機密情報を公開するリスクを最小限に抑えるだけでなく、修正作業を減らすことができます。遅い段階での検出は、チケットのクローズや追加コミットなど、自分自身を含め、すべての人の作業が増えることになります。Code Sightは、VS CodeやIntelliJなどのIDE内で動作するため、機密情報の検出はリアルタイムで行われます。開発者は、問題の詳細な説明をすばやく確認し、リスクを軽減または排除するための修正アドバイスを得ることができます。
図5:VS CodeでRapid Scan Staticを実行するCode Sightは、開発者コードとして機密情報の漏洩を検出
Coverity®は既に機密情報の検出機能を備えていました。Rapid Scan Staticでは、より広範なファイル・タイプ、特定のサービス・プロバイダー形式、およびIaC形式で機密情報を検出できるようになりました。そして何より、Rapid Scan StaticはCoverity内で自動的に実行され、検出された脆弱性は自動的に既存の修正ワークフローの一部になります。
Black Duck® Binary Analysis(BDBA)は、出荷される最終製品や、クラウド・アプリケーションの場合はコンテナの内容をスキャンします。この段階で、コンテナにはJAR、IaC、バイナリ実行可能ファイルが含まれます。BDBAは、アーカイブとバイナリを分解して機密情報を探すことができます。
また、出荷された製品やコンテナにソースコードが存在する場合もあります。Rapid Scan Staticを使用すると、BDBAは、IaC、JavaScript(node.jsやその他のフレームワーク)、サポートされているその他の種類のソース言語ファイルを自動的にスキャンします。
図6:JavaScriptファイルで漏洩したパスワードを表示するBlack Duck Binary Analysis
Seeker®は、Rapid Scan Staticを含むインタラクティブ・アプリケーション・セキュリティ・テスト(IAST)ソリューションです。Seekerは、実行時に現れる脆弱性を探します。脆弱性は多くの場合、QAテストに組み込まれ、機能テストを効果的にセキュリティ・テストに変換します。たとえば、Webサーバーは、個人向けバンキング・アプリケーションの一部としてiOS上のモバイル・アプリケーションにJavaScriptコードを送信する場合があります。このようなシナリオでは、SeekerはRapid Scan Staticを介してこのコードをルーティングし、漏洩した機密情報を探すことができます。
図7:JavaScriptコードを介して漏洩した機密情報をアプリケーションまたはWebブラウザに表示するSeeker
Black Duckソフトウェア・コンポジション解析(SCA)は、セキュリティ・チームや法務チームがオープン ソースの脆弱性(CVEなど)を管理し、オープンソース・ライセンスのコンプライアンスをサポートするために使用されます。これにより、セキュリティ・チームは機密情報を含むオープンソース・コンポーネントを特定し、優先的に是正することができます。
図8:IaC構成で漏洩したハードコーディングされた機密情報のリストを表示するBlack Duck
Rapid Scan Staticの機密情報検出機能を体験する最も簡単な方法は、Code Sightを使用することです。VS Code MarketplaceまたはJetBrains Marketplace(IntelliJ)からCode Sightをダウンロードし、無料トライアルに参加します。既にCoverityまたはBlack Duckのユーザーの場合は、チームのライセンスをインポートしてください。