Help us understand the problem. What is going on with this article?

QRadarでAmazon VPC Flow Logsを取得し監視する

はじめに

みなさまこんにちは。IBM QRadarを活用されていらっしゃいますか?
これまでAWS環境にIBM QRadar SIEMを構築、導入する手順を投稿してきましたが、今回はAmazon VPC Flow Logsの取得にチャレンジしたいと思います。

背景

IBM QRadarは元々フローログの分析を主体とする製品から誕生しており、NetFlow/IPFIX/sFlowなどのトラフィックモニタリングが得意なSIEM製品です。AWS環境ではVPC内の通信監視機能としてVPCフローログを生成することが出来るのですが、フローログの分析を行うためにはAmazon CloudWatch LogsやAmazon Elasticsearch Serviceなどの分析基盤を活用する必要があります。
IBM QRadarにAWS VPCフローログを取り込むことで、従来IBM QRadarで培ってきたフロー情報の異常検知、監視がQRadar側のSIEMルールで判定できるようになるため、取り込みを行なってみました。

Amazon VPCフローログとは?

公式ドキュメントはこちら。VPCフローログは、VPC のネットワークインターフェイスとの間で行き来する IPトラフィックに関する情報をキャプチャできるようにする機能で、フローログデータを Amazon CloudWatch Logs または Amazon S3 に発行できます。
AWSを触っている方は、Amazon CloudWatch Logsに出力されている方も多いのではと思います。
以下のようなフォーマットで出力されます。

<version> <account-id> <interface-id> <srcaddr> <dstaddr> <srcport> <dstport> <protocol> <packets> <bytes> <start> <end> <action> <log-status>

IPFIX規格と異なる点として、AWSアカウントIDやVPC内取得元のインターフェース情報などが付加されています。

2 634148078504 eni-0d88826XXXX11111 10.0.4.114 10.0.1.190 443 52737 6 31 9135 1593139499 1593139510 ACCEPT OK
2 634148078504 eni-0d88826XXXX11111 10.0.4.114 10.0.1.190 443 52729 6 33 9215 1593139499 1593139510 ACCEPT OK

IBM QRadar DSMによる設定方法 〜 Amazon S3/SQS経由の取得 〜

それでは設定してみましょう。
IBM QRadarのDSMドキュメントを見ると、VPCフローログの収集はAmazon SQS経由による接続であることが分かります。
DSMガイドの記載が文字しか無いため、分かり難いので図に起こしてみました。
vpcflow_diagram.png
手順をまとめると、以下のようになります。

  1. AWS側設定
    1. AWS環境側でVPC Flow Logsを有効にする(VPC)
    2. VPC Flow Logs用のSQSキューを作成する(SQS)
    3. VPC Flow Logsが保管されているS3 BucketからSQSに発行する
  2. IBM QRadar側設定
    1. DSMモジュール (Protocol Common / Amazon RESTAPIなど)の更新(※本記事では省略)
    2. Flow設定の有効化(Default_NetFlowが動いていればOK)
    3. DSM設定(DSM接続ガイドの通りに記載し、SQSキューを指定する)

AWS側設定

1. Amazon SQSキューの作成

Amazon SQSの画面に入り、VPC Flow Logsを一次受けするキューを作成します。
SQS.png
ここで、SQSキューに対して許可ポリシーを適用するのですが、公式のドキュメントがPrincipalを全許可してCondition条件で対象元を絞るポリシーになっており、表現上適切ではない様に思えましたので、筆者は以下のように設定しました。SQSのリソースベースのポリシー側で、IBM QRadarのEC2から受ける許可ポリシーと、S3 BucketからSendを受ける許可ポリシーを二つ記載しています。


{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:ap-northeast-1:[AWSアカウントID]:For_QRadar_VPCFlow_SQS/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "AllowQRadarEC2",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[AWSアカウントID]:root"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:ap-northeast-1:[AWSアカウントID]:For_QRadar_VPCFlow_SQS"
    },
    {
      "Sid": "AllowS3",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:ap-northeast-1:[AWSアカウントID]:For_QRadar_VPCFlow_SQS",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::[VPCフローログ保管Bucket]"
        }
      }
    }
  ]
}

2. S3Bucket設定

Amazon VPC Flow Logsが保管されるS3 Bucket側でSQSキューに転送する設定を行います。
S3_Config.png
設定後、Amazon SQS側でキューが溜まることを確認できればOKです。

IBM QRadar DSM設定

IBM QRadarのDSMガイドの通り、設定を行います。
注意点としては、Universal DSMを用いる特殊なDSM設定になるのでご注意ください。
ここでは、認証方式としてVPC内にIBM QRadar (Community Edition)を構築しているため、IAMロールによるセキュアな接続方式を用いています。

