· 

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

こんにちは!テリロジーのY.Tです。

今回はOCIのWAFを利用して、OCI上のVMにインストールしたOWASP Juice Shopを保護したいと思います。

 

OWASP Juice Shopとは、脆弱なWebAppであり、セキュリティ製品の検証や脆弱性のデモなどで利用可能なGitHubで

公開されているオープンソースのツールです。

以下が実際の画面ですが、ECサイトのように製品をカートに入れることや、フィードバックを送信することができる

ようになっています。

Tips!

OWASPとは、Open Web Application Security Project(国際ウェブセキュリティ標準機構)の略でWebアプリ
ケーションセキュリティを推進している組織のことです。特に危険なWebAppに対しての攻撃を10位までの
ランキングにまとめ、「OWASP Top10」として具体的な攻撃や
対策方法について情報を公開しています。

ここでは、以下の手順でOCI WAFの有効性について検証していきたいと思います。今回はOWASP Juice Shopのインストール、また、OWASP Tutorialsを実施していきます。

 

今回の記事:

1.ドメインの取得

2.OCI上のVMにOWASP Juice Shopをインストール

3.OWASP Tutorialsの実施

4.OCI WAFの設定 ※次回の記事

5.サブネットとDNSの設定 ※次回の記事

6.OWASP Tutorialsの再実施 ※次回の記事

1.ドメインの取得

はじめに、OWASP Juice ShopをインストールするVMに設定するドメインを取得します。

Freenomというサイトで、「.tk」や「.ml」などのドメインを無料で取得することができ、利用可能になるまでに時間はかかりますが、以下のように「Active」となれば利用可能です。

2.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

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

解答の表示

http://localhost:3000/score-board
※デモサイトを利用している場合の回答
http://demo.owasp-juice.shop:3000/score-board

2.DOM XSS

XSSとは、攻撃スクリプトをWebブラウザ上で実行させ、Cookieの窃取によるなりすましや支払い画面を偽造ページにすり替えて情報を入力させることにより、情報を窃取する攻撃です。

DOM XSSとは、JavaScript(以下、JS)の攻撃コードを送信し、実行時にブラウザ上で動作することで発生するXSS

のことで、検索画面に直接JSコードを挿入することでコードが実行されてしまいます。

「<」や「>」などの特殊記号をエスケープ処理することで、防ぐことができる脆弱性です。

解答の表示

<iframe src="javascript:alert(`xss`)" >

3.Bonus Payload

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

しまいます。

解答の表示

<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay"
src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076
&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true
&show_user=true&show_reposts=false&show_teaser=true" ></iframe >

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

 

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