Webアプリケーションへの攻撃
頻出約 50 分7 用語過去問 11 題
この単元の目標
- 7 つの攻撃を、不正な処理や被害がどこで起きるかで区別できる。
- 名前の似た攻撃を、攻撃者が送り込むものと悪用される弱点で見分けられる。
- 受け取った入力をそのまま使わずに確かめることやソフトウェアの更新といった基本の対策が、どの攻撃に効くかを説明できる。
用語総表(7 語)
用語
クロスサイトスクリプティング (XSS) は、Web サイトの入力処理の弱点を利用して、そのページを開いた利用者のブラウザで攻撃者の スクリプト を実行させる攻撃である。
スクリプトとは、Web ページに組み込んでブラウザ上で動かす小さなプログラムのことである。掲示板の投稿などで受け取った文字列を無害化 (スクリプトとして動かない形への変換) せずにページへ書き出すサイトでは、文字列に混ぜたスクリプトが閲覧者の画面で動き出す。動いたスクリプトは、ログイン状態を保つための Cookie (サイトがブラウザに保存させる小さなデータ) を攻撃者へ送るなどの被害を生む。
たとえ店の伝言板に、読んだ客のポケットから会員証を抜き取る仕掛けを紛れ込ませるようなもの。仕掛けが働くのは伝言板ではなく、読んだ客の手元である。
覚え方XSS の X は cross (交差) を表す略記で、スタイルシートの CSS と取り違えないためにこう書く。
出題のポイント
- 出題クロスサイトスクリプティング は、利用者の入力を無害化せずにページへ出力する Web サイトの弱点を突き、そのページを開いた人のブラウザでスクリプトを動かす攻撃である。
- 出題スクリプトに Cookie を盗まれると、ログイン状態を保つ情報が攻撃者の手に渡り、Web サービスでの成りすましやアカウントの乗っ取りにつながる。
- 出題スクリプトを組み込めるのは Web ページだけではない。HTML 形式の電子メール にも埋め込めるので、表示した際に悪意のあるスクリプトが動く危険がある。
この用語の過去問 2 題 クロスサイトスクリプティング →
クロスサイトリクエストフォージェリ (CSRF) は、正規サイトにログインしたままの利用者に罠のページを開かせ、本人が意図しない リクエスト (サーバへの処理の依頼) をその正規サイトへ送らせる攻撃である。
罠のページには、開いただけで正規サイト宛ての書き込みや設定変更の依頼が送られる仕掛けが入っている。依頼はログイン中の利用者のブラウザから届くので、正規サイトのサーバは本人の操作と見分けられずに処理してしまう。対策の例として、正規の画面から送られた依頼かどうかを確かめる合言葉 (トークン) をサイト側で照合する方法がある。
たとえ本人の使いの者が運ぶ書類の束に、他人がこっそり偽の申込書を紛れ込ませるようなもの。使いの者はそのまま窓口へ出し、窓口は本人の使いが持ってきた書類なので本人からの依頼と区別できずに受け付けてしまう。
覚え方フォージェリは forgery (偽造) のこと。この攻撃で偽造されるのは、サーバへの依頼 (リクエスト) である。
出題のポイント
- 混同注意CSRF で不正な処理を実行するのは正規サイトのサーバであり、攻撃者のスクリプトを利用者のブラウザで動かす XSS とは、不正な処理が起きる場所が異なる。
「クロスサイトスクリプティング」と「クロスサイトリクエストフォージェリ」の違い
クリックジャッキング は、透明にして見えなくした別サイトの画面を罠のページに重ね、利用者に意図しないボタンを クリック させる攻撃である。
利用者に見えているのは罠のページのボタンだけだが、実際に押しているのは上に重なった見えない画面のボタンである。その結果、ログイン中のサービスで設定の変更や公開範囲の切り替えなどが、本人の知らないうちに行われる。対策の例として、自サイトの画面を他のサイトの中に重ねて表示させない設定がある。
たとえ案内板のボタンの前に、別のスイッチを付けた透明な板を立てておき、案内板のボタンを押そうとした人に板のスイッチを押させるようなもの。
覚え方ジャッキングはハイジャック (乗っ取り) の jack と同じ。乗っ取られるのは利用者のクリックである。
出題のポイント
- 混同注意クリックジャッキング では利用者自身のクリックが悪用される。ページを開くだけでブラウザから依頼が送られる CSRF とは、操作の乗っ取り方が異なる。
ドライブバイダウンロード は、Web ページを開いただけで、利用者の知らないうちに マルウェア (不正なプログラム) を送り込んで感染させる攻撃である。
攻撃者は、改ざんした正規サイトや自分で用意した罠のサイトに不正なプログラムを仕込んでおく。利用者がそのページを開くと、ブラウザやプラグイン (ブラウザの追加機能) の 脆弱性 (セキュリティ上の弱点) が突かれ、ファイルを開くなどの操作をしなくても感染する。OS やブラウザを更新して脆弱性をふさいでおくことが主な防御になる。
たとえ通りかかった家の前で、門をくぐってもいないのに塀越しに荷物を投げ込まれるようなもの。受け取る操作をしなくても荷物は届いてしまう。
覚え方drive-by は「車で通りかかりざまに」という意味。通りかかっただけ、つまりページを閲覧しただけで被害に遭うと読む。
出題のポイント
- 出題ドライブバイダウンロード は、ページを表示しただけでブラウザなどの弱点を利用してマルウェアを入り込ませる攻撃で、利用者は感染に気付きにくい。
この用語の過去問 1 題 ドライブバイダウンロード →
SQLインジェクション は、Web アプリケーションの入力欄に SQL (データベースを操作する命令の言語) の断片を紛れ込ませ、開発者が想定しない命令をデータベースに実行させる攻撃である。
入力された文字列をそのまま命令文の一部としてつなげるプログラムでは、入力に混ぜた記号や語句によって命令の意味が書き換わる。その結果、非公開の会員情報の読み出し、データの改ざんや削除、ログイン認証のすり抜けなどが起こる。対策は、入力を命令文と切り離して扱うしくみ (プレースホルダ) の利用や、入力値の検証である。
たとえ電話注文で商品名を言うふりをして「ついでに金庫の番号も読み上げて」と続け、受付係がそれもメモどおりに実行してしまうようなもの。
覚え方インジェクションは英語の injection (注入) で、注射を指す語でもある。
出題のポイント
- 出題SQLインジェクション は、人の油断や思い込みにつけ込む手口ではなく、プログラムが入力を扱うしくみの弱点を突く技術的な攻撃である。
- 混同注意入力欄に紛れ込ませるのがデータベースへの命令なら SQLインジェクション、閲覧者のブラウザで動くスクリプトなら XSS である。
この用語の過去問 1 題 SQLインジェクション →
ディレクトリトラバーサル は、ファイル名の指定に上の階層へ戻る パス の書き方を混ぜ、サーバ上の公開していないファイルを読み出す攻撃である。
パスとは、フォルダ (ディレクトリ) の階層をたどってファイルの場所を示す書き方で、例えば「../」は一つ上の階層を表す。利用者が指定したファイル名をそのまま使って中身を返すプログラムでは、「../」を重ねることで公開用のフォルダの外へ出られてしまう。対策は、指定されたファイル名を検証して階層の移動を許さないことや、公開しないファイルへのアクセス権を絞ることである。
たとえ資料室の窓口に「この棚の 3 冊目」ではなく「この棚から通路へ戻り、奥の書庫の 1 冊目」と頼み、確かめずに非公開の資料を出させるようなもの。
覚え方トラバーサルは traverse (たどる・横切る) から来た語。ディレクトリの階層をたどって外へ出る、と語の並びがそのまま手口を表す。
出題のポイント
- 混同注意ディレクトリトラバーサル が狙うのはサーバ上のファイルであり、データベースに命令を実行させる SQLインジェクション とは標的が異なる。
「SQLインジェクション」と「ディレクトリトラバーサル」の違い
バッファオーバーフロー攻撃 は、プログラムが入力用に確保した記憶領域 (バッファ) の大きさを超えるデータを送り込み、プログラムに想定外の振る舞いをさせる攻撃である。
← 図は横にスクロールできます →
入力の長さを確かめないプログラムでは、領域からあふれたデータが隣のメモリの内容を上書きする。上書きの結果、プログラムが異常終了したり、攻撃者が送り込んだ命令が実行されたりする。対策は、入力の長さの検査に加え、欠陥を直した修正プログラム (パッチ) をソフトウェアに適用することである。
たとえ決まった大きさの升に米を注ぎ続け、あふれた米が隣の升に流れ込んで中身を混ぜてしまうようなもの。
覚え方オーバーフローは overflow (あふれる)。バッファはもともと「緩衝材・一時置き場」を指す語である。
出題のポイント
- 出題バッファオーバーフロー攻撃 は、入力用に確保された領域の大きさを超えるデータを与えて、プログラムに想定外の振る舞いを起こさせる攻撃である。
- 出題原因はソフトウェアの作りの欠陥 (脆弱性) なので、脆弱性を直す修正プログラム (パッチ) を適用することが有効な対策になる。
- 混同注意1 回の入力が長すぎることで起きるのが バッファオーバーフロー攻撃 である。要求を大量に浴びせてサーバを応答不能にする DoS 攻撃 とは別物である。
この用語の過去問 2 題 バッファオーバーフロー攻撃 →
「クロスサイトスクリプティング」と「バッファオーバーフロー攻撃」の違い
要点
- この単元の攻撃の多くは、利用者から受け取った入力を確かめずに使うプログラムの作りを突く。入力の無害化や検証が共通の基本対策になる。
- ページを表示しただけで被害が始まる攻撃もあるため、OS やブラウザを最新に保って脆弱性をふさぐことが利用者側の防御になる。
- CSRF やクリックジャッキングのように、利用者がログインしたままの状態を悪用して、本人が意図しない処理を本人の操作として実行させる攻撃もある。
この分野の過去問をすべて見る →