선 밖에 선 자유인

Apache mod_security 웹 방화벽 설정 법 본문

IT/Security

Apache mod_security 웹 방화벽 설정 법

Hotman 2012. 2. 1. 16:43

1. 개요 
ModSecurity는 Apache 웹 서버를 위한 오픈 소스 웹 방화벽이다. 
ModSecurity는 소스의 재사용 및 재생산된 프로그램의 소스 공개 조건의 GNU GPL 라이센스 
를 따르는 공개 버전과 ModSecurity의 개발사인 Thinking Stone社의 상업용 버전이 있는데 본 고 
에서는 공개 버전을 이용한 설치 및 운영 방법을 알아본다.

ModSecurity는 O’Reilly사에서 출간한 "Apache Security"라는 책을 쓴 Ivan Ristic가 개발한 툴 
로써, 설치 및 차단 Rule 설정 인터페이스가 불편하다는 단점은 있지만 공격차단 기능은 상당히 
우수하다. Apache는 중소기업이나 웹호스팅업체에서 많이 사용하고 있는 공개 웹서버로써, 이들 
중소기업에 고가의 상용 웹방화벽 설치가 어려운 경우가 많다. 이 경우 ModSecurity는 다양한 웹 
공격을 효과적으로 막는데 많은 도움을 줄 수 있을 것이다. 하지만, 다수의 웹서버를 운영하는 대 
규모 기업이나 복잡한 웹 환경을 가진 기업의 경우 인터페이스 및 기술지원 측면에서 보다 우수 
한 상용 웹 방화벽 도입을 권고한다.

공개용 ModSecurity를 이용한 아파치 웹서버의 보안 강화방안을 살펴보고, 특히 
국내에서 홈페이지 변조사고에 이용되고 있는 PHP Injection 공격에 대응하기 위하여 
ModSecurity에서 어떻게 설정해야 할지 중점적으로 살펴보고, 웹서버의 가장 일반적인 공격인 
SQL Injection, XSS 등 다양한 웹 공격에 대한 방어 방법도 살펴보도록 한다.

이 툴은 웹 공격에 대한 침입탐지 및 침입방지 기능을 추가해 주는 아파치 웹서버의 하나의 모 
듈로 동작한다. 웹 클라이언트와 아파치 웹 서버 사이에 ModSecurity가 존재하여 클라이언트로부 
터 악의적인 접속요청이 발견되면 공격차단, 로깅 등 사전에 정의된 행위를 수행한다. 
다른 아파치 모듈과 마찬가지로 ModSecurity를 아파치의 한 부분으로 설치할 수 있으며, 정상 
적으로 설치되었을 경우 ModSecurity의 추가적인 처리로부터 발생되는 오버헤더는 거의 없다.

ModSecurity의 주요 특징은 다음과 같다. 
o 요청(request) 필터링 
- 클라이언트로부터 웹요청이 들어올 때 웹서버 또는 다른 모듈들이 처리하기 전에 
ModSecurity가 요청 내용을 분석하여 사전에 필터링한다. 
o 우회 방지 기술 
- 경로와 파라미터를 분석하기 전에 정규화시켜 우회 공격을 차단한다. 
- 즉, “//”, “\/”, “.”, “%00” 등 우회 공격용 스트링을 제거하고, 인코딩된 URL을 디코딩한다. 
o HTTP 프로토콜 이해 
- 엔진이 HTTP 프로토콜을 이해하기 때문에 아주 전문적이고 미세한 필터링을 수행할 수 있다. 
o POST 페이로드(payload) 분석 
- GET 방식 뿐만 아니라 POST 메소드를 사용해서 전송되는 컨텐츠도 가로채어 분석할 수 있다.
o 감사 로깅 
- POST를 포함하여 모든 요청의 모든 상세한 부분들까지 추후 분석을 위해서 로깅될 수 있다. 
- MosSecurity에서 차단기능을 비활성화시킨 후, 강력한 로깅 기능만으로 침입탐지 시스템 역할을 
수행할 수 있도록 한다. 
o HTTPS 필터링 
- 엔진은 웹서버에 임베디드되어 있기 때문에 복호화 한 후에 요청 데이터에 접근하여 HTTPS 
를 통한 공격도 필터링할 수 있다.


2. ModSecurity 설치 
필자는 다음 환경에서 ModSecurity를 설치하여 테스트하였다.

o OS : 2.4.21-37.0.1.ELsmp 
o 웹서버 : Apache 2.0.49 
o ModSecurity 소스코드 디렉토리 : /usr/local/modsecurity-apache-1.9.4
o 아파치 소스코드 디렉토리 : /usr/local/apache

□ ModSecurity 프로그램 다운로드 
설치하고자 하는 버전인 1.9.4는 파일 링크를 통해 받으면 되고 최신버젼을 원한다면 아래 링크를 다운로드 받으면 된다.

http://www.modsecurity.org/download

