# 불필요한 파일 관리
홈페이지 서버에 테스트 파일과 같은 불필요한 파일을 삭제하고 홈페이지 서비스와 관련 없는 디렉토리(백업디렉토리 등)는 일반사용자가 접근이 불가능하도록 적절한 권한(디렉토리 또는 파일 접근권한)을 설정한다
# 최소한의 사용자 계정 사용
아파치 운영 시 위험을 최소화하기 위해서 최소한의 권한을 가진 사용자 아이디와 그룹으로 생성하는 것이 안전하다. 첫 번째로 이 사용자는 로그인을 할 수 없도록 운영체제의 계정을 다음과 같이 설정한다.
두 번째로 아파치 설정에서는 nobody 권한으로 실행하도록 다음과 같이 설정한다.
위의 설정으로 아파치 구동 프로세스는 한 개의 root 권한의 프로세스와 나머지는 nobody 권한으로 프로세스가 실행된다..
# 디렉토리 Indexes 설정 제거
웹 브라우저에서 사용자가 URL을 입력했을 경우, 아파치 웹 서버는 3가지 경우로 응답한다.
- 정상적인 웹 페이지
- 디렉토리 내용 리스트
- 에러 메시지
이 중 디렉토리 리스트는 공격자에게 불필요한 정보를 제공하여 시스템에 대한 많은 정보를 획득할 수 있는 기회를 제공하는 것이다. 이러한 디렉토리 내의 모든 파일들이 리스팅 되는 것을 방지하기 위해서는 아래와 같이httpd.conf 파일에서 DocumentRoot 항목을 수정해야 한다..
# 심볼릭 링크 사용 설정 제거
유닉스 계열의 시스템인 경우 심볼릭 링크 기능(ln -s / system.html)을 사용하여 다른 위치의 파일이나 디렉토리와 연결하여 사용할 수 있는데 이런 경우 웹에서 허용하는 디렉토리 외에 다른 디렉토리를 참조하는 링크가 존재하는 경우 해당 링크를 엑세스할 수 있는 위험성이 존재한다. 이 위험성을 제거하기 위해서는 디렉토리 리스트와 마찬가지로 httpd.conf 파일에서 DocumentRoot 항목을 아래와 같이 수정한다.
# PUT, POST, DELETE의 제한
원격 사용자가 DocumentRoot 디렉토리에 파일을 업로드하거나 수정하는 등의 행위를 하는 것을 제한하도록 하여야 하는데 이러한 제한이 적절히 이루어지지 않을 경우 홈페이지가 변조되거나 침해를 입을 수 있다. 따라서 POST, PUT, DELETE Method는 제한된 사용자만 가능하도록 하거나 아무도 사용하지 못하도록 다음과 같이 설정한다..
# 헤더 정보 숨기거나 최소화
클라이언트와 Apache가 통신을 할 경우 웹 서버에서는 응답 메시지의 헤더에 웹 서버 버전이나 응용 프로그램 버전 등을 전송한다
이 정보는 공격자에 의해 Apache 웹 서버 버전별 또는 구동되고 있는 응용프로그램에 잘 알려진 취약점을 공격하는데 유용하게 이용되기 때문에 공격자에게 웹 서버의 버전과 같은 banner 정보를 숨기는 것이 안전하다. Apache 웹 서버에서는 httpd.conf 내용에 ServerTokens 지시자를 삽입하여
헤더에 의해 전송되는 정보를 최소화 할 수 있다.
# 에러 메시지 수정
에러 메시지는 공격자에게 무엇이 틀렸는지 알려주는 표시를 해주며 이로인해 공격자는 각각의 지시에 대해 다양한 공격 방법을 시도할 수 있게 된다. Apache에서 에러 메시지를 처리하는 방법은 4가지로 나누어진다. - 간단한 시스템에서 작성된 에러 메시지 출력
- 사용자가 수정한 메시지 출력
- 문제나 에러를 해결하기 위한 로컬 URL을 Redirection
- 문제나 에러를 해결하기 위한 외부 URL을 Redirection
이중 가장 보편적인 방법은 별도의 에러 페이지를 제작하여 각각의 에러코드에 대해 에러 페이지로 Redirection 시키는 방법이다. httpd.conf 파일에서 아래와 같이 설정한다.
# 관리자 페이지 접근 통제
관리자페이지는 가장 보호되어야 할 페이지로 매우 제한적으로 접근을 허용하여야 한다.
기본적으로 특정 IP Address에서만 접근을 허용하고 그 외의 모든 접근은 차단하는 것이 바람직하다. 이를 위해 httpd.conf 파일에서 다음과 같이 설정한다
# 특정 파일의 내용 보기 방지
임의의 사용자가 웹 브라우저에서 특정 파일을 입력함으로서 파일 내용을 볼 수 있는데 이를 방지하기 위하여 환경 설정화일(httpd.conf)에서 아래와 같이 설정한다.
- 아파치 웹 서버의 경우
위에서 AddType application/x-httpd-php는 뒷부분의 확장자 타입(.php .php3 .inc .html .phtml)에 대하여 실행을 시키는 실행파일을 알려 주는 것이다. 따라서 이 부분에 .inc, .bak와 같이 확장자를 입력 시 application /x-httpd-php을 통하여 동작시키므로 파일 내용을 보여주지 않게 되는 것이다.
- CGI의 경우
httpd.conf에서 다음과 같이 설정한다.
- PHP의 경우
PHP를 사용하여 개발하는데 있어 Error나 Warning 메시지를 자주 접하게 되는데 이 메시지는 오류메시지가 발생된 CGI의 물리적인(또는 시스템상의)위치와 에러 부분을 표시하여 준다. 이를 이용하여 공격자는 /lib, /inc, /admin등 보여지지 말아야할 정보가 노출되는 위험성을 가지고 있다. 이를 제거하기 위해서는 php.ini내의 설정 중에서 display_errors 값을 Off로 설정 하여 준다.
또, PHP에서는 각 코딩 라인에 @을 사용하여 해당 라인의 에러 메시지를 출력하지 않는 방법을 제공한다..
# 주요 파일시스템 설정 변경
최근 많이 발생한 웹 해킹의 경우, 악성 프로그램을 /tmp, /dev/shm등의 디렉토리에 악성 프로그램을 업로드 하는 경우가 많으므로 /etc/fstab의 내 용을 수정하여 해당 디렉토리의 실행권한을 제거하도록 한다.
변경 후에는 mount 명령을 실행하여 변경 내용을 적용한다.
또한, apache 웹 서버의 설정파일이 위치하는 디렉토리의 권한을 700으로 변경하도록 한다 (예:chmod 700 /usr/local/apache/conf)
'시스템/웹/포렌식 보안 > 웹 해킹/보안' 카테고리의 다른 글
취약점 위험평가 Framework (0) | 2013.10.08 |
---|---|
악성코드 삽입 인지 및 삭제 가이드 라인 (0) | 2013.10.08 |
웹 프록시 툴을 이용한 취약점 점검 (0) | 2013.09.09 |
Blind SQL Injection (0) | 2013.07.18 |
Beyond SQLi: Obfuscate and Bypass 번역문서 (0) | 2013.07.17 |