Sysdig SecureのProcess Tree

立て続けに新機能がリリースされているSysdig Secureですが、本日 __Process Tree__ 機能がPreview版としてリリースされました。セキュリティイベントの調査を迅速に行うため、ユーザーからプロセスまでの攻撃の流れを示すプロセスツリーを表示し、プロセスの系統、コンテナとホストの情報、悪意のあるユーザーの詳細、影響などを表示できるようになりました。

Sysdig SecureのProcess Treeの詳細については、下記ブログをご参照ください。
https://sysdig.jp/blog/enriched-process-trees-threat-detection/

今回は、実際にProcess Treeを有効にするための手順をご紹介します。手順の詳細は下記ドキュメントをご参照ください。
https://docs.sysdig.com/en/docs/sysdig-secure/secure-events/#process-trees-preview


# Sysdig UIでのProcess Treeの有効化
Process Treeはプレビュー版として提供されているため、Sysdig UIで明示的に有効化する必要があります。
1. Sysdig UIにログインします。
1. UI左下の __アカウントメニュー（自分の名前） > Settings__ に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/ff1eafd9-9b15-8ad8-8958-e8d13e7dc9c5.png)
3\. Sysdig Labsで __Process Tree__ を有効化します。
![名称未設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/a3702dbd-fc02-44ab-fe29-85aa243c9b12.jpeg)

# Sysdig Agent 12.15のインストール
Process Treeを使用するには以下の要件を満たしている必要があります。
* Sysdig Agentのバージョンが12.15以上であること
* Sysdig Agentへの`enrich_with_process_lineage=true`のパラメータ設定

例として、helmコマンドにハイライトしたオプション記述を追加することで上記要件を満たすAgentをインストールできます（行頭の+は不要です）。
```diff_yaml
helm repo add sysdig https://charts.sysdig.com
helm repo update
helm install sysdig-agent --namespace sysdig-agent --create-namespace \
    --set global.sysdig.accessKey=<SYSDIG_ACCESS_KEY> \
    --set global.sysdig.region=<SYSDIG_SAAS_REGION> \
    --set nodeAnalyzer.secure.vulnerabilityManagement.newEngineOnly=true \
    --set global.kspm.deploy=true \
    --set nodeAnalyzer.nodeAnalyzer.benchmarkRunner.deploy=false \
    --set global.clusterConfig.name=sysdig-aws \
+   --set agent.image.tag=12.15.0 \
+   --set agent.sysdig.settings.enrich_with_process_lineage=true \
    sysdig/sysdig-deploy
```
:::note 
SYSDIG_ACCESS_KEYの値には、ご自身のSysdigアクセスキーを入力してください。
:::
:::note 
SYSDIG_SAAS_REGIONの値はご利用のSysdig SaaSリージョンにより異なります。下記ドキュメントをご参照ください。
https://docs.sysdig.com/en/docs/administration/saas-regions-and-ip-ranges/
:::

### Sysdig Agentインストール後にProcess Treeを有効化する場合
Sysdig Agentのバージョン12.15以上を既に使っていて、インストール時に`enrich_with_process_lineage=true`のパラメータ設定を指定しなかった場合は、Sysdig AgentのConfigMapに`enrich_with_process_lineage=true`を追記することで有効化できます。

```
kubectl -n sysdig-agent edit cm sysdig-agent
```
※ハイライトした行頭の+は不要です。
```diff_yaml
apiVersion: v1
data:
  dragent.yaml: |
+   enrich_with_process_lineage: true
    new_k8s: true
    k8s_cluster_name: sysdig-aws
    collector: ingest.us4.sysdig.com
    security:
      enabled: true
      k8s_audit_server_enabled: true
      k8s_audit_server_port: 7765
      k8s_audit_server_url: 0.0.0.0
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: sysdig-agent
    meta.helm.sh/release-namespace: sysdig-agent
  creationTimestamp: "2023-06-28T08:24:36Z"
  labels:
    app: sysdig-agent
    app.kubernetes.io/instance: sysdig-agent
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: agent
    app.kubernetes.io/version: 12.15.0
    helm.sh/chart: agent-1.8.8
  name: sysdig-agent
  namespace: sysdig-agent
  resourceVersion: "1289760"
```
Sysdig Agent Daemonsetをリスタートします。
```
kubectl -n sysdig-agent rollout restart ds sysdig-agent
```

# 脅威検知テスト
それでは、実際にProcess Treeが表示されるかをテストしてみます。
1. nginxをpodとして起動する
```
kubectl run nginx --image nginx
```
2\. ターミナルシェルにログインする
```
kubectl exec -it nginx -- bash
```
3\. Sydig UIにログインし、__Events > Events Feed__ に移動します。
4\. Terminal shell in containerイベントが検知され、イベント詳細にプロセスツリーが表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/17206a9a-b03a-fbd5-b40a-9fd241028d03.png)
5\.ターミナルシェルがDockerコンテナ内で起動されていることがProcess Treeからも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/60230ae1-2e27-8c94-a973-5c73e3bf3b4b.png)

# Log4ShellでのProcess Tree
いまだ深刻な脅威となっているLog4ShellでどのようにProcess Treeが表示されるかを確認してみましょう。

1. 標準入出力をリダイレクトするリバースシェル攻撃が行われていることを検知しています。プロセスツリーを見ると、`java`から派生した`bash`プロセス上で標準入出力のリダイレクトが行われているため、Log4Shellであることが推測できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/a725883c-0843-db96-0b45-494eaa42b6ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/d23f511c-be0b-0cdb-81ec-1f70184aa005.png)


2\. 同時に、`java`から`bash`が子プロセスとして起動したこと自体を、疑わしいイベントとして検知しています
![スクリーンショット 2023-06-29 10.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/465103a5-de04-13a3-ea26-72a0d295d379.png)


3\. さらに、攻撃者による/dev配下へのファイル書き込み（攻撃ツールやマルウェアを隠すために/dev配下に置くことが多い）をイベント検知していますが、Process Treeを確認することでLog4Shellによって確立したリバースシェル上での操作であることが一目瞭然です。
![スクリーンショット 2023-06-29 10.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/215d9385-75e6-c802-5298-2787f5066134.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/08cc73fd-2ba9-131d-cacf-815a0cdb3db6.png)

# まとめ
Process Treeによって、攻撃の流れを視覚的にわかりやすく把握できることが確認できました。