결론

아파치를 설치했다면 설정파일(httpd.conf)로 이동하여 디렉토리 인덱싱 옵션을 제거하자.
만약 이 과정을 건너뛰면 심각한 보안 문제를 발생시킬 수 있다!

설정하는 과정은 스택오버플로우의 이 글을 참고하면 된다.

우분투 환경이라면 두 번째 답변이 더 유용할수도 있다.

디렉토리 인덱싱?

아파치를 설치하고 브라우저에 IP를 입력하면 index.html이나 index.php 같은 파일을 찾아내서 내용을 보여준다.
이 기능을 아주 당연하게 받아들이기 쉬운데, index 파일을 기본적으로 보여주는 것이 신기하다는 생각을 해 본 적이 있는가?

의심하는 것은 좋은 습관이다.

아파치 설정 파일(httpd.conf)을 뜯어보면 이런 부분을 찾아낼 수 있다.

<IfModule dir_module>  
    DirectoryIndex index.html index.htm index.php  
</IfModule>

이 설정은 index.html, index.htm, index.php 파일이 있을 경우 별도로 파일 이름을 지정하지 않더라도 해당 경로로 접근했을 때 우선적으로 위 파일들을 보여주라는 설정이다.

만약 폴더에 이런 파일들이 없다면 어떤 일이 일어날까?

ubuntu에서 apt-get으로 설치한 apache2 에서는 디렉토리 인덱싱이 발생하는 것을 확인하였다.

쉽게 말해 이런 화면을 떠올리면 좋다.

갑자기 심장이 쫄깃해지지 않는가?

이게 어때서??

예를 들어 그누보드 구조에 익숙한 사람이 디렉토리 인덱싱이 걸린 개발단계의 그누보드 웹 프로젝트를 발견한다면, 바로 /data 경로로 접근하여 dbconfig.php 파일을 다운로드 받을 수 있다.

dbconfig.php 파일에 직접 접근하는 것은 php 엔진이 살아있을 때는 파일 내부에 echo 부분이 없으므로 당장 별 문제가 안 될지 모르지만 파일을 통째로 다운로드 받는다면 이야기가 크게 달라진다.

공격자는 php 변수에 할당된 db 이름과 사용자 ID, 패스워드를 모두 손에 넣을 수 있다. 바로 이 문제 때문에 어지간하면 아이디나 비밀번호 같은 중요 정보가 담긴 파일은 웹 프로젝트 바깥에 위치시키는 것이 좋지만 그런 경우에도 인내심을 갖춘 공격자는 디렉토리 인덱싱이 적용된 웹 프로젝트를 끈기있게 순회하면서 php 파일을 모을 수 있다. 그러면 테이블 이름을 차곡차곡 알아내 sql injection의 토대를 만들 수 있고 코드 상의 보안 취약성을 훤히 들여다볼 수 있게 된다. PHP가 보안에 별로 충실하지 못한 언어라는 사실을 기억해야 한다.

단순히 보안 문제뿐만 아니라 리소스나 소스코드의 탈취 측면에서도 디렉토리 인덱싱은 별로 좋은 선택이 아니다. 완전히 파일 서버로만 사용되는 개인용 NAS의 웹 인터페이스 같은 경우면 모를까.

참조 링크

이 문제는 apache 자체의 기본 스펙이기도 하고 상당히 잘 알려진 편이라 한글로 된 풍부한 자료가 많이 있다.

시간이 꽤 지나기는 했지만 아직도 유효한 정보로 가득한 이 블로그도 읽어볼 필요가 있다.

위 블로그의 글이 너무 길다고 생각하면 이 정도의 앞부분을 읽어주도록 하자.