このトピックでは、CSM Threats のためのカスタム Datadog Agent および検出ルールの作成方法について説明します。
すぐに使える (OOTB) デフォルトの Agent ルールと検出ルールに加えて、カスタムの Agent ルールと検出ルールを作成できます。カスタムルールは、Datadog の OOTB ルールでは検出されないイベントを検出するのに役立ちます。
カスタムルール管理のための RBAC
Datadog Standard のすぐに使えるロールを持つユーザーが、リモート構成を使用して変更されたルールを作成、更新、無効化、デプロイできないようにするには、
- Datadog Admin ロール内のユーザーが
security_monitoring_cws_agent_rules_write
権限を含むロールを作成する必要があります。 - Agent ルールを管理するユーザーのみをこのロールに追加します。
カスタム検出ルールの概要
カスタム検出ルールは Agent ルールに依存し、既存のデプロイ済み Agent ルールと追加の式パラメーターで構成されます。
次の 2 つのユースケースがあります。
- 既存の Agent ルールを使用して検出ルールを作成する: 既存の Agent ルールを使用する脅威検出ルールを作成するには、Agent ルールを参照し、必要な追加の式パラメーターを追加する脅威検出ルールを作成するだけで済みます。
- 新しい Agent ルールを使用して脅威検出ルールを作成する: 現在の Agent ルールがサポートしていないイベントを検出するには、そのイベントを検出するカスタム Agent ルールを作成し、そのカスタム Agent ルールを使用するカスタム脅威検出ルールを作成する必要があります。
詳細は、CSM Threats Detection ルールを参照してください。
次の方法を使用してカスタムルールを作成できます。
- 簡易: Assisted rule creator を使用して、カスタム Agent ルールと検出ルールを同時に作成します。
- 高度: 脅威検出式を定義して、カスタム Agent ルールと検出ルールを個別に作成します。
カスタム Agent ルールと検出ルールを同時に作成する
Assisted rule creator オプションを使用すると、Agent ルールと依存する検出ルールを同時に作成でき、Agent ルールが検出ルールで適切に参照されます。このツールを使うと、Agent ルールと検出ルールを個別に作成する高度な方法よりも作業が迅速に完了します。
このツールでルールを定義すると、それに対して生成された脅威式がツール内に表示されます。
簡易ルール作成ツールを使用するには、
Agent Configuration または Threat Detection Rules で New Rule を選択し、次に Assisted rule creator を選択します。
検出を定義します。リソースを効果的に監視するために以下の検出タイプオプションがあります。
- File integrity monitoring (FIM): ファイルに対する非標準的または疑わしい変更を検出します。
- Process activity monitoring: システムソフトウェアのプロセスを追跡および分析し、悪意ある動作やポリシー違反を検出します。
- 監視するファイル名やプロセス名、またはそのパスを入力します。
さらに条件を指定します。脅威ルール式に追加する引数を入力します。例えば、引数 foo
を process.argv in ["foo"]
として追加します。
重大度と通知リストを設定します。
- この脅威が検出された際に生成されるシグナルの重大度を選択します。
- シグナルが生成された際に通知するリストを選択します。
ルール名と説明を追加します。
以下は、新しい FIM ルールの例で、各ルールで生成された式も含まれています。
Create N Rules を選択します。
Generate Rules で Confirm を選択して、ルールを生成します。
最後に Finish を選択すると、Agent Configuration ページに新しいルールが表示されます。
Agent 構成で、Deploy Agent Policy を選択します。
カスタム Agent ルールを作成する
個別のカスタム Agent ルールを作成し、それを新しい Agent ポリシーとしてデプロイし、それをカスタム検出ルールで参照できます。
Agent Configuration ページで New Rule を選択し、次に Manual rule creator を選択します。
ルールの名前と説明を追加します。
Expression で、Datadog Security Language (SECL) 構文を使用して Agent 式を定義します。
例えば、不審なコンテナクライアントを監視するには
exec.file.path in ["/usr/bin/docker", "/usr/local/bin/docker",
"/usr/bin/kubectl", "/usr/local/bin/kubectl"] && container.id != ""
Create Agent Rule をクリックします。これにより、自動的に Agent Configuration ページに戻ります。
Agent のカスタムルールを作成すると、保留中の他のルール更新と一緒に変更内容が保存されます。変更を環境に適用するには、更新されたカスタムポリシーを Agent にデプロイします。
ポリシーを環境にデプロイする
カスタム Agent ルールは、デフォルトのポリシーとは別のカスタムポリシーで Agent にデプロイされます。カスタムポリシーには、カスタム Agent ルールと、無効化されたデフォルトルールが含まれます。
リモート構成を使用して、カスタムポリシーを指定したホスト (すべてのホストまたは定義したホストのサブセット) に自動的にデプロイするか、または各ホストの Agent に手動でアップロードすることができます。
カスタムルールのリモート構成は非公開ベータ版です。この
フォームにご記入の上、アクセスをリクエストしてください。
リモート構成
- Agent Configuration ページで、Deploy Agent Policy をクリックします。
- Remote Configuration を選択します。
- Deploy to All Hosts (すべてのホストにデプロイする) または Deploy to a Subset of Hosts (ホストのサブセットにデプロイする) のいずれかを選択します。ポリシーをホストのサブセットにデプロイするには、1 つまたは複数のサービスタグを選択してホストを指定します。
- Deploy をクリックします。
手動デプロイ
- Agent Configuration ページで、Deploy Agent Policy をクリックします。
- Manual を選択します。
- Download Agent Policy をクリックし、Done をクリックします。
次に、以下の手順で、ポリシーファイルを各ホストにアップロードします。
ターゲットホストの {$DD_AGENT}/runtime-security.d
フォルダに default.policy
ファイルをコピーします。最低限、このファイルにはホスト上の dd-agent
ユーザーが read
と write
にアクセスできる必要があります。このため、SCP や FTP などのユーティリティを使用する必要があるかもしれません。
変更を適用するには、Datadog Agent を再起動します。
default.policy
を含む ConfigMap を作成します。例えば、kubectl create configmap jdefaultpol --from-file=default.policy
とします。
datadog.securityAgent.runtime.policies.configMap
で ConfigMap (jdefaultpol
) を values.yaml
に追加します。
securityAgent:
compliance:
# [...]
runtime:
# datadog.securityAgent.runtime.enabled
# Set to true to enable Security Runtime Module
enabled: true
policies:
# datadog.securityAgent.runtime.policies.configMap
# Place custom policies here
configMap: jdefaultpol
syscallMonitor:
# datadog.securityAgent.runtime.syscallMonitor.enabled
# Set to true to enable Syscall monitoring.
enabled: false
helm upgrade <RELEASENAME> -f values.yaml --set datadog.apiKey=<APIKEY> datadog/datadog
で Helm チャートをアップグレードします。
中: default.policy
にさらに変更を加える必要がある場合は、kubectl edit cm jdefaultpol
を使用するか、kubectl create configmap jdefaultpol --from-file default.policy -o yaml --dry-run=client | kubectl replace -f -
で configMap を置換してください。
Datadog Agent を再起動します。
カスタム検出ルールを作成する
新しいデフォルトポリシーファイルを Agent にアップロードした後、Threat Detection Rules ページに移動します。
Threat Detection Rules ページで New Rule を選択し、次に Manual rule creator を選択します。
ルールタイプを選択:
- Detection rule types で Workload Security を選択します。
- Threshold や New Value などの検出方法を選択します。
Define search queries:
- 新しい CSM Threats ルールを構成します。ルールは、例えば
(||, &&)
のように、ブーリアンロジックと組み合わせた複数のルールケースを持つことができます。また、カウンター、グループ化、ロールアップウィンドウを設定することができます。
- クエリを入力し、値が一致した場合にのみトリガーが生成されるようにします。また、Suppression Rules に抑制クエリを入力し、指定した値が満たされたときにトリガーが生成されないようにすることもできます。
Set rule cases:
- トリガーと重大度に対してルールケースを設定します。
- このルールがセキュリティシグナルをトリガーするときのロジックを定義します。例えば、
a>0
は、検索クエリで設定したルールの条件がスライド時間内に一度でも満たされていれば、セキュリティシグナルがトリガーされることを意味します。 - ルールを関連付ける重大度を選択し、通知する関係者をすべて選択します。
Say what’s happening:
ルールに名前を付け、Markdown 形式で通知メッセージを追加します。通知変数を使用して、タグとイベント属性を参照することにより、シグナルの具体的な詳細を提供します。メッセージの後に、複数のタグを追加して、カスタムルールによって生成されたシグナルにさらにコンテキストを与えます。
Datadog は、本文に修復[ランブック][10]を含めることを推奨しています。テンプレートに記載されているように、実行時にコンテキストに応じたコンテンツを動的に生成するために、置換変数を使用します。
Agent のデフォルトルールを無効にする
Agent のデフォルトルールを無効にするには、Agent Configuration ページに移動し、ルールトグルを選択します。Agent のデフォルトルールを無効にすると、保留中の他のルール更新と一緒に変更内容が保存されます。変更を環境に適用するには、更新されたカスタムポリシーを Agent にデプロイします。
その他の参考資料