脆弱なアプリケーション(DVWA)をOCIにデプロイする

[DVWA(Damn Vulnerable Web Application)](https://github.com/digininja/DVWA)は、ベーシックなWEBサイトへの攻撃手法を体験し学ぶことができる古くからあるPHP/MySQL製の脆弱性のあるWEBアプリケーションです。
クロスサイトスクリプティングやSQLインジェクションなどの様々な攻撃手法がWEBアプリ上でどのように動作するのか、というのを実際に体験できるので視覚的に理解しやすいかと思います。

WAF(Web Application Firewall)があると、WEBアプリの脆弱なコードを修正しなくとも、WAFがWEBアプリのフロントエンドで攻撃を含むアクセスを検知し遮断してくれます。

OCIにもWAFがありますが、Global WAFと呼ばれるエッジポリシーと、Regional WAFのWAFポリシーという2種類あり、それぞれ設定や運用が若干異なります。

今回は、このアプリを保護する役目として2種類のWAFを構築するための設定手順や動作について紹介します。

まず初めに、DVWAのアプリをOCI上にデプロイします。インストールは、GitHubのReadmeにありますが、さくっと作成したいので、最小のVMインスタンスを作成し手動でセットアップしてきます。
※公式はDebian。Oracle Linuxでむりくり動作させて、代用しています。(2023年6月時点では動作確認)


## DVWAのVMインスタンスを作成
- イメージは、Oracle Linux7.9、シェイプは最小1coreでOK
- サブネットはパブリック、拡張オプションからOracle CloudエージェントにあるOS管理サービス・エージェントのチェックを外す(必須)

※VMは、パブリックに公開することになるので、必ずテスト用として新規作成し、必要なくなったら忘れず削除

## DVWAのインストールと設定

```sh
＃VMにOPCでログイン

#Fierwall無効
sudo systemctl stop firewalld
sudo systemctl disable firewalld

#SE Linux無効 
sudo setenforce 0
sudo vi /etc/selinux/config
-> SELINUX=disabledにする

#HTTP, PHPインストール
sudo yum install httpd  php php-pdo php-mysqlnd php-cli php-gd
sudo systemctl start httpd
sudo systemctl enable  httpd

#DVWAダウンロード
wget https://github.com/digininja/DVWA/archive/master.zip
unzip master.zip
sudo cp -R DVWA-master/ /var/www/html

#コンフィグ有効化
cd /var/www/html/DVWA-master/config
sudo mv config.inc.php.dist config.inc.php

#不要なパッケージ(mysql 8.0,postfix)を削除
#パッケージのバージョンが更新されているかもしれないので、rpm -qaで見つける
sudo rpm -e postfix-2:2.10.1-9.el7.x86_64
sudo rpm -e mysql-community-libs-compat-8.0.33-1.el7.x86_64
sudo rpm -e mysql-community-libs-8.0.33-1.el7.x86_64
sudo rpm -e mysql-community-client-plugins-8.0.33-1.el7.x86_64
sudo rpm -e mysql-community-common-8.0.33-1.el7.x86_64

#MySQL 5.7をインストール
wget https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm
sudo vi /etc/yum.repos.d/mysql-ol7.repo
-> 8.0をすべてenabled=0に、5.7をenable=1に変更する
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install mysql-community-server

#MySQL起動
sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service
sudo systemctl status mysqld.service

#Mysqlパスワードチェック無効
sudo vi /etc/my.cnf
 -> validate-password=OFFを一番最後に追記
sudo systemctl restart mysqld.service

#MySQLパスワード変更
sudo cat /var/log/mysqld.log | grep password
 -> temporaryのパスワードが表示されているはず
mysql_secure_installation
 -> パスワード入力, パスワードをmanagerに変更

#DVWAのMySQL接続情報の変更
sudo vi /var/www/html/DVWA-master/config/config.inc.php
 -> ユーザー名、パスワードを変更
    $_DVWA[ 'db_user' ]     = 'root';
    $_DVWA[ 'db_password' ] = 'manager';

```

- DVWAにアクセスし、セットアップを実行
http://VMのPublicIP/DVWA-master/setup.php
画面下部のCreate Databaseをクリックし、Setup sccessfulが表示されればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/064d11e7-847c-8729-70de-491c834ec2e6.png)

- DVWAへのログインできれば完了
http://VMのPublicIP/DVWA-master/login.php
Username -> admin, Password -> password
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/d6513a1c-1352-3bec-b074-80c987f07306.png)

## DVWAの動作確認
- DVWAへのログイン
http://VMのPublicIP/DVWA-master/login.php
Username -> admin, Password -> password
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/d6513a1c-1352-3bec-b074-80c987f07306.png)

- クロスサイト・スクリプティングとSQLインジェクションを試してみる

- DVWA SecurityをImpossibleからLowに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/3407c7b0-8b86-e5d7-fc7e-ad03d8a47d1a.png)

- 左メニューのXSS(Reflected)を選び、以下のJavascriptをフォームに入力してSubmit
※QiitaはJavascriptを受け付けないので実際のスクリプト部分は画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/2edf1c1a-596e-3b90-7f42-f05f4e82d4cf.png)

- Javaスクリプトが実行できてしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/f9f6b10b-c6dc-3954-ca04-2bbebe618972.png)


- 同様に左メニューから、SQL Injectionを選び下記のコマンドを入力しSubmit
' OR 1=1 #
' union select null,@@version #

- MySQLのユーザー名やバージョン情報が表示されてしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/a5f99e67-4ad0-ab00-78c9-e04776caabf5.png)

攻撃のやり方は、ググると色々な情報が見つかると思います。
次回は、OCIのWAFを構築し、こういった攻撃をWAFが検知し遮断させるという設定手順を紹介します。
 
[OCI WAFで脆弱なアプリを保護する - WAFポリシーの場合 -](https://qiita.com/western24/items/36862526216d6eb886a8)
[OCI WAFで脆弱なアプリを保護する - エッジ・ポリシーの場合 -](https://qiita.com/western24/items/e9b51ce0f90415629a9d)