Serverless Agents を利用して ECS on Fargate 環境で Sysdig Secure の悪意のあるファイル名の書き込みを検知してみた
こんにちはカスタマーソリューション部のこーへいです!
今回は、Sysdig Secure から提供されている Serverless Agents を利用して ECS on Fargate 環境で悪意のあるファイル名の書き込みを検知してみたので検知手順を共有します。
Sysdigとは
Sysdig is a container monitoring and security platform that provides visibility into containerized applications running on a variety of cloud and cloud-native platforms, including Kubernetes, Docker, and AWS. It helps you troubleshoot issues, secure your applications, and meet compliance requirements.
公式ドキュメントから引用
Sysdig(Secure,Monitor)は主にリアルタイムで動いているコンテナの脅威の検知・対応等をサポートするSaaS製品です。
ECS on FargateではECSタスク(コンテナ)で発生した脅威イベント内容がルールに当てはまると検知します(ECS on Fargateではブロックアクションは2023/10月時点では対応していません)。
ポリシーとルールについて
Sysdigでは監視対象のコンテナで発生した脅威イベントの検知を行うために、ポリシーとルールという概念が存在します。
ざっくり説明するとルールの集合体がポリシーであり、利用するポリシーを有効化することでSysdig側で検知を行えるようになります。
ルールを確認することでSysdigがコンテナで発生したどのような挙動に検知するかを確かめることができます。
今回の検証対象ルール
「Sysdig Runtime Threat Intelligence」ポリシーの「Malicious filenames written」ルールです。
詳細は後述します。
準備
準備は以下の記事を参考しました。
今回私が準備のために参考した手順は上のQiitaの記事ですが、本記事内ではわかりやすさ重視で下の記事を引用させていただいております。
構成に大きな差はございませんので、好みの手順をご利用ください。
前提条件
- AWS アカウントを持っていること
- Terraform の実行環境があること
- Sysdig Secure のアカウントを持っていること
Sysdig Secure の導入については下記ブログも参照ください。
構成図
Serverless Agents を利用して ECS on Fargate 環境で Sysdig Secure のマイニング検知をしてみたより引用
通信要件や環境構築手順やリソースについてはこちらの記事をご参照ください。
検知させてみる
ポリシーとルールの確認
まずはSysdig SECUREにログインし、ランタイムポリシー「Sysdig Runtime Threat Intelligence」 > ルール「Malicious filenames written」を選択し詳細を確認してみましょう。
condition: open_write and fd.filename in (malicious_filenames) and not fd.filename in (user_known_filenames)
大事なところは「condition」の箇所になりますが、要約すると「malicious_filenames」リストに記載されており、「user_known_filenames」リストに記載されていないファイル名の書き込みイベントに対して検知を行います。
続けて、conditionに記載されている「malicious_filenames」をクリックすると上記が表示されます。
画面中のitemsに記載されているファイル名の書き込みが検知対象となりますので、今回は「kinsing」ファイルを作成し検知させてみましょう。
「kinsing」ファイルを作成し検知させてみる
ランタイムポリシー「Sysdig Runtime Threat Intelligence」を有効化しつつ、用意している踏み台サーバー(EC2)にログインし、対象のコンテナへファイルの書き込みを行います。
まずは攻撃の前段階として、実際に攻撃対象のコンテナに対してコマンドを実行できるか、lsコマンドで確認してみましょう。
※以下の<攻撃対象のPrivate IP アドレス>は、「Application」 コンテナを含むECSタスクのプライベートIPアドレスに置き換えてください。
curl <攻撃対象のPrivate IP アドレス>:8080/exec -d 'command=ls /'
すると、「Application」コンテナのルートディレクトリ配下を確認することができました。
続けて以下のコマンドを実行して「kinsing」ファイルを作成し、再びlsコマンドを実行してみましょう。
curl -X POST http://10.0.2.57:8080/exec -d 'command=touch /kinsing' curl <攻撃対象のPrivate IP アドレス>:8080/exec -d 'command=ls /'
「kinsing」ファイルが作成されていることがわかりました。
Sysdig SECUREに戻ってみると、kinsingファイルの作成がランタイムポリシー「Sysdig Runtime Threat Intelligence」内のルール「Malicious filenames written」に反応し検知を上げているのを確認できました。
悪意のあるファイル名を定義し検知させる
次は「malicious_filenames」リストに独自のファイル名を追加することで、任意のファイル名に対して検知を上げられるか確認してみます。
再びconditionに記載されている「malicious_filenames」をクリックしましょう。
「Append」をクリック。
なんでも良いですが、今回は「test.txt」ファイルを悪意のあるファイル名として追加しました。
「Save」をクリックすると、上記のように「test.txt」が追加されていることがわかります。
再び踏み台サーバーにログインし、以下のコマンドを実行し「Application」コンテナに「test.txt」ファイルを作成しましょう。
curl -X POST http://10.0.2.57:8080/exec -d 'command=touch /test.txt' curl <攻撃対象のPrivate IP アドレス>:8080/exec -d 'command=ls /'
「test.txt」ファイルの作成が確認できますね。
Sysdig SECUREに戻って発生イベントを確認すると、「test.txt」ファイルの作成で検知が上がることを確認できました。
まとめ
ランタイムポリシー「Sysdig Runtime Threat Intelligence」内のルール「Malicious filenames written」は事前に悪意のあるファイル名として定義したファイルの書き込みが行われた際に検知を出すというルールでした。
こちらのルールを利用することで、実際に攻撃を受けた際にマルウェア等の作成に素早く気づくことが可能となります。
他のルールも今後試してブログ化予定ですのでお楽しみに!