本連載は、JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外(PHPやASP.NET、Ruby on Railsなど)の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です
本稿において読者の皆さまより多数のご指摘をいただきまして、誠にありがとうございます。編集部であらためて調べた結果、間違いを把握し、あらためて修正版を掲載させていただきます。この度は、長期にわたり誤った内容を掲載したので、読者の皆さまに多大なご迷惑をお掛けしたした点をおわび申し上げます。
通常、記事に間違いがあった場合には、筆者確認後に修正版を掲載するのですが、今回の場合、初出時より時間が経過してしまっていたこともあり、筆者と連絡が取れませんでした。今回は影響が大きいこともあり、編集部内で直せる部分については極力対応し、再掲載させていただきました。修正に際しては、本稿にご指摘をいただいた徳丸浩さまにご協力いただきました。徳丸さまには、この場を借りてお礼申し上げます。また、内容について正確を期せずに混乱を招いた点、あらためて読者の皆さまにおわび申し上げます。
あらためて確認しておきますが、Webアプリケーションとは、Webサーバ上で動作するソフトウェアのことです。具体例には、オンラインショッピング・オンラインバンキングなどを指し、私たちユーザーはWebブラウザでこれらのサービスを利用します。
このように、非常に利便性の高いWebアプリケーションでも注意しなければならないことがあります。それは、Webアプリケーションにおけるセキュリティや脆弱性についての問題です。
脆弱性とは、「脆く、傷つきやすく、攻撃に対して弱い」ことです。ハードウェアの欠陥やソフトウェアのバグ、想定外のオペレーションなどが、これに当たります。
このセキュリティ問題については、Webアプリケーションの脆弱性をついた攻撃はユーザー側の注意では防ぐことができないので、ソフトウェアを提供しているベンダが問題を修復する必要があり、Webアプリケーションでは開発者が、セキュリティについて常に留意し、対策を施す必要があります。
一般的なWebサーバのセキュリティ対策というと、ファイアウォールやウイルス対策などがあります。しかし、Webアプリケーションへの攻撃に対しては、これらの対策だけでは不十分です。
Webアプリケーションにおけるセキュリティホールの解説を行う前に、どのような攻撃手法が存在するか簡単に整理しましょう。現在、一般的に知られている代表的な攻撃には、以下のようなものがあります。
攻撃手法 | 概要 | |
---|---|---|
XSS(クロスサイトスクリプティング) | ユーザーのWebブラウザ上で不正なスクリプトを動かす | |
強制的ブラウジング | URLなどでリンクされていない秘密情報や管理者機能に直接アクセスする | |
SQLインジェクション | 不正入力により任意のSQL文を実行させる | |
パラメータの改ざん | Webアプリケーションの期待する値とは別の値を送信し、誤操作させる | |
HTTPレスポンス分割 | 偽ページを多数のに人々に見せる | |
OSコマンドインジェクション | 不正入力により任意のOSコマンドを実行させる | |
セッション管理に関する脆弱性 | セッション情報の推測や盗用を行う | |
パス/ディレクトリトラバーサル | 公開されていないファイルに直接アクセスする | |
バッファオーバーフロー | 配列の範囲を超えた書き込みにより、外部から指定した命令を実行する | |
バックドアとデバッグオプション | 開発者がアプリケーションに不用意に残したデバッグ用の機能などを悪用して不正な操作を行う | |
エラーコード | エラーメッセージの情報を攻撃の糸口にする | |
これらの攻撃のほとんどが、ファイアウォールなどでは防ぐことができず、アプリケーションレベルで対応しなくてはなりません。今回は、表にある11種類の脆弱性について解説し、その対策を説明します。
XSSとは、悪意のあるスクリプトが訪問者のWebブラウザに混入され、実行されてしまう脆弱性のことです。
例えば、入力した文字を画面に表示させるプログラムがあるとします。このプログラムに適切な入力値チェックが実装されていない場合、悪意のあるスクリプトがWeb画面に埋め込まれてしまい、ユーザーのWebブラウザ上で実行されてしまいます。この結果、セッションの乗っ取りやページの書き換え、強制遷移が可能となるため、フィッシング詐欺や“なりすまし”などの犯罪に利用されます。
一般的にデータベース中の特殊記号や、ユーザーからの入力内容をそのまま表示すると、XSSの脆弱性の原因となります。
対策としては、特殊文字のエスケープや入力データチェックなどが必要です。
編集部注:XSSの対策に関しては、以下の記事もご参考にしていただければと思います
適切なエスケープ処理でXSSに備える
Strutsで作るセキュアWebアプリケーション(1) JavaでWebアプリを作成するときに、セキュリティで注意すべき点は? 代表的なカスタムタグを分析する
「Security&Trust」フォーラム 2006/3/23
サーブレットコンテナが抱える問題を認識する
Strutsで作るセキュアWebアプリケーション(2) エラーページの出力が原因となってXSSが引き起こされる可能性がある。サーブレットコンテナに依存しない解決法とは?
「Security&Trust」フォーラム 2006/4/27
クロスサイトスクリプティング対策の基本
前編 クロスサイトスクリプティング脆弱性とは?
中編 XSS脆弱性により起こる被害とその対策
後編 XSSを防ぐために不可欠なサニタイジング(無害化)
Webアプリケーションに存在するセキュリティホールが問題となっており、その代表格「XSS」の仕組みを解説しよう
「Security&Trust」フォーラム
mod_securityのXSS対策ルールを作成する
Webアプリケーションに潜むセキュリティホール(12) Webアプリケーションファイアウォールの「mod_security」を運用する。まずはXSS対策を施してみよう……
「Security&Trust」フォーラム 2004/9/16
XSSは知ってても、それだけじゃ困ります?
もいちどイチから! HTTP基礎訓練中(1) Webアプリのセキュリティについてもっと詳しく知りたいけれど、まず何を勉強すればいいの? そんな疑問に応える新連載!
「Security&Trust」フォーラム 2007/9/28
マルチバイトの落とし穴
星野君のWebアプリほのぼの改造計画(10) 今日も赤坂さんとお勉強。ちゃんと対策されているようにみえるのに、こんな抜け穴があるなんて!
「Security&Trust」フォーラム 2006/9/23
世間の認識とのギャップ――XSSは本当に危ないか?
川口洋のセキュリティ・プライベート・アイズ(13) 脆弱性が1つでも残ってるだなんて論外という方も多いでしょう。ところでその脆弱性、いったい誰が攻撃するんでしょうか
「Security&Trust」フォーラム 2009/3/17
強制ブラウジングは、情報漏えいにつながる可能性の高い攻撃手法の1つで、リンクやボタンの遷移によらず特定のページに直接アクセスし、情報を取得します。
Webアプリケーションプログラム上で、パラメータとしてパス名などを受け入れた場合、Webサーバ経由で本来アクセス権限のないファイルを利用者が取得できてしまいます。このとき、個人情報やサーバの内部情報などが取得されてしまい、個人情報漏えいや、サーバへの攻撃の足掛かりとして利用される恐れがあります。
対策としては、例えばアクセスされてはいけない情報(個人情報など)をWebサーバのドキュメントルート上に置かないことなどが挙げられます。これは、強制ブラウジングに限らず、データ保存場所が原因となるセキュリティに対して有効です。
編集部注:上記強制的ブラウジングの対策は、対策の1つにすぎません。以下の記事などもご参考にしていただければと思います
次ページでは、残りの脆弱性のうち【3】〜【6】について見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.