🌍

どうやって攻撃するの? - Webアプリケーションへの攻撃手法

に公開

Webアプリケーションへの攻撃手法と対策

前回の記事「どうやって攻撃するの? - ソフトウェア・システムへの攻撃手法」では、ソフトウェア・システムへの攻撃手法について解説しました。
本記事では、Webアプリケーションへの攻撃手法とその対策について整理します。

SQLインジェクション

Webサイトのデータベースと連携するアプリケーションに、不正なSQL文を注入し、データベースの情報を盗む攻撃です。

攻撃の流れ

  1. 攻撃者が、ユーザーの入力値を適切に検証せずにSQL文を組み立てるWebアプリケーションを発見する。
    元のSQL文の例:SELECT * FROM users WHERE username = 'ユーザーからの入力';
  2. ユーザー入力欄に不正なSQL文を入力し、送信する。
    不正なSQL文の例:SELECT * FROM users WHERE username = '' OR 1=1 --
  3. アプリケーションは、その不正な入力をそのまま受け取り、意図しないSQL文を生成してデータベースに送信する。
  4. WHERE句全体が常に真になり、データベースは、ユーザーの入力に関係なく本来アクセスできないはずの全てのユーザー情報などを返す。

対策の重点

  • プレースホルダーを利用し、SQL文とユーザーの入力値を分離して処理することで、不正なSQL文が実行されるのを防ぐ。
  • 入力値をエスケープし、意図しない文字('や--など)を含んでいないかを確認し、不正な文字を無効化する。

クロスサイトスクリプティング

Webサイトの脆弱性を突いてWebページに悪意のあるスクリプトを埋め込み、セッションハイジャックを行う攻撃です。

※ セッションハイジャックとは、閲覧者のブラウザ上で不正なスクリプトを実行させることで、ログイン中のセッション情報(Cookieやトークン)を盗み出し、なりすましなどの攻撃を行う手法です。

攻撃の流れ

  1. 攻撃者が、ユーザーの入力値をそのままWebページに表示するWebサイト(掲示板やコメント欄など)を発見する。
  2. その入力欄に不正なスクリプトを書き込む。
    例:<script>alert(document.cookie);</script>
  3. 他のユーザーがそのページを閲覧すると、埋め込まれたスクリプトがブラウザ上で実行されて、Cookie情報などを盗む。

対策の重点

  • ユーザーから入力された文字列をWebページに出力する前に、>や<などの特殊文字を無効化するエスケープ処理を行う。
  • 入力されたデータから、<script>タグなど不正なコードを削除するサニタイジング処理を行う。

クロスサイトリクエストフォージェリ

利用者が意図しないリクエストをWebアプリケーションに対して強制的に実行させる攻撃です。

攻撃の流れ

  1. 攻撃者が、ユーザーを騙すためのWebサイトを作成し、標的サイトへの不正なリクエストを自動的に送信するようなコードを仕込む。
    例:<img>タグのsrc属性に不正なURLを設定する
  2. 何らかの方法で標的のユーザーをこの攻撃サイトにアクセスさせる。
  3. ユーザーが、認証情報を保持したまま攻撃サイトにアクセスすると、意図せず不正なリクエストが標的サイトに送信されて、意図しない投稿や設定変更、商品購入などが実行される。

対策の重点

  • CSRFトークンを埋め込み、サーバ側でこのトークンが正しいか検証することで、正規のリクエストであることを確認する。
    ※ CSRFトークンとは、フォーム送信時に一緒に送られるランダムな文字列です。
  • リファラ(リクエストの送信元)が、正規のWebサイトであるかを確認する。

ディレクトリトラバーサル

WebサーバやWebアプリケーションの脆弱性を突き、本来アクセスが許可されていないサーバ上のディレクトリやファイルを不正に閲覧・操作します。

攻撃の流れ

  1. 攻撃者が、ユーザーの入力値を元にファイルパスを組み立てるWebアプリケーションを発見する。
  2. 入力値として ../(親ディレクトリへの移動)などの特殊な文字列を送信する。
  3. アプリケーションは、その不正な文字列をそのままファイルパスに含めて、../../etc/passwdのような、本来アクセスできないはずのシステム上のファイルにアクセスする。

対策の重点
- 入力値に ../ といったディレクトリ移動を意味する文字列が含まれていないかを確認し、エスケープ処理を行う。

  • ファイルパスを組み立てる前に、入力値を正規化し、意図しないパスの移動を防ぐ。
  • Webアプリケーションを、必要最低限のファイルやディレクトリにしかアクセスできない権限で実行する。

ディレクトリリスティング

Webサーバの設定不備を突き、Webサーバ上のディレクトリの内容を一覧表示させる攻撃です。

攻撃の流れ

  1. Webサーバの管理者が、Webサーバの設定で「ディレクトリリスティング」を許可していることを発見する。
  2. 攻撃者は、ファイル名が指定されていないURLにアクセスする。
    例:example.com/images/
  3. Webサーバは、そのディレクトリ内のファイルやサブディレクトリの一覧を、Webページとして返し、機密情報やWebサイトの構造が筒抜けになる。

対策の重点

  • Webサーバの設定ファイルで、ディレクトリリスティングを無効化しする。
  • 各ディレクトリにindex.htmlのようなインデックスファイルを配置し、ディレクトリの内容が直接表示されないようにする。

OSコマンドインジェクション

Webアプリケーション経由で、サーバ上で任意のOSコマンドを不正に実行させる攻撃です。

攻撃の流れ

  1. 攻撃者が、ユーザーの入力値をそのままOSコマンドとして実行するWebアプリケーションを発見する。
  2. 入力欄に不正なコマンドを送信する。
    例:example.com/?filename=abc.txt|ls
  3. アプリケーションは、その入力をそのままOSコマンドとしてサーバ上で実行し、サーバ内のファイル一覧表示や削除など、攻撃者の意図する操作が行われる。

対策の重点

  • 入力された値が、コマンドを意味する特殊文字(|, &, ;など)を含んでいないか確認し、エスケープ処理を行う。
  • 実行するコマンドを固定し、ユーザーの入力値は引数としてのみ渡すように設計する。
  • OSコマンドを直接実行する機能を利用しない。OSコマンドを直接実行するのではなく、アプリケーション内で処理を完結させるように設計する。

おわりに

このように、Webアプリケーションでは、主にユーザーの入力の際の脆弱性を狙う攻撃が多く存在し、適切に扱わないと重大な情報漏洩やシステムの不正操作に繋がる可能性があります。
次回は、「どうやって攻撃するの? - ネットワーク・通信への攻撃手法」について解説します。

Discussion