본문 바로가기
서버구축 (WEB,DB)

최신 버전으로 구축하는 웹 파이어월, modsecurity

by 날으는물고기 2008. 12. 30.

최신 버전으로 구축하는 웹 파이어월, modsecurity

여러 차례 소개된 바 있는 아파치용 웹 파이어월인 modsecurity의 새로운 버전이 발표됐다. 아파치 2와 함께 많은 기능의 변화를 보이고 있는 웹 파이어월 모듈 modsecurity2를 설치하고 활용하는 방법에 대해 살펴보자.

홍석범 | 오늘과 내일 차장

여러 차례 소개된 바 있는 아파치용 웹 파이어월인 modsecurity의 새로운 버전이 발표됐다. 아파치 2와 함께 많은 기능의 변화를 보이고 있는 웹 파이어월 모듈 modsecurity2를 설치하고 활용하는 방법에 대해 살펴보자.
최신 버전의 아파치는 http://httpd.apache.org/에서 다운로드할 수 있으며, 여기서는 httpd-2.2.4.tar.gz를 다운로드한다. 만약 DSO 방식으로 사용하는 rpm을 이용하고자 한다면, 별도로 다운로드하지 않고 yum 등으로 설치해도 된다.
아파치 2와 호환되는 최신 버전의 modsecurity는 http://www.modsecurity.org/에서 다운로드할 수 있으며, modsecurity-apache_2.1.1.tar.gz를 다운로드하면 된다. 참고로 modsecurity는 1.x 대와 최근의 2.x가 있는데, 각각은 많은 차이점이 있다. 앞으로는 2.x를 중심으로 지원이 이뤄질 것이기 때문에 이 버전에 대해 살펴보도록 하겠다.
구체적으로 설치방법을 알아보기에 앞서 1.x와 2.x의 차이점에 대해 중요한 부분만 간략하게 살펴보면 (표 1)과 같다. 1.x와 2.x의 차이점에 대해 궁금하거나 1.x 사용중 2.x로 업그레이드하고자 할 때는 다음의 문서를 참고하기 바란다.

http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf



rpm 버전의 아파치(DSO)에 탑재하는 경우
이미 배포판에 설치된 DSO 방식의 rpm 버전 아파치에 modsecurity를 탑재하는 방법에 대해 살펴보도록 하자. 


# rpm -q httpd
httpd-2.0.52-28.ent.centos4


먼저 httpd가 설치된 것을 확인한 후, 관련 디렉토리로 이동해 다음과 같이 실행하면 된다. modsecurity2.x에서는 더 이상 apxs로 설치하는 것을 지원하지 않으며, 자체적으로 지원되는 Makefile을 이용해야 한다.
이후 Makefile 을 열어 20번째 줄에 있는 top_dir을 다음과 같이 변경한다.


변경 전 : top_dir      = /apps/apache22
변경 후 : top_dir      = /etc/httpd


이제 컴파일해 설치하도록 한다.

# make; make install


문제없이 설치되면 다음과 같은 메시지가 보일 것이다.


make[1]: Entering directory `/usr/local/src/modsecurity-apache_2.1.1/apache2'
/bin/sh /usr/lib/apr/build/libtool --silent --mode=install cp mod_security2.la /usr/lib/httpd/modules/
make[1]: Leaving directory `/usr/local/src/modsecurity-apache_2.1.1/apache2'


정상적으로 설치되면 /usr/lib/httpd/modules/mod_security2.so 파일이 생성된다. 이후 /etc/httpd/conf/httpd.conf 파일을 열어 다음 내용을 추가한다.


LoadFile /usr/lib/libxml2.so
LoadModule security2_module   modules/mod_security2.so


이제 httpd를 재가동하도록 한다.


# /etc/rc.d/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]


DSO 방식으로 httpd를 소스 컴파일 설치해 탑재하는 경우

아파치를 설치할 경우 DSO 방식으로 소스 컴파일해 설치한 경우의 modsecurity 탑재 방법에 대해 살펴보자. 이는 httpd 설치 시 다음과 같이 --enable-so 옵션을 주고 설정한 경우를 말한다. 그리고 여기에서 --enable-unique-id는 각 요청마다 유일한 식별자를 갖는 환경변수를 위해 설정하는 것으로 자세한 내용은 http://httpd.apache.org/docs/2.2/mod/mod_unique_id.html를 참고하기 바란다.


# cd src/httpd-2.2.4
# ./configure --enable-so --enable-unique-id
# make; make install


이렇게 설치하면 기본적으로 /usr/local/apache2/ 디렉토리에 아파치가 설치될 것이다. 이후 다음과 같이 압축을 해제한 modsecurity 소스 디렉토리로 이동하도록 한다.
 
# cd modsecurity-apache_2.1.1/apache2/


이후 Makefile 을 열어 20번째 줄에 있는 top_dir을 다음과 같이 변경하도록 한다.


변경 전 : top_dir      = /apps/apache22
변경 후 : top_dir      = /usr/local/apache2


이제 컴파일해 설치한다.


# make; make install


정상적으로 설치되면 /usr/local/apache2/modules/mod_security2.so 파일이 생성된다. 이후 httpd.conf 파일을 열어 다음 내용을 추가한다.


LoadFile /usr/lib/libxml2.so
LoadModule security2_module   modules/mod_security2.so


이제 httpd를 재가동하면 된다.


# /usr/local/apache2/bin/apachectl restart


소스 컴파일해 정적으로 설치하고자 할 경우
앞에서 살펴본 DSO 방식이 아닌 아파치 소스를 가져와 정적으로(static) 소스 컴파일해 설치하는 방법도 있다. 그러나 modsecurity 2.x에서는 이 방법을 더 이상 지원하지 않으며 오직 DSO 방식만 지원하므로 참고하기 바란다. 만약 정적으로 소스 컴파일해 사용하고자 할 경우에는 modsecurity 1.x 버전을 사용하기 바란다.
설치가 된 후 정상적으로 작동하는지 여부는 httpd.conf에 다음과 같은 설정을 해 본 후 간단히 확인해 보면 된다.


SecServerSignature "Microsoft-IIS/5.0"


이후 httpd를 재가동하고 다음과 같이 헤더값을 확인해 보기 바란다.


# curl --head  http://127.0.0.1/

HTTP/1.1 200 OK
Date: Fri, 20 Apr 2007 05:33:01 GMT
Server: Microsoft-IIS/5.0
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "11a088-2c-4c23b600"
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html


만약, 정상적이라면 Server 부분에 앞에서 설정한 Microsoft-IIS/5.0이 보일 것이고, 제대로 적용되지 않았다면 다음과 같이 Apache가 보일 것이다.


Server: Apache/2.2.4 (Unix)


성공적으로 적용됐다면, 원하는 규칙을 설정하면 된다. 만약 아무런 규칙을 적용하지 않으면 설정 자체가 의미가 없으므로 modsecurity에서는 Core rule이라는 이름으로 별도의 규칙을 제공하는데, modsecurity-apache_2.1.1/rules 디렉토리에 관련 파일들이 있다. Core rule은 알려진 취약성(known vulnerabilities)에 대한 차단뿐만 아니라 알려지지 않은 취약성(unknown vulnerabilities)에 대한 차단 기능도 제공한다.
규칙 관련 파일은 별도의 디렉토리에 저장하는 것이 좋은데, 다음과 같이 디렉토리 내에 별도의 디렉토리를 생성하도록 한다. 


# mkdir /usr/local/apache2/conf/modsecurity
# mv *.conf /usr/local/apache2/conf/modsecurity/


그리고, httpd.conf에서 설정 파일을 로드하도록 포함(include)한다.


Include conf/modsecurity/*.conf


이후 httpd를 재가동하면 된다. 정상적으로 작동하는지 여부는 nikto와 같은 웹 스캐너를 이용해 스캔한 후 /usr/local/apache2/logs 디렉토리에 생성되는 로그파일을 살펴보면 된다. 모든 보안 솔루션이 그렇듯이 모든 규칙을 그대로 적용하면 정상적인 접속도 차단될 수 있으므로 오탐(false positive)이 없는지 확인한 후 커스터마이징 과정을 거쳐야 한다.
 
modsecurity 애플리케이션
다음으로는 modsecurity와 관련된 유용한 애플리케이션을 살펴보도록 하자.
먼저 modsecurity에서 제공하는 modsecurity-console이 있다. 이 프로그램은 modsecurity에 대한 로그 관리 등을 웹을 통해 수행할 수 있는 프로그램으로, 3개의 센서에 대해서는 제한없이 사용할 수 있다.
이 프로그램은 https://bsn.breach.com/ 에 접속 후 회원 가입하여 다운로드가 가능하다. 다음과 같이 압축해제 후 실행하면 된다.


# tar zxvfp modsecurity-console_1_0_2_unix.tar.gz
# cd modsecurity-console
# ./modsecurity-console


이 프로그램은 JDK가 설치돼 있어야 하므로, JDK가 없을 경우 다음과 같은 메시지가 나오면서 실행이 중지된다.


No suitable Java Virtual Machine could be found on your system.
The version of the JVM must be at least 1.4.
Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.
You can also try to delete the JVM cache file /root/.install4j


이 때는 http://java.sun.com/에서 JDK 1.5 이상 버전을 다운로드한 후 설치해야 한다. 다음과 같이 실행하면 설치가 시작된다.


# ./jdk-1_5_0_09-linux-i586.bin


이후 jdk1.5.0_09 디렉토리가 생성되면서 관련 파일들이 설치되는데, 다음과 같이 실행해 INSTALL4J_JAVA_HOME 변수를 지정해 주도록 한다.


# export INSTALL4J_JAVA_HOME=/usr/local/src/modsecurity-console/jdk1.5.0_09


이제 modsecurity-console을 실행하면 잠시 후 8886/tcp에서 포트를 리슨하고 이 포트로 접속하면 된다. 초기 기본 ID와 암호인 admin/admin으로 로그인하면 (화면 1)과 같은 화면을 볼 수 있다.



modsecurity-cosole에 대해서는 http://modsecurity.org/projects/console/index.html을 참고하기 바란다. 이외에도 modsecurity와 관련된 주요 프로젝트는 다음과 같다.

- REMO : http://remo.netnea.com/
modsecurity에 대한 규칙 설정을 웹 기반으로 편집할 수 있는 프로그램이다.

- WeBekci : http://www.owasp.org/index.php/Category:OWASP_WeBekci_Project
modsecurity에 대한 규칙 설정 등의 관리를 웹 기반으로 수행할 수 있는 프로그램으로, php+mysql 기반의 프로그램이다.

또한 modsecurity에 대한 유료 기술지원을 제공하는 Breach(http://www.breach.com/)에서는 modsecurity를 기반으로 한 리눅스 기반의 ModSecurity Pro와 WebDefend라는 웹 파이어월 어플라이언트 제품도 별도로 판매하고 있다.


728x90

댓글