다운로드 받은 파일을 /usr/local 디렉토리에 업로드 한다

# cd /usr/local
# tar xvzf modsecurity-apache-1.9.4.tar.gz 
# cd modsecurity-apache-1.9.4

□ ModSecurity 프로그램 설치 
웹서버 초기설치시 웹서버 자체에 모듈을 설치하는 방식과 운영되고 있는 웹서버에 mod_security.c만을 
컴파일하여 포함시키는 동적공유객체(DSO, Dynamic shared object) 방식 등 두 가지가 있다. 
만약 Apache 초기 설치시 DSO방식으로 컴파일(--enable-so) 했다면 아래 DSO방식으로 설치하면 된다.

o DSO 방식으로 설치 
DSO 방식은 아파치 웹서버의 재설치 과정없이 기존에 운영되고 있는 아파치 웹서버에 모듈을 
동적으로 추가하는 방식이므로 기존에 아파치 웹서버를 이미 운영 중인 기관의 경우 DSO 방식을 
선택하는 것을 권장한다. DSO 방식으로 설치하는 것은 아파치 버전에 상관없이 다음과 같이 설치 
할 수 있다.

① apxs를 이용하여 ModSecurity 모듈을 컴파일하고, 설치하고, 설정을 자동으로 변경한다. 
# /usr/local/apache/bin/apxs -cia /usr/local/modsecurity-apache-1.9.2/apache2/mod_security.c 
※ 아파치가 설치된 경로가 다르다면 변경 해준다.

위의 명령은 mod_security.c를 컴파일 하고(-c 옵션), 공유객체를 웹서버 modules 디렉토리에 
설치하고(-i 옵션), 아파치 httpd.conf 설정파일에 적절한 LoadModule 줄을 추가(-a 옵션)한다. 
참고로 apxs는 아파치 웹서버의 확장모듈을 컴파일하고 설치하는 도구로써, 여러 소스와 오브 
젝트파일을 LoadModule 지시어로 실행 중인 아파치 서버로 읽어 들일 수 있는 동적공유객체 
(DSO)를 만든다. 위의 결과로 modules 디렉토리에 mod_security.so가 생성되고 httpd.conf 파 
일에 “LoadModule security_module modules/mod_security.so” 라인이 추가된다.

②  아파치 웹서버를 재구동한다. 
# /usr/local/apache/bin/apachectl stop 
# /usr/local/apache/bin/apachectl start

o 소스 컴파일을 통한 설치 
DSO 방식이 아닌 정적으로 소스 컴파일 될 경우에는 ModSecurity 모듈이 웹서버의 body에 포 
함되게 된다. 이 방법은 DSO 방식에 비해 다소 실행 속도가 빠르지만, 아파치 웹서버를 다시 새 
롭게 설치해야 하고 설치가 약간 복잡한 단점이 있다. 
또한, 아파치 버전에 따라 설치를 위한 사전 설정을 달리 해 주어야 한다.

<아파치 1.x의 경우> 
$ cd <apache1-source> 
$ cp <modsecurity-source>/apache1/mod_security.c ./src/modules/extra 
$ ./configure --activate-module=src/modules/extra/mod_security -.enable-module=security

<아파치 2.x의 경우> 
$ cd <apache2-source> 
$ cp <modsecurity-source>/apache2/mod_security.c ./modules/proxy 
$ ./configure -enable-security --with-module=proxy:mod_security.c 
아파치 1.x 또는 아파치 2.x에서 위의 과정을 거친 후에, 일반적인 아파치 컴파일과 설치 과정을 
거치면 된다. 
make 
make install 
/usr/local/apache/bin/apachectl start

DSO 방식과는 달리 소스 컴파일을 통한 설치시에는 httpd.conf 파일에 아무런 내용이 추가되지 않는 
다. DSO 방식과 마찬가지로 ModSecurity를 활성화시키기 위해서는 다음 장의 ModSecurity 활성화 및 
Rule 정의를 위한 환경설정이 필요하다.

여기까지 ModSecurity의 모듈 설치가 끝났으나, 아직 룰(Rule)에 대한 정의를 하지 않았으므로 
공격을 방어하지는 못한다. 이를 구동하기 위해서는 다음 장의 ModSecurity 활성화 및 Rule 정의를 
위한 환경설정을 살펴보도록 하자.

3. ModSecurity 활성화 및 Rule 정의 
① httpd.conf 파일 수정
# vi /usr/local/apache/conf/httpd.conf 
Include conf/modsecurity.conf 라인을 추가 한다..

② modsecurity.conf 파일 업로드 및 설정
파일 링크의 modsecurity.conf를 다운받아 /usr/local/apache/conf 디렉토리에 업로드 한다.
필자가 쓰고 있는 웹서버엔 이미 modsecurity가 설치되어 있기 때문에 conf파일을 게시물의 텍스트로
올릴수 없음을 양해하기 바란다.

Comments