OCI WAFでJuiceサーバを保護!~Part1~

 2020.11.28  株式会社テリロジー 技術統括部

こんにちは!テリロジーのY.Tです。
今回はOCIのWAFを利用して、OCI上のVMにインストールしたOWASP Juice Shopを保護したいと思います。

OWASP Juice Shopとは、脆弱なWebAppであり、セキュリティ製品の検証や脆弱性のデモなどで利用可能なGitHubで公開されているオープンソースのツールです。
以下が実際の画面ですが、ECサイトのように製品をカートに入れることや、フィードバックを送信することができるようになっています。

OCI WAFでJuiceサーバを保護!~Part1~

Tips!

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を通してパスを発見し、アクセスできることを確認します。

Score Board

2.DOM XSS

XSSとは、攻撃スクリプトをWebブラウザ上で実行させ、Cookieの窃取によるなりすましや支払い画面を偽造ページにすり替えて情報を入力させることにより、情報を窃取する攻撃です。
DOM XSSとは、JavaScript(以下、JS)の攻撃コードを送信し、実行時にブラウザ上で動作することで発生するXSS のことで、検索画面に直接JSコードを挿入することでコードが実行されてしまいます。
「<」や「>」などの特殊記号をエスケープ処理することで、防ぐことができる脆弱性です。

DOM XSS

3.Bonus Payload

この攻撃もXSSであり、上記のDOM XSSではsrcにalertページをポップアップさせるようなJSコードでしたが、今回はURLになっています。他サイトのコンテンツへのリンクを埋め込まれることで、コンテンツの改ざんが可能になってしまいます。

Bonus Payload

4.Privacy Policy

ログイン後、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インジェクションを参考にし、パスワードの入力項目を検査しない、どんなパスワードでもログイン可能となる文字列を指定しました。

Login Jim

解答の表示

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をどれほど守ることができるのか、確認していきます!

最後までお読みいただき、ありがとうございました。🙇


RECENT POST「OCIサービス紹介」の最新記事


OCIサービス紹介

テリロジーが提供しているOCIの4つのサービス

OCIサービス紹介

Oracle FunctionsのスクリプトをAPIGW経由で確認 Part1

OCIサービス紹介

Oracle FunctionsのスクリプトをAPIGW経由で確認 Part2

OCIサービス紹介

OCIのDNSサービス

OCI WAFでJuiceサーバを保護!~Part1~