Cloud One Application Security(Preview)をWebサーバのPHPに組み込んでみた

2020.09.24

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

トレンドマイクロ社が提供しているCloud One Application Security(Preview)を試す機会がありましたのでWebサーバのPHPに導入をして監視するように設定してみました。
Cloud One Application Securityの詳細は下記記事をご確認ください下さい。

前提条件

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

PHPのプログラムについて

検証用としてLaravelを利用しています。
LaravelはPHPで作られたオープンソースのフレームワークで、MITライセンスの下でリリースされており誰でも利用する事が可能です。
今回はその中でLTS(Long Term Support) の対象になっているバージョン6を使っています。

https://readouble.com/laravel/6.x/ja/

監視の導入

監視用のプログラムはPHP拡張モジュールとして導入を行います。
下記手順で導入をしております。

Cloud Oneにグループの追加

管理画面にログインをしてApplication Securityを選択、CREATE NEW GROUPボタンを押して新しいグループを追加します。

CloudOne グループ追加

KeyとSecretを取得

グループの登録が完了するとKeyとSecretが表示されます。
上記はモジュールのインストール時に必要な情報となります。

CloudOne keyとSecret

モジュールダウンロード

Cloud Oneのサイトから監視用のモジュールを取得します。
対応言語はPython, NodeJS, Java, PHPの4種類があります。
※現在サポートOSはLinuxのみとなります。

https://cloudone.trendmicro.com/docs/application-security/downloads/

PHPはバージョンにより取得するファイルが変わりますのでバージョン確認をおこないファイルを決定します。

php -v 
  
PHP 7.4.9 (cli) (built: Aug 21 2020 21:45:11) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies

今回はPHP7.4が入っているため一覧から対象の.soファイルを選択、ダウンロードします。
※wgetはファイルを取得するコマンドになります。

sudo wget https://files.trendmicro.com/products/CloudOne/ApplicationSecurity/1.0.2/agent-php/trend_app_protect-x86_64-Linux-gnu-4.1.9-20190902.so

モジュールを格納

ダウンロードしたファイルをPHPのモジュールが格納されているフォルダに移動します。
私の環境では /usr/lib64/php/modules に移動されます。

sudo mv ./trend_app_protect-*.so "$(php -r 'echo ini_get ("extension_dir");')"/trend_app_protect.so

モジュールの読み込み設定

PHPでモジュールが呼び出しできるように設定を追加します。
記載内容の中にあるKeyとSecretはグループ作成時に取得した物を利用します。

sudo vi /etc/php.d/50-trend_protect.ini

; Enable the extension
extension = trend_app_protect.so

; Add key and secret from the Application Protection dashboard
trend_app_protect.key    = [サイトで取得したKey]
trend_app_protect.secret = [サイトで取得したSecret]

Webサーバを再起動

PHPの設定を反映するためWebサーバを再起動します。

sudo systemctl restart httpd

導入確認

再起動をおこなった後に phpinfo を使ってモジュールの状態を確認します。
trend_app_protect の表記があれば正常に導入ができております。

phpinfo

合わせて監視対象のサイトにアクセスした後に管理画面に表示されているリクエストのグラフが上がっているかを確認します。

CloudOneグラフ

オープンリダイレクトの判定を試してみる

オープンリダイレクトとは利用しているサイトから別ドメインのサイトに自動で移動する仕組みです。
運営者が想定している移動の場合は良いのですが、意図しない移動があった場合に通知・ブロックする事ができます。

オープンリダイレクトの設定確認

作成したフィルタグループのオープンリダイレクト設定を確認します。

オープンリダイレクト設定1

初期状態では全てのリダイレクトが対象となっています。

オープンリダイレクト設定2

意図的にオープンリダイレクト設定

Laravelに別ドメインへのリダイレクトを意図的に設定します。
下記の設定を入れることで /openredirect を指定する事で別ドメインにリダイレクトされます。

vi /routes/web.php

// 下記を最終行に追加
Route::redirect('/openredirect', 'https://[別ドメイン]/', 302);

ブラウザでURLにアクセス

アクセスをするとCloud One画面上でOpen Redirectのログが表示されました。
このときリダイレクトはブロックされず移動します。

CloudOneログ1

詳細を確認することでアクセス元IPや移動先などを把握できます。

CloudOneログ2

オープンリダイレクトをブロックする

ブロックに設定変更

オープンリダイレクトの設定をREPORTからMITIGATEに変更します。

オープンリダイレクト設定3

ブラウザでURLにアクセス

先ほどと違いリダイレクトは行われずエラー画面が表示されるようになりました。

リダイレクトエラー

Cloud One画面上では移動をしていないためプライオリティがmediumの状態で表示されています。

CloudOneログ3

オープンリダイレクトを一部許可する

ポリシー設定に移動

オープンリダイレクトのポリシー設定画面に移動します。

オープンリダイレクト設定4

ルールの追加

URLの判定ルールに新しいルールを追加します。右上の+ボタンをクリックします。

オープンリダイレクト設定5

ルールの設定

対象のURLを追加します。指定には*でワイルドカードの指定ができます。

オープンリダイレクト設定6

ルールの反映

上記登録をすると一覧に追加されます。
一覧は上部のルールが優先して反映されます。順番を調整して保存をします。

オープンリダイレクト設定7

実際にアクセス

上記手持ちのドメインで試したところ正常にリダイレクトができました。
「*://example.com*」の指定の場合、HTTPまたはHTTPSでexample.comドメインのURLはリダイレクトが許可されるようになります。

さいごに

Cloud OneのApplication Securityに関して試してみました。
利用してみた感想ですがソフトウェアのUIがシンプルでマニュアルなしでも簡単に操作できた点が個人的にグットでした。 ログの一覧は見やすいのですが、1件ずつチェックをする場合にどこまで見たか把握しにくい点がございました。 チェックボックスで簡易なマークをつけられて、検索条件で絞れたらログの把握がしやすいように思いました。
今回はオープンリダイレクトのみ試してみましたが、他にもIPプロテクション、ファイルアップロード、リモートコマンドなど監視項目がサポートされています。
上記は試して別記事でご案内させていただきたいと思います。