Datadog CodeSecurity で Web アプリのセキュリティリスクを分析してみた
こんにちは。テクニカルサポートチームのShiinaです。
はじめに
Web アプリケーションは、既知の脆弱性を悪用する攻撃などのさまざまなリスクに常にさらされています。
コードの規模が大きくなったり、外部ライブラリを多用したりするほど、こうしたリスクをすべて把握するのは難しくなってきます。
そこで有効なのが、静的コード解析やソフトウェア構成分析、ランタイムコード分析といった自動化されたセキュリティ分析の仕組みです。
今回は、Datadog と GitHub を連携し、CodeSecurity を使ってアプリケーションのセキュリティリスクをどのように発見できるのかを分析してみました。
CodeSecurity とは
リポジトリや実行中のサービスに対して、アプリケーションで使用されているコードとオープンソースライブラリをスキャンしてセキュリティリスクを分析、可視化できる機能です。
主に次の観点で DevSecOps の実装に役立ちます。
- 脆弱性の早期検出やコード品質の向上が期待されます。
- パッチやコンプライアンス監視によりセキュリティ体制を強化できます。
- 自動による静的コード分析により手動作業のオーバーヘッドを削減できます。
CodeSecurity の代表機能
Datadog の CodeSecurity は3つの代表的な機能を備えています。
静的コード解析(SAST)
プログラムを実際に動かさずに、開発中のコードをチェックして問題点を見つける方法です。
静的コード分析を活用することで、開発初期からセキュリティの弱点や保守性の問題を自動的に発見できます。
安全で高品質なコードを効率よく本番環境に導入できるため、チーム全体の開発スピードや新メンバーの参加もスムーズになります。
リポジトリのスキャンは CI/CD パイプラインや Datadog ホスト型スキャン(GitHub)で実行できます。
Python、Java、JavaScript、Kotlin、TypeScript など主要な言語がサポートされています。
最新情報については、ドキュメント[1]をご参照ください。
ソフトウェア構成分析 (SCA)
リポジトリや実行中のサービスで使われているオープンソースライブラリを検出し、脆弱性やライセンス問題を一元的に把握できる仕組みです。
新たな脆弱性やリスクに応じた優先順位付け、悪意のあるパッケージやサポート終了のライブラリを特定できます。
Datadog SCA は独自のデータベースを利用しており、最新の脆弱性情報を迅速に反映しています。新たな脆弱性は、通常数分以内に Datadog に表示されます。
ソフトウェア構成分析は2つの検出方法をサポートしています。
- 静的検出: CI/CD パイプラインや Datadog ホスト型スキャン(GitHub)
- ランタイム検出:APM を利用したアプリケーションのインストルメンテーション
ランタイムコード分析(IAST)
実際に動いているサービスの中でコードの脆弱性をリアルタイムに検出する仕組みです。
検出には APM を利用したアプリケーションのインストルメンテーションを利用します。
リアルタイムでアプリケーショントラフィックを監視しながら、SQL インジェクションやクロスサイトスクリプティング(XSS)、パストラバーサルなどの脆弱性を素早く見つけることができます。
Python、.NET、Node.js、Java がサポートされています。
最新情報については、ドキュメント[2]をご参照ください。
GitHub 連携でできること
GitHub インテグレーションを利用することで、GitHub と連携できます。
連携させると以下のようなさまざまな機能やメリットが得られます。
- GitHub リポジトリのコードに対して静的コード解析(SAST)、ソフトウェア構成分析(SCA)のホスト型スキャン実行
- Webhook でプルリクエストやコミットなどリポジトリイベントをリアルタイム連携
- エラー時に該当コードスニペットを Datadog コンソール上で表示
- コードスキャン・シークレットスキャンのメトリクスを自動収集・可視化
- APM やエラートラッキング、PR コメント自動生成など双方向連携
- コードスキャンアラートやリポジトリのメトリックデータの自動収集
- 監査ログの転送 (※GitHub Enterprise のみ)
分析してみる
前提
- Node.js の Web アプリケーションのセキュリティリスクを分析します。
- 静的コード解析(SAST)、ソフトウェア構成分析(SCA)にはホスト型スキャンを利用します。
- ランタイムコード分析(IAST)は APM のトレーシングライブラリ(dd-trace)を利用します。
1. GitHub インテグレーション設定
静的コード解析(SAST)、ソフトウェア構成分析(SCA)のホスト型スキャンを実行するため、Datadog と GitHub の連携を行います。
-
下記 URL にアクセスします。
https://app.datadoghq.com/integrations/github/configuration -
Connect GitHub Account を選択します。
-
Install on GitHub Account を選択し、GitHub アカウントでログインします。
-
連携が完了したメッセージを確認し、Finish を選択します。
2. 静的コード解析(SAST)・ソフトウェア構成分析(SCA)の有効化
連携した GitHub リポジトリに対して静的コード解析(SAST)、ソフトウェア構成分析(SCA)を有効化します。
-
下記 URL にアクセスします。
https://app.datadoghq.com/security/configuration/code-security/setup -
Get started with Code Security では次のように設定を行います。
- Select your source code management provider:GitHub を選択します。
- Select where your scans should run:Datadog を選択します。
- Connect your GitHub repositories:インテグレーション設定により連携した GitHub アカウント名の Select repositories を選択します。
- Select repositories では次のように設定を行います。
- Enable Static Software Composition Analysis (SCA):トグルを有効にする
- Enable Static Code Analysis (SAST):トグルを有効にする
3. ランタイムコード分析(IAST)の有効化
ランタイムコード分析(IAST)を有効化するため、アプリケーションの構成を行います。
- Node.js のバージョン確認
node -v
v18.20.6
- トレーシングライブラリのバージョン確認
npm ls dd-trace
datadog-apm-shopping-site@1.0.0 /opt/DatadogAPMWebSite
└── dd-trace@4.55.0
- 最新のトレーシングライブラリのインストール
Webアプリケーションに利用しているトレーシングライブラリのバージョン要件を満たしていないため、最新バージョンをインストールします。
npm install dd-trace@latest
npm ls dd-trace
datadog-apm-shopping-site@1.0.0 /opt/DatadogAPMWebSite
└── dd-trace@5.59.0
dd-trace のバージョンが 5.0.0 以上になりました。
- アプリケーションの構成
ランタイムコード分析(IAST)を有効にするには、.env
ファイルにDD_IAST_ENABLED=true
を追加する方法のほか、アプリケーションコード内で直接設定することもできます。
例えば、app.js
ファイルでdd-trace
を初期化する際に、iast: true
オプションを指定することでも有効化できます。
const tracer = require('dd-trace').init({
service: process.env.DD_SERVICE_NAME || 'shopping-site',
env: process.env.DD_ENV || 'development',
version: process.env.DD_VERSION || '1.0.0',
logInjection: true,
iast: true
});
- アプリケーションサービスの再起動
環境変数の変更や設定を反映させるため、アプリケーションサービスを再起動する必要があります。
PM2 を利用している場合は、以下のコマンドでサービスを再起動し、環境変数の変更を反映させます。
pm2 restart shopping-site --update-env
セキュリティリスクを確認
Datadog コンソールからセキュリティリスク分析結果を確認してみます。
静的コード解析(SAST)
-
メニューの Security より Vulnerabilities を選択します。
-
Static Code(SAST) を選択します。
-
コードの脆弱性一覧が表示されます。
-
脆弱性を選択すると、詳細情報を確認できます。
脆弱性の内容に加え、該当コードスニペットを確認できます。
ソフトウェア構成分析(SCA)
-
メニューの Security より Vulnerabilities を選択します。
-
Libraries(SCA) を選択します。
-
ライブラリの脆弱性一覧が表示されます。
-
脆弱性を選択すると、詳細情報を確認できます。
脆弱性の内容、重大度スコア、リスク、修復方法などが確認できます。
静的検出の場合はリポジトリ情報、ランタイム検出の場合はアプリケーションのサービス情報も得られます。
ランタイムコード解析 (IAST)
-
メニューの Security より Vulnerabilities を選択します。
-
Runtime Code(IAST) を選択します。
-
コードの脆弱性一覧が表示されます。
-
脆弱性を選択すると、詳細情報を確認できます。
脆弱性の内容、APM によるトレースデータに基づいたデータフローとスタックトレース、重大度スコア、修復方法が確認できます。
まとめ
新たな脆弱性やリスクへの対応が求められる中、Datadog CodeSecurity のような統合型のセキュリティ分析ツールを活用することで、より安全なサービスを運用できます。
GitHub との連携により、シームレスに開発フローに組み込めるため、DevSecOps に役立ちそうです。
これからはセキュリティ対策の自動化がますます重要になっていくと考えられますので、ぜひ一度試してみてはいかがでしょうか。
本記事が参考になれば幸いです。
参考