디렉터리 인덱싱 보안 패치
1. 개요
디렉터리 인덱싱 이란?
디렉터리 인덱싱(Directory Indexing)이란 웹 서버가 특정 디렉터리 내의 기본 인덱스 파일(index.php 등)이 없을 때, 해당 디렉터리 내의 모든 파일 및 폴더 목록을 표시하는 기능을 의미합니다. 이 기능이 활성화되어 있으면 공격자가 폴더 내부를 탐색하여 설정 파일, 소스코드 등 외부에 노출되선 안 되는 파일에 접근할 수 있어 보안 취약점이 될 수 있습니다.
보안 패치의 목적 및 중요성
디렉터리 인덱싱 기능이 활성화된 상태에서는 공격자가 서버 내부의 파일 구조를 파악하고 민감한 정보에 접근할 수 있습니다. 따라서, 디렉터리 인덱싱을 비활성화하는 보안 패치는 다음과 같은 목적을 가집니다.
1. 공격자가 파일 목록, 구조를 확인하지 못하도록 차단합니다.
2. 공격자가 설정 파일, 소스 코드 등 민감한 정보에 접근하는 것을 차단합니다.
2. 취약점 분석
디렉터리 인덱싱 발생 원인
웹 서버(Apache)의 설정이 기본값으로 유지되어 있어, 디렉터리에 인덱스 파일(index.php 등)이 없는 경우 자동으로 디렉터리 목록이 노출되는 디렉터리 인덱싱 기능이 활성화된 상태입니다. 이 설정은 개발 환경에서는 편리할 수 있지만, 운영 중인 서버에서는 민감한 파일이나 내부 구조가 외부에 노출될 수 있어 보안상 취약합니다.
아파치의 기본 설정 파일인 apache2.conf에서 Options Indexes 옵션이 활성화되어 디렉터리 인덱싱 기능이 적용된 상태입니다.
디렉터리 인덱싱 예시
웹 사이트에서 접근 가능한 /upload/ 또는 /forum/ 디렉터리에 인덱스 파일이 없어 내부의 폴더 및 파일 목록이 노출됩니다. 이를 통해 파일 구조를 알 수 있고, 백업 파일, 로그 파일, 설정 파일 등 민감한 파일에 접근할 수 있습니다.
3. 보안 패치 적용
보안 조치 방법
1. 디렉터리 인덱싱 비활성화
서버 설정 파일에서 기본적으로 활성화 상태인 디렉터리 인덱싱을 비활성화할 수 있습니다.
예시) Apache: 설정 파일에서 Options -Indexes로 변경하면 디렉터리 인덱싱 기능을 비활성화할 수 있습니다.
Apache 설정 파일:
httpd.conf: Apache1.x, 초창기 Apache2.x
apaceh2.conf: Apache2.x
.htaccess: 디렉터리별 개별 설정
2. 인덱스 파일 추가
해당 디렉터리에 기본 인덱스 파일(index.php 등)을 추가하면 폴더 경로에 접근하여도 내부 파일 목록이 노출되지 않습니다.
예시) 아파치 설정 파일에서 기본 인덱스 파일을 지정하여 디렉터리 인덱싱을 방지할 수 있습니다.
.htaccess
DirectoryIndex forum.php
3. 리다이렉트 설정
업로드 폴더와 같이 일반 사용자가 직접 접근할 필요가 없는 폴더는 서버 설정을 통해 접근 시 다른 페이지로 리다이렉트 되도록 할 수 있습니다.
예시) 업로드 폴더(/upload, /upload/img 등)에 접근하면 루트 경로(/)로 리다이렉트를 시킬 수 있습니다.
apache2.conf
<Directory /var/www/html/upload>
RedirectMatch 302 ^/upload(/.*)?$ /
</Directory>
수정 코드
1. 디렉터리 인덱싱 비활성화
서버 설정 파일에서 디렉터리 인덱싱을 비활성화하여 브라우저에서 폴더 경로에 접근해도 내부 파일 목록이 노출되지 않도록 합니다.
1. 서버 설정 파일 (apache2.conf)에 접근합니다.
2. 디렉터리 인덱싱을 비활성화합니다.
3. 아파치 서비스를 재시작하여 설정을 적용합니다.
2. 인덱스 파일 지정
디렉터리 인덱싱을 비활성화한 뒤, 폴더 경로에 직접 접근하면 403 Forbidden 에러가 발생합니다. 이를 방지하려면 .htaccess 파일을 이용해 각 폴더마다 인덱스 파일을 지정할 수 있습니다.
1. 인덱스 파일을 설정할 디렉터리 경로에 접근합니다.
2. .htaccess 파일을 생성하고 DirectoryIndex 옵션으로 인덱스 파일을 설정합니다.
3. 설정을 적용하기 위해 서버를 재시작합니다.
리다리엑트 설정
업로드 폴더에 접근 시 다른 경로로 리다이렉트 되도록 설정하여 사용자의 직접적인 접근을 차단하였습니다.
1. 서버 설정 파일(apache2.conf)에 접근합니다.
2. /upload, /forum/upload 경로에 리다이렉트 설정을 적용합니다.
3. 설정을 적용하기 위해 서버를 재시작합니다.
4. 보안 패치 결과
보안 패치 후 테스트 결과
1. 디렉터리 인덱싱 비활성화
디렉터리 인덱싱을 비활성화한 후 폴더 경로에 직접 접근해도 내부 파일이 노출되지 않고 403 Forbidden 에러가 발생하는 것을 확인했습니다.
2. 인덱스 파일 지정
/forum 디렉터리에 .htaccess 설정 파일을 이용해 forum.php 파일을 인덱스 파일로 지정한 후 해당 경로에 직접 접근 시 forum.php 파일이 정상적으로 실행되는 것을 확인했습니다.
3. 리다이렉트 설정
서버 설정을 통해 /upload, /forum/upload 디렉터리에 직접 접근할 경우, 403 Forbidden 에러 대신 지정한 경로로 리다이렉트 되도록 구성하였습니다. 이를 통해 사용자 경험을 향상할 수 있으나, 현재 게시판의 파일 다운로드 기능이 업로드 폴더에 대한 직접 접근 방식으로 구현되어 있어, 추후 download.php와 같은 별도의 다운로드 처리 로직을 추가할 필요가 있습니다.
1. /upload 디렉터리에 접근합니다.
2. /forum/upload 디렉터리에 접근합니다.