教科書一覧へ

Webアプリケーションへの攻撃

頻出約 21 分情報セキュリティ

概要

このユニットでは、Webアプリケーションの脆弱性(セキュリティホール)を突く代表的な攻撃を学ぶ。利用者を狙うXSS・CSRF・クリックジャッキング・ドライブバイダウンロードから、サーバやプログラムを狙うSQLインジェクション・ディレクトリトラバーサル・バッファオーバーフローまでを扱う。情報セキュリティ分野でも頻出で、攻撃の手口と狙う対象の違いを区別することが得点の鍵となる。

用語7

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

脆弱なサイトに不正なスクリプトを埋め込み、閲覧者のブラウザ上で実行させる攻撃。

クロスサイトスクリプティング(XSS)は、利用者の入力をそのまま表示してしまう脆弱なWebサイトを悪用し、攻撃者が用意した不正なスクリプトを他の利用者のブラウザ上で実行させる攻撃です。掲示板や検索結果の表示部分などが狙われます。 これにより、Cookieに保存されたセッション情報を盗まれたり、偽の入力画面を表示されたりします。試験では、サーバではなく「サイトを閲覧した利用者のブラウザ」で被害が起きる点、対策が入力値の無害化(エスケープ処理)である点が問われます。

たとえ誰でも貼れる伝言板に、悪意ある人が「読んだ人が勝手に動く仕掛け」のメモを貼るようなもの。それを見た来訪者が知らぬ間に被害に遭います。

記憶フッククロスサイトスクリプティングといえば不正スクリプトを閲覧者のブラウザで実行させる攻撃

攻撃者

脆弱なサイトに不正スクリプトを仕込む

利用者がページを閲覧

利用者のブラウザでスクリプト実行

Cookieやセッション情報を窃取

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

ログイン中の利用者になりすまし、意図しない処理をサーバへ送信させる攻撃。

クロスサイトリクエストフォージェリ(CSRF)は、あるサイトにログイン中の利用者を罠サイトへ誘導し、本人の意図しないリクエスト(投稿・送金・設定変更など)を正規サイトへ送らせる攻撃です。サーバ側は本人の操作と区別できず処理してしまいます。 試験では、XSSとの違いが頻出です。XSSが「利用者のブラウザでスクリプトを実行させる」のに対し、CSRFは「ログイン状態を悪用して本人になりすまし、サーバに不正な処理をさせる」点が区別の鍵です。

たとえログイン済みの状態を、署名済みの白紙委任状に例えられます。攻撃者がその委任状に勝手な内容を書き込み、本人が頼んだかのように手続きを進めてしまうイメージです。

記憶フッククロスサイトリクエストフォージェリといえばログイン中の本人になりすまし不正処理を送らせる攻撃

クリックジャッキング

透明な罠を重ね、利用者に意図しないボタンをクリックさせる攻撃。

クリックジャッキングは、正規のボタンの上に透明化した別のページを重ね、利用者が普通のボタンを押したつもりで、裏に隠された危険なボタンを押させる攻撃です。設定変更や購入などを本人に気づかせず実行させます。 試験では、「見た目」を悪用して利用者をだます手口である点が問われます。スクリプトを実行させるXSSや、なりすまし送信のCSRFと異なり、視覚的にクリック先をすり替える点が特徴です。

たとえ透明なフィルムを画面に重ね、「再生」ボタンを押したつもりが、その下に隠された「購入」ボタンを押させられるようなだまし討ちです。

記憶フッククリックジャッキングといえば透明な罠を重ねて意図しないクリックをさせる攻撃

ドライブバイダウンロード

Webサイトを閲覧しただけで、利用者の意図に関係なく不正プログラムを送り込む攻撃。

ドライブバイダウンロードは、改ざんされたWebサイトを閲覧しただけで、利用者がダウンロード操作をしていないのにマルウェアを自動的に送り込み感染させる攻撃です。ブラウザやプラグインの脆弱性が悪用されます。 試験では、「ファイルを開く・実行する」といった利用者の操作なしに、見ただけで感染する点が最大のポイントです。被害を防ぐには、OSやソフトウェアを最新に更新し脆弱性をふさぐことが有効である点も押さえましょう。

たとえただ店の前を通り過ぎただけなのに、知らないうちにポケットへ怪しい品物を入れられてしまうようなもの。こちらは何の操作もしていないのに感染します。

記憶フックドライブバイダウンロードといえば閲覧しただけで勝手に不正プログラムを送り込む攻撃

SQLインジェクション

入力欄に不正なSQL文を注入し、データベースを不正に操作する攻撃。

