Link and Motivation Developers' Blog

リンクアンドモチベーションの開発者ブログです

Webセキュリティ勉強会 Part-1

これは何?

社内で Web アプリケーション開発におけるセキュリティ知識の向上を目的としたハンズオン勉強会を今年始めに開催しました。その際に作成した資料です。

Day 1 (2時間) と Day 2 (2時間) の、合計4時間構成としています。

本書では、解き方等は答えになっちゃうので敢えて書いてありません。

コンテンツ

基本的には OWASP Juice Shop を題材にピックアップしてます。

一部の問題はハンズオンでは難しかったので 自作の脆弱性サイト で再現&実践しています。

教材 脆弱性
OWASP Juice Shop SQL Injection (UNION Attack)
Sensitive Data Exposure (重要ファイル公開されてる系)
Improper Input Validation (API 入力チェック不備)
DOM XSS (Cross Site Scripting)
Reflected XSS (Cross Site Scripting)
自作の脆弱性サイト Stored XSS (Cross Site Scripting)
CSRF (Cross Site Request Forgeries)
Clickjacking
SSRF (Server Side Request Forgeries)

前置き

pwning.owasp-juice.shop

序文では、OWASP Juice Shopアーキテクチャだけは認識しておきましょう。よくあるシングルページアプリケーション (脆弱性モリモリ) です。

※ 画像は OWASP Juice Shop 公式より転載

事前準備

Node.js 21.5.0 インストール

OWASP Juice Shop は Node.js 21.5.0 で動かします。 バージョン管理に Volta を利用している場合は以下の通りに実行します。

volta install node@21.5.0

OWASP Juice Shop の起動

OWASP Juice Shop を初回起動するのに少し時間が掛かるので、先にしておきます。

github.com

git clone https://github.com/juice-shop/juice-shop

npm install します。これが3分程掛かります。

cd ./juice-shop/
npm install

次のコマンドで OWASP Juice Shop を起動します。

npm start

ブラウザでアクセス。

Tamper Dev (Chrome 拡張機能) のインストール

Tamper Dev (Chrome 拡張機能) をインストールして下さい。

chromewebstore.google.com

URLバー右隣の拡張機能でピン留めして実行できます。また Alt + T でも実行できます。

SQLite Playground

SQL Injection を実行するにあたり、まずは SQL を試してみる際に Playground を使いましょう。

www.db-fiddle.com

アジェンダ

Day 1 には、前章で説明済の準備・解説の項目を含んでいます。

Day 1

Day 1 は、ほぼ「SQL Injection」に注力しています。

流れとして Injectionできる箇所を探す最も基本的な攻撃手法を知る攻撃手法 UNION Attack を知るスキーマを特定するやりたい放題 という流れです。

大項目 小項目 解説 難易度
15 分 前置き -- ※本書の前章で説明した内容です --
15 分 事前準備 -- ※本書の前章で説明した内容です --
15 分 Finding the Score Board Score Board Find the carefully hidden 'Score Board' page.

※パスを探すにはどうすれば良いか?
15 分 Injection Login Admin Log in with the administrator’s user account

※username が分かれば password 無しでも...?
⭐⭐
15 分 Database Schema Exfiltrate the entire DB schema definition via SQL Injection

SQLiteスキーマ一覧をするには...?
⭐⭐⭐
15 分 User Credentials Retrieve a list of all user credentials via SQL Injection

スキーマ情報を知れば、SQL は作れる。
⭐⭐⭐⭐
15 分 Login Bender Log in with Bender’s user account

※ユーザー名さえ分かっていれば Admin と同じ。
⭐⭐⭐
15 分 Login Jim Log in with Jim’s user account

※ユーザー名さえ分かっていれば Admin と同じ。
⭐⭐⭐

Day 2

Day 2 は小さなトピックがバラバラと並んでいるので、進行上は進めづらいです😰

大項目 小項目 解説 難易度
5 分 Sensitive Data Exposure Confidential Document Access a confidential document

※公開ファイル置き場を探すだけなので 答えを教える
10 分 Improper Input Validation Missing Encoding Retrieve the photo of Bjoern’s cat in "melee combat-mode"

※なぜリンクが不正になってしまったのか...?
15 分 Zero Stars Give a devastating zero-star feedback to the store

※UI からの攻撃のみで。Tamper は使わない。
15 分 Cross Site Scripting (XSS)
※参考
DOM XSS Perform a DOM XSS attack

※ユーザー入力が FE だけで埋め込まれる箇所。
15 分 Reflected XSS Perform a reflected XSS attack

API へのパラメータ入力が、そのまま応答として返る箇所。
⭐⭐
15 分 自作の脆弱性サイト Stored XSS Webセキュリティ勉強会 Part-2 で解説 --
10 分 CSRF (Cross Site Request Forgery) Webセキュリティ勉強会 Part-2 で解説 --
10 分 Clickjacking Webセキュリティ勉強会 Part-2 で解説 --
15 分 SSRF (Server-Side Request Forgery) Webセキュリティ勉強会 Part-2 で解説 --

おしまい

開発組織全体としてのセキュリティ技術を上げる取り組みの一貫として本勉強会を実施しました。

短時間でメンバーの技術力を底上げするのは難しく、やってみて改善点多め (※特に Day 2) ですが、今後も定期的に実施すると思いますので、その度に本書もブラッシュアップしていきたいなと考えています。