診断の現場からの提言!Webサイトの脆弱性が潜む場所を知る

2010年11月24日(水)
近藤 伸明

(4)郵便番号検索(問合せフォームや会員登録など)

・発見される脆弱性: SQLインジェクション
入力フォームなどに住所を入力する際、郵便番号検索機能も付いていることがあります。郵便番号を入力して検索ボタンを押すと、住所項目に検索された住所が自動的に埋め込まれる機能です。
この機能を自作されている場合、SQLインジェクションが発見されることがよくあります。
作られる方は、郵便番号と住所しか入っていないテーブルだから漏えいしても困らないということで、楽観視されているのかもしれませんが、対象テーブル以外から情報が漏えいするケースもありますので、しっかりと対策を行うべきです。
正規のデータを登録・修正するロジックから離れた場所にあるための単純なチェック漏れかもしれませんが、特に数値項目として扱われている場合は、バリデーションのチェックも行われていないことが往々にしてありますので、こちらも合わせて対策を行ってください。

(5)ログイン後画面で、IDで管理された複数のデータを登録・編集する場合

・発見される脆弱性:不適切な認証
会員情報の管理機能の中で、お届け先情報画面のように会員ごとに複数のデータを持つ管理画面において、他の会員のデータを編集・削除できてしまう問題点が意外に多く発見されています。
例えばお届け先情報ごとにIDが付与されているのですが、IDを改ざんして他の会員のIDを使用してもエラーにならないのです。ログインしている会員のアカウントとIDの妥当性をチェックしていないことが原因です。IDも連番になっているケースが多く、他の会員が使用しているIDが推測しやすい点も問題の発生しやすさを助長しています。

(6)会員専用のダウンロード機能

・発見される脆弱性:不適切な認証
会員機能の中に、会員特典としてファイルのダウンロードを許可しているサイトがあります。通常であれば会員用のログイン機能を経由しなければダウンロード画面を実施することはできないのですが、ダウンロード対象のファイルのURLを直に指定してアクセスした場合、会員以外の人でもファイルをダウンロードできてしまう脆弱性が数多く発見されています。
ダウンロード対象ファイルを会員以外の人でもアクセスできる場所に保存し、それをダウンロードさせようとしているのが原因です。

(7)ログイン画面(パスワードの桁数不足)

・発見される脆弱性:総当たり攻撃
会員専用のページなどで、ログイン用のID・パスワードが必要な場合、パスワードの桁数や使用する文字の種類が少ないケースがあります。数値のみ4桁というものも存在しました。脆弱性として指摘するケースとしては、英数6桁と言うものが比較的多いようです。
利用者の利便性とのトレードオフとなりますので、なかなか制限しにくいところですが、短い桁数の方は見直されることを勧めます。

(8)パスワード忘れの処理

・発見される脆弱性:情報漏えい
パスワードを忘れた会員が、当該サービスを再度利用できるようにするためには、パスワード復帰処理が不可欠です。
しかし、パスワードを忘れた会員が登録したメールアドレスを入力すれば、サイト画面経由での受け渡しではなく、当該メールアドレスにパスワードをそのまま送ってしまうサイトもみられます。
メールの送信経路は暗号化されていませんので、パスワードを暗号化せずに送るのは非常に危険です。

(9)エラーメッセージ

・発見される脆弱性:情報漏えい
誤った操作を行った場合、エラーメッセージが表示されますが、このエラーメッセージが、コンテンツとして作成されたものではなく、システムが表示するエラーメッセージをそのまま表示しているサイトは未だに多いようです。その中にはWebアプリケーションや言語のバージョンを表示してしまうサイトも存在します。データベースのエラーメッセージをそのまま表示してしまうケースも存在し、ひどい場合は、生成したSQL文をそのまま表示してしまうケースも存在します。
これらの情報は攻撃者にとって有用な情報となってしまいます。

(10)ログイン後画面

・発見される脆弱性:セッションハイジャック
会員画面などログイン後の画面をSSLで暗号化し、セッション情報をCookieに格納しているケースはよく存在します。
その様なケースでセッション情報を格納しているCookieのセキュア属性がOFFになっているケースが多く見受けられます。
SSLで暗号化されている画面を遷移している限りは問題ありませんが、暗号化されていない画面に遷移する際にセッション情報が漏えいする可能性があります。

図3:Cookieのセキュア属性がOFFになっている例

(11)その他、画面遷移を行う際のパラメータ

・発見される脆弱性:XSS(クロス・サイト・スクリプティング)
画面遷移を行う際のデータ引き渡しにはいろいろな方法があります。URLクエリを使用したGETデータの場合や入力フォームなどで使用されたPOSTデータについては、比較的セキュリティ対策がなされているケースが多いですが、同じPOSTデータでもhidden項目については、未だに対策漏れとして脆弱性が発見されるケースが多いようです。
その他に、Cookieに格納されたデータも対策が漏れるケースが若干あります。hidden項目やCookieは、URLクエリや入力フォームに比べ目につきにくいのでテストの際にチェックから漏れているのかもしれません。
その他、目につきにくい個所としてはHTTPヘッダもありますが、HTTPヘッダの値を画面に出力するケースがないようで、脆弱性はほとんど発見されていません。

(12)上記のようなケースが見かけられたらどうする?

自社のサイトで、上記のようなケースを見かけたら、開発者にセキュリティ対策されているか、一度確認ください。可能ならば、どのような対策をされているのか詳細に確認してみましょう。

株式会社神戸デジタル・ラボ

2003年神戸デジタル・ラボに入社。
2007年からWebセキュリティ診断業務を事業化し、現在に至る。
2008年4月に経済産業省から発表された「モデル取引・契約書(追補版)」のセキュリティガイドライン ワーキング・グループ委員として「Web アプリケーションセキュリティ」を担当。
2010年10月、CSS2010にてセキュリティ関連論文を発表するなど、診断業務のかたわらセキュリティ基盤研究開発業務に活躍中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています