Skip to main content
QUICK REVIEW

[論文レビュー] A Simple and Intuitive Algorithm for Preventing Directory Traversal Attacks

M. June Flanders|arXiv (Cornell University)|Aug 13, 2019
Web Application Security Vulnerabilities被引用数 5
ひとこと要約

この論文では、ユーザーが供給するパス文字列を安全に正規化することでディレクトリトラバーサル攻撃を防ぐ、軽量でスタックベースのアルゴリズム $sanitize$ を提示する。このアルゴリズムはパス文字列の正規化とホワイトリスト処理を組み合わせており、形式的に正しく証明されており、直感的でクロスプラットフォーム対応であり、記号実行を用いた検証が容易である。このため、Webアプリケーションにおけるパストラバーサル脆弱性に対する強固で実用的な防御が可能となる。

ABSTRACT

With web applications becoming a preferred method of presenting graphical user interfaces to users, software vulnerabilities affecting web applications are becoming more and more prevalent and devastating. Some of these vulnerabilities, such as directory traversal attacks, have varying defense mechanisms and mitigations that can be difficult to understand, analyze, and test. Gaps in the testing of these directory traversal defense mechanisms can lead to vulnerabilities that allow attackers to read sensitive data from files or even execute malicious code. This paper presents an analysis of some currently used directory traversal attack defenses and presents a new, stack-based algorithm to help prevent these attacks by safely canonicalizing user-supplied path strings. The goal of this algorithm is to be small, easy to test, cross-platform compatible, and above all, intuitive. We provide a proof of correctness and verification strategies using symbolic execution for the algorithm. We hope that the algorithm is simple and effective enough to help move developers towards a unified defense against directory traversal attacks.

研究の動機と目的

  • Webアプリケーションにおけるディレクトリトラバーサル脆弱性の増加に対処する。これは2017年の公開脆弱性の22%を占めているが、しばしば見過ごされている。
  • メモリ安全上の問題、意味論的な不一致、ポータビリティの欠如といった既存の緩和策の限界を克服するため、統合的で軽量なソリューションを設計する。
  • 実装・検証・拡張が容易な、シンプルで自己完結型のアルゴリズムを提供する。これは異なるプログラミング言語やプラットフォームに対しても適用可能である。
  • 記号実行を用いた自動検証を可能にする形式的正当性の証明を行い、開発者が安全なデプロイを信頼できるようにする。

提案手法

  • アルゴリズムはスタックベースのアプローチを用い、相対パスセグメント("." や "..") を制御された方法で処理する。
  • 各パスコンポonentを走査し、有効なディレクトリパスのスタックを維持することで、ユーザーが供給するパス文字列を正規化し、常に安全で絶対パスのみを生成する。
  • 出力が事前に定義された許可されたパスのセットに制限されるホワイトリスト処理を統合し、機密または不正なディレクトリへのアクセスを防止する。
  • 下位のファイルシステムやOS固有のパス解決に依存しないため、クロスプラットフォームでの一貫性とポータビリティが保証される。
  • 記号実行を用いた形式的正当性の証明により、多様な入力シナリオにおいてアルゴリズムの正しさを自動的にテスト・検証できる。
  • 実装は最小限で自己完結型であり、外部ライブラリやシステムコールを必要とせず、スタックやコンテナを内蔵する言語に簡単に適応可能である。

実験結果

リサーチクエスチョン

  • RQ1ディレクトリトラバーサル防御機構は、シンプルかつ形式的に検証可能であると同時に、安全でクロスプラットフォーム対応であるとはいかに実現できるか?
  • RQ2スタックベースの正規化アルゴリズムは、従来のアプローチに比べ、正しさ、安全性、実装の容易さにおいて優れていると期待できるか?
  • RQ3正規化とホワイトリスト処理を組み合わせることで、新たな脆弱性を引き起こさずにセキュリティがどの程度向上するか?
  • RQ4記号実行は、パスのセキュリティ化アルゴリズムの正しさを検証するのにどの程度有効であるか?
  • RQ5軽量で直感的なアルゴリズムは、実世界のWebアプリケーション開発における実装エラーのリスクを低減できるか?

主な発見

  • $sanitize$ アルゴリズムは、スタックベースのアプローチを用いてパスコンポーネントを安全に解決することで、ディレクトリトラバーサル攻撃を効果的に防止し、常に有効で絶対パスのみを生成することを保証する。
  • 記号実行による形式的正当性の証明により、長さ12文字以下のすべての入力に対してアルゴリズムの正しさが確認され、開発ワークフローに統合可能な検証時間であることが判明した。
  • アルゴリズムはクロスプラットフォームであり、OS固有のパス解決に依存しないため、異なるオペレーティングシステム間での不一致を回避する。
  • ファイルシステムの挙動を正確に再現していないものの、ホワイトリスト処理と組み合わせることで、"../../" や "./" といったパスを意図したアクセス制御と整合する方法で正しく解決するため、セキュリティは保たれる。
  • 拡張性が高く、たとえばワイルドカードのサポートやWebアプリケーションのルートディレクトリを事前に付加するなど、セキュリティやシンプルさを損なわずに拡張可能である。
  • 文字列操作やファイルシステムコールに依存する手法と比較して、攻撃面が小さくなり、低レベル実装におけるメモリ安全上のリスクも軽減される。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。