こんにちは!テリロジーのY.Tです。
今回はOCIのWAFを利用して、OCI上のVMにインストールしたOWASP Juice Shopを保護したいと思います。
OWASP Juice Shopとは、脆弱なWebAppであり、セキュリティ製品の検証や脆弱性のデモなどで利用可能なGitHubで公開されているオープンソースのツールです。
以下が実際の画面ですが、ECサイトのように製品をカートに入れることや、フィードバックを送信することができるようになっています。
OWASPとは、Open Web Application Security Project(国際ウェブセキュリティ標準機構)の略でWebアプリ ケーションセキュリティを推進している組織のことです。特に危険なWebAppに対しての攻撃を10位までのランキングにまとめ、「OWASP Top10」として具体的な攻撃や対策方法について情報を公開しています。
ここでは、以下の手順でOCI WAFの有効性について検証していきたいと思います。今回はOWASP Juice Shopのインストール、また、OWASP Tutorialsを実施していきます。
ドメインの取得
はじめに、OWASP Juice ShopをインストールするVMに設定するドメインを取得します。
Freenomというサイトで、「.tk」や「.ml」などのドメインを無料で取得することができ、利用可能になるまでに時間はかかりますが、以下のように「Active」となれば利用可能です。
OCI上のVMにOWASP Juice Shopをインストール
次にOCI上にVMを作成し、OWASP Juice Shopをインストールしていきます。
Oracle Cloudで作ってみた その1:仮想クラウド・ネットワーク編を参考にし、事前にネットワーク設定をしておきます。
現段階ではVCNにプライベートとパブリックサブネットを設定し、両方のサブネットにイングレスルールで社内からのアクセスのみ許可しました。WAFを利用する際に必要なネットワーク設定はOCI WAFの設定をする手順で追加します。構築したVMのスペックは以下です。
- イメージ:Ubuntu
- シェイプ:VM.Standard.E2.1
- メモリ:8GB
- OCPU:1
起動後は公式の「Install Docker Engine on Ubuntu」を参考にし、Dockerを構築後、OWASP Juice Shopを取得します。インストール時のコマンドは以下です。
$sudo apt-get status docker
※古いバージョンのDockerがある場合は以下のコマンドで削除します
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Dockerのインストール完了後、バージョンを確認しコンテナを起動します。
OWASP Juice Shopのイメージを取得し、起動します。
$ sudo docker version
$ sudo docker run hello-world
$ docker pull bkimminich/juice-shop
$ sudo docker pull bkimminich/juice-shop
$ sudo docker images
$ sudo docker run --rm -p 3000:3000 bkimminich/juice-shop
OWASP Tutorialsの実施
OWASP Juice Shopをインストール後、WAFを設定していない状態で OWASP Tutorials の以下の10個の項目を実施していきます。「Challenge」内の攻撃を選択すると、デモサイトに推移します。
今回はデモサイトで実施方法を確認し、2.OCI上のVMにOWASP Juice Shopをインストールの手順で作成したVM上のOWASP Juice Shopに対して攻撃できるか検証していきます。(画像はデモサイトのものになります。)
1.Score Board
Chrome DevToolsを利用して、画面上からは推移するボタンが設定されていない「Score Board」ページを見つけます。サイトから直接リンクがない場合でも、Chrome DevToolsから確認可能なJavaScriptを通してパスを発見し、アクセスできることを確認します。
2.DOM XSS
XSSとは、攻撃スクリプトをWebブラウザ上で実行させ、Cookieの窃取によるなりすましや支払い画面を偽造ページにすり替えて情報を入力させることにより、情報を窃取する攻撃です。
DOM XSSとは、JavaScript(以下、JS)の攻撃コードを送信し、実行時にブラウザ上で動作することで発生するXSS のことで、検索画面に直接JSコードを挿入することでコードが実行されてしまいます。
「<」や「>」などの特殊記号をエスケープ処理することで、防ぐことができる脆弱性です。
3.Bonus Payload
この攻撃もXSSであり、上記のDOM XSSではsrcにalertページをポップアップさせるようなJSコードでしたが、今回はURLになっています。他サイトのコンテンツへのリンクを埋め込まれることで、コンテンツの改ざんが可能になってしまいます。
4.Privacy Policy
ログイン後、Privacy Policyを確認するだけでした。
5.Login Admin
SQLインジェクション攻撃を実施しました。SQLとは、データベースを操作する言語のことであり、例えば、入力文字のエスケープが行われていないサイトのログイン画面でSQLを入力すると、データベースの検索結果を画面に表示することができてしまいます。SQLインジェクション攻撃はユーザやパスワード情報の漏洩に繋がります。
解答の表示
Emailに以下を指定。パスワードは何でも可
' OR true--
6.Password Strength
5.Login AdminでAdminとしてログインした際のユーザ名を利用してログインします。パスワードを推測し入力していきます。辞書攻撃やブルートフォース攻撃、また、SQLインジェクションでメールアドレスとパスワードハッシュを取得し、レインボーテーブル攻撃でパスワードハッシュからパスワードを特定することも可能です。
解答の表示
Email:admin@juice-sh.op
パスワード:admin123
7.View Basket
セッションストレージを利用して、異なるアカウントのBasketを確認します。セッションストレージはJavaScriptを使ってブラウザにKey-value形式でデータを保持することができ、ブラウザを更新するとデータは消えてしまいます。
解答の表示
Chrome DevTools
Application > Session Storage
bidの値を書き換え、ページを更新すると他のBasketの中身が表示される
8.Forged Feedback
フィードバックを送信する際、Juice Shopの画面からは送信者がログインユーザとなっており、変更することができません。フィードバック送信後にリクエストを編集し、ユーザIDなどを書き換えて再送信することができます。今回はOWASP ZAPでブレークポイントを追加し送信内容を編集しました。
解答の表示
OWASP ZAPから
サイト>https://140.238.37.134/>ブレーク を押下し、ブラウザを更新
OWASP ZAPの以下に移動後、UserIdの値を編集
サイト>POST:Feedbacks({"UserId":X,"captchaId":XX,"captcha":XX)}
※右クリックで再送信からUserIdを編集して再送信
9.Login Jim
OWASP Juice Shopではログイン時のユーザ名がメールアドレスであり、レビューを投稿した際にユーザ名であるメールアドレスが表示されるようになっています。今回はレビューから「Jim」を含むメールアドレスを見つけました。
また、5.Login Adminで実施したSQLインジェクションを参考にし、パスワードの入力項目を検査しない、どんなパスワードでもログイン可能となる文字列を指定しました。
解答の表示
Emailに以下を指定。パスワードは何でも可
jim@juice-sh.op'--
10.Login Bender
9.Login Jimと同じように商品やカスタマーフィードバックから何か情報がないか確認し、SQLインジェクションでパスワードの入力項目を検査しないような文字列を指定しました。
解答の表示
Emailに以下を指定。パスワードは何でも可
bender@juice-sh.op'--
まとめ
今回はOWASP Juice Shopのインストール、また、OWASP Tutorialsについて解説いたしました。
OWASP Tutorialsの解答を通して色々実施してみた結果、Chrome DevToolsから、利用しているSQLや、データを呼び出しているAPIパスなどの推測も可能でした。
SQLインジェクション攻撃を実施した際のエラーメッセージの内容からテーブルが把握できるため、収集したAPIの情報からユーザ情報も取得できました。APIを利用してメールアドレスの他、パスワードのハッシュを確認し、レインボーテーブル攻撃で平文のパスワードの取得もできます。
OWASP Tutorialsを実施しながら、改めてWebAppに対する攻撃は安易に実行可能であることや、WebAppを保護する大切さについて実感しました。次回の記事ではOCI WAFを利用することでOWASP Juice Shopをどれほど守ることができるのか、確認していきます!
最後までお読みいただき、ありがとうございました。🙇
- カテゴリ:
- OCIサービス紹介