はじめに

こんにちは、MSPの田所です。

みなさんは Trend Micro Cloud One – Workload Security (C1WS) で Amazon SNS への配信ができることをご存知でしょうか?
そして SNS への配信時にフィルターをかけられることをご存知でしょうか?

使い道が広がる C1WS の SNS 配信とフィルターについてご紹介します。

 

C1WS のインテグレーション

1. C1WSについて

Trend Micro Cloud One – Workload Security はサーバーへの多様な攻撃を検知・防御するセキュリティ製品です。
エージェントを導入するだけで以下の機能を備えることができます。

  • ランサムウェアを防ぐEPP(Endpoint Protection Platform), 次世代アンチウイルス
  • 脆弱性を狙った攻撃を防ぐIPS(Intrusion Prevention System)/ IDS(Intrusion Detection System)
  • 攻撃の検知や対処を迅速化するEDR(Endpoint Detection and Response)/ XDR(Extended Detection and Response)

また、サーバーで所定のイベントを検知した際には、メールや Amazon SNS に通知することができます。

現在は C1WS に代わって後継の Trend Vision One – Endpoint Security が提供されています。

 

 

2. メール通知

 

まずメール通知についてです。
C1WS では特定のイベントをアラートとして設定することができます。
アラートが発令されると指定のアドレスにメールが通知されます。
設定できるアラートは多岐に渡りますが、例えば以下の場合にメール通知する、のような使い方となります。

Cloud One Workload Security – アラートの設定

 

またアラート設定上、項目ごとにメール通知をするかどうかを選べるのですが、細かな条件設定はできません。
ポリシーの設定で、イベントを生成するかどうか(=アラートとして上げるかどうか)はルール単位で選択できますが、全てのルールの設定状況を把握・管理するのは現実的ではないように思います。

 

3. Amazon SNS 通知

 

C1WS では Amazon SNS への通知もサポートしています。
対象の SNS への sns:Publish 権限を持つIAMユーザーを指定し、SNSトピックを指定することでイベント内容を通知することができます。

 

イベントの内容はJSONオブジェクトの配列として送信されます。

以下のようなJSONではなく、

{"Name":"Pen","Price":100},{"Name":"Note","Price":200}

以下のような、JSONを含んだ配列の形式となります。

[{"Name":"Pen","Price":100},{"Name":"Note","Price":200}]

さて、SNSトピックに通知するとどんなメリットがあるのでしょうか。

 

メリット1:他のAWSサービスに連携できる

まず Amazon SNS トピックに配信できるということは、トピックへのサブスクリプション次第でその後の選択肢がいくらでもあるということになります。
メール通知はもちろん、AWS Lambda、Amazon Data Firehose、Amazon SQS、HTTP(S)エンドポイントなどなど。
その後の連携も含めて、無数の組み合わせが考えられます。

例えば AWS Lambda で件名やメッセージを加工したり、
Amazon Data Firehose から Amazon S3 やサードパーティーの監視ツールに送ったり、
様々な用途が思い付きますね。

 

メリット2:JSONフィルターを設定できる

Amazon SNS トピックに配信するにあたり、C1WS 上でJSONフィルターを設定することができます。
そこでは、どのAWSアカウントの、どのSNSトピックに、どんな条件の時に、通知するかを指定可能です。
後ほどJSONフィルターでできることを一部ご紹介します。

 

注意点1:件名が “AWS Notification Message” になる

件名指定ができないため、配信されるメッセージの件名は “AWS Notification Message” で固定されます。
ただし AWS Lambda を使えば件名や本文の加工は可能です。

 

注意点2:SNS サブスクリプションフィルターを適用できない

メッセージがJSONではなく配列形式となるため、SNS サブスクリプションフィルターをそのまま適用できません。
これも AWS Lambda を使ってメッセージを加工すればフィルターが可能です。

 

Amazon SNS に配信する際のJSONフィルター

JSONフィルターでは、C1WS で定められた JSON形式のイベント のイベントプロパティを条件に指定できます。
簡単に言うとかなりカスタマイズ性が高いということなのですが、その一例をご紹介します。

 

1. 文字列の一致

EventType が変更監視、セキュリティログ監視、侵入防御のいずれかに合致するイベントを指定のSNSトピックに配信します。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringEquals" : {
          "EventType" : ["IntegrityEvent", "LogInspectionEvent", "PayloadLog"]
        }
      }
    }
  ]
}

 

2. 文字列の不一致

Reason にルール番号「123456」「789012」のいずれも含まないイベントを指定のSNSトピックに配信します。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringNotLike": {
          "Reason": ["*123456*", "*789012*"]
        }
      }
    }
  ]
}

3. AND

EventType が変更監視、セキュリティログ監視、侵入防御のいずれかに合致し、Reason にルール番号「123456」「789012」のいずれも含まず、Hostname が TestServer ではないイベントを指定のSNSトピックに配信します。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringEquals" : {
          "EventType" : ["IntegrityEvent", "LogInspectionEvent", "PayloadLog"]
        },
        "StringNotLike": {
          "Reason": ["*123456*", "*789012*"],
          "Hostname": "TestServer"
        }
      }
    }
  ]
}

 

4. OR

EventType が侵入防御のイベント、または Hostname が MonitoringServer のイベントを指定のSNSトピックに配信します。
Statement 内で Topic や Condition を繰り返すことで、OR 条件を作成します。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringEquals": {
          "EventType": "PayloadLog"
        }
      }
    },
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringEquals": {
          "Hostname": "MonitoringServer"
        }
      }
    }
  ]
}

 

5. 複数SNSトピック

EventType が侵入防御のイベントをSNSトピック1に、EventType が変更監視のイベントをSNSトピック2に配信します。
指定のIAMユーザーに権限があれば、複数AWSアカウントのSNSトピックへの配信も可能です。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN1",
      "Condition": {
        "StringEquals": {
          "EventType": "PayloadLog"
        }
      }
    },
    {
      "Topic": "SNSトピックARN2",
      "Condition": {
        "StringEquals": {
          "EventType": "IntegrityEvent"
        }
      }
    }
  ]
}

 

6. 日本語

Reason が「無効なトラバーサル」であるイベントを指定のSNSトピックに配信します。
条件に日本語を入れる場合は Unicode エスケープシーケンスで表記します。
「無効なトラバーサル」 = 「\u7121\u52b9\u306a\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb」 です。

{
  "Version": "2014-09-24",
  "Statement": [
    {
      "Topic": "SNSトピックARN",
      "Condition": {
        "StringEquals": {
          "Reason": "\u7121\u52b9\u306a\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb"
        }
      }
    }
  ]
}

 

おわりに

C1WS から Amazon SNS に配信すれば、JSONフィルターで柔軟な設定ができるというお話でした。
もちろんメールと SNS の併用もできますので、お好みのスタイルで通知をデザインできます。
何かのお役に立てば幸いです。

おしまい