SQLインジェクションは、Webアプリの入力欄に不正なSQL(データベースへの命令文)を紛れ込ませ、開発者が想定しない問い合わせを実行させる攻撃です。入力値をそのまま命令文に組み込む脆弱なつくりが原因です。 これにより、本来見えない個人情報の不正取得や、データの改ざん・削除、認証の回避などが起こります。試験では、サーバ側の「データベース」を狙う代表的攻撃である点、対策が入力値の検証やプレースホルダ(バインド機構)の利用である点が問われます。

たとえ注文票の品名欄に、商品名ではなく「店の金庫を開けろ」という別の指示を書き込み、店員にそのまま実行させてしまうようなものです。

記憶フックSQLインジェクションといえば不正なSQL文を注入しデータベースを不正操作する攻撃

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

相対パスを悪用し、公開外のファイルへ不正にアクセスする攻撃。

ディレクトリトラバーサルは、ファイル名の指定に「上の階層へ戻る」相対パス指定を紛れ込ませ、本来公開されていないサーバ上のファイル(設定ファイルやパスワード情報など)へ不正にアクセスする攻撃です。 試験では、サーバ上の「ファイル」を狙う点が問われます。データベースを狙うSQLインジェクションと並ぶサーバ側攻撃ですが、標的がファイルシステムである点が区別の鍵です。対策はファイルパスの検証やアクセス権の適切な設定です。

たとえ図書館で「閲覧室の隣の本」と頼むふりをして、廊下や階段をたどり立入禁止の書庫まで入り込み、非公開の資料を持ち出すようなものです。

記憶フックディレクトリトラバーサルといえば相対パスを悪用し公開外ファイルへ不正アクセスする攻撃

バッファオーバーフロー攻撃

用意した記憶領域を超えるデータを送り込み、プログラムを誤動作させる攻撃。

バッファオーバーフロー攻撃は、プログラムが確保したバッファ(一時的な記憶領域)の容量を超える大きさのデータを送り込み、あふれた部分で隣接するメモリを上書きして、プログラムを異常終了させたり不正なコードを実行させたりする攻撃です。 試験では、メモリの容量を超えるデータでプログラムの脆弱性を突く低レイヤの攻撃である点が問われます。入力値の長さを検査していないプログラムが狙われ、対策は入力サイズのチェックや安全な関数の利用です。

たとえ決められた大きさのコップに水をあふれるまで注ぎ、こぼれた水で周りの書類(隣のデータ)を汚し、書いてある内容を書き換えてしまうようなものです。

記憶フックバッファオーバーフロー攻撃といえば記憶領域を超えるデータでプログラムを誤動作させる攻撃

攻撃者が過大なデータを送信

バッファの容量を超過

あふれた分が隣接メモリを上書き

プログラムが異常終了

不正なコードを実行

まとめ

要点

  • Webアプリへの攻撃は「利用者を狙う系(XSS・CSRF・クリックジャッキング・ドライブバイダウンロード)」と「サーバ/プログラムを狙う系(SQLインジェクション・ディレクトリトラバーサル・バッファオーバーフロー)」に大別できる。
  • XSSは不正スクリプトを閲覧者のブラウザで実行させる攻撃、CSRFはログイン状態を悪用し本人になりすまして不正処理を送らせる攻撃で、この区別が頻出。
  • ドライブバイダウンロードは利用者の操作なしに閲覧だけで感染する点が特徴で、OS・ソフトの更新による脆弱性対策が有効。
  • SQLインジェクションはデータベースを、ディレクトリトラバーサルはサーバ上のファイルを狙う点で標的が異なる。対策は入力値の検証やバインド機構の利用。
  • バッファオーバーフロー攻撃は記憶領域の容量超過でメモリを上書きしプログラムを誤動作させる低レイヤ攻撃で、入力サイズの検査が対策となる。

記憶フック一覧

  • クロスサイトスクリプティング: クロスサイトスクリプティングといえば不正スクリプトを閲覧者のブラウザで実行させる攻撃
  • クロスサイトリクエストフォージェリ: クロスサイトリクエストフォージェリといえばログイン中の本人になりすまし不正処理を送らせる攻撃
  • クリックジャッキング: クリックジャッキングといえば透明な罠を重ねて意図しないクリックをさせる攻撃
  • ドライブバイダウンロード: ドライブバイダウンロードといえば閲覧しただけで勝手に不正プログラムを送り込む攻撃
  • SQLインジェクション: SQLインジェクションといえば不正なSQL文を注入しデータベースを不正操作する攻撃
  • ディレクトリトラバーサル: ディレクトリトラバーサルといえば相対パスを悪用し公開外ファイルへ不正アクセスする攻撃
  • バッファオーバーフロー攻撃: バッファオーバーフロー攻撃といえば記憶領域を超えるデータでプログラムを誤動作させる攻撃

関連の過去問演習は今後のアップデートで追加予定です。