Falco Cloudによるエージェントレスでのクラウド脅威検知

Sysdig Secureでは、AWS CloudTrailのログをFalcoプラグインを使用してモニタリングすることにより、クラウドの設定ミスによる脅威をほぼ __リアルタイム__ で検知することができます。これにより、定期的にクラウド設定のチェックをかける従来の静的CSPM（クラウドセキュリティポスチャーマネジメント）の弱点であった「リアルタイム性の欠如」を補完することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/20ed3389-db2a-e1a8-3f84-8ecf4f641781.png)
従来は、AWS CloudTrailのログをFalcoプラグインを使用してモニタリングするために、Cloud ConnectorというコンピュートインスタンスをECSタスクもしくはAppRunnerとしてお客様のAWS環境上にデプロイする必要がありました。
https://github.com/sysdiglabs/terraform-aws-secure-for-cloud/tree/master/examples/single-account-ecs/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/803f2553-c461-157b-8626-8fc7fbde810d.png)
今回、このFalcoプラグインをSysdig SaaSバックエンド側（図の右下）で稼働させることにより、お客様のAWS環境にCloud Connectorをデプロイすることなくエージェントレスで、AWS CloudTrailのログをモニタリングすることが可能になりました。これにより、クラウド脅威検知のために必要となるお客様側での準備の手間とリソースが大幅に削減されます。

今回は、Falco Cloudによるエージェントレスでのクラウド脅威検知のインストール手順をご紹介していきます。本機能は現在プレビュー版として提供されています。詳細はドキュメントをご参照ください。
https://docs.sysdig.com/en/docs/installation/sysdig-secure/connect-cloud-accounts/aws/agentless-install/

# クラウド脅威検知のインストール
1. Sysdig UIにログインし、__Integrations > Data Sources > Cloud Accounts__ に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/f40a6d84-4fb2-af64-ce5d-41558f911043.png)
2. 画面右上の __Connect Account__ ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/905ba10d-4373-8656-9895-98f0819b7798.png)
3. __AWS__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/6180c942-c171-4646-ffa7-26b1dbe4fa0b.png)
4. __Threat Detection__ を選択し、__Next__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/80821013-1bb6-6ae6-0878-453b8e49cf42.png)

:::note info
__クラウドセキュリティポスチャーマネジメント（CSPM）__ のみインストールする場合や、 __クラウドセキュリティポスチャーマネジメント（CSPM） + クラウド脅威検知__ の両方をインストールする場合も、エージェントレスで可能です。
:::

:::note warn
__クラウド基盤権限管理（CIEM）__ 機能を使用する場合は、従来どおり __Cloud Connectorのインストールが必要__ になります。
:::

5\. 今回はAWSシングルアカウントにインストールするので、__Single__ を選択し、__Next__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/909d874a-612f-2050-e231-2a2f6c7a21f9.png)
6\. 今回はTerraformを使ってインストールするので、__Terraform__ を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/c993778e-eaa6-c94e-4d20-a185467f50b7.png)
7\. 記載されている、クラウド脅威検知をデプロイするための前提条件を確認します。

:::note info
__前提条件__
* 対象のAWSアカウントに __アクティブなCloudTrailが存在__ すること。
* インストールコードをデプロイするマシンに Terraform (__version 1.3.1+__ ) がインストールされていること。
* Terraform AWS ProviderがAWSの __Admin権限__ を使用するように設定されていること。
:::

:::note warn
__CloudTrail__ はクラウド脅威検知を __Terraformでデプロイする前__ に存在している必要があります。デプロイ後にCloudTrailを作成してもイベント検知できないのでご注意ください。
:::

8\. __Instrumented AWS Regions__ で、イベントの送信元となるAWSリージョンを選択します（複数選択可）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/2d6ec022-1fb9-980b-eb89-3b8dcfacc230.png)
9\. 表示されたTerraformコードをコピーし、`main.tf`として保存します。
``` main.tf
provider "aws" {
  region = "ap-northeast-1"
}

module "single-account-threat-detection" {
  source                  = "draios/secure-for-cloud/aws//modules/services/event-bridge"
  target_event_bus_arn    = "<省略＞"
  trusted_identity        = "<省略＞"
  external_id             = "<省略>"
  name                    = "sysdig-secure-cloudtrail-8tvj"
  deploy_global_resources = true
}
```
10\. 下記コマンドでTerraformを実行し、Sysdig UI上で __Next__ をクリックします。
```
terraform init && terraform apply
```
以下のリソースが作成されます。
```
resource "aws_cloudwatch_event_rule" "sysdig"
resource "aws_cloudwatch_event_target" "sysdig" 
resource "aws_iam_role" "event_bus_invoke_remote_event_bus"
```
11\. 自身の __AWSアカウントID__ を入力して __Complete__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/7b1ab72c-5793-4e28-b148-f8a25c90613c.png)

12\. 自身のAWSアカウントが登録されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/c2d9dbc6-6355-7646-068a-e22fe3f2d49f.png)

13\. AWSマネージメントコンソールにログインし、__Amazon EventBridge__ に移動します。
14\. クラウド脅威検知用の __EventBridgeルール__ が作成されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/1d7587ea-ab80-7f13-9748-81f2ec38f426.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/d2550adc-0034-fd46-6e9a-336d83b2de17.png)

# クラウド脅威検知テスト
今回は、S3バケットのブロックパブリックアクセス設定が削除されたことを検知できるかをテストします。
1. Sysdig UIにログインし、__Policies > Threat Detection > Runtime Policies__ に移動します。
1. __Sysdig AWS Notable Events__ ポリシーが有効になっていることを確認します。

:::note warn
AWS CloudTrail用ポリシーのカテゴリが２つありますが、__赤いロゴがFalco Cloud（エージェントレス）用__ で、黒いロゴが従来のCloud Connector用のポリシーになります。今回は赤いロゴのPolicyを使用します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/e9fe5a2a-b937-46e1-2dd4-0230abfcb1a1.png)
__Sysdig AWS Notable Events__ ポリシーは、S3バケットのブロックパブリックアクセスが削除されたことを検知するFalcoルールを含んだポリシーになります。


3\. AWSマネージメントコンソールから、S3バケットをデフォルト設定で作成します。
4\. 作成したS3バケットのブロックパブリックアクセスを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/fdbfe748-0ed7-b3e3-dc42-f766aa1e624a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/5d1a2f30-6050-f042-d6ac-1b4b628d3cc5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/9f06a350-98c5-a81b-6469-b638ec52f07c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/51ef2c64-0d11-41ec-2a90-a042f2ffe673.png)
5\. Sysdig UIにログインし、__Events > Events Feed__ ページに移動します。
6\. __Delete Bucket Public Access Block__ イベントが検知されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/11156423-9827-7ba2-3789-5bc1427121eb.png)

:::note info
通常、CloudTrail は、API 呼び出しから5分以内にイベントを送信するので、S3設定変更からイベント検知まで5分程度のタイムラグが生じることがあります。これはAWS側の仕様によるものです。
https://aws.amazon.com/jp/cloudtrail/faqs/#:~:text=Q%3A%C2%A0How%20often%20will%20CloudTrail%20deliver%20log%20files%20to%20my%20Amazon%20S3%20bucket%3F
:::

# まとめ
Sysdig SecureのFalco Cloudによって、エージェントレスでのほぼリアルタイムのクラウド脅威検知が簡単に実現できることを確認できました。