概要

Application Security Management (ASM) を有効にすると、Datadog のトレーシングライブラリは、すべての Web サービスや API リクエストを積極的に監視し、疑わしいセキュリティアクティビティがないかどうかを確認します。

_アプリ内 WAF ルール_は、受信するリクエストの条件を指定し、ライブラリが何を疑わしいとみなすかを定義します。Datadog トレーシングライブラリは、何百ものすぐに使える ASM アプリ内 WAF ルールを含んでおり、それらはトレースエクスプローラーやデフォルトシグナルルールでセキュリティトレースを表示するために使用されます。

トレーシングライブラリをアップグレードすることなく、アプリ内 WAF ルールに追加することができます。

ASM アプリ内 WAF ルールの構造

アプリ内 WAF ルールは、カテゴリー、名前、タグ、条件からなる JSON オブジェクトです。セキュリティトレースを検出すると、ルールのタグがセキュリティトレースに伝搬され、検出ルールを構築するのに利用されます。

条件

条件は、ルールが受信リクエストにタグ付けするタイミングを定義します。条件は、_入力_と_演算子_で構成されます。

入力

入力は、リクエストのどの部分に演算子が適用されるかを表します。アプリ内 WAF ルールでは、以下の入力が使用されます。

名前説明
server.request.uri.rawアプリケーションサービスが受信した完全なリクエスト URIhttps://my.api.com/users/1234/roles?clientId=234
server.request.path_paramsパースされたパスパラメーター (キー/値マップ)userId => 1234
server.request.queryパースされたクエリパラメーター (キー/値マップ)clientId => 234
server.request.headers.no_cookiesCookie ヘッダー (キー/値マップ) を除いた、受信する http リクエストのヘッダーuser-agent => Zgrab, referer => google.com
grpc.server.request.messageパースされた gRPC メッセージ (キー/値マップ)data.items[0] => value0, data.items[1] => value1
server.request.bodyパースされた HTTP 本文 (キー/値マップ)data.items[0] => value0, data.items[1] => value1
server.response.statushttp ステータスコード200

演算子

name説明
match_regex入力に対して正規表現によるマッチングを実行する
phrase_matchキーワードリストマッチングを高速に実行する
is_xssクロスサイトスクリプティング (XSS) ペイロードをチェックするための特別な演算子
is_sqliSQL インジェクション (SQLI) ペイロードをチェックするための特別な演算子

カスタムアプリ内 WAF ルール

カスタムアプリ内 WAF ルールにより、ユーザーはアプリケーションへの特定のタイプのリクエストを記録したり、ブロックしたりすることができます。例えば、カスタムルールを使用して、ログインの成功または失敗を監視することができます。開始するには、Security -> Application Security -> Protection -> In-App WAF -> Custom Rules へ移動します。

注: アプリ内 WAF のデフォルトのルールは読み取り専用です。アプリ内 WAF の動作を調整するには、アプリ内 WAF のルールを変更します。デフォルトのルールを変更することはできませんが、デフォルトのルールの 1 つに基づいてカスタムルールを作成し、必要に応じて一致条件を変更することができます。同じリクエストを評価する 2 つの非常によく似たルールが存在することにならないように、デフォルトのルールは必ず無効にしてください。

ASM アプリ内 WAF ルールの構成

サービスのブロックは、ポリシールールで定義します。アプリ内 WAF には、Datadog Recommended、攻撃のみを監視する Datadog Monitoring-only、攻撃ツールをブロックし、その他のすべての攻撃を監視する Datadog Block Attack tools の 3 つの Datadog デフォルトポリシーが含まれています。

ポリシーが適用されているサービスは、ポリシー管理ページで直接確認できます。

  1. Datadog で、Security > Application Security > Protection > In-App WAF に移動します。

    アプリ内 WAF 構成ページ、2 つのデフォルトポリシーを表示しています。
  2. ポリシーの右側にある 3 つのドットをクリックし、Download Configuration of this Policy を選択して、コンフィギュレーションファイルをローカルマシンにダウンロードします。

  3. オプションとして、Apply this Policy to Services を選択して、デフォルトのポリシーを保護が有効な 1 つ以上の ASM サービスに適用することもできます。

    注: ポリシーは複数のサービスに適用できますが、1 つのサービスには 1 つの_ポリシー_しか含めることができません。

  4. 上記の仕様に従って、新しいルールの JSON 定義を含むようにファイルを更新します。例:

        {
            "id": "id-123",
            "name": "My In-App WAF rule",
            "tags": {
                "category": "attack_attempt",
                "crs_id": "920260",
                "type": "http_protocol_violation"
            },
            "conditions": [
                {
                    "operator": "match_regex",
                    "parameters": {
                        "inputs": [
                            {
                                "address": "server.request.uri.raw"
                            }
                        ],
                        "options": {
                            "case_sensitive": true,
                            "min_length": 6
                        },
                        "regex": "\\%u[fF]{2}[0-9a-fA-F]{2}"
                    }
                }
            ],
            "transformers": []
        },
       
  5. SCP や FTP などのユーティリティを使用して、appsec-rules.json ファイルを /home/asm/appsec-rules.json などのアプリケーションサーバーにコピーします。

  6. ASM の有効化にある、環境にアプリケーション変数を追加する方法に従って、DD_APPSEC_RULES 環境変数をファイルにフルパスでサービスに追加します。

    DD_APPSEC_RULES=/home/asm/appsec-rules.json
    
  7. サービスを再起動します。

次にやるべきこと

次に、作成したアプリ内 WAF ルールで定義されたセキュリティトレースに基づいて、セキュリティシグナルを生成するための検出ルールを構成します。ASM の検出ルールは、すぐに利用可能なものを変更したり、新しいものを作成したりすることができます。

その他の参考資料