ディレクトリトラバーサルとは
まずは攻撃の正体を押さえます。難しい技術を使う攻撃ではなく、ファイルの場所を指定する記法を逆手に取るものです。名称の違いや、どのような作りのアプリケーションで成立するのかを整理します。
パストラバーサルとも呼ばれる相対パスの悪用
ディレクトリトラバーサルは、Webアプリケーションが外部から受け取ったファイル名の指定を悪用し、公開を想定していない領域のファイルを読み取ったり、書き換えたりする攻撃です。パストラバーサルとも呼ばれ、国内ではIPA(情報処理推進機構)の「安全なウェブサイトの作り方」で「パス名パラメータの未チェック/ディレクトリ・トラバーサル」として解説されています。
攻撃の中心は、1つ上の階層を指す「..」という相対パスの記法です。ファイル名を受け取る仕組みに「../」を繰り返し並べた文字列を渡すと、公開用のディレクトリの外へたどり着けてしまう場合があります。専用のツールや管理者権限は不要で、ブラウザから送れる文字列だけで試せる点が厄介です。
攻撃が成立するWebアプリケーションの作り
成立の条件はほぼ1つで、外部から渡された値をそのままファイルのパスとして使っていることです。画像やPDFの表示、帳票のダウンロード、テンプレートの読み込み、表示言語によるファイルの切り替えなど、URLのパラメータや入力欄でファイル名を指定する画面が典型的な入口になります。
開発時は自社で用意したファイル名しか渡らない前提だったとしても、利用者の手元では任意の文字列を送信できます。想定どおりの値しか届かないという前提でコードを書くと、そこが弱点として残ります。さらに、アプリケーションを動かすOSユーザーの権限が強いほど、読み取られる範囲は広がり、被害も大きくなりがちです。
攻撃の流れと狙われるファイル
実際の攻撃は、いきなり重要情報を抜き取るのではなく、段階を踏んで進みます。どのような順序で試され、どのファイルが狙われ、最終的に何が起きるのかを知ると、防御すべき地点が見えてきます。
調査から情報の取得までの攻撃の流れ
攻撃者はまず、ファイル名がURLのパラメータに現れている画面を探します。次に、その値を「../」を含む文字列に書き換え、エラーの内容や画面の反応を確認します。存在しないファイルを指定したときと、読み取り権限がないファイルを指定したときでメッセージが変わると、それ自体が手がかりになります。
反応が得られたら、階層をさかのぼる回数を増やしながら目的のファイルへ近づいていきます。単純な「../」が遮断されていても、URLエンコードした表記や、区切り文字の書き方を変えた表記で回避を試みる手口も知られています。文字列を機械的に取り除くだけの対策では、こうした変形に追随できません。
設定ファイルや認証情報が狙われる
読み取りの対象になりやすいのは、アプリケーションの設定ファイルです。データベースへの接続先やアカウント名、外部サービスのAPIキーなどが平文で書かれていると、そこから被害が一気に広がります。ソースコードそのものが読まれ、別の弱点を探す材料にされることもあります。管理画面のパスが判明する場合もあります。
OSの領域では、Linux系のシステムでユーザー一覧が記録されたファイルが試されることが知られています。ログファイルやバックアップ、鍵ファイルも対象です。顧客情報を保存したファイルが公開領域の近くに置かれていると、そのまま持ち出される恐れがあります。置き場所の見直しは、実装の修正と同じくらい重要な防御策といえます。
情報の窃取から改ざん・侵入へ広がる被害
被害は情報を見られるだけにとどまりません。取得した認証情報で管理画面にログインされれば、Webサイトの改ざんや、利用者を不正なサイトへ誘導する仕掛けの設置につながります。マルウェア配布の踏み台にされると、取引先や顧客にも影響が及びます。
書き込みを伴う機能に弱点があると、さらに深刻です。設定ファイルやプログラムを置き換えられ、サーバー内部を操作され続ける状態になりかねません。規模にかかわらず機械的な探索の対象になり得るため、自社は小さいから大丈夫という判断は避けましょう。公表や顧客対応の負担も含めて備えましょう。
この記事をご覧の方には、以下の記事もおすすめです。あわせて参考にしてください。
OSコマンドインジェクションとの違い
ディレクトリトラバーサルとあわせて語られることが多いのが、OSコマンドインジェクションです。どちらも外部からの入力値をそのまま使ってしまう点が原因ですが、狙う対象と被害の広がり方は異なります。
OSコマンドインジェクションとはどのような攻撃か
OSコマンドインジェクションは、外部からの入力値がOSのコマンドの一部として実行されてしまう攻撃です。メール送信やファイル変換、圧縮処理などで、アプリケーションがシェル経由で外部のコマンドを呼び出している箇所が入口になります。入力値に区切り記号を紛れ込ませることで、別のコマンドを続けて実行させます。
成立すると、攻撃者はWebサーバー上で任意の処理を動かせます。ファイルの一覧表示や削除、外部との通信、追加のプログラムの設置まで可能になるため、影響は非常に大きくなります。こちらもCWEという脆弱性の分類で独立した項目が設けられており、古くから警戒されてきた代表的な攻撃です。
狙う対象と被害範囲の違いを整理する
ディレクトリトラバーサルが狙うのはファイルの場所であり、基本的にはアプリケーションが読み書きできる範囲のファイルが対象です。一方のOSコマンドインジェクションが狙うのはコマンドの実行そのもので、サーバー上で動かせる処理全般に影響が及びます。被害の広がりという点では後者のほうが大きくなります。
ただし、両者は切り離せない関係にあります。得られた設定情報が、コマンド実行の足がかりになることもあります。原因はどちらも入力値をそのまま信用する実装であり、対策の考え方は共通です。外部入力の扱いを全体で見直してください。
ITトレンドでは、最新の製品・サービスを多数比較・掲載しています。まず資料を取り寄せて、さまざまな製品の機能や特徴を比較してみてください。忙しい業務時間内でも、各社に問い合わせる手間なく、たった1回の入力(約60秒)でWAFの一括資料請求が可能です。浮いた時間で、じっくりと製品を比較検討し進めましょう。
実装で行うディレクトリトラバーサル対策
根本的な解決は、プログラムの作り方を変えることです。順番としては、外部からファイル名を指定させない設計を最優先に検討し、それが難しい場合に検証を重ねる、という考え方が安全です。
ファイル名を外部から指定させない
もっとも確実なのは、外部から届いた値をファイルのパスに使わない設計にすることです。表示や配布の対象となるファイルをあらかじめ一覧として管理しておき、外部にはその識別番号だけを渡します。受け取った番号を手元の一覧と照合してから実ファイルを開けば、階層をさかのぼる文字列は入り込む余地がありません。
ファイル名を扱わざるを得ない場合も、許可する名前を明示的に列挙する方式が有効です。禁止したい文字を取り除く方式は、想定外の表記が現れるたびに抜け道が生まれます。許可したものだけを通す方式なら、未知の変形にも対応できます。設計や改修の段階で、この方針をあらかじめ決めておくことが大切です。
入力値の検証と正規化で相対パスを排除する
検証で確認したいのは、受け取った値に階層を移動する記法や区切り文字、絶対パスを示す表記が含まれていないかという点です。判定の前には、URLエンコードを戻し、記法を統一する正規化の処理を行います。正規化の前に判定すると、別の表記で書かれた同じ意味の文字列を見逃します。
より確実なのは、開くファイルのパスを最終的な形に解決したうえで、許可したディレクトリの内側に収まっているかを確かめる方法です。文字列を検査するだけでなく、実際にたどり着く場所を確認する形になるため、表記の違いに左右されにくくなります。パスを解決する処理は、利用している言語や実行基盤が標準で備えている機能を活用すると確実です。
公開領域とアクセス権限を見直す
実装と並行して、ファイルの置き場所と権限も点検します。設定ファイルやバックアップ、鍵ファイルを公開ディレクトリの内側や、その近くに置かないことが基本です。万一たどり着かれても、Webサーバーの実行ユーザーに読み取り権限がなければ、内容は取得されません。
権限は必要最小限に絞り、書き込みが不要なディレクトリには書き込みを許可しない設定にします。加えて、エラー画面に内部のパスやシステムの詳細を表示しない設定も欠かせません。エラーの内容は攻撃者にとって手がかりになるため、利用者には簡潔な案内だけを返し、詳細はサーバー側のログに記録する形が安全です。公開ディレクトリに不要なファイルが残っていないかという点も、定期的に確認しましょう。
WAFによるディレクトリトラバーサル対策
実装の修正には時間がかかり、外部から導入したソフトウェアには手を入れられないこともあります。その間を埋め、リクエストの段階で攻撃を遮断する手段がWAFです。仕組みと運用のポイントを押さえましょう。
WAFがリクエストを検査して遮断する仕組み
WAF(Web Application Firewall)は、Webアプリケーションに届くHTTPのリクエストの中身を検査し、攻撃とみなせる内容を遮断する仕組みです。通信経路を絞るファイアウォールや、不正な通信を検知するIPSとは守る層が異なり、アプリケーションへの入力値そのものを見る点が特徴です。
ディレクトリトラバーサルの場合は、パラメータに含まれる階層移動の表記や、エンコードされた同等の表記を検出して遮断します。多くの製品は既知の攻撃パターンをまとめたルールを備え、提供元が更新を続けています。OSコマンドインジェクションのように入力値を悪用する攻撃も、同じ枠組みで検知の対象になります。
検知漏れと誤検知を抑える運用のポイント
WAFは万能ではありません。標準のルールだけでは、独自の仕様を持つ画面で検知が漏れることもあれば、正常な入力を攻撃と判断してしまうこともあります。導入直後は遮断せずに記録だけを行うモードで運用し、自社の通信の傾向を見ながらルールを調整していく進め方が安全です。
運用を続けるうえでは、遮断されたリクエストのログを定期的に確認し、攻撃の傾向を把握することも重要です。製品を選ぶ際は、ルールの更新頻度、自社独自のルールを追加できるか、ログの見やすさ、運用を任せられる支援の有無などを比較するとよいでしょう。実装の修正とあわせた多層の防御を前提に、運用体制まで含めて検討してください。
「自社に合うWAFを診断してみたい」、「どんな観点で選べばいいかわからない」という方向けの診断ページもあります。
ITトレンドで過去資料を請求した方の、リアルなお悩みや要望から作成した簡単な質問に答えるだけで、最適な製品・サービスをご案内します。
無料で今すぐ利用できますので、下のリンクから診断を開始してください。
入力値の悪用を遮断するWAF製品
ここでは、入力値を悪用する攻撃をリクエストの段階で検査・遮断でき、シグネチャの更新や運用の支援まで提供元が担う製品を取り上げます。実装の修正と並行して守りを保ちたい場合の選択肢です。
攻撃遮断くん(株式会社サイバーセキュリティクラウド)
- あらゆる規模のWebシステムへ導入できる最適なWAFを提供。
- DDoS対策プランや定額制プランなど多数のサービスプランを提供。
- 自社開発だからできる手厚いサポート体制。
株式会社サイバーセキュリティクラウドが提供する『攻撃遮断くん』は、クラウド型のWAFです。SQLインジェクションやクロスサイトスクリプティングなど、Webアプリケーション層を狙う攻撃をリアルタイムに検知し遮断します。シグネチャは自動で更新され、管理画面では受けた攻撃の状況を可視化できます。ホワイトリスト機能や防御証明メール、セキュリティエンジニアによるレポートの提供にも対応。技術サポートは24時間365日の体制です。
Cloudbric WAF+
- 特許取得のロジック&AIエンジンを搭載、高い攻撃検知力
- WAF/DDoS攻撃遮断/API保護/ボット対策/Malicious IP遮断
- 24時間365日監視体制と専門家にお任せのマネージドサービス付帯
ペンタセキュリティ株式会社が提供する『Cloudbric WAF+』は、クラウド型のWAFサービスです。独自の検知ロジックとAIを組み合わせたエンジンにより、SQLインジェクションやクロスサイトスクリプティング、パラメータの改ざん、セッションハイジャックなどを防御します。DDoS対策やAPIの保護、ボット対策、SSL証明書の自動発行と更新も備えます。24時間365日のマネージドサービスとして、ポリシーの設計や監視を任せられます。
WafCharm (株式会社サイバーセキュリティクラウド)
- AWS WAF連携の専門性と認定。
- 24時間365日日本語サポートで対応
- 世界で1,000ユーザー以上の導入実績あり
Cloudflareアプリケーションサービス (クラウドフレア・ジャパン株式会社)
- Webアプリ、API、エッジの推論を保護・高速化
- パフォーマンス・セキュリティ・開発機能を統合して提供
- サーバレス開発とエッジ推論でフルスタックアプリをデプロイ
まとめ
ディレクトリトラバーサルは、外部から受け取った値をそのままファイルのパスとして使う実装が原因で起こり、設定ファイルや認証情報を読み取られる攻撃です。同じく入力値の扱いに起因するOSコマンドインジェクションと比べると狙う対象は異なりますが、対策の考え方は共通しています。外部からファイル名を指定させない設計を基本とし、入力値の検証と権限の見直しを重ねましょう。あわせてWAFを導入すれば、修正が完了するまでの期間も守りを保てます。


