주요정보통신기반시설가이드/Web 취약점 점검
[DI (상)] 8. 디렉터리 인덱싱
JITSU
2025. 5. 12. 09:28
작업 환경
- VMware Workstation Pro (17.6.2 ver)
- Server
- Web 서버 : Rocky_Linux(8.10 ver, VMnet 2, PHP로 구성)
- DNS 서버 : Rocky_Linux(8.10 ver, VMnet 1)
- Client
- Kali Linux : Web 취약점 점검용 (VMnet 1)
- GNS 구성
- 해당 점검은 비밀번호 수정 페이지에 한해서 진행됨
DI (상) | 8. 디렉터리 인덱싱 |
취약점 개요 | |
점검 내용 | 웹 서버 내 디렉터리 인덱싱 취약점 존재 여부 점검 |
점검 목적 | 디렉터리 인덱싱 취약점을 제거하여 특정 디렉터리 내 불필요한 파일 정보의 노출을 차단 |
보안 위협 | 해당 취약점이 존재할 경우 브라우저를 통해 특정 디렉터리 내 파일 리스트를 노출하여 응용시스템의 구조를 외부에 허용할 수 있고, 민감한 정보가 포함된 설정 파일 등이 노출될 경우 보안상 심각한 위험을 초래할 수 있음 |
판단 기준 |
양호 : 디렉터리 파일 리스트가 노출되지 않는 경우 취약 : 디렉터리 파일 리스트가 노출되는 경우 |
참고 | OWASP TOP 10 항목 중 A05 : Security Misconfiguration 에 해당한다고 판단 |
취약한 세팅
/var/www/html 경로에 Options Indexes 설정
점검 방법
- Step 1) URL 경로 중 확인하고자 하는 디렉터리까지만 주소창에 입력하여 인덱싱 여부 확인
- URL 경로 : https://20.20.20.20/proc/ 입력
/var/www/html 에 적용했는데 왜 proc도 디렉토리 인덱싱 ???
→ 기본적으로는 상위 디렉터리의 Options Indexes 설정이 하위 디렉터리에 적용된다.
❗하위 디렉터리에서 별도로 Options를 지정하면 상속은 무시되고, 해당 디렉터리의 설정이 우선된다.
- Step 2) 디렉터리 끝에 %3f.jsp 문자열을 붙여 디렉터리 인덱싱이 되는지 확인
- URL 경로 : https://20.20.20.20/proc/#3f.jsp 입력
PHP 기반에서 왜 #3f.jsp 를 ???
- #3f ← URL 인코딩된 ? 를 의미
- .jsp ← 실제 jsp 파일이 필요없음. 웹 서버가 해당 URL을 파일 요청으로 오인하게 하여,
원래 막혀야하는 디렉터리 인덱싱을 우회하려는 것
즉 아래와 같은 요청이다
<공격자 측>
http://20.20.20.20/proc/%3f.jsp
<서버 측>
http://20.20.20.20/proc/?jsp
서버는 경로를 매핑하지 못하고 디렉터리 인덱싱으로 fallback 하는 경우 발생
보안 설정 방법
- 웹 서버 환경설정에서 디렉터리 인덱싱 기능 제거
Apache
- httpd.conf 파일 내 DocumentRoot 항목의 Options에서 Indexes 제거
- Indexes가 해당 디렉터리의 파일 목록을 보여주는 지시자
#설정 전
<Directory “/var/www/html”>
Options Indexes
</Directory>
#설정 후
<Directory "/var/www/html">
Options
</Directory>
참고
📌 디렉터리 인덱싱이란 ?
웹 서버가 특정 디렉터리에 기본 페이지(index.html, index.php 등)가 없을 때
해당 디렉터리 안의 모든 파일 목록을 브라우저에 그대로 노출하는 기능
왜 디렉터리 목록이 보일까?
웹 서버(Apache, Nginx 등)는 디렉터리만 지정한 요청을 보내면
아래의 파일의 DirectoryIndex 에 설정된 순서로 파일을 찾는다
GET /proc/
- /proc/index.php 있는지 확인
- 없으면 /proc/index.html 있는지 확인
- 없으면 /default.html 있는지 확인
❗ 다 없을 경우?
→ 디렉터리 인덱싱 설정이 ON 이면 Index of /proc 목록이 뜸
→ 디렉터리 인덱싱 설정이 OFF 이면 403 Forbidden 반환
DirectoryIndex 는 여러 곳에서 정의할 수 있다.
Apache는 다음 여러 경로에서 계층적으로 불러옴
- /etc/httpd/conf/httpd.conf ← 메인 설정
- /etc/httpd/conf.d/*.conf ← 개별 모듈, 추가 설정
- .htaccess ← 디렉터리별 오버라이드 설정
- /etc/httpd/conf.d/php.conf
Apache 설정 적용 우선순위
- .htaccess 파일 : 해당 디렉터리에만 적용, 가장 우선적 (단, AllowOverride 가 허용된 경우에만)
- <Directory> 블록 : httpd.conf, conf.d/*.conf 등에서 디렉터리 경로에 따라 적용
- conf.d/*.conf 모듈 설정 : PHP, AutoIndex 등 모듈별 추가 설정
- httpd.conf : 전역 기본 설정. 아무것도 오버라이드하지 않으면 이게 적용됨
🔐 OWASP TOP 10(2021)과의 연관
1. A05 : Security Misconfiguration
- 디렉터리 인덱싱은 대표적인 불필요한 기능 활성화
- 파일 목록, 백업 파일, 로그파일 유출 위험
🛡️ 방어 방법
- Options Indexes 설정 제거
- .htaccees 사용하여 디렉터리 인덱싱 차단