SnykでGitHubプロジェクトに露出したハードコードされたシークレットを見つけて修正する
2024年6月25日
0 分で読めますSnykは、ハードコードされたシークレットを含む、プロジェクトの脆弱性を検出する優れたツールです。このブログでは、Snykを使ってハードコードされたシークレットや認証情報を見つけ、コードをリファクタリングして、代わりにDopplerでシークレットを管理する方法をご紹介します。オープンソースのSnyk goofプロジェクトをNode.jsのボイラープレートアプリケーションの例として使用します。ぜひ一緒に試してみてください。
Snyk goofプロジェクトを始める
まず、Snyk goofプロジェクトをGitHubアカウントにフォークします。このサンプルプロジェクトには脆弱性が多数含まれており、Snykで検出できます。
次に、Snykのログインページにアクセスし、GitHubアカウント(または任意のプロバイダーのアカウント)でサインインして、無料のSnykアカウントを作成します。

アカウントに登録されているメールアドレスへのアクセスをSnykに許可する必要があります。Snykはこのメールアドレスを使って、セキュリティ通知やレポートなど、インポートしたプロジェクトに関する重要な情報をお送りします。
Snykを初めて利用する場合は、Snykがプロジェクトを定期的にスキャンし、リポジトリに修正用プルリクエストを自動生成できるよう、アクセス設定も行う必要があります。そのため、GitHubアカウントから追加の権限を付与してください。
プロジェクトのコードソースとしてGitHub(またはコードを保存している場所)を選択します。次に、以下のスクリーンショットに示すデフォルト設定を承認すると、推奨されるSnykの機能をすべて利用できます。必要に応じてこれらの権限を無効にできますが、その場合、セキュリティ修正や依存関係のアップグレードを自動化する、Snykの高度で便利な修正用プルリクエスト機能を利用できなくなります。

次に、GitHubリポジトリの一覧からSnyk goofプロジェクトを選択し、Snykアカウントにプロジェクトとして追加します。

依存関係グラフを作成するために、Snykはgoof Node.jsプロジェクトのマニフェストファイル`package.json`を解析します。このグラフには、goofプロジェクトが直接使用する依存関係と、それらの直接依存関係が依存する推移的依存関係の両方が含まれます。こうして完全な依存関係グラフが作成されます。次にSnykは、これらの依存関係を脆弱性データベースと照合し、詳細なレポートを生成します。

goofプロジェクトには、かなり多くの問題があります。Snykを使えば、直接依存関係を脆弱性のないバージョンにアップグレードしたり、脆弱性にパッチを適用したりして、多くの問題を修正できます。コード解析の内容を詳しく見て、修正が必要なハードコードされたシークレットを確認しましょう。
GitHubにプッシュしたシークレットを修正する
Code Analysisビューを開き、ハードコードされた認証情報の使用とハードコードされたシークレット。で絞り込みます。

いくつかのシークレットを修正する必要があります。まず、これらのシークレットをDopplerに追加しましょう。これにより、シークレットが誤って露出するのを防ぎ、一元管理できるようになります。また、開発環境と本番環境で異なるシークレットを設定できます。これで、シークレットをGitHubにプッシュしてしまう心配もなくなります。
GitでGoofプロジェクトをクローンし、必要なコード変更を行います。次に、GoofプロジェクトのREADMEの手順に沿って、プロジェクトをローカルで実行します。
まず、`app.js`ファイルにハードコードされたトークンを修正します。

お使いのコードエディターで`app.js`を開き、トークン変数を見つけます。トークンをコピーしたら、Dopplerに移動して無料アカウントを作成します。

Dopplerアカウントで、`Goof`という名前の新しいプロジェクトを作成します。

デフォルトで環境が作成されているのを確認できます。すべてのシークレットをDevelopment > Dev設定に追加します。これで、分岐した設定にあるシークレットを更新できます。Development > Dev設定をクリックし、次にAdd First Secretをクリックします。

シークレットの名前を`SECRET_TOKEN`にし、ハードコードされていた値を入力して保存します。

Dopplerにシークレットを追加したので、コードから利用できます。ハードコードされたトークンの値を環境変数に置き換えます。Doppler CLIを使って、アプリケーションにシークレットを注入します。コードは次のようになります。
Doppler CLIを使うと、ローカル開発、CI/CD、ステージング、本番環境など、あらゆる環境でシークレットにアクセスできます。軽量なバイナリとして提供されており、主要なOS、パッケージマネージャー、Dockerで利用できます。
Doppler CLIのインストールページにある手順に沿って、お使いのシステムでDoppler CLIを設定します。Dopplerでは、プロジェクトのシークレットへのアクセスは、ファイルシステム内の特定のディレクトリに紐付けられます。これにより、1台のマシンで複数のプロジェクトのシークレットを取得できます。
ターミナルでGoofプロジェクトのディレクトリに移動し、Dopplerを設定します。
goofプロジェクトを選択します。

dev設定を選択します。

アプリケーションの起動時に`‘doppler run’`コマンドを付けると、シークレットを利用できます。このコマンドによって、アプリケーションの環境にシークレットが注入されます。
すべてのシークレットを追加し、アプリケーションやチームのニーズに合わせて設定を行ってください。シークレットの編集時にアプリケーションを自動再起動する機能にも関心があるかもしれません。
SnykとDopplerでシークレットを保護する
SnykとDopplerは、組み合わせて使うことでさらに効果を発揮する開発者向けツールの好例です。今すぐSnykとDopplerを連携して、強力なツールが開発プロセスを効率化する様子をぜひご体験ください。SnykとDopplerの連携を試して、より安全で効率的なワークフローへの第一歩を踏み出しましょう。

