連日投稿チャレンジ16日目です。
SQLインジェクション,XSS等を気軽に試せる環境構築を実施しました。
今回の目的
day15までのチャレンジでは、Webサイトの情報を集める点にフォーカスしたスクリプトを書いてきました。
ただ現状、検証の度に「このリクエストって、既存のWEBサーバへ安全に試せるのかな」を調べていて面倒だし、そもそも「SQLインジェクションみたいな攻撃の検証って、どうやったら合法的に試せるの?」も分からない。
学んだことを実践したいけど、他人のサイトを攻撃するわけにはいかない。
でも、検証できる場を毎回作るのもとても面倒
という事で、安全に実験できる「砂場」を作る事にしました。
Day16チャレンジでは、自分専用の脆弱性診断ラボを構築することにします。
このチャレンジについて
目的: セキュリティエンジニアとしての技術力向上
手段: シェルスクリプト作成を通じて学習
実施する事: 脆弱性診断、環境構築、ツール開発
目次
- 実行結果
- 実行環境
- DVWAってなんぞ
- 開発中の気づき
- コード全文
- コードの詳細な解説
- 実行方法
- まとめ
実行結果
最終的に、EC2インスタンス上でDVWAコンテナを起動し、自分のブラウザから http://<EC2のIPアドレス>
にアクセスして、以下のログイン画面が表示されれば成功です。
+----------------------------------------------------+
| |
| Damn Vulnerable Web Application |
| |
| Username: [ admin ] |
| Password: [ password ] |
| |
| [ Login ] |
| |
+----------------------------------------------------+
実際のキャプチャだとこんな感じです。
実行環境
- クラウド: AWS EC2 (Amazon Linux)
- 使用技術: Docker
DVWAってなんぞ
Damn Vulnerable Web Application (DVWA) は、セキュリティ専門家がスキルを試したり、開発者が安全なコーディングを学んだりするために意図的に脆弱に作られたWebアプリケーションです。SQLインジェクションやXSSなど、多くの一般的な脆弱性が含まれています。
ちなみに、Dockerをインストールすれば、同時にDVWA使える。
開発中の気づき
なんだかんだで初めてDockerを触ったので、単純な環境構築だけでは終わらず。
備忘録的にトラブルシューティングについて記載残しておく。
-
気づき1: ターミナルが「固まる」問題
-
問題:
docker run -p 80:80 vulnerables/web-dvwa
を実行したら、ログが延々と表示され続け、ターミナルの操作ができなくなりました。やべぇ固まった??? - 原因: 実際のところ、これはフリーズじゃなくてコンテナがフォアグラウンドで動作し、そのログをリアルタイムで表示している状態。だからターミナルを通常通り操作したいなら、もう1画面立ち上げないといけない。デバッグには便利だけど。うーーん。
-
解決策: コンテナをバックグラウンドで実行する「デタッチモード」が、
-d
フラグをコマンドに追加するだけで実行できるそな。コンテナを裏で動かしつつ、ターミナルの操作を続けられるようになります。
-
問題:
-
気づき2: 「ポートが既に確保されている」エラー
-
問題:
-d
フラグを追加してdocker run -d -p 80:80 ...
を実行したら、今度はport is already allocated
というエラー(実際はエラーじゃない)。 - 原因: 最初に実行したコンテナが、ターミナルを閉じてもバックグラウンドで生き続けており、ポート80を掴んだままだったのが原因。
-
解決策: まず
docker ps
コマンドで現在実行中のコンテナを確認し、IDを特定。次にdocker stop <コンテナID>
で古いコンテナを停止することで、ポートを解放できました。これ覚えておく。$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ************ vulnerables/web-dvwa "/main.sh" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp admiring_newton
-
問題:
コード全文
# 最終的にEC2インスタンス上で実行するコマンド
sudo docker run -d -p 80:80 vulnerables/web-dvwa
コードの詳細な解説
前述したdocker run
コマンドですが、いくつかオプションがあり、それぞれの意味は以下の通りです。
-
sudo docker run
: Dockerコンテナを管理者権限で起動します。 -
-d
: コンテナをバックグラウンドで実行する「デタッチモード」のオプションです。 -
-p 80:80
: 「EC2インスタンスのポート80」と「コンテナのポート80」を接続します。これにより、外部からコンテナ内のWebサーバーにアクセスできるようになります。 -
vulnerables/web-dvwa
: 実行するDockerイメージの名前です。
AWS 初めて使う人の場合、Security Group側でも80の穴あけ忘れないでね。
実行方法
-
Dockerの準備: 事前にDockerをインストールしておきます。
※Amazon-linux-2の場合sudo su - yum install -y docker systemctl enable docker systemctl start docker
-
DVWAコンテナの起動:
コード全文
に記載した最終的なコマンドを実行します。docker run -p -d 80:80 vulnerables/web-dvwa
- ブラウザでアクセス: Webブラウザで `http:// を開きます。
-
ログインとセットアップ: デフォルトのID(
admin
)とパスワード(password
)でログインし、表示されるページの下部にある「Create / Reset Database」ボタンを押せば、全ての準備が完了です。
まとめ
day16では、Dockerを使って自分だけのセキュリティ実験環境を構築してみました。これで毎回面倒な懸念をしなくても良くなりめちゃくちゃ毎日投稿楽になります。これまでは本で読むだけだった脆弱性について、実際に手を動かせる環境が手に入ったのは大きいですね。