1. Apache 디렉토리 리스팅 제거
디렉토리 리스팅 기능 설정 시 외부사용자에게 디렉토리의 모든 파일을 노출되게 된다.
즉 해당 디렉토리 구조 및 파일정보까지 보여지기 때문에 해커들에게 중요 설정 정보들이 공개되는 것이다.
한국인터넷진흥원 안전 운영대책에도 올라와 있을 정도로 가장 기본적이면서, 중요한 설정이라 할 수 있다.
조치 방법
Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.
<Directory "DocumentRoot"> Options 항목에 Indexes를 제거하면 된다.
Ex)
<Directory "/home/apache/test">
Options Indexes
</Directory>
2. Apache 불필요한 파일 제거
Apache 설치 시 디폴트로 매뉴얼과 디폴트 정보 파일들이 설치가 된다
설치된 해당 파일들은 버전정보랑 각종 유용한 정보들이 포함되어 있기 때문에 외부 시스템으로부터 정보들을 노출될 수 있다.
조치 방법
Apache 기본 디렉토리로 이동하면, cgi-bin 디렉토리가 보일 것이다.
cgi-bin디렉토리 안에 모든 파일들을 제거 해줌으로써 해킹으로부터 안전해질 수 있다.
Ex)
/home/apache/cgi-bin
Dec 11 2004 test-cgi
Dec 11 2004 printenv
Oct 14 2013 .
Oct 21 2013 ..
|
3. Apache 심볼릭 링크 사용금지
유닉스/리눅스 계열은 심볼릭링크를 사용하여, 다른 위치에 있는 디렉토리 접근이 가능하도록 지원한다.
Apache에서 링크 설정 시 설정한 디렉토리 외에 타디렉토리에 접근하여 엑세스 할 수 있는 위험성이 발생될 수 있다
그러므로 업무서비스에 영향도가 없는지 파악 후 해당 옵션을 제거해야 한다.
조치 방법
Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.
<Directory "DocumentRoot"> Options 항목에 followSymLinks를 제거하면 된다.
Ex)
<Directory "/home/apache/test">
Options followSymLinks
</Directory>
4. Apache SSI 실행 권한 사용금지
Apache에서 SSI는 잠재적인 보안 위험을 갔고 있는데 대표적인게 exec cmd이다.
해당 옵션이 설정되어 있다면 Apache 사용자 및 그룹권한으로 CGI스크립트나 프로그램들을 실행할 수 있다.
악성스크립트가 숨겨져 있다면, Apache 사용자 권한으로 악성프로그램을 구동할 수 있게 된다.
조치방법
Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.
<Directory /> Options 항목에 Includes 를 제거하거나 IncludesNoExec를 포함시킨다.
Ex)
<Directory />
Options Includes
</Directory>
Tip 최적의 보안설정 방법 Indexes, followSymLinks, Includes, MultiViews를 삭제하고 IncludesNoExec만 추가한다.
5. Apache Method 제한
Apache 웹서버는 다양한 method를 제공하는데 불필요한 method를 제한을 걸고 사용할 method만 제공하는게 좋다.
Method 종류 : GET POST OPTIONS HEAD PUT DELETE TRACE
조치방법
Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.
아래 내용을 추가 입력하면 된다.
Ex)
<Directory />
<LimitExcept GET POST>
Order allow,deny
deny from all
</LimitExcept>
</Directory>
6. Apache 에러 페이지 등록
Apache 웹 서버에 잘못된 정보나 주소를 전달하면, 에러 메시지가 사용자 브라우저에 웹서버에 중요한 정보들이 출력되게 된다. 공격자가 고의적으로 에러메시지를 발생시켜 서버정보를 획득할 수 있기 때문에 반드시 에러페이지 출력이 가능하도록 설정을 해야 한다.
조치방법
Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.
에러페이지로 출력할 html 작성 및 환경설정에 추가 해주면 된다.
Ex)
ErrorDocument 403 /test/403.html
ErrorDocument 404 /test/404.html
ErrorDocument 500 /test/405.html
출처 : http://ktdsoss.tistory.com/186
>> 특정 IP(대역)를 사용하는 호스트 차단하기
# vi /usr/local/apache/conf/httpd.conf
<Directory /usr/local/apache/htdocs>
Order Allow,Deny
Deny from 192.168.1
Allow from all
</Directory>
해당 디렉토리에 대한 192.168.1.0 ~ 254 IP의 접근 차단. Forbidden Error 출력.
>> 특정 IP(대역)을 사용하는 호스트만 허용하기
# vi /usr/local/apache/conf/httpd.conf
<Directory /usr/local/apache/htdocs>
Order Deny,Allow
Allow from 192.168.1
Deny from all
</Directory>
해당 디렉토리에 대한 192.168.1.0 ~ 254 IP의 접근만 허용
Order Deny,Allow : 마지막이 우선 Deny < Allow
>> 서버 사이드 파일 설정 (웹 페이지 차단)
# vi /usr/local/apache/conf/httpd.conf
<Files ~ "admin.php"> // <Files ~ ".ext$">
Order Deny,Allow
Deny from all
Allow from 192.168.1.1
</Files>
해당 파일에 대한 192.168.1.1 IP의 접근만 허용
특정확장자를 서버사이드 언어로 설정
AddType application/x-httpd-php .php .inc .bak .old .c
>> 대용량 메모리 제한 설정
RLimitMEM 20000000
<Directory /usr/local/apache/htdocs/memory/>
RLimitMEM 50000000
</Directory>
모든 디렉토리에 대한 사용가능 메모리 20MB
해당 디렉토리에 대한 사용가능 메모리 50MB
>> 폴더 접근 차단 (파일 리스트 출력 차단)
# vi /usr/local/apache/httpd.conf
<Directory "/usr/local/apache/htdocs">
Options IncludesNoExec
</Directory>
출처 : http://www.tested.co.kr/board/Study/view/wr_id/20/sca/6
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
※ apache 1.3.33과 2.0.54 이전버전
Apache 1.3.34과 2.0.55 이후 버전에는 「TraceEnable」가 서포트되고 있어 상기와 같이 간단히 TRACE메소드를 무효로 할 수 있지만,
이전 버전(1.3.33과 2.0.54)을 사용하고 있는 경우에는「mod_rewire」를 사용하는 방법이 있다.
이 방법은 「TraceEnable」과는 달리 TRACE메소드가 허가되고 있는 것처럼 보이지만, 내부 처리에 의해 무효화하는 방법이다.
우선, 「mod_rewrite」가 유효하게 되어 있는지 확인한다. 무효로 되어 있다면 유효하게 할 것.
다음의 항목이 httpd.conf에 들어 있으면 된다.
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c
위의 부분이 확인되었다면, 적당한 부분에
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>
과 같이 기술하고, Apache를 재기동한다.
이것으로 TRACE메소드는 유효하게 되어 있지만, 클라이언트로부터 송신할 수 없게 된다.
예를 들어 TRACE메소드를 송신한 경우
- 적용 전
telnet 192.168.0.201 80
TRACE / HTTP/1.1
Host:localhost
HTTP/1.1 200 OK
Date: Tue, 11 Jul 2006 10:57:30 GMT
Server: Apache/1.3.12 (Unix)
Transfer-Encoding: chunked
Content-Type: message/http
TRACE / HTTP/1.1
Host: localhost
- 적용 후
HTTP/1.1 403 OK