Cloud One Application Security(Preview)で悪意のあるファイルのアップロード記録・遮断を試してみた

2020.10.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサル部@大阪オフィスのTodaです。  

トレンドマイクロ社が提供しているCloud One Application Security(Preview)を試す機会が ありましたのでEC2で動作しているLaravel(PHP)を監視するように設定してみました。

Cloud One Application Security(Preview)の詳細は下記記事を合わせてご覧ください。

この記事は前回EC2にLaravel(PHP)を導入して検証をした続きになります。
オープンリダイレクト、リモートコマンド、不正なファイルアクセス検知については下記記事をご覧ください。

前提条件

  • 現在(2020/09/29時点)はPreview版であり、今後変更される予定があるため、ご注意ください。
  • Cloud One トライアル版アカウント登録し、30日無償にてトライアルで簡単にテストしています。
  • EC2はLAMP環境が整っている状態から利用しています。

悪意のあるファイルの記録・遮断を試してみる

CloudOneにはファイルアップロード時にウィルスチェックをして問題ファイルがあった場合に通知・遮断する機能がございます。
構築済みシステムにもプログラムを変えることなく組み込めるのがメリットになります。

ポリシー設定から Malicious File Upload が有効か確認

悪意のあるファイル対策の機能が有効になっているかを確認します。
無効の場合は、リスト横のスイッチを切り替えて有効化します。

CloudOneポリシー設定

ポリシー設定に移動

Malicious File Upload のポリシー設定画面に移動します。

Malicious File Upload のポリシー設定に移動

ルールの確認

初期状態では「ファイルの容量チェック」と「ウィルスチェック」が設定されています。

ウィルスチェック処理には圧縮ファイル内のチェックもございます。
メモリのバッファサイズはサーバのスペックやメモリの利用状況を確認して設定する必要がございます。

Malicious File Upload のポリシー設定

ルールを一部変更

ファイルエラー時にどのような警告が表示されるか試すためファイル容量を1MBに制限してみます。

Malicious File Upload のポリシー設定変更

Laravelに簡易にファイルアップを作成

ファイルアップを検証するため導入済みのLaravelに簡易のファイルアップ処理を作成します。
※下記プログラムはお試し用途のためバリデーション・不正対策をしておりません。

ルーティング設定

vi /routes/web.php

// 下記を最終行に追加
Route::post('/upload', 'HomeController@upload');

コントロール設定

vi /app/Http/Controllers/HomeController.php

// 下記を追加
/**
 * Upload Test
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Contracts\Support\Renderable
 */
public function upload(Request $request)
{
    $request->file('file')->store('');
    $file = (array)$request->file('file');

    return view('home')->with('file', $file);
}

ビュー設定

vi /resources/views/home.blade.php

<div class="card-body">
    @if (session('status'))
        <div class="alert alert-success" role="alert">
            {{ session('status') }}
        </div>
    @endif

    @if(!empty($result))
        {!! nl2br(implode("\n", $result)) !!}
    @endif

    <!— 追記 start —>
    <form method="POST" action="/upload" enctype="multipart/form-data">
        {{ csrf_field() }}
        <input type="file" id="file" name="file" class="form-control">
        <br />
        <button type="submit">アップロードテスト</button>
    </form>

    @if(!empty($file))
        {!! nl2br(implode("\n", $file)) !!}
    @endif
    <!— 追記 end —>
</div>

テストファイルを生成

今回1MB以上のファイルを準備するため mkfile コマンドを利用してテストファイルを生成します。
mkfileは任意のサイズを生成する事ができ、今回は2MBのファイルを生成します。

mkfile [容量指定] [ファイル名]

[容量指定]
 b(Byte), k(KB), m(MB), g(GB)

例) mkfile 2m test.txt

ブラウザでファイルをアップロード

先ほど簡易作成したファイルアップロードに生成したファイルをアップします。

Laravelファイルアップ

今回のケースではログへの記録のみ設定しているため実際にファイルはアップされます。
ファイルの容量チェックはLaravel側で対応をおこない、ログ記録のみおこなうことで
大容量ファイルを送ってくる攻撃者のIPを調べる用途に使うこともできます。

CloudOne ログ画面

悪意のあるファイルを遮断

ブロックに設定変更

Malicious File Upload の設定をREPORTからMITIGATEに変更します。

Malicious File Upload を遮断に設定

ブラウザでファイルをアップロード

先ほどと違いファイルアップロードは実行されずエラー画面が表示されるようになりました。

エラー画面

さいごに

Cloud OneのApplication Securityに関して試してみました。
設定をいろいろ試しておりますが、簡単にポリシーの設定ができるため運営者・管理者でも操作がやりやすいと感じております。 ポリシーを検討する際は開発担当者も交えて考える事をおすすめいたします。

今回は、悪意のあるファイルの記録・遮断について試してみました。
CloudOneにはEC2だけでなくLambdaに対して同等の保護機能を実装する事ができます。次回はLambda処理への実装をしてみます。