【AWS+Docker】OWASP Benchmarkの環境構築

SaaS型Webアプリ診断ツール「AeyeScan」を運営している株式会社エーアイセキュリティラボが、セキュリティテストの自動化、脆弱性診断の内製化、AI/機械学習などの技術情報の共有を目的とした記事です。
AeyeScanの情報はこちら https://www.aeyescan.jp
エーアイセキュリティラボの情報はこちら、https://www.aeyesec.jp

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)

こんにちは。株式会社エーアイセキュリティラボ　カスタマーサクセス担当　日髙です。
今回は、OWASPから提供されている「OWASP Benchmark」というアプリケーションの構築方法と構築時の注意点をご紹介します。

# 環境
この記事では、AWS環境（linux）のDockerに環境を構築します。
Amazon linuxのバージョン：Amazon Linux release 2 (Karoo)
dockerのバージョン：20.10.7
OWASP Benchmarkのバージョン：v1.2

# OWASP Benchmarkとは
OWASP Benchmarkは、OWASPというWebアプリケーションセキュリティに関するコミュニティ団体から提供されているWebアプリケーションです。
この「OWASP Benchmark」には、たくさんの脆弱性が埋め込まれており、その名の通り、弊社で開発しているような脆弱性診断ツールのベンチマークなどの用途として利用されています。

詳しくはこちら https://owasp.org/www-project-benchmark/

今回の記事では、環境構築時につまづいた点なども含めて、ご紹介していきます。

# 構築手順

## インスタンスの作成
まずは、インスタンスの作成です。
基本的には、デフォルトの設定で作成しますが以下の点に注意してください。

### インスタンスのAMI
Linux環境に構築を行うためOWASPインスタンスのAMIは、以下を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/cc7fde8c-d5a4-ae68-dc84-7c28ecc4446e.png)

### インスタンスタイプ
インスタンスタイプの選択では、以下の「m4.large」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/4fc0894d-65a6-db28-4366-9e32d5dbc12c.png)

::: note warn
インスタンスタイプで無料枠の「m2.micro」を選択した場合、後ほどの手順で失敗しました。必ずしも「m4.large」を選択しなければならないわけではありませんが、同等のスペックを選択することお勧めします。
:::

### セキュリティルール（インバウンドルール）の変更
デフォルトのSSHの22番ポートに加えてOWASP Benchmark用のポートである8443番ポートに対して外部からアクセス可能となるよう設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/b9afd010-9121-881a-2593-802fcbfd2317.png)


## インスタンスへログイン

SSHにて、インスタンスに接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/d86d1797-0cec-44de-be8b-7c2310ea483a.png)

## GitとDockerのインストール

以下のコマンドを実行します。
```
$ sudo yum install git
$ sudo yum install -y docker
```

## Dockerの起動
以下のコマンドを実行します。
```
$ sudo service docker start
```

## OWASP benchmarkのクローン
githubのリポジトリからベンチマークのソースをクローンします。
```
$ git clone https://github.com/OWASP-Benchmark/BenchmarkJava
```

## Dcokerイメージの作成
OWASP benchmarkでは、以下のリポジトリ内の「VMs」フォルダに
最新のBenchmarkプロジェクトをビルドするするためのDockerファイルやシェルが用意されています。

以下のコマンドでビルド用のシェルを実行します。
```
$ cd BenchmarkJava/VMs
$ sudo ./buildDockerImage.sh
```
作成したDockerイメージを確認するため以下のコマンドを実行します。
```
$ sudo docker images
```
benchmarkというイメージが作成されているのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/81a08737-1bd2-7bc9-9c16-815f28d80340.png)

::: note warn
通常の手順ですと、このまま同ディレクトリ内の「runDockerImage.sh」を実行して、OWASP benchmarkを起動しますが、「runDockerImage.sh」で起動した場合、一部の脆弱性で**一度攻撃が成功すると以降再現しなくなるという事象**が発生しました。そのため、以降の手順の通り、OWASP Benchmarkの起動を**root以外**のユーザで起動するようにします。
:::

## benchmarkイメージからコンテナを起動してコンテナに入る
以下のコマンドを実行します。
```
$ sudo docker run -t -i -p 8443:8443 --rm benchmark /bin/bash
```

## /owasp/BenchmarkJava配下のtargetフォルダをリネーム
ビルド時に作成される「target」フォルダが存在していると別ユーザで起動した際に、
起動に失敗するのであらかじめリネームしておきます。

以下のコマンドを実行します。
```
$ cd /owasp/BenchmarkJava
$ mv ./target ./target_bk
```

## ユーザを切り替える
owasp benchmarkには、元々「bench」というroot以外のユーザが存在しているため、
benchユーザに切り替えます。

以下のコマンドを実行します。
```
$ su bench
```

## 起動シェルを実行する
benchユーザで起動シェルを実行します。

以下のコマンドを実行します。
```
$ ./runRemoteAccessibleBenchmark.sh
```

シェルを実行後、以下が表示されればOWASP Benchmarkが起動しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/39464863-1a3c-a092-3206-657b8af5a31d.png)


## OWASP Benchmarkへ接続
ブラウザから以下へアクセスします。

https://[AWS_IP]:8443/benchmark/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/71bdb934-fc74-ccba-2dee-09bfa3d90c26.png)


## コンテナからデタッチする
以上の手順で、OWASP Benchmarkが起動することを確認できました。
ただし、コマンドプロンプトをそのまま閉じてしまうと起動しているdockerコンテナも停止してしまいます。ツールなどで長時間スキャンを実行する場合は、起動したままにしておく必要があります。

そのため、コマンドプロンプトを閉じる前に以下のコマンドを実行することでコンテナからデタッチすることが可能です。
```
$ [control-P] [control-Q]
```

# おわりに
今回は、「OWASP Benchmark」の構築方法をご紹介しました。
「OWASP Benchmark」は、脆弱性ツールの検証以外にも、脆弱性の仕組みを理解するコンテンツとしても利用できますので、ぜひご活用いただければ幸いです。

# 参考文献
OWASP Benchmark Project
https://owasp.org/www-project-benchmark/
よく使うDockerコマンド
https://qiita.com/tera_shin/items/8a43e904bd15990d3129
Dockerコンテナからのデタッチ
https://tech.withsin.net/2015/09/30/docker-container-detach/


AeyeScanのトライアル、脆弱性診断の自動化のご相談は[こちら](https://www.aeyescan.jp/)
[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)