はじめに
みなさまこんにちは。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ガイドの記載が文字しか無いため、分かり難いので図に起こしてみました。
手順をまとめると、以下のようになります。
-
AWS側設定
- AWS環境側でVPC Flow Logsを有効にする(VPC)
- VPC Flow Logs用のSQSキューを作成する(SQS)
- VPC Flow Logsが保管されているS3 BucketからSQSに発行する
-
IBM QRadar側設定
- DSMモジュール (Protocol Common / Amazon RESTAPIなど)の更新(※本記事では省略)
- Flow設定の有効化(Default_NetFlowが動いていればOK)
- DSM設定(DSM接続ガイドの通りに記載し、SQSキューを指定する)
AWS側設定
1. Amazon SQSキューの作成
Amazon SQSの画面に入り、VPC Flow Logsを一次受けするキューを作成します。
ここで、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キューに転送する設定を行います。
設定後、Amazon SQS側でキューが溜まることを確認できればOKです。
IBM QRadar DSM設定
IBM QRadarのDSMガイドの通り、設定を行います。
注意点としては、Universal DSMを用いる特殊なDSM設定になるのでご注意ください。
ここでは、認証方式としてVPC内にIBM QRadar (Community Edition)を構築しているため、IAMロールによるセキュアな接続方式を用いています。
「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側からトラフィック情報が確認できるはずです。
ダブルクリックして、フロー情報の詳細を見てみましょう。
AWS固有の情報である Interface名、Action、ENI IDなども取り込まれていることが分かります。これで分析やQRadarの相関ルールも判定できそうですね。
まとめ
本記事では、AWS VPC FlowLogsをIBM QRadarに取り込んで、分析を行うための接続方法について記載しました。次回からは、取り込んだ分析の異常検知に取り組んでみたいと思います。