はじめに
例えば、会員管理を利用して www.magazine.com/accounts/data/news/commentary.html のファイルにアクセスしたとします。その後、URL内の他の場所、例えば www.magazine.com/accounts/data/news や www.magazine.com/accounts/information にもアクセスして、隠された情報を探します。このガイドでは、パストラバーサルの脆弱性とその攻撃手法について説明します。
パストラバーサル攻撃(ディレクトリクロッシングとも呼ばれる)の目的は、ウェブルート外に保存されたファイルやフォルダにアクセスすることです。攻撃者は、ファイルパス内の「../」パターンや直接のファイルパスを操作することで、サーバ上にあるアプリのソースコードや設定ファイルなど、さまざまなファイルやフォルダに到達できる可能性があります。ただし、オペレーティングシステムのアクセス制御によって、ファイルの利用が制限される場合もあります(例:Microsoft Windowsでファイルがロックされている場合など)。
攻撃者は、パストラバーサルに対して脆弱なシステムを利用し、ルートフォルダから脱出してサーバ内の他の領域にアクセスします。これにより、本来隠されているファイルの閲覧が可能になり、さらなる攻撃に利用できる情報を得る恐れがあります。
攻撃者は、サイトのアクセス設定に合わせてクライアントを装いながらコマンドを実行します。そのため、攻撃はサイトクライアントに許可されたシステム内でのみ行われます。
動的ページを持つWebアプリでは、ソフトウェアがGETやPOSTリクエストなどで入力を受け取ります。以下は、HTTP GETリクエストのURL例です。
GET http://test.webarticles.com/show.asp?view=oldarchive.html HTTP/1.1
対象: test.webarticles.com
ソフトウェアは、このURLとともにパラメータ view に oldarchive.html の値を送り、サーバ上の主要なページである show.asp を要求します。show.asp はサーバのファイルシステムから oldarchive.html を取得し、表示してソフトウェアに返す仕組みです。show.asp がファイルシステムにアクセスできる前提で、攻撃者は以下のようにURLを変更します。
GET http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini HTTP/1.1
対象: test.webarticles.com
主要なページは、ファイルシステムから system.ini を取得して表示します。通常、../ という表記は1階層上のフォルダへ移動する指示です。攻撃者は、Windowsのルートフォルダに到達するために必要な階層数を試しながら見極めます。
ソフトウェアの脆弱性に加え、HTTPサーバ自体にもディレクトリトラバーサル攻撃の脆弱性が存在する場合があります。この問題は、HTTPサーバソフトウェアやサーバ上に配置されたデフォルトのコンテンツファイルに見られます。
最新のHTTPサーバソフトウェアでは修正されていますが、旧バージョンのIISやApacheが稼働しているサーバでは、依然としてパストラバーサル攻撃に対して脆弱なケースがあります。また、Webホスティングソフトウェアで問題が解決されていたとしても、開発者向けの基本的なデフォルトスクリプトフォルダが存在することがあります。
例えば、IISのコンテンツディレクトリを利用してフォルダを一覧し、リクエストを実行するURLが作成される場合があります。
GET http://server.com/scripts/../Windows/System32/cmd.exe?/c+dir+c: GET http://server.com/scripts/../Windows/System32/cmd.exe?/c+dir+c: HTTP/1.1
server.com はサイトのホストです。
cmd.exeというシェルコマンドを実行し、シェル上で「dir c:」を実行することで、Cドライブ内の全ファイル一覧がクライアントに返されます。URL内で使われる %5c は、特殊文字を管理するHTTPサーバのエスケープコードです。ここでは、そのコードが利用されています。
最新のウェブサーバソフトウェアは、これらのエスケープコードを検出し通過させないようになっています。しかし、あらかじめ設定された一部のルートディレクトリにはこの制御が及ばず、攻撃者が利用するケースがあります。
パストラバーサル攻撃に対してWebサイトやWebアプリが脆弱かどうか調べる最適な方法は、Web脆弱性スキャナを使用することです。Web脆弱性スキャナはサイト全体をチェックし、ファイル参照に関する問題を検出します。検出された脆弱性とその対策方法を提示してくれます。また、アプリのスキャナは、SQLインジェクションやクロスサイトスクリプティングなどの他のWeb攻撃も一緒に検出します。
脆弱性を把握する
堅牢なアプリでは、開発ライフサイクル(SDLC)全体で、クライアントからの入力検証が必須です。開発初期から担当エンジニアやテストチームがこれらの脆弱性を認識し、対策を講じる必要があります。パストラバーサル攻撃を防ぐ方法は以下の通りです。
Wallarmは、SQLインジェクション、クロスサイトスクリプティング、ディレクトリトラバーサル、APIセキュリティなど、さまざまなWebの脆弱性を検査してサイトを守ります。ログイン画面、ショッピングカート、フォーム、動的コンテンツなどのパスワードの安全性も確認します。スキャン完了後、検出された脆弱性の詳細情報を提供します。
最新情報を購読