Trend Vision One – File Securty(SDK)を使ってS3のファイルをスキャンしてみた

2024.04.12

こんにちは、シマです。
皆さんはTrend Vision One - File Security(以降V1FS)を使っていますか?V1FSは、SDKやCLIで実装することで、アプリケーションやスクリプト内の任意のタイミングでマルウェアスキャンを実行できるものです。
そんなV1FSですが、以下のような案内が掲載されていました。

Trend Vision One - File Securityは、Trend Cloud One - File Storage Securityの後継製品となります

Trend Vision One – File Securityの「Storage」スキャンは、2024年6月ごろ利用開始予定です。

※一部抜粋

Trend Cloud One - File Storage Security(以降C1FSS)とは、AWSの観点ではS3にアップロードされたファイルをスキャンして不正なプログラム等が埋め込まれていないかチェックをするものでした。それがV1FSの「Storage」スキャンとして2024年6月頃から利用開始になるという内容である理解しました。
しかし、V1FSによるSDKでのファイルスキャンが可能であれば、「Storage」スキャンの利用開始を待たずともLambdaで実装すればS3のファイルスキャンができるのでは?と思い、試してみました。

構成図について

今回はシンプルにLambdaで実装していきます。スキャン対象S3バケットにイベント通知を設定し、Lambdaを実行します。Lambda内でV1FSのSDKよりスキャンを実装して、もし脅威のあるファイルだった場合は、隔離用バケットへ移動することをしています。

設定してみた

前提として、VisionOneの初期設定が済んでおり、S3バケットは作成済みであるとします。

Creditsの適用

「CLOUD SECURITY」→「File Security」の画面から右側にある歯車のアイコンをクリックします。

「Allocate credits to File Security scanning」を有効にし、今回は検証なのでスキャン数は「1」と入力し、「保存」ボタンを押下します。

APIキーの取得

過去のブログに記載していますので、以下の「2. ロールの作成とAPIキーの取得」よりAPIキーを取得してください。

Lambdaの作成

今回のコードは、V1FSの隔離サンプルとして提供されているものをそのまま流用します。

その準備として「amaas.grpc」ライブラリのLambdaレイヤーを作成する必要があります。今回はサクッと作るためにCloudShellで作成していきます。 AWS管理コンソールからCloudShellを起動し、以下のコマンドを実行します。

mkdir python
cd python
sudo pip install visionone-filesecurity -t .
cd ..
zip -r v1fs.zip python/

上記コマンドでv1fs.zipが作成されます。

[cloudshell-user@ip-10-130-60-190 ~]$ ll
total 5960
drwxr-xr-x. 8 cloudshell-user cloudshell-user    4096 Apr 12 06:22 python
-rw-r--r--. 1 cloudshell-user cloudshell-user 6095214 Apr 12 06:22 v1fs.zip

そのまま、以下コマンドを使ってLambdaのレイヤーを作成します。

aws lambda publish-layer-version \
    --layer-name test-v1fs \
    --zip-file fileb://v1fs.zip \
    --compatible-runtimes python3.9 \

AWS管理コンソールのLambda画面から「関数の作成」ボタンを押下します。

任意の関数名を入力し、ランタイムは「Python3.9」を選択し、「関数の作成」ボタンを押下します。
※CloudShellのPythonバージョンに合わせています。

「Layers」→「レイヤーの追加」をクリックします。

「カスタムレイヤー」を選択し、先程CloudShellから作成したレイヤーを選択し、「追加」ボタンを押下します。

デフォルトの実行ロールではS3へのアクセス権が不足しているので、権限を追加します。 「設定」→「アクセス権限」→ロール名をクリックします。

「許可を追加」→「ポリシーをアタッチ」をクリックし、S3へのアクセス権限を付与します。今回は検証なので、「AmazonS3FullAccess」を付与しちゃいます。
※実際は最小権限で付与してください。

Lambda関数の画面に戻り、コードを入力します。コードは先述の通り、V1FSの隔離サンプルとして提供されているものを流用しますので、以下のコードをコピーして、Lambdaのコード画面に貼り付け、「Deploy」ボタンを押下します。

このコード内で利用する環境変数設定します。「設定」→「環境変数」→「編集」ボタンを押下します。

必要な以下3つの環境変数を設定し、保存ボタンを押下します

QUARANTINEBUCKET  : 隔離用バケット名
TM_AM_SERVER_ADDR : antimalware.jp-1.cloudone.trendmicro.com
TM_AM_AUTH_KEY    : 「APIキーの取得」でコピーしたAPIキー

S3バケットのイベント通知設定追加

AWS管理コンソールのS3画面からスキャン対象S3バケットをクリックします。

「プロパティ」→「イベント通知を作成」をクリックします。

任意のイベント名を入力し、「すべてのオブジェクト作成イベント」を有効にします。

対象のLambda関数名を選択し、「変更の保存」ボタンを押下します。

試してみた

いつものEicarテストファイルと、無害なテキストファイルの2種類を用意し、スキャン対象S3バケットにアップロードしてみました。無害なテキストファイルはスキャン対象S3バケットに残り、EicarテストファイルはLambda関数の環境変数で指定した隔離用バケットへ移動していました。

最後に

今回は、V1FS(SDK)を使ってS3のファイルをスキャンしてみました。このブログを書き終わった現在、V1FSの画面を見てみるとTrend Vision One – File Securityの「Storage」スキャンのようなメニューがプレビュー版として追加されていました。

せっかく書いたブログなのでこのまま残しておきつつ、次回はこのプレビュー版について触れていこうと思っています。

本記事がどなたかのお役に立てれば幸いです。