OWASP Top 10 2013 - A5. Security Misconfiguration (보안상 잘못된 구성)
Wr4ith2014. 5. 29. 01:25
보안상 잘못된 구성
정의
웹 어플리케이션을 운영하는데 있어서 개발자와 시스템 관리자들이 자주 실수로 놓치게 되어 발생하는 일련의 문제들을 말한다. 테스트 파일이나 샘플, 웹 서버 설치 시 기본적으로 설치되는 파일 또는 관리자나 운영자가 임시로 만들어 놓은 파일들이 만약 아무런 접근 제한 없이 웹의
홈 디렉토리에 놓여 있을 경우 권한이 없는 일반 사용자나 해커가 이 파일명을 직접 입력하여 디렉토리 정보, 시스템 정보 및 중요한 파일 정보를 획득할 수 있다.
취약점 모의 테스트
백업 파일의 노출
일반적으로 관리자는 홈페이지상에서 작은 수정을 위해 기존 홈페이지 파일의 원본을 임시로 저장할 수 있다. 혹은 대부분의 Text 전용 에디터(editplus 등)의 경우 수정을 위해 기존 원본을 특정 확장자(.bak)를 사용하여 저장할 수 있다. 문제는 이러한 특정 확장자의 파일들이 서버에서 적절하게 처리되지 못한 경우 소스가 유출될 수 있다는 것이다. 아래 그림과 같이 .bak 파일을
적절치 처리하지 못하여 공격자의 요청에 text 파일 그대로 출력할 수 있다. 이러한 소스 유출은 웹 어플리케이션 보안에 치명적이며, 백업 파일이 웹 서버에 존재한다는 것은 소스 노출이나 DB정보 노출 등의 문제도 야기할 수 있음으로 서버상의 불필요한 백업 파일들은 모두 삭제해야 한다.
디렉토리 리스팅
웹 서버에는 현재 브라우징 되는 디렉토리의 모든 파일들을 사용자에게 보여 줄 수 있는 디렉토리 인덱스 기능이 대부분 존재한다.
그러나 이런 기능이 활성화 되어 있는 경우 해커가 웹 어플리케이션의 구조를 파악할 수 있는 기회를 제공해 주며, 민감한 정보
(개인정보가 담긴 xls 파일 등)가 포함된 설정 파일을 조회할 수 있게 된다. 이러한 것은 보안상 매우 위험하며 따라서 이 기능을 반드시 중지해야 한다. 웹 서버 별로 (IIS, Apache 등) 이러한 기능을 설정하는 옵션이 존재함으로 디렉토리 별로 이러한 디렉토리 리스팅이 불가능하도록
설정해야 한다.
설정 파일 및 환경변수 노출
일반적으로 웹 어플리케이션을 설정하기 위해 위치하는 파일들은 시스템이나 DB에 관련한 많은 정보를 포함하고 있다. 이런 파일들이 공격자에게 노출될 경우 공격자에게 시스템의 많은 정보를 제공하게 된다. 이것은 보안상 매우 위험한 일이다. 예를 들어, PHP를 사용하는 시스템에는 기본적으로 phpinfo.php 라는 파일이 웹 서버 root 에 설치되거나 또는 개발 시 시스템 환경을 참조하기 위해 직접 작성하여 사용한다.
이 phpinfo.php 파일은 시스템이 정상적으로 설치되었는가와 환경변수에 대한 정보를 포함하고 있다. 대부분의 웹 서버나 웹 어플리케이션의
경우 이를 관리하기 위한 설정파일이 존재한다. 특히 웹 어플리케이션의 경우 웹에서 관리를 하는 경우 이에 대한 설정파일이 외부에 공개되기 쉽다. 설정파일의 경우 최소한 외부에 공개될 수 있는 것은 줄이는 것이 좋다. 파일의 권한 설정을 통해 이를 막을 수 있다.
대응 방안
먼저 웹 서버의 종류를 파악하고 이 웹 서버에서 기본적으로 설치되어 있는 파일명을 입력하여 중요한 시스템 정보, 디렉토리 정보 등이 있는지 조사한다. 본 대응 방안은 Apache를 예로 들어 설명한다.
불필요한 파일 관리 홈 페이지 서버에 테스트 파일과 같은 불필요한 파일을 삭제하고 홈페이지 서비스와 관련없는 디렉토리(백업 디렉토리 등)는 일반 사용자의
접근이 불가능하도록 적절한 권한 (파일 권한/디렉토리 권한)을 설정한다.
최소한의 사용자 계정 사용
아파치 운영 시 위험을 최소화하기 위해서 최소한의 권한을 가진 사용자 아이디와 그룹으로 생성하는 것이 안전하다.
첫 번째로 nobody 사용자가 로그인 할 수 없도록 다음과 같이 설정한다.
두 번째로 아파치 설정에서는 nobody 권한으로 실행하도록 다음과 같이 설정한다.
디렉토리 Index 설정 제거
웹 브라우저에서 사용자가 URL을 입력했을 경우, 아파치 웹 서버는 3가지 경우로 응답한다.
- 정상적인 웹 페이지 - 디렉토리 내용 리스트 - 에러 메시지
이 중 디렉토리 내용 리스트는 공격자에게 불필요한 정보를 제공하여 시스템에 대한 많은 정보를 획득할 수 있는 기회를 제공하는데,
이런 기능을 비활성화 하기 위해서는 다음과 같이 httpd.conf 파일에서 DocumentRoot 항목을 수정해야 한다.
심볼릭 링크 사용 설정 제거 유닉스 계열의 시스템인 경우 심볼릭 링크 기능을 사용하여 다른 위치의 파일이나 디렉토리와 연결하여 사용할 수 있는데 이런 경우 웹에서
허용하는 디렉토리 외에 다른 디렉토리를 참조하는 링크가 존재하는 경우 해당 링크를 액세스 할 수 있는 위험성이 존재한다. 이 위험성을 제거하기 위해서는 디렉토리 리스트와 마찬가지로 httpd.conf 파일에서 DocumentRoot 항목을 아래와 같이 수정한다.
메소드 제한
원격 사용자가 DocumetRoot 디렉토리에 파일을 업로드 하거나 수정하는 등의 행위를 하는 것을 제한하도록 해야 하는데 이러한 제한이 적절히 이루어지지 않을 경우 홈페이지가 변조되거나 침해를 입을 수 있다. 따라서 PUT, POST, DELETE 메소드는 인가된 사용자만 사용할 수 있도록
다음과 같이 설정한다.
헤더 정보 제한
클라이언트와 Apache가 통신을 할 경우 웹 서버에서는 응답 메기지의 헤더에 웹 서버 버전이나 응용 프로그램 버전 등을 전송한다.
이 정보는 공격자에 의해 웹 서버 버전별 또는 구동되고 있는 응용 프로그램에 잘 알려진 취약점을 찾는데 유용하게 이용되기 때문에 공격자에게 웹 서버의 버전과 같은 Banner 정보를 숨기는 것이 안전한다. (FTP의 배너그래이빙 또한 마찬가지)