こんにちは、GMOアドマーケティングのryoutakoです。
普段はRuby on Railsを使った開発やプロダクトの脆弱性診断などセキュリティ関連の業務をしています。
今回はパストラバーサルを悪用した脆弱性とその対策方法、OWASP Top 10内の分類について書いていきたいと思います。
OWASP ZAPでの脆弱性診断については以下↓をチェック!(宣伝)
パストラバーサルとは
パストラバーサルの脆弱性は主にWebアプリケーションに関連し、攻撃者が許可されていないファイルやディレクトリにアクセスできるセキュリティ上の問題です。
通常、Webアプリケーションはユーザーからの入力を受け取り、その入力を使ってファイルパスを生成します。しかし、適切な入力検証や制御が行われていない場合、攻撃者は入力を悪用してディレクトリトラバーサル攻撃を実行し、サーバー上のファイルやディレクトリにアクセスすることができます。これにより、機密情報の漏洩やシステムの不正な操作などのセキュリティリスクが生じる可能性があります。
後ほど実例で紹介します。
パストラバーサルのOWASP Top 10での分類
初めにOWASP Top 10について軽く説明しておくと、OWASP Top 10はOWASPがWebアプリケーションのセキュリティに関する主要な脅威と脆弱性をまとめたリストで、詳細な脆弱性の概要や対策を講じるためのガイドラインなどが含まれます。
そしてパストラバーサルは「A01:2021-アクセス制御の不備」に分類されます。こちらは2021年の更新(最新)にて5位から1位にランクアップしており、OWASP Top 10のページの記載によると94%のWebサイトで何らかのアクセス制御の不備が確認されているようです。
「A01:2021-アクセス制御の不備」のリスト内のパストラバーサルに関連する脆弱性は以下です。
- CWE-22 Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
- CWE-23 Relative Path Traversal
- CWE-35 Path Traversal: ‘…/…//’
参考:
OWASP Top 10 A01:2021 – アクセス制御の不備
パストラバーサル検証
ローカルにやられサイトを作成してパストラバーサルの例を簡単に説明します。注意点として、このやられサイトはパストラバーサルの対策がされていないという前提のもと行っていきます。
以下がやられサイトとして使用するファイル共有サイトです。
ダウンロードの前にファイルの中身を確認できる機能が備わっています。
URLを確認してみると
のようになっていて、パラメータでファイルのパスを送っていることが分かります。ここにパストラバーサル攻撃を行えばさまざまなファイルにアクセスできそうですね!
例えば、画面に表示されたファイル名から推測して、このユーザーの画面には表示されていない(ユーザーにダウンロード権限のない)ファイルの中身を確認したり、
例えば、大量アクセスで全てのファイルを洗い出し、パスが分かっていればユーザーに見られてはいけない大事なファイルの中身も確認できます!
このように、何も対策がされていないサイトであればパストラバーサルで任意のファイルにアクセスすることができます。
対策
パストラバーサルに有効な対策を紹介します!
フレームワークによってはパストラバーサルの対策となる機能がデフォルトでONになっている場合もあります。もし興味があれば使っているフレームワークでどのような対策がなされているか調べてみるのも良いでしょう。
パラメータでファイル名を直接指定しない
ユーザーがファイル名を直接指定できる仕様を避けることで設計の段階から対策することができます。
今回示した例の場合だと、ファイル一覧にそれぞれ対応する「中身確認ボタン」を用意し、DBに登録されているファイルテーブルのID指定で中身を表示する実装にすればパストラバーサルのリスクを軽減できます。
ファイルパスの検証
ファイル名を直接指定したりそれに類する実装がどうしても必要な場合は、リクエストされたファイルのパスを適切に検証し不正なパスが含まれていないことを確認することで対策することができます。
上記の例のような画面に表示されているファイルと無関係なパスが指定された場合や、親ディレクトリを示す”..”がパスに含まれている場合はこれらを不正なパスとしてブロックすることで攻撃を防ぐことができます。
ディレクトリのアクセス制限
ダウンロードファイルが格納されるディレクトリに対して、Webサーバー側の設定でアクセス制限を設けることも対策として有効です。必要最小限のファイルにのみアクセスを許可し他のディレクトリへのアクセスを制限することで、パストラバーサルのリスクを軽減できます。
アクセスログの監視
直接的な対策ではないですが、アクセスログを監視することも大事です。例えば不正なアクセスがあった場合に通知するような仕組みを利用して検知し、場合によっては不正アクセスを行うIPアドレスを遮断することで防御することもできます。
脆弱性診断ツールで定期的に診断を行う
こちらも直接的な対策ではないですが、OWASP ZAPなどの自動診断ツールを定期的に活用することで、パストラバーサルに限らず様々な脆弱性を発見することができます。検出された脆弱性に関しては原因を特定して修正することでセキュリティを担保することができます。
まとめ
今回はパストラバーサルについて紹介してみましたがいかがだったでしょうか!ここで紹介した内容が少しでもセキュリティ向上に役立っていたら幸いです。今後も機会があればセキュリティ関連のブログの執筆を行いたいと思います。
ここまで読んでいただきありがとうございました!
Ruby on Railsを使った開発、プロダクトの脆弱性診断などをやってます
オレンジ色と犬と猫と食べることと歌うこととピアノが好きです。