DSM_vpcflowlogs.png
「SQS Queue URL」の部分が、https://から始まるSQSキューのURLを指定することになります。

動作確認

設定が反映されて、QRadarがDSMを用いてSQSにポーリングし、Flow情報として展開できているかどうか、QRadarのログ(/var/log/qradar.log)から確認ができます。

Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [0] records from S3 File [/store/tmp/59/AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0215Z_a96f8084.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [tomcat.tomcat] [configservices@10.0.2.4 (1314) /console/JSON-RPC/System.addAliases System.addAliases] com.q1labs.configservices.capabilities.CapabilitiesHandler: [INFO] [NOT:0000006000][127.0.0.1/- -] [-/- -]adding autodetected flowsource alias: 127.0.0.1:localhost_localdomain
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processing S3 File: [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0225Z_3729e216.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.file.VPCFlowLogHandler: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [161] VPC Flow records from [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0225Z_3729e216.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [0] records from S3 File [/store/tmp/59/AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0225Z_3729e216.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processing S3 File: [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0220Z_c3db12b5.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.file.VPCFlowLogHandler: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [1167] VPC Flow records from [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0220Z_c3db12b5.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [0] records from S3 File [/store/tmp/59/AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0220Z_c3db12b5.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processing S3 File: [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0210Z_5168a8cc.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.file.VPCFlowLogHandler: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [902] VPC Flow records from [AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0210Z_5168a8cc.log.gz]
Jun 26 11:29:14 ::ffff:127.0.0.1 [ecs-ec-ingress.ecs-ec-ingress] [Amazon AWS S3 REST API Protocol Provider Thread: class com.q1labs.semsources.sources.amazonawsrest.AmazonAWSRESTProvider59] com.q1labs.semsources.sources.amazonawsrest.utils.web.SQSEventProcessor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Processed [0] records from S3 File [/store/tmp/59/AWSLogs-XXXXXXXXXXXX-vpcflowlogs-ap-northeast-1-2020-06-26-XXXXXXXXXXXX_vpcflowlogs_ap-northeast-1_fl-081519e90b2edcb30_20200626T0210Z_5168a8cc.log.gz]
Jun 26 11:29:29 ::ffff:127.0.0.1 [tomcat.tomcat] [admin@27.0.3.146 (1394) /console/JSON-RPC/QRadar.getUndeployedChanges QRadar.getUndeployedChanges] com.q1labs.configservices.deployment.DeploymentHandler: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]DETECTED: 1 flowsource aliases need deploying
Jun 26 11:29:53 ::ffff:10.0.2.4 [masterdaemon.masterdaemon] [SourceMonitorTimerTask] com.q1labs.sem.monitors.SourceMonitor: [INFO] [NOT:0000006000][10.0.2.4/- -] [-/- -]Incoming flow rate [5s: (0.00):(0.00) fps], [10s: (0.00):(0.00) fps], [15s: (0.00):(0.00) fps], [30s: (0.00):(0.00) fps], [60s: (0.00):(0.00) fps], [300s: (0.00):(0.00) fps], [900s: (0.00):(0.00) fps]. Peak in the last 60s: (0.00):(0.00) fps. Max Seen (0.00):(0.00) fps.License Threshold: 0.00
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138540] IPFIX Flow Source Stats for default_Netflow:  received and processed 188 packets.
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138540] Sent 0 flows on transport connection to 10.0.2.4:32010
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138540] Flows held over for the next reporting interval: 0
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Current interval starting input flow count: 0
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Number offlows that should be reported in the interval: 1655
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Total number of aggregatable flows received from all flow sources: 3528
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Total number of non-aggregatable flows received from all flow sources: 0
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Byte count: 18364323
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Packet count: 50524
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Overflow count: 0 (Compressed: 0)
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] Superflow count: 0 (Compressed: 0)
Jun 26 11:29:59 localhost [QRADAR] [21607] qflow: [INFO] [1593138600] New input interval started
Jun 26 11:30:00 localhost [QRADAR] [21607] qflow: [INFO] Successfully connected to 10.0.2.4:32010

設定が無事できているようであれば、IBM QRadar側からトラフィック情報が確認できるはずです。
QRadar_f.png
ダブルクリックして、フロー情報の詳細を見てみましょう。
AWS固有の情報である Interface名、Action、ENI IDなども取り込まれていることが分かります。これで分析やQRadarの相関ルールも判定できそうですね。
flow3.png

まとめ

本記事では、AWS VPC FlowLogsをIBM QRadarに取り込んで、分析を行うための接続方法について記載しました。次回からは、取り込んだ分析の異常検知に取り組んでみたいと思います。

hisnakad
しがないセキュリティエンジニア。SIEMとクラウドに関して頑張っている最中。よろしくお願いします。 投稿内容は私個人の意見であり、所属企業・部門とは関係ありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away