Webアプリにおける11の脆弱性の常識と対策:Webアプリの常識をJSPとStrutsで身につける(11)(3/4 ページ)
本連載は、JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外(PHPやASP.NET、Ruby on Railsなど)の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です
【7】セッション管理に関する脆弱性
Webサイトに訪れたユーザーが行った画面遷移や入力値、操作内容などの情報を「セッション」といい、そのセッションをサーバが常に保持することでサーバが特定のユーザーを認識する仕組みを「セッション管理」といいます。
このセッション管理に関する脆弱性で、代表的なものをいくつか紹介していきます。
■セッション管理方法の弱点
セッションの管理方法には、以下などがあります。
- hiddenタグにセッションIDを入れる
- URLの後ろにセッションIDを入れる
- クッキーにセッションキーを入れる
これらのうち、セッションキーをクッキーに入れる方法が一般的に用いられます。XSSなど脆弱性があればクッキーの値が漏えいして、セッションを乗っ取られる可能性があるので、脆弱性をなくすことは重要です。
■推測しやすいセッションID
セッションIDが一定の法則に基づいて設定されていることや、容易に推測が可能なセッションIDである場合、管理者やユーザーに“なりすます”ことが可能となります。結果的として情報が取得されたり、改ざんされたりする恐れがあります。
■アクセス制御の欠如
本来であれば閲覧できないページが、セッション管理されていなかった(アクセス制御の欠如していた)ためにログインなしで閲覧可能になってしまう現象があります。これにより、情報流出などの被害を受ける恐れがあります。
■ユーザー識別の欠如
ログイン画面でユーザーを識別しているが、その後の画面でユーザーの識別情報を直接URLやクッキーに格納している場合、URLパラメータを変更することで任意のユーザーに“なりすまし”され、個人情報が取得されてしまう恐れがあります。
■対策
編集部注:セッション管理に関する脆弱性の対策に関しては、以下の記事をご参考にしていただければと思います
安全なセッション管理を実現するために
Strutsで作るセキュアWebアプリケーション(4) Strutsを使用したWebアプリではセッション固定攻撃の成功条件が揃いやすい。その根拠と対策を解説する
「Security&Trust」フォーラム 2006/8/1
気を付けたい貧弱なセッション管理
Webアプリケーションに潜むセキュリティホール(3) セッションハイジャックによりさまざまなセッションIDを用いて大量のデータが盗まれてしまう。大被害となる前の対策とは
「Security&Trust」フォーラム 2003/7/9
【8】パス/ディレクトリトラバーサル(乗り越え)
パス/ディレクトリトラバーサル(乗り越え)とは、ファイルをWebアプリケーションが使用する際に、相対/絶対パス表記を用いて任意のファイルにアクセスすることです。
外部からファイル名(の一部)を指定できるアプリケーションの場合、通常は決められたディレクトリのファイルだけを閲覧・更新できる想定になっています。
しかし、ファイル名の前にディレクトリを追加することで、アプリケーションの想定外のディレクトリのファイルにアクセスされてしまい、情報漏えいやファイルの破壊などが行われる恐れがあります。
皆さんご存じのTomcatでも、この脆弱性が発覚したことがあります(参考:Tomcatにディレクトリトラバーサル脆弱性、NTTデータ・セキュリティが注意喚起)。
■対策
対策方法の1つとしては、ファイル名からディレクトリ情報を取り除く関数(PHPだと、basename関数など)を用いて、ディレクトリ情報を取り除く方法があります。
編集部注:パス/ディレクトリトラバーサルの対策に関しては、以下の記事もご参考にしていただければと思います
サーバのファイルが丸見え?!
連載:Webアプリケーションに潜むセキュリティホール Webアプリケーションに潜むセキュリティホールが注目されている。その危険を認識し、セキュアな開発を目指そう
「Security&Trust」フォーラム 2003/5/7
Flashで作ったゲームも攻撃対象になるんです!
星野君のWebアプリほのぼの改造計画(5) 星野君の趣味はFlashでゲームを作ること。ところが、このゲームのせいで星野君の休日がどんよりしたものに……
「Security&Trust」フォーラム 2006/3/11
リクエストをいじれば脆弱性の仕組みが見えるのだ!
もいちどイチから! HTTP基礎訓練中(2) Webサイトを見るということは、HTTPのやりとりを行っているということ。それをのぞき見していじってみるとさらに理解が深まります
「Security&Trust」フォーラム 2007/10/26
【9】バッファオーバーフロー(バッファオーバーラン)
バッファオーバーフローとは、プログラムが受け取ったデータを格納するために確保している「バッファ」と呼ばれるメモリ領域を、わざとオーバーフロー(許容量を超える)させて、プログラムの誤作動を引き起こすことや、あふれ出たデータを実行させてしまう脆弱性のことです。
■対策
対策として、バッファの領域を超えないようプログラムにチェック処理を加えることも1つの手段ですが、バッファオーバーフローの起きにくいJavaやPHP、Perlなどの言語を選択することが、Webアプリでは一般的です。
編集部注:バッファオーバーフローの対策に関しては、以下の記事もご参考にしていただければと思います
5分で絶対に分かるバッファオーバーフロー
最近よく聞く「バッファオーバーフローの脆弱性」、バッファあふれがなぜ攻撃につながるのでしょうか? そのワケを5分で解説しましょう
「Security&Trust」フォーラム 2008/3/21
【10】バックドアとデバッグオプション
Webアプリケーションの開発時や障害が発生した場合の調査のために、開発者がバックドアやデバッグオプションを利用または、準備していることがあります。
このバックドアやデバッグオプションがコードに残っている状態でシステムの運用が開始されると、悪意あるユーザーから、バックドアの利用やデバッグモードの起動が行われる可能性があります。このとき、ユーザーは管理者レベルの権限でシステムに入り込むことが可能になるので、内部情報の漏えいや、サーバに不正アクセスされる恐れがあります。
■対策
対策としては、開発においてバックドアやデバッグオプションの禁止が理想です。しかし、デバッグやテストなどの目的でバックドアやデバッグオプションを使わざるを得ないケースもあるので、その場合は、バッグドアなどの管理ルールを定めて、リリース前にバックドアなどを確実に取り除くことが重要です。
【11】エラーコード
利用者のオペレーションミスや、サーバで何らかのエラーが発生した際に返却されるエラーコードによって、悪意あるユーザー攻撃のヒントを与えることがあります。
また、エラーコードに限らずスクリプト上で発生するエラーメッセージにも攻撃のヒントを与えることになります。
■対策
対策としては、エラー画面の置き換えや、エラー表示やバックトレースの抑止が有効といわれています。
編集部注:エラーコードの対策に関しては、以下の記事もご参考にしていただければと思います
次ページでは最後に、脆弱性の対策としてバリデーション(入力チェック)のJava/Strutsコードを示します。
Copyright © ITmedia, Inc. All Rights Reserved.