:: Apache 설치 후 보안설정 :: - No1. httpd.conf - 보안관련사항 설정Apache 웹서버는 httpd.conf 파일에서 웹서버 구동과 관련된 다양한 설정을할수있다. 웹서버 포트 지정, 사용자 및 그룹 지정 등을 비롯해서 보안과 관련한 설정들도 여기서 제어할 수 있다. httpd.conf 수정 후에는 설정파일의 문법오류를 점검한 다음 변경된 내용을 반영하기 위해 웹 데몬을 재가동하여야한다.[root@to root]# /usr/local/apache/bin/./httpd -tSyntax OK[root@to root]# /usr/local/apache/bin/./apachectl restart/usr/local/apache/bin/./apachectl restart: httpd restarted가. 디렉토리 리스팅, 심블릭 링크, SSI 기능, CGI 실행■ 디렉토리 리스팅웹 브라우저에서 사용자가 URL을 입력했을 경우, Apache 웹서버는 3가지 방법 응답한다. 정상적으로 웹 내용을 보여주든지, 디렉토리 리스트를 보여주든지, 에러 메시지를 보여준다.원격의 공격자가 시스템에 대한 많은 정보를 획득할수록 보안 허점을 발견하기가 용이해 진다. 디렉토리 리스트를 보여주는 것 또한 불필요한 정보를 공격자에게 제공하여 공격에 이용될 수 있다. 백업 데이터, CGI 소스코드들, 필요에 의해 만들어놓은 심블릭 링크 등 서버 관리자가 실수로 지우지 않은 파일들이 공격자의 손에 들어갈 수 있다. DocumentRoot 디렉토리 내의 모든 파일들이 리스팅되는 것을 방지하기 위해서 Options 지시자에서 Indexes 옵션을 제거하여야 한다.■ 심블릭 링크몇몇 서버는 심블릭 링크를 이용해서 기존의 웹 문서 이외의 파일시스템에 접근 가능하도록 하고 있다. 이러한 방법은 편리할 수는 있지만 심각한 보안 문제를 야기시킬 수 있다. 가령 시스템 자체의 root 디렉토리(/ )를 링크 걸게 되면 웹서버 구동사용자 권한(nobody)으로 모든 파일시스템의 파일에 접근할 수 있게 된다. 즉,/etc/passwd와 같은 대단히 민감한 파일까지 누구나 열람가능하게 된다.Options 지시자에서 심블릭 링크를 가능하게 하는 옵션인 FollowSymLinks를 제거함으로써 이를 막을 수 있다.■ SSI(Server Side Includes)SSI는 HTML 페이지 안에 위치하고 있으며, 동적인 웹 페이지를 제공할 수 있도록 한다. 하지만 SSI가 포함된 파일은 exec cmd 를 사용해서 어떤 CGI 스크립트나프로그램들을 Apache가 구동하는 사용자와 그룹 권한으로 실행시킬 수 있다. 이처럼 SSI 페이지가 스크립트나 프로그램을 실행시킬 수 없도록 하기 위해서는Options 지시자에 IncludesNoExec 옵션을 추가함으로써 차단할 수 있다.■ CGI 실행사용자들이 CGI 스크립트들을 어느디렉토리에서나 실행할 수 있도록 할 경우 악의적인 사용자가 CGI 프로그램을 업로드한 후 이를 실행하여 임의의 명령을 실행시킬 수 있다.따라서, CGI 프로그램의 실행은 관리자가 지정한 특정 디렉토리에서만 가능하도록제한할 필요가 있다. CGI 실행은 ScriptsAlias 지시자에 의해서 실행가능한 디렉토리를 제한할 수 있다. ScriptsAlias 지시자 문법은 다음과 같다.Syntax : ScriptAlias URL-pathfil - path | directory-path예를들어 cgi-bin이라는 디렉토리에서만 실행가능하도록 할 경우 다음과 같이 지정할 수 있다.ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/ "Options 지시자에서 사용할 수 있는 옵션값은 다음 표와 같다.ALL : MultiViews를 제외한 모든 옵션을 줌 (default 설정값임)None : 옵션을 주지 않음ExecCGI : CGI 프로그램 실행을 가능하게 함FollowSymLinks : 심볼릭 링크로의 이동을 가능하게함Includes : Server Side Includes를 가능하게함IncludesNOEXEC: Server Side Includes는 가능하지만 CGI 스크립트나 프로그램들은 실행할 수 없도록 함.Indexes : 해당 디렉토리안에 DirectoryIndex에 명기된 파일(index.html등)이 없을 경우 디렉토리와 파일목록을 보여줌Multiviews : 유사한 파일이름을 찾아 주는 기능을 실행함(예를들어 index라고만 입력하더라도 index.*를 찾아 보여줌)DocumentRoot 디렉토리에서 다음과 같이 설정되어 있다고 하자.Options Indexes FollowSymLinks 이 경우 다음 그림과 같이 DirectoryIndex에 정의된 초기 파일(index.html)이 존재하지 않을 경우 디렉토리내의 파일목록을 리스트업 해준다. - 그림 1.또한, FollowSymLinks로 인해 /etc/passwd 에 심블릭 링크된 파일(ln -s /etc/passwd link.txt)을 열었을 경우 DocumentRoot 디렉토리 상위의 passwd파일의 열람이 가능함을 알 수 있다.- 그림 2.이러한 문제점을 제거하기 위해서는 Indexes 옵션과 FollowSymLinks 옵션을 제거하고, IncludesNoExec 옵션을 사용하도록 한다.Options IncludesNoExec 이 경우 다음과 같이 초기 파일(index.html)이 존재하지 않을 경우 디렉토리 리스트를 보여주는 것이 아니라 오류 창을 띄워주는 것을 확인할 수 있다. (403에러)-그림 3.- ServerSignature Off : 웹브라우저 Not found시에 웹서버의 정보가 누출됨을 막을 수 있다.- 그림 4.나. PUT과 POST의 제한원격 사용자는 DocumentRoot 디렉토리 구조에 파일을 업로드 하거나 수정하는 행위가 제한되어야 한다. 물론 DocumentRoot의 파일/ 디렉토리 퍼미션을 사용해서도 웹을 통한 파일 업로드 및 수정을 막을 수는 있다. 하지만, 적절한 제한이 이루어지지 않을 경우 홈페이지가 변조되거나 웹 사이트가 침해당할 수 있으므로태그를 이용하여 각 디렉토리별로 HTTP Method의 사용여부를 통제할 수 있다. 파일 업로드 및 파일의 수정을 위해서 사용되는 HTTP Method는 PUT과 POST이다.사용시 주석문 해재하고 적절히 수정한다.# # AllowOverride FileInfo AuthConfig Limit# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec# 다. 헤더 정보 숨김클라이언트가 Apache웹서버에 접속했을때 웹서버에서는 응답 메시지의 헤더에 웹서버 버전,설치된 응용프로그램 등과 같은 정보를 전달한다.- ServerTokens Full(default)[root@to root]# telnet to.esom.net 80Trying 218.238.43.8...Connected to to.esom.net (218.238.43.8).Escape character is '^]'.GET / HTTP/ 1.1HTTP/1.1 400 Bad RequestDate: Wed, 25 Dec 2002 09:29:31 GMTServer: Apache/1.3.27 (Unix) PHP/4.2.1Connection: closeTransfer-Encoding: chunkedContent-Type: text/html; charset=iso-8859-1..........# Order allow,deny# Allow from all# ## Order deny,allow# Deny from all# #
Computer/Linux