Sysdig Serverless Agentで保護しているAWS Fargateに対する脅威検知テスト

:::note Info
本手順は、Orchestrator Agentが不要になったServerless Agent **5.3.0**以上を対象とした手順になります。
:::

Sysdig Serverless Agentで保護しているAWS Fargateに対する脅威検知テストとして、下記Security Playgroundイメージから作成したFargateタスクを使用する方法をご紹介します。

https://github.com/sysdiglabs/security-playground

Security Playgroundでは、外部からcurlコマンドを介してコンテナ上で任意のコマンド実行が可能です。これをリモートコード実行の脆弱性を有するアプリケーションを模擬した被害者コンテナとして使用します。

SysdigのFargateランタイムセキュリティに関して詳しく知りたい方は、当社が7/28に実施したウェビナーの録画もご参照ください。

https://www.youtube.com/watch?v=0zDU7pGrwu0

# 環境のデプロイ
Terraformで以下をデプロイします。
●	Security Playground（擬似アタック被害コンテナ） + Sysdig Workload Agent

Security Playgroundを使ったサンプルのTerraformファイルは以下になります。

https://github.com/yotakeu/minimal-fargate-sp

:::note warn
必ずTerraformファイルの記述をよく確認し、ご自身の環境で使用しても問題ないことをご確認ください。Sysdig Serverless Agentのドキュメントは下記になります。
https://docs.sysdig.com/en/docs/installation/sysdig-secure/install-agent-components/ecs-on-fargate/
:::

上記Terraformファイルを使用すると、以下のような構成でデプロイされます（NAT gatewayは含みません）。デプロイ先のサブネットは変数設定で指定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/6261a232-9af1-9605-2e88-e81d9273bdb2.png)

## 変数の設定
Terraformファイルの`variables.tf`の値を、ご自身の環境に合わせて修正してください。

```terraform:variables.tf
# AWS Region
variable "region" {
  default = "ap-northeast-1"
}

variable "vpc_id" {
  default = "vpc-xxxxxxxxxxxx"
}

variable "subnet_a_id" {
  default = "subnet-xxxxxxxxxxxx"
}

variable "subnet_b_id" {
  default = "subnet-xxxxxxxxxxxx"
}

# タスクにPublic IPをアサインするか否か。Private Subnetにデプロイする場合はfalseに設定してください
variable "public_ip" {
  default = "true"
}

# Sysdig Access key
variable "access_key" {
  default = ""
}

# ご自身のSysdig SaaSリージョンの値を入力してください（下記はus2の場合）
variable "collector_url" {
  default = "ingest-us2.app.sysdig.com"
}

# タスク名などの前につけるプレフィックス
variable "prefix" {
  default = "test"
}

# Curlコマンドを打って疑似アタックを実行する端末のIPアドレスを入力してください
# このIPアドレスからWorkloadタスクに対する8080ポート接続を許可するSecurity Group設定を作成します
variable "source_ip" {
  default = "192.168.0.100/32"
}
```

:::note
**collector_url**の値はご利用のSysdig SaaSリージョンにより異なります。下記ドキュメントをご参照ください。
https://docs.sysdig.com/en/docs/administration/saas-regions-and-ip-ranges/
:::

:::note warn
プライベート レジストリから取得したイメージの場合は、コンテナ定義で`entrypoint`もしくは`command`を明示的に指定しないと、Agentをインストールできません。元のコンテナ定義の`entrypoint`と`command`の値が両方とも空の場合（もしくは記載自体がない場合）は、`docker inspect`コマンド等でコンテナイメージの`ENTRYPOINT`もしくは`CMD`の記述を確認し、明示的に記載してください。
:::

# デプロイ実施
```
terraform init & terraform apply
```
デプロイが完了すると、Serverless AgentをSysdig UI上で確認できます。
<b>Integrations > Data Sources > Sysdig Agents</b> に移動します。
Deployment Type が `fargate` のSysdig Agentが接続されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/b178f46e-6d51-7d7a-030e-b6282104f8ec.png)


# 脅威検知テスト
脅威検知では、以下のような経路でSysdig UIに検知イベント結果が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/01d0df9a-e98b-8df7-79b6-acc6c6c9204a.png)

下記curlコマンドの引数にFargate workload taskのPublicもしくはPrivate IPアドレスを指定します。
 
<b>攻撃例1：shadowファイルの読み込み</b>
```
curl <Workload_Task_IP>:8080/etc/shadow
```

<b>攻撃例2：/dev配下へのファイル書き込み</b>
```
curl -X POST <Workload_Task_IP>:8080/exec -d 'command=touch /dev/bbb'
```

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/91a5a4a5-340a-b332-0951-c08f2b549601.png)

Sysdig UIにログインし、**Events**に検知イベントが表示されていることを確認します。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/754c7da8-180b-45bb-d418-88d9de02b945.png)

 
# まとめ
Security Playgroundイメージを使用することで、Sysdig Serverless Agentで保護しているAWS Fargateに対する脅威検知テストを、簡単に実施できることが確認できました。