セッション管理の不備やアクセス制御の不備が存在すると、情報漏えいや不正アクセスのリスクが高まります。本記事では、セッション管理とアクセス制御についての基本的な知識から、脆弱性の概要、脆弱性を悪用した攻撃の手口、そして攻撃を防ぐための対策方法についてご紹介します。
前回までの内容
SQLインジェクションは、Webアプリケーションの脆弱性の一つです。攻撃者は不正なSQL文を挿入してデータベースを操作することにより、データベースの内容を改ざんし、顧客の情報を不正に取得します。SQLインジェクション攻撃はSQL文の組み立て方法に問題があり、攻撃者が挿入した不正なSQL文を誤った命令文として認識してしまうことで発生します。攻撃を受けてしまった場合、顧客情報や決済履歴などの機密情報が漏洩する恐れがあり、企業の信用やブランドイメージに大きなダメージを与えます。対策方法ととして、プレースホルダを使用したSQL文の構成、特殊文字のエスケープ処理、SQLエラー情報の非表示化、アカウントの適切な権限付与などがあります。これらの対策は、データベースのセキュリティを維持し、攻撃を防ぐために重要です。また、SQLインジェクションの脆弱性を検出する方法として、入力フィールドに本来許可されていない文字列を設定し、Webアプリケーションの反応を観察する方法があります。このようなテストを通じて、企業のセキュリティ担当者がSQLインジェクションの脆弱性に対する問題を理解し、社内で情報を共有し、適切な対策とることで、攻撃を未然に防ぐことが可能になります。また、Webサイトの機能追加や新しい攻撃手法の発見等によって生まれた新たな脆弱性には、定期的にセキュリティ診断を実施することで適切な脆弱性対策をすることができます。
前回記事「SQLインジェクションの脆弱性 -Webアプリケーションの脆弱性入門 2-」より
セッションとは
セッションとは、クライアントがサーバに接続してから切断(あるいはログインしてからログアウト)するまでの一連の流れのことです。この一連の流れを管理することをセッション管理と呼びます。セッション管理はユーザの識別や状態の維持のために必要とされます。例えば、オンラインショッピングサイトで商品をカートに追加した際、その情報はセッションとして保存されます。
セッション管理の不備とは
Webアプリケーションの中には、セッションID(ユーザを識別するための情報)を発行し、セッション管理を行うものがあります。このときセッションIDを固定化できたり、日付・誕生日・ユーザ名で作られたりしているなど、有効なセッションIDが推測可能であるといったセッション管理の不備があると、セッションハイジャックと呼ばれる攻撃が成立する危険性があります。これにより、攻撃者が本来のユーザになりすまして権利を行使することで、プライベートな情報の閲覧や、設定の変更などが行われる可能性があります。
セッション管理の不備の脆弱性を悪用した攻撃
セッションハイジャック
セッションハイジャックは、攻撃者が他のユーザのセッションIDを盗み取り、そのIDを使用してユーザのアカウントに不正アクセスする行為を指します。有効なセッションIDを推測あるいは奪取する手段が存在している場合に、セッションハイジャックが成立するリスクが高まります。
セッションハイジャックが成立するリスクを高める要因となる脆弱性および攻撃方法には、以下のようなものがあります。
セッションIDの固定化(セッションフィクセーション)
攻撃者が事前にセッションIDを設定し、そのIDをユーザに強制的に使用させることができる脆弱性を悪用してユーザのセッションを乗っ取る攻撃方法です。この攻撃は、ユーザがログインする前にセッションIDが設定され、その後も変更されない場合に発生します。
セッションIDの推測
セッションIDが日付や誕生日、ユーザ名で構成されていたり、連番で発行されていたりするなど、簡単に予測できるものであった場合、攻撃者はそのIDを推測してユーザのアカウントにアクセスできてしまいます。また、セッションハイジャックの原因は多岐にわたり、他の脆弱性を悪用されることで有効なセッションIDが奪取される場合もあります。
Webアプリケーション/ネットワークの脆弱性の悪用
攻撃者によりWebサイトの脆弱性を突かれ、不正にユーザとWebサイトの間に介入されたり、ネットワークを盗聴されたりするなどして、ユーザのセッションIDを奪取される可能性があります。代表的な攻撃手法のひとつには、以前の記事で解説した「クロスサイトスクリプティング」も挙げられます。また、通信のやり取りではセッションIDが暗号化されておらず、平文のままデータのやり取りをしている場合にも、攻撃者に狙われやすくなります。
セッション管理の不備の脆弱性を悪用した攻撃を防ぐための対策方法
セッションIDの取り扱いや、セッションの有効期限の設定などに問題がある場合、攻撃者がセッションを乗っ取ることが容易になり、機密情報を盗み見られたり、不正な操作をされたりするなどのリスクが発生します。では攻撃を防ぐためにどのような対策方法をとればよいのでしょうか。以下に例をご紹介いたします。
セッションIDを推測困難なものにする
攻撃者によってセッションIDを推測されてしまった場合、そのユーザになりすまして、本来アクセスできないサイトに第三者がアクセスできてしまう恐れがあるため、セッションIDは推測困難な値にする必要があります。
ログイン、ログアウトといった処理を行う際は、新しいセッションIDを発行する
ログイン時にセッションIDの正当性を検証することで、攻撃者があらかじめ用意したセッションIDを強制的に使用させられることを防ぎます。
セッションハイジャック対策
有効なセッションIDを奪われないようにすることだけでなく、セッションIDを奪われたとしてもセッションハイジャックを成立させないような環境を作るのが対策のポイントです。
- セッションIDとワンタイムトークン付与によるユーザの確認:セッションIDとは別にログイン成功後にワンタイムトークンを発行し、画面遷移ごとにサーバ側で管理しているトークンと照合します。発行するワンタイムトークンは、推測困難かつランダムな文字列で構成する必要があります。
- IPアドレスによるユーザの確認:ユーザを特定する情報として、IPアドレスを使用することが可能です。さらに、セッションIDをCookieで管理している場合には、Cookieにsecure属性およびHttpOnly属性を設定することで、攻撃者によるCookie情報奪取のリスクを緩和できます。
対策例としては、上記のとおりですが、セキュリティ専門家への相談も重要です。現在の技術環境では、常に新しい脅威が出現するため、対策は継続的に見直し、強化する必要があります。
アクセス制御の不備とは
アクセス制御の不備とは、Webアプリケーションにおいて、本来付与されている権限の範囲内でのみ動作するような制御が実装されていない問題を指します。例えば、一般ユーザとしてログインした際に管理者としての権利を行使できてしまう権限昇格、パラメータを操作することで、本来制限された領域外のファイルやディレクトリにアクセスすることが可能となるパストラバーサルなどです。不正アクセスや意図しない情報の公開をはじめとした、様々なリスクが生じます。
アクセス制御の不備の脆弱性
権限昇格
ログインすることなくユーザとしてシステムに対する操作を実行できたり、一般ユーザが本来与えられていない上位権限(管理者権限等)を一時的に取得することで、システムに対する不正な操作や機能の実行が可能になったりする問題。
パストラバーサル
外部からのパラメータでWebサーバ内のファイル名を直接指定するWebアプリケーションにおいて、URLパラメータを操作して不正なパス名を渡すことで、本来アクセスを許可されていないディレクトリやファイルに対して、攻撃者がアクセス可能になる問題。
不適切な情報の出力
本来権限が与えられているユーザのみアクセスできるものに対して、不正なユーザが本来許可されていない特定のURLにアクセスしたり、操作を行ったりすることで、外部に公開されていない情報(機密情報・ユーザ情報)が閲覧可能になる問題。
アクセス制御の不備を悪用した攻撃を防ぐための対策方法
主な対策方法は以下の通りです。
権限昇格
権限管理を行う際は、外部から値を操作可能なパラメータは使用せずサーバ側で行う実装とし、権限による機能制限を実装する際には、各機能へのアクセス時に実行者のアカウントと権限のチェックを実施します。
パストラバーサル
アプリケーションが取得するファイルは既定のディレクトリに保存し、アクセスするファイルパスを操作できないようにし、サーバ上でアプリケーションを実行するアカウントのアクセス権限を見直します。また、あらかじめ定義したホワイトリストに基づいた入力値検証を実施し、ファイル名に不正な文字列が含まれる場合は、適切なエラー処理を行うことが推奨されます。
不適切な情報の出力
外部への公開が不要なディレクトリやファイルは、外部からアクセスできないように適切なアクセス制御を行います。ログイン認証によるアクセス制御を実施する場合には、適切なセッション管理を伴った認証機構を実装してください。また、アプリケーションの動作に必要がないディレクトリやファイルは削除することを推奨します。
まとめ
セッション管理の不備は、セッション管理に不備があることで、ユーザになりすまし、プライベートな情報の閲覧や、設定の変更などができてしまう問題です。対策方法としては、セッションIDを容易に推測できないものにし、ワンタイムトークンの発行やIPアドレスによるユーザの確認を行うなど、適切なセッション管理を実装することで、ユーザの情報やデータを安全に保護することができます。
アクセス制御の不備は、Webアプリケーションにおいて、本来付与されている権限の範囲内でのみ動作するような制御が実装されていない問題を指します。ユーザに対して、あらかじめ与えられた権限から外れた操作を実行できないようにポリシーを適用することにより、情報の漏えいやシステムの不正操作を防ぎます。
セキュリティ対策を適切に実施することが、Webアプリケーションの安全性を高めるための鍵となります。ユーザの情報やデータを保護するために、セキュリティ専門家への相談、常に最新のセキュリティ情報の収集をすることなどが重要です。
Security Report TOPに戻る
TOP-更新情報に戻る