[논문 리뷰] A Simple and Intuitive Algorithm for Preventing Directory Traversal Attacks
이 논문은 사용자로부터 제공된 경로 문자열을 안전하게 표준화함으로써 디렉터리 트래버서 공격을 방지하는 경량의 스택 기반 알고리즘인 $sanitize$를 제안한다. 이 알고리즘은 경로 문자열 표준화와 화이트리스트 기반 접근을 결합하며, 형식적으로 정당화되었고, 직관적이고 다중 플랫폼에서 사용 가능하며, 기호 실행을 통해 쉽게 검증 가능하도록 설계되어 웹 애플리케이션의 경로 트래버서 취약성에 대한 강력하고 실용적인 방어책을 제공한다.
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.
연구 동기 및 목표
- 2017년 공개된 취약성의 22%를 차지하는 디렉터리 트래버서 취약성의 증가 추세를 다루기 위해, 이는 종종 간과되지만 심각한 영향을 미칠 수 있음을 고려한다.
- 기존 방어 조치의 한계—메모리 안정성 문제, 의미적 일관성 부족, 이식성 부족—을 극복하기 위해 통합적이고 경량의 솔루션을 설계한다.
- 다양한 프로그래밍 언어와 플랫폼에서 쉽게 구현하고 검증하며 확장할 수 있는 단순하고 자가 포함된 알고리즘을 제공한다.
- 기호 실행을 통한 자동 검증을 가능하게 하여 형식적으로 정당화하고, 개발자가 보안적으로 배포하는 데에 대한 신뢰를 높인다.
제안 방법
- 알고리즘은 스택 기반 접근 방식을 사용하여 경로 구성 요소를 처리하며, 상대 경로 세그먼트인 "." 및 ".."를 제어 가능한 방식으로 해석한다.
- 사용자로부터 제공된 경로 문자열을 스택을 통해 순차적으로 탐색하면서 유효한 디렉터리 경로 스택을 유지함으로써 표준화한다. 이 과정을 통해 오직 안전한 절대 경로만 생성된다.
- 화이트리스트 기반 접근을 통합하여 출력 경로를 사전에 정의된 허용 경로 목록에 국한함으로써, 민감하거나 비허용된 디렉터리에의 접근을 방지한다.
- 기본 파일 시스템이나 OS별 경로 해석 방식에 의존하지 않아, 다양한 플랫폼 간 일관성과 이식성을 확보한다.
- 기호 실행을 통해 알고리즘을 형식적으로 검증함으로써, 다양한 입력 시나리오에서 정확성에 대한 자동 테스트 및 검증이 가능해진다.
- 구현은 최소화되고 자가 포함되도록 설계되어 외부 라이브러리나 시스템 콜이 필요 없으며, 스택 또는 컨테이너 기능을 내장한 언어로 쉽게 적용할 수 있다.
실험 결과
연구 질문
- RQ1어떻게 디렉터리 트래버서 방어 메커니즘을 단순하면서도 형식적으로 검증 가능하게 하면서도 보안성과 다중 플랫폼 호환성을 유지할 수 있는가?
- RQ2스택 기반 표준화 알고리즘이 기존 접근 방식에 비해 정확성, 안전성, 구현 용이성 측면에서 뛰어나다고 할 수 있는가?
- RQ3표준화와 화이트리스트의 조합이 새로운 취약성을 유발하지 않으면서 보안성을 얼마나 향상시키는가?
- RQ4기호 실행은 경로 정제 알고리즘의 정확성 검증에 얼마나 효과적인가?
- RQ5경량적이고 직관적인 알고리즘이 실제 웹 애플리케이션 개발에서 구현 오류의 위험을 줄일 수 있는가?
주요 결과
- $sanitize$ 알고리즘은 스택 기반 접근 방식을 통해 경로 구성 요소를 안전하게 해석함으로써 디렉터리 트래버서 공격을 성공적으로 방지하며, 오직 유효하고 절대 경로만 생성됨을 보장한다.
- 기호 실행을 통한 형식적 검증은 길이가 12자 이내인 모든 입력에 대해 알고리즘의 정확성을 확인했으며, 개발 워크플로에 통합하기에 적합한 검증 시간을 확보했다.
- 알고리즘은 다중 플랫폼이며 OS별 경로 해석 방식에 의존하지 않아, 다양한 운영 체제 간 일관성을 확보한다.
- 파일 시스템 동작을 정확히 모방하지는 않지만, 화이트리스트와 결합된 상태에서 안전하다. 특히 "../../" 및 "./"와 같은 경로를 의도한 액세스 제어와 일치하는 방식으로 정확히 해석한다.
- 알고리즘은 확장이 용이하다. 예를 들어, 웹 애플리케이션의 루트 디렉터리에 접두어를 추가하거나 와일드카드를 지원하도록 쉽게 확장할 수 있으며, 보안성이나 단순성에 영향을 주지 않는다.
- 문자열 조작이나 파일 시스템 호출에 의존하는 방법에 비해 공격 표면이 줄어들며, 저수준 구현에서 발생할 수 있는 메모리 안정성 문제를 완화한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.