apache 에 mod_security2 를 OWASP 룰셋으로 적용

이건 매우 상급 이니까.  아 해봐야지 하고 덤볐다가는 멘탈 붕괴가 무엇인지 느끼게 해준다 =ㅅ=a

apache web server 에 mod_security를 도입하고 OWASP 룰셋를 적용한다음에 관리하는 방법까지 이다.

먼저 mod_security 를 설치 를 위한 의존성 프로그램 을 설치한다.

그후 다운 로드 및 설치.

그다음 httpd.conf 에 불러오는 설정을 해야 겠지요 ‘ㅅ’a

물론 Include 경로를 자신이 운영하는 웹서버 경로에 바꿔야 하는걸 잊지 말자.

음 mod_security 설치는 되었다.

 

이제 룰셋 적용부분.. http://www.modsecurity.org/rules.html

공식 사이트에서는 아래와 같이 두가지 를 추천하고 있다.

무료 – OWASP ModSecurity Core Rule Set (CRS)
유료 – Commercial Rules from Trustwave SpiderLabs

물론 다른 방화벽 업체에서도 룰셋 제공을 하고 있다.

무료 – Comodo Web Application Firewall (CWAF)

여시서는 OWASP 룰셋을 적용할 예정이다.

OWASP 는 (The Open Web Application Security Project) 오픈소스 웹 애플리케이션 보안 프로젝트 이다 자세한 설명은 http://ko.wikipedia.org/wiki/OWASP 요기서 참조 ‘ㅅ’a

여기까지가 설치 완료는 아니고 사용할 룰셋을 익티베이트 룰셋 폴더에 심볼링 링크를 건다.

이후 owasp-modsecurity-crs 요 폴더를 자신의 httpd.conf 에서 불러 오도록 하면 되겠다.

 

호환성에 염두하지 않고 보안 적인 취약점을 막기 위해 제작된 룰셋이기 때문에

바로 돌리면 사이트가 안뜬다 -_-;;

먼저 php.ini 수정이 필요하다.

 

modsecurity_crs_10_setup.conf 파일에 아래부분을 추가 한다.

SecRuleEngine On -> DetectionOnly 로 설정하면 감시만 하고 실제 차단은 하지 않는다.

다만 이 디텍트모드에서 기존 사이트 운영중인것에서 걸리는 룰셋을 수정 하거나 해제 해야 한다.

httpd.conf 를 수정한다.

위와 같이  SecRuleRemoveById 으로 제거를 할수 있으며 디렉토리 혹은 파일명까지 지정하여 사용할 수 있다.

혹은 아래와 같이 가상호스트에서 특정 호스트만 룰셋(SecRuleEngine Off)적용을 끄거나 특정룰만 제거(SecRuleRemoveById)할 수도 있다.

Ajax 를 사용하는 경우 SecRequestBodyAccess On, SecResponseBodyAccess On 두개의 옵션 때문에

Ajax 가 비정상 동작을 할수 있는데 이것역시 Location 혹은 VirtualHost 에서 각기 Off 가 가능하다.

 

정리 하자면 사용할수 있는것은 아래 4가지 이며.

SecRuleEngine Off
SecRequestBodyAccess Off
SecResponseBodyAccess Off
SecRuleRemoveById 룰셋ID

이 일부 혹은 전체 끄는 옵션을을 VirtualHost 혹은 LocationMatch 안에 넣어 일부 허용만 할 수 있다.

 

아래는 이러한 룰셋을 분석하기 위해 아파치의 error_log 를 분석하기 위한 명령어 이다.

 

모드 시큐리티는 apache / nginx 에 도입이 가능하다.

다만 nginx 는 테스트 결과 룰셋에 걸리는 웹접근이 이루어 질때 메모리 및 CPU 가 과다 사용이 되고

kernel – oom – killer 에 의해 프로세스가 강제 종료되는 사례가 발생하였다.

nginx 에서의 모드시큐리티 사용은 좀더 두고 봐야 할것이라고 생각된다.