概要

Application Security Management (ASM) には、本番システムに影響を与える攻撃の試み、攻撃者が見つけた脆弱性、ビジネスロジックの不正使用を捕捉することを目的とした、一連のすぐに使える検出ルールが付属しています。

しかし、環境またはワークロードに基づいてルールをカスタマイズしたい場合もあります。例えば、ビジネスが行われていない地域から機密アクションを実行するユーザーを検出する検出ルールをカスタマイズしたいと思うかもしれません。

他の例としては、内部セキュリティスキャナーを除外するようにルールをカスタマイズすることが挙げられます。ASM は、期待どおりにその活動を検出します。しかし、定期的に発生するスキャンの通知を受けたくない場合があります。

このような場合、カスタム検出ルールを作成することで、そのようなイベントを除外することができます。このガイドでは、ASM のカスタム検出ルールを作成する方法を説明します。

ビジネスロジック不正使用検出ルール

ASM は、ビジネスロジックの不正使用 (例えば、ブルートフォースによるパスワードのリセット) を検出するためのルールをすぐに使えるようにしています。これらのルールでは、トレースにビジネスロジック情報を追加する必要があります。

最近の Datadog トレーシングライブラリは、コードを変更する必要なく、ユーザーのログインやサインアップイベントを自動的に検出し、送信することを試みます。必要であれば、ユーザーアクティビティイベントの自動追跡をオプトアウトすることができます。

ルールにフィルターをかけ、どのビジネスロジックの追跡を開始するかを特定することができます。さらに、これらのルールを青写真として使用し、独自のビジネスロジックに基づいたカスタムルールを作成することができます。

ルールの構成は、以下のセクションを参照してください。

構成

OOTB 検出ルールをカスタマイズするには、まず既存のルールを複製する必要があります。検出ルールに移動して、ルールを選択します。ルールの下までスクロールして、Clone Rule ボタンをクリックします。これで、既存のルールを編集できるようになります。

ASM クエリの定義

ASM トレースエクスプローラーと同じクエリ構文を使用して、ASM クエリを構築します。たとえば、米国外からのログイン成功を監視するクエリを作成します: @appsec.security_activity:business_logic.users.login.success -@actor.ip_details.country.iso_code:US

オプションで、一意のカウントとシグナルのグループ化を定義します。特定の時間枠で属性に対して観測された一意の値の数をカウントします。定義されたグループ化は、値ごとに各グループ化のシグナルを生成します。 通常、グループ化はエンティティ (ユーザー、IP、またはサービスなど) です。グループ化は、クエリを結合するためにも使用されます。

プレビューセクションを使用して、検索クエリに一致する ASM トレースを確認します。また、Add Query ボタンでクエリを追加することもできます。

クエリを結合する

時間枠にまたがるクエリを結合することで、セキュリティシグナルの信頼度や重大度を高めることができる。例えば、攻撃が成功したことを検知するために、成功したトリガーと失敗したトリガーの両方をサービ スに対して関連付けることができます。

クエリは group by 値を使用して関連付けられます。group by 値は通常エンティティ (例えば IPService) ですが、任意の属性を指定することができます。

例えば、同じ business_logic.users.login.success アクティビティを検索する反対のクエリを作成し、成功した場合と失敗した場合に反対の HTTP パスクエリを追加します。

クエリ 1: @appsec.security_activity:business_logic.users.login.success @actor.ip_details.country.iso_code:US

クエリ 2: @appsec.security_activity:business_logic.users.login.success -@actor.ip_details.country.iso_code:US

この場合、結合されたクエリは技術的に同じ属性値を保持しています。もし group by の値が存在しなければ、ケースに合致することはありません。ケースにマッチすると、一意の group by 値ごとにセキュリティシグナルが生成されます。

抑制クエリで良性アクティビティを除外する

Only generate a signal if there is a match (一致した場合のみシグナルを発生させる) フィールドでは、クエリを入力することで、値が一致したときのみトリガーが発生するようにするオプションがあります。

This rule will not generate a signal if there is a match (このルールは、一致するものがある場合、シグナルを生成しない) フィールドには、抑制クエリを入力するオプションがあり、値が一致した場合にトリガーが生成されないようにすることができます。例えば、あるサービスがシグナルをトリガーしているが、そのアクションは良性であり、このサービスからシグナルをトリガーさせたくない場合、service を除外するクエリを作成します。

ルールケースを設定する

トリガー

successful login > 0 のようなルールケースは、ケース文として評価されます。したがって、最初にマッチしたケースがシグナルを発生させます。1 つまたは複数のルールケースを作成し、その横にある灰色の領域をクリックして、ドラッグしてその順序を操作します。

ルールケースには、過去に定義されたクエリのイベント数に基づいてシグナルを生成すべきかを判断するための論理演算 (>、>=、&&、||) が含まれます。

: クエリラベルは演算子に先行しなければなりません。たとえば、a > 3 は使用できますが、3 < a は許容されません。

各ルールケースにつき、名前を付与します。シグナルの生成時には、この名前がルールの名称に追加されます。

重大度および通知

Set severity to ドロップダウンメニューで、適切な重大度レベル (INFOLOWMEDIUMHIGHCRITICAL) を選択してください。

Notify セクションで、オプションで各ルールケースに対する 通知ターゲットを構成できます。

また、通知ルールを作成して、個々の検出ルールに対する通知設定の手動での編集を避けることが可能です。

タイムウィンドウ

An evaluation window is specified to match when at least one of the cases matches true. This is a sliding window and evaluates cases in real time.

After a signal is generated, the signal remains “open” if a case is matched at least once within the keep alive window. Each time a new event matches any of the cases, the last updated timestamp is updated for the signal.

A signal closes once the time exceeds the maximum signal duration, regardless of the query being matched. This time is calculated from the first seen timestamp.

ケースを追加する場合は、Add Case をクリックします。

: この evaluation window は、keep alive および maximum signal duration 以下でなければなりません。

Say what’s happening

Add a Rule name to configure the rule name that appears in the detection rules list view and the title of the Security Signal.

In the Rule message section, use notification variables and Markdown to customize the notifications sent when a signal is generated. Specifically, use template variables in the notification to inject dynamic context from triggered logs directly into a security signal and its associated notifications. See the Notification Variables documentation for more information and examples.

シグナルにタグを追加するには、Tag resulting signals ドロップダウンメニューを使用します。例えば、attack:sql-injection-attemptのようになります。

: security タグはセキュリティシグナルの分類に用いられる特殊なタグです。attackthreat-intelcomplianceanomalydata-leak など他のタグの使用を推奨します。

その他の参考資料