「セキュリティの脆弱性を実際に試してみたい」と思ったことはありませんか?
今回は、セキュリティ脆弱性を実際に体験できるツール『DVWA (Damn Vulnerable Web Application)』を紹介します。このツールは、PHPとMySQLで構築された、意図的に脆弱なWebアプリケーションです。これを使って、実際にセキュリティ脆弱性を学び、どのように攻撃が行われるかを体験できます!
具体的な設定方法や構築については、こちらの公式ドキュメントを参考にしてください!今回は構築手順を省略し、実際の攻撃の手法について説明します!
含まれる脆弱性
- ブルートフォース(Brute Force)
- コマンド実行(Command Execution)
- クロスサイトスクリプティング(Cross Site Request Forgery (CSRF))
- 安全でないCAPTCHA(Insecure CAPTCHA)
- ファイルインクルージョン(File Inclusion)
- SQLインジェクション(SQL Injection)
- 安全でないファイルアップロード(Insecure File Upload)
- クロスサイトスクリプティング(Cross Site Scripting (XSS))
- イースターエッグ(Easter eggs)
ファイルパスディスクロージャ(Full path Disclosure), 認証バイパス(Authentication bypass)やその他の脆弱性が隠されています。
DVWAのセキュリティ機能
DVWAでは、セキュリティレベルを以下の3段階で設定できます。
🔒 High(安全なレベル)
- 特徴: 完全に安全で、脆弱性はありません。
- 目的: 安全なコーディング例を学ぶために使用。
- 使い方: 脆弱なコードと比較して、セキュアな実装方法を理解する。
⚠️ Medium(不完全なセキュリティ)
- 特徴: 開発者が安全にしようと努力したが、不十分な例。
- 目的: 一見安全に見える実装がどこで失敗するかを学ぶ。
- 注意: 攻撃可能な箇所が残されている。
❌ Low(完全に脆弱なレベル)
- 特徴: 全く安全でない状態。
- 目的: 典型的な悪いコーディング例を通じて、脆弱性がどのように発生するかを理解する。
- 例: SQLインジェクションやXSSが容易に成功する。
実践!反射型クロスサイトスクリプティング (Reflected XSS)
ここでは、実際に反射型XSS(クロスサイトスクリプティング)攻撃を体験!XSSは、攻撃者が悪意のあるスクリプトを仕込み、ユーザーのブラウザで実行させる攻撃手法です!
反射型XSSの手法と流れ
1: 攻撃者が悪意のあるURLを用意する
攻撃者は次のような スクリプト付きのURL を作成します。
このURLにはブラウザで実行されるJavaScriptが含まれています。
https://example.com/vulnerable.php?q=<script>alert('XSS')</script>
- q パラメータ に悪意のあるスクリプトを仕込みます。
- 攻撃者はこのリンクを メールやSNS を通じて「見てみて!」とユーザーに送りつけます。
2: ユーザーがリンクをクリックする
被害者(ユーザー)は、攻撃者から送られたURLを信じてクリックしてしまいます。
3: Webサーバがスクリプトを含む応答を返す
脆弱なWebアプリケーションは、入力されたパラメータ q の内容 をそのまま画面に表示します。
このため、次のようなHTMLが生成され、ブラウザに返されます。
<p>検索結果: <script>alert('XSS')</script></p>
- サーバは 入力値の検証やエスケープ処理 を行わないため、
悪意のあるスクリプトがそのまま出力されます。
4: ユーザーのブラウザでスクリプトが実行される
ユーザーのブラウザは、返されたHTMLを解析し、含まれているJavaScriptコードを実行します。例えば、alert('XSS') が実行されると、ブラウザにポップアップメッセージが表示されます。
<具体的な動作例>
- ポップアップ表示: alert('XSS') が実行され、警告メッセージが表示される。
- Cookieの窃取: JavaScriptを使ってCookie情報が攻撃者のサーバに送信される。
- ページ改ざん: 悪意のあるスクリプトがページ内容を書き換える。
┌────────────┐ ① 攻撃者がURLを送信
│ 攻撃者 │ ───────────► ユーザー (クリック)
└────────────┘
▼
https://example.com?q=スクリプト
│
▼
┌────────────┐ ② ユーザーがリンクを開く
│ Webサーバ │ ◄───────────
│ (脆弱なサイト) │ スクリプトを含む応答
└────────────┘
▼
┌────────────┐ ③ ユーザーのブラウザで実行あ
│ ブラウザ │───────────► JavaScriptが動作
│ (ユーザー画面)│
└────────────┘
反射型XSSのポイント
- 原因: 入力値が適切にエスケープされず、そのまま出力されてしまう。
- 危険性: 攻撃者が用意したスクリプトが ユーザーのブラウザ で動作し、サイト改ざんやCookie情報の窃取が可能になる。
- 対策: 入力値の サニタイズ や エスケープ処理 を行い、信頼できない入力をそのまま表示しないこと。
やってみよう実際にDVWAで反射型XSSを試す
まず、セキュリティレベルを Medium に設定します。
1.左メニューから 「DVWA Security」 を選択し、セキュリティレベルを Medium に設定します。
「Submit」ボタンを押して適用。
3.入力フィールドに次のコードを入力して実行します。
<script>alert('XSS')</script>
まとめ
今回、DVWAを使用して反射型XSSを体験することで、脆弱性がどのように攻撃され、どのように対策を取るべきかを学ぶことができました! セキュリティを強化するためには、入力値を適切に処理し、悪意のあるコードが実行されないようにすることが重要です