![]() |
【連載】
セキュアなWebサイトを運営するための
Webアプリケーションに潜むセキュリティホール
第14回
Webアプリケーションの脆弱性を総括する
中村隆之
三井物産セキュアディレクション
2005/3/4
| ※ご注意 他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。 また、本稿を利用した行為による問題に関しましては、筆者およびアイティメディア株式会社は一切責任を負いかねます。ご了承ください。 |
今回は本連載の最終回ということで、まとめとしてこれまでに説明してきたWebアプリケーションの脆弱性1つずつ簡単に説明していくことにする。一部、サンプルコードを示している個所もあるので開発を行っている読者は参考にしてほしい。
| クロスサイトスクリプティング |
攻撃者が作成したスクリプトを脆弱なWebサイトを介して、ほかのユーザーのブラウザ上で実行させる攻撃のことである。これにより正規ユーザーのセッション情報が盗まれてなりすまし攻撃を受けたり、偽のページを表示させてフィッシング詐欺に利用されたりする。
●脆弱性が存在する可能性がある個所
クロスサイトスクリプティングは以下のような個所で発生する。
(1)ユーザー入力が次の画面に出力される個所
GETで渡したパラメータ値がそのまま表示されるような個所では、以下のようなリンクを作成できる。
| http://www.example.com/bbs.cgi?text="><script>alert('xss')</script> |
これは、近年被害が増加してきているフィッシング詐欺に利用できるパターンである。上の例ではアラートボックスを表示するだけであるが、任意のページを表示できるため「本物そっくりのページ」を「本物のサイト」上に表示できる。
(2)掲示板やメールのように任意の文字列を別ユーザーに見せることができる個所
この方法は(1)のように攻撃用のリンクを作成することはできないが、攻撃用のスクリプトをサーバ上のアプリケーション機能を介してほかのユーザーに送りつけられるため攻撃が成功する可能性がある。
●対策
- 入力チェック
- サニタイジング
ユーザーからパラメータを受け取ったら、まずは入力チェックを行い想定している文字列であるかどうかチェックすることが先決である。この対策でWebアプリケーションへの攻撃はほぼ防げる場合が多い。ただし、クロスサイトスクリプティングへの対策はサニタイジングを行うことなので、入力値を表示する際は必ずサニタイジングを実施するようにしてほしい。
●言語別の対策例
以下に、サニタイジングを行うコードを言語別に紹介しておく。ただし、これが唯一の書き方ではなく、ほかの方法で同様の機能が実施できるのであればそれでも構わない。
perl
| $text =~ s/&/\&/g; $text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/"/"/g; |
PHP
| $safe_text = htmlspecialchars($text); |
ASP
| Dim writer As New StringWriter Server.HtmlEncode(text, writer) Dim safe_text As String = writer.ToString() |
| パラメータ改ざん |
アプリケーションがURLパラメータやhidden、Cookieなどに入れた値を書き換えてサーバに送り返す攻撃である。これにより価格改ざんや他人へのなりすまし攻撃を受ける可能性がある。
●脆弱性が存在する可能性がある個所
パラメータ改ざんは以下のような個所で発生する。ここでは「存在する可能性がある機能」を示す。
パラメータ改ざんが起こるのは、サイト全体では正しいセッション管理を行っているのに、ある一部分だけ改ざん可能なパラメータに依存してしまっている場合が多い。それ故セッション管理方法に問題がないからといって油断してはいけない。
個人情報表示
hiddenにユーザー識別番号が入っていて、そのIDに依存してしまっていることがある。IDの生成方法が単純であれば全ユーザーの個人情報を抜くことが可能となる。
ショッピング
URLパラメータやhidden内に価格が入っていることがある。商品発送に人間を介するのであれば、ある程度は運用でカバーできるかもしれない。しかし、音楽データや画像データなどのダウンロード販売では、価格改ざんが即被害につながってしまうため、改ざんされないようにすべきである。
問い合わせ
問い合わせの送信先のメールアドレスが入っていることがある。これにより任意のあて先にメールが送信できてしまうことになる。
ファイルのダウンロード
バンキングシステムの取引明細のようなデータをPDF化してダウンロードできる機能がたまにある。このとき、生成するファイル名が推測可能であると、これを書き換えることにより他人のファイルをダウンロードできることがある。
この例は、パラメータ改ざんだけの問題ではなく「ファイル名の生成アルゴリズム」や「サーバ上のファイルの有効期間」などの問題も絡んでいる。しかし、パラメータ改ざんにも関連があるため、このカテゴリーに含めた。
●対策
改ざんされてしまうことが問題であるため、改ざんできない個所で値を管理する方法を取ればよい。以下のような方法が有効である。
- セッション変数を利用する
- データベースでパラメータ値を管理する
- パラメータ値のハッシュ値を使う(これにより改ざんを検知できるようになる)
ハッシュ値を使う方法だけ簡単に説明しておこう。
(1)サーバ側で秘密の文字列を保持しておく。
(2)hiddenの中に「改ざんされたくない文字列」(A)と「『A+秘密の文字列』のハッシュ値」(B)を入れておく。
(3)AとBがサーバに送られてくる。
(4)サーバ側ではAと秘密の文字列のハッシュ値を取りBと比較する。改ざんされていなければ結果は同じになる。
この方法による安全性を維持するためには、サーバ側で管理する秘密の文字列を定期的に更新することが望ましい。更新はサーバとクライアント間のセッションを切らずに行う必要があるが、詳しい実装方法には触れないことにする。
●言語別の対策例
PHP、Java(JSP/Servlet)、ASP、ASP.NETではセッション管理機能を持っている。セッション変数も使えるのでそれを使用するとよい。使用方法についてはここでは割愛させていただく。
|
1/5
|
| Index | |
| Webアプリケーションの脆弱性を総括する | |
| Page1 クロスサイトスクリプティング パラメータ改ざん |
|
| Page2 SQLインジェクション OSコマンドインジェクション |
|
| Page3 Path Traversal バックドアとデバックオプション |
|
| Page4 Client Side Comment Forceful Browsing |
|
| Page5 セッション系の脆弱性 Error Codes |
|
Webアプリケーションに潜むセキュリティホール バックナンバー
- 第1回 サーバのファイルが丸見え?!
- 第2回 顧客データがすべて盗まれる?!
- 第3回 気を付けたい貧弱なセッション管理
- 第4回 エラーメッセージの危険性
- 第5回 Webアプリケーションの検査テクニック
- 第6回 Webサイトのセッションまわりを調べる方法
- 第7回 攻撃されないためのセッション管理の検査方法
- 第8回 Webサイトの問い合わせ画面に含まれる脆弱性
- 第9回 オンラインショッピングにおける脆弱性の注意点
- 第10回 安全なWebアプリケーション開発のススメ
- 第11回 Webアプリケーションファイアウォールによる防御
- 第12回 mod_securityのXSS対策ルールを作成する
- 第13回 OSコマンドインジェクションを防ぐルールを作成する
- 最終回 Webアプリケーションの脆弱性を総括する
| Profile |
| 中村隆之(なかむらたかゆき) 三井物産セキュアディレクション株式会社勤務。 セキュリティコンサルタントとして主にWebアプリケーションのセキュリティ検査に従事しており、大手ポータルサイト、オンラインバンキングなどの数多くの検査実績を持つ。また、セキュアネットワーク及び暗号関連の研究に携わり、大手製造、官公庁、金融機関へのセキュリティシステム導入など数多くの実績を持つ。 三井物産セキュアディレクション株式会社 主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サー ビスも実施中。 |
|
||||||||
| Security&Trust記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- この脆弱性対策エンジンは“永遠に完成しない” (2010/3/9)
パターンファイルに頼らず防御する「要の技術」は、いまも完成にはいたっていない。その理由とは―― - Gumblarがあぶり出す 「空虚なセキュリティ対策」 (2010/3/1)
ガンブラーの脅威は、組織の構造や外部委託問題をあぶり出します。そのセキュリティ対策、建前論になっていませんか? - 決済アプリのセキュリティ基準、PA-DSSとは (2010/2/24)
“ペイメントアプリケーション”のセキュリティ基準を定めたPA-DSS。厳密に定められた14の要件を、PCI DSSと対比させつつ解説します - 「鍵は“J”の中にあるよ」CTF by ダークナイト解答編 (2010/2/22)
ダークナイトからの挑戦状、いかがだっただろうか。WiresharkにNetworkMiner、WinRARを駆使し、“J”に隠された秘密を解き明かせ!
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







