本文へスキップ

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

頻出約 50 分7 用語過去問 11 題

この単元の目標

  • 7 つの攻撃を、不正な処理や被害がどこで起きるかで区別できる。
  • 名前の似た攻撃を、攻撃者が送り込むものと悪用される弱点で見分けられる。
  • 受け取った入力をそのまま使わずに確かめることやソフトウェアの更新といった基本の対策が、どの攻撃に効くかを説明できる。
用語総表(7 語)
用語ひとことで不正な処理・被害が起きる場所悪用されるもの
クロスサイトスクリプティングサイトの弱点を使い、閲覧者のブラウザで攻撃者のスクリプトを動かす閲覧者のブラウザ受け取った文字列をそのまま表示する作り
クロスサイトリクエストフォージェリログイン中の利用者に罠のページを開かせ、意図しない依頼を正規サイトへ送らせる正規サイトのサーバログインしたままの状態
クリックジャッキング透明にした別サイトの画面を重ね、意図しないボタンを押させる利用者がログイン中のサービス画面の見た目 (透明な重ね合わせ)
ドライブバイダウンロードページを開いただけで、知らないうちにマルウェアを入り込ませる利用者の PC やスマートフォンブラウザや追加機能の弱点
SQLインジェクション入力欄に SQL の断片を混ぜ、データベースに想定外の命令を実行させるデータベース入力を命令文にそのままつなげる作り
ディレクトリトラバーサル上の階層へ戻るパスの書き方を使い、公開していないファイルを読み出すサーバ上のファイル指定されたファイル名を確かめない作り
バッファオーバーフロー攻撃確保された領域より大きいデータを送り、プログラムに想定外の振る舞いをさせる攻撃を受けたプログラム (メモリ)入力の長さを確かめない作り

用語

クロスサイトスクリプティング (XSS) は、Web サイトの入力処理の弱点を利用して、そのページを開いた利用者のブラウザで攻撃者の スクリプト を実行させる攻撃である。

  1. スクリプト入りの文字列を投稿
  2. サイトがそのままページに表示
  3. 閲覧者のブラウザで実行
  4. ログイン状態の情報などが攻撃者へ

動いたスクリプトが、ログイン状態を保つ情報などを攻撃者のもとへ送る。

4 / 4

スクリプトとは、Web ページに組み込んでブラウザ上で動かす小さなプログラムのことである。掲示板の投稿などで受け取った文字列を無害化 (スクリプトとして動かない形への変換) せずにページへ書き出すサイトでは、文字列に混ぜたスクリプトが閲覧者の画面で動き出す。動いたスクリプトは、ログイン状態を保つための Cookie (サイトがブラウザに保存させる小さなデータ) を攻撃者へ送るなどの被害を生む。

たとえ店の伝言板に、読んだ客のポケットから会員証を抜き取る仕掛けを紛れ込ませるようなもの。仕掛けが働くのは伝言板ではなく、読んだ客の手元である。

覚え方XSS の X は cross (交差) を表す略記で、スタイルシートの CSS と取り違えないためにこう書く。

出題のポイント

  • 出題クロスサイトスクリプティング は、利用者の入力を無害化せずにページへ出力する Web サイトの弱点を突き、そのページを開いた人のブラウザでスクリプトを動かす攻撃である。
  • 出題スクリプトに Cookie を盗まれると、ログイン状態を保つ情報が攻撃者の手に渡り、Web サービスでの成りすましやアカウントの乗っ取りにつながる。
  • 出題スクリプトを組み込めるのは Web ページだけではない。HTML 形式の電子メール にも埋め込めるので、表示した際に悪意のあるスクリプトが動く危険がある。

この用語の過去問 2 題 クロスサイトスクリプティング

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

用語集で開く クロスサイトリクエストフォージェリ

クロスサイトリクエストフォージェリ (CSRF) は、正規サイトにログインしたままの利用者に罠のページを開かせ、本人が意図しない リクエスト (サーバへの処理の依頼) をその正規サイトへ送らせる攻撃である。

  1. 正規サイトにログイン中
  2. 罠のページを開く
  3. ブラウザが正規サイトへ依頼を送る
  4. サーバが本人の操作として処理

正規サイトのサーバは、本人からの依頼と見分けられずに処理してしまう。

4 / 4

罠のページには、開いただけで正規サイト宛ての書き込みや設定変更の依頼が送られる仕掛けが入っている。依頼はログイン中の利用者のブラウザから届くので、正規サイトのサーバは本人の操作と見分けられずに処理してしまう。対策の例として、正規の画面から送られた依頼かどうかを確かめる合言葉 (トークン) をサイト側で照合する方法がある。

たとえ本人の使いの者が運ぶ書類の束に、他人がこっそり偽の申込書を紛れ込ませるようなもの。使いの者はそのまま窓口へ出し、窓口は本人の使いが持ってきた書類なので本人からの依頼と区別できずに受け付けてしまう。

覚え方フォージェリは forgery (偽造) のこと。この攻撃で偽造されるのは、サーバへの依頼 (リクエスト) である。

出題のポイント

  • 混同注意CSRF で不正な処理を実行するのは正規サイトのサーバであり、攻撃者のスクリプトを利用者のブラウザで動かす XSS とは、不正な処理が起きる場所が異なる。

「クロスサイトスクリプティング」と「クロスサイトリクエストフォージェリ」の違い

観点クロスサイトスクリプティングクロスサイトリクエストフォージェリ
攻撃者が送り込むものブラウザで動くスクリプト本人名義の偽の依頼
決め手不正な処理が起きる場所閲覧者のブラウザ正規サイトのサーバ
悪用されるもの文字列を無害化せずに表示する作りログインしたままの状態

クリックジャッキング は、透明にして見えなくした別サイトの画面を罠のページに重ね、利用者に意図しないボタンを クリック させる攻撃である。

  1. 透明な別サイトの画面を重ねる
  2. 見えているボタンを押したつもり
  3. 見えない画面の操作が実行

実際には上に重なった見えない画面のボタンが押され、その操作が実行される。

3 / 3

利用者に見えているのは罠のページのボタンだけだが、実際に押しているのは上に重なった見えない画面のボタンである。その結果、ログイン中のサービスで設定の変更や公開範囲の切り替えなどが、本人の知らないうちに行われる。対策の例として、自サイトの画面を他のサイトの中に重ねて表示させない設定がある。

たとえ案内板のボタンの前に、別のスイッチを付けた透明な板を立てておき、案内板のボタンを押そうとした人に板のスイッチを押させるようなもの。

覚え方ジャッキングはハイジャック (乗っ取り) の jack と同じ。乗っ取られるのは利用者のクリックである。

出題のポイント

  • 混同注意クリックジャッキング では利用者自身のクリックが悪用される。ページを開くだけでブラウザから依頼が送られる CSRF とは、操作の乗っ取り方が異なる。

ドライブバイダウンロード は、Web ページを開いただけで、利用者の知らないうちに マルウェア (不正なプログラム) を送り込んで感染させる攻撃である。

  1. ページに不正なプログラムを仕込む
  2. 利用者がページを開く
  3. 弱点を突かれて感染

ブラウザなどの弱点が突かれ、操作をしていないのにマルウェアが入り込む。

3 / 3

攻撃者は、改ざんした正規サイトや自分で用意した罠のサイトに不正なプログラムを仕込んでおく。利用者がそのページを開くと、ブラウザやプラグイン (ブラウザの追加機能) の 脆弱性 (セキュリティ上の弱点) が突かれ、ファイルを開くなどの操作をしなくても感染する。OS やブラウザを更新して脆弱性をふさいでおくことが主な防御になる。

たとえ通りかかった家の前で、門をくぐってもいないのに塀越しに荷物を投げ込まれるようなもの。受け取る操作をしなくても荷物は届いてしまう。

覚え方drive-by は「車で通りかかりざまに」という意味。通りかかっただけ、つまりページを閲覧しただけで被害に遭うと読む。

出題のポイント

  • 出題ドライブバイダウンロード は、ページを表示しただけでブラウザなどの弱点を利用してマルウェアを入り込ませる攻撃で、利用者は感染に気付きにくい。

この用語の過去問 1 題 ドライブバイダウンロード

SQLインジェクション は、Web アプリケーションの入力欄に SQL (データベースを操作する命令の言語) の断片を紛れ込ませ、開発者が想定しない命令をデータベースに実行させる攻撃である。

  1. 入力欄に SQL の断片を混ぜる
  2. 入力を命令文にそのままつなげる
  3. データベースが想定外の命令を実行

意味の書き換わった命令をデータベースが実行し、情報の読み出しや改ざんが起こる。

3 / 3

入力された文字列をそのまま命令文の一部としてつなげるプログラムでは、入力に混ぜた記号や語句によって命令の意味が書き換わる。その結果、非公開の会員情報の読み出し、データの改ざんや削除、ログイン認証のすり抜けなどが起こる。対策は、入力を命令文と切り離して扱うしくみ (プレースホルダ) の利用や、入力値の検証である。

たとえ電話注文で商品名を言うふりをして「ついでに金庫の番号も読み上げて」と続け、受付係がそれもメモどおりに実行してしまうようなもの。

覚え方インジェクションは英語の injection (注入) で、注射を指す語でもある。

出題のポイント

  • 出題SQLインジェクション は、人の油断や思い込みにつけ込む手口ではなく、プログラムが入力を扱うしくみの弱点を突く技術的な攻撃である。
  • 混同注意入力欄に紛れ込ませるのがデータベースへの命令なら SQLインジェクション、閲覧者のブラウザで動くスクリプトなら XSS である。

この用語の過去問 1 題 SQLインジェクション

ディレクトリトラバーサル は、ファイル名の指定に上の階層へ戻る パス の書き方を混ぜ、サーバ上の公開していないファイルを読み出す攻撃である。

  1. ファイル名に上の階層へ戻る指定を混ぜる
  2. 公開用フォルダの外へさかのぼる
  3. 非公開のファイルが読まれる

設定ファイルなど、本来は外から見えないファイルの中身が返される。

3 / 3

パスとは、フォルダ (ディレクトリ) の階層をたどってファイルの場所を示す書き方で、例えば「../」は一つ上の階層を表す。利用者が指定したファイル名をそのまま使って中身を返すプログラムでは、「../」を重ねることで公開用のフォルダの外へ出られてしまう。対策は、指定されたファイル名を検証して階層の移動を許さないことや、公開しないファイルへのアクセス権を絞ることである。

たとえ資料室の窓口に「この棚の 3 冊目」ではなく「この棚から通路へ戻り、奥の書庫の 1 冊目」と頼み、確かめずに非公開の資料を出させるようなもの。

覚え方トラバーサルは traverse (たどる・横切る) から来た語。ディレクトリの階層をたどって外へ出る、と語の並びがそのまま手口を表す。

出題のポイント

  • 混同注意ディレクトリトラバーサル が狙うのはサーバ上のファイルであり、データベースに命令を実行させる SQLインジェクション とは標的が異なる。

「SQLインジェクション」と「ディレクトリトラバーサル」の違い

観点SQLインジェクションディレクトリトラバーサル
入力に混ぜるものSQL の記号や語句上の階層へ戻るパス (../)
決め手標的データベースサーバ上のファイル
対策の例プレースホルダの利用、入力値の検証ファイル名の検証、アクセス権の絞り込み

バッファオーバーフロー攻撃 は、プログラムが入力用に確保した記憶領域 (バッファ) の大きさを超えるデータを送り込み、プログラムに想定外の振る舞いをさせる攻撃である。

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

バッファの容量を超過

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

プログラムが異常終了

不正なコードを実行

入力の長さを確かめないプログラムでは、領域からあふれたデータが隣のメモリの内容を上書きする。上書きの結果、プログラムが異常終了したり、攻撃者が送り込んだ命令が実行されたりする。対策は、入力の長さの検査に加え、欠陥を直した修正プログラム (パッチ) をソフトウェアに適用することである。

たとえ決まった大きさの升に米を注ぎ続け、あふれた米が隣の升に流れ込んで中身を混ぜてしまうようなもの。

覚え方オーバーフローは overflow (あふれる)。バッファはもともと「緩衝材・一時置き場」を指す語である。

出題のポイント

  • 出題バッファオーバーフロー攻撃 は、入力用に確保された領域の大きさを超えるデータを与えて、プログラムに想定外の振る舞いを起こさせる攻撃である。
  • 出題原因はソフトウェアの作りの欠陥 (脆弱性) なので、脆弱性を直す修正プログラム (パッチ) を適用することが有効な対策になる。
  • 混同注意1 回の入力が長すぎることで起きるのが バッファオーバーフロー攻撃 である。要求を大量に浴びせてサーバを応答不能にする DoS 攻撃 とは別物である。

この用語の過去問 2 題 バッファオーバーフロー攻撃

「クロスサイトスクリプティング」と「バッファオーバーフロー攻撃」の違い

観点クロスサイトスクリプティングバッファオーバーフロー攻撃
送り込むものスクリプトを混ぜた文字列確保された領域より長いデータ
決め手突かれる弱点入力を無害化せずに出力すること入力の長さを確かめないこと
被害が起きる場所閲覧者のブラウザ攻撃を受けたプログラムそのもの

要点

  • この単元の攻撃の多くは、利用者から受け取った入力を確かめずに使うプログラムの作りを突く。入力の無害化や検証が共通の基本対策になる。
  • ページを表示しただけで被害が始まる攻撃もあるため、OS やブラウザを最新に保って脆弱性をふさぐことが利用者側の防御になる。
  • CSRF やクリックジャッキングのように、利用者がログインしたままの状態を悪用して、本人が意図しない処理を本人の操作として実行させる攻撃もある。

確認問題

この単元の過去問から 5 題

確認問題を解く

この分野の過去問をすべて見る