[웹 취약점] 디렉터리 인덱싱 (Directory Indexing, Listing)
개요
디렉터리 인덱싱(Directory Indexing)은 클라이언트인 웹 브라우저가 웹 페이지가 아닌 디렉터리 구조를 가리키는 URL을 요청할 때 웹 서버 측에서 인덱스 페이지를 응답하여 발생하는 취약점이다.
인덱스 페이지는 디렉터리 및 파일 리스트를 사용자에게 노출하기 때문에 악의적인 사용자는 시스템 구조를 파악하는 것이 가능하며, 일반 웹 페이지보다 자유로운 액세스를 제공하므로 공개되지 않은 파일 등에 액세스하는 것이 가능하다.
예시
디렉터리 인덱싱은 검색엔진만으로 취약점에 노출된 웹 사이트를 간단히 살펴볼 수 있다. 'intitle:index of'를 검색하면 취약점에 노출된 웹 사이트들을, 'intitle:index of site:도메인명'을 검색하면 특정 웹 사이트가 취약점에 노출되어 있는지를 볼 수 있다.
위 사진은 구글에 'intitle:index of' 키워드로 검색을 했을 때 표시되는 웹 사이트 중 하나로, 디렉터리 인덱싱 취약점으로 인해 디렉터리의 내부 구조가 노출되는 것을 확인할 수 있다.
실제로 이러한 방법은 공격자가 공격 대상을 정하거나 정해진 대상에 대한 정보를 습득하기 위해서 사용하곤 한다.
진단 방법
디렉터리 인덱싱을 진단하는 방법은 무척 간단하다. 진단하고자 하는 웹 페이지의 URL에서 파일명, 파라미터 등을 제거하고 디렉터리까지만 입력을 해보면 된다. 정상적인 페이지로 리다이렉션되거나 사전에 작성해놓은 에러 페이지를 응답하면 정상으로 판단, 인덱스 페이지를 응답하면 취약하다고 판단한다.
웹 서버의 버전에 따라 %00이나 %3f 같은 특수문자를 처리할 때 오류가 발생해 디렉터리 리스팅이 발생하기도 한다.
조치 방법
디렉터리 인덱싱 취약점은 대부분 웹 서버의 잘못된 설정으로 인해 발생한다. 따라서 인덱스 페이지를 제공하지 않게끔 웹 서버의 설정을 변경하여 조치한다. 여러분들을 위한 예시로 Apache와 Nginx를 적어놓는다.
Apache
httpd.conf 파일에서 Indexs 지시자 제거
// 조치 전
<Directory "/var/www/html">
Options Indexes
</Directory>
// 조치 후
<Directory "/var/www/html">
Options
</Directory>
Nginx
Nginx 구성 파일(nginx/sites-available/default)에서 autoindex off; 추가
//조치 전
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name_;
location / {
try_files $uri $uri/ =404;
}
}
/조치 후
server {
listen 80 default_server;
.
.
.
location / {
try_files $uri $uri/ =404;
autoindex off;
}
}