- This topic has 0개 답변, 1명 참여, and was last updated 10 years, 7 months 전에 by 난해주님. This post has been viewed 4900 times
-
-
음...! 이번에 후배 한 녀석이 SQL 인젝션 공격에 의한 피해를 입었나 봅니다.
아마도 Kisa에서 배포하고 있는 mod_security 룰셋을 이용하고 있었다고 합니다만
사실 룰셋을 신뢰성을 의심할 수 있는 여지가 많은 데 후배의 요청도 있고 해서 Mod_Security에 대한 팁을 적어 봅니다.저는 개인적으로 서버와 관련해서는 컴파일한 버전을 선호하므로 이에 기반해서 설명해 드리고자 합니다.
소스 파일과 룰셋 파일은 아래 링크를 참조해서 다운 받으시기 바랍니다.소스 파일: http://www.modsecurity.org/download.html
룰셋 파일: https://github.com/SpiderLabs/owasp-modsecurity-crs일단 컴파일 전에 아파치의 컴파일 하실 때 "--enable-uniq-id"와 "--enable-mods-shared=all" 옵션을 주셔서 설치하셔야 함을 유념하시기 바랍니다.
## Mod Security2의 컴파일 설치 ###
컴파일에 필요한 추가적인 라이브러리로 libapr-devel, libapr-util-devel, libpcre-devel, libxml2-devel, liblua5.1-devel, libcurl-devel 등이 필요합니다. lua는 반드시 5.1 버전으로 설치하시기 바랍니다.(5.2는 지원되지 않음)
설치 후 다음의 옵션으로 컴파일 하시기 바랍니다. (각각의 라이브러리를 모두 컴파일 설치하셨다면 경로를 변경하시기 바랍니다.)
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-pcre=/usr/bin/pcre-config --with-apr=/usr/bin/apr-1-config --with-apu=/usr/bin/apu-1-config
이후 make, make install 하시면 설치가 완료 됩니다.
### Mod Security2의 OWASP 룰셋의 설치 ###
위의 링크에서 룰셋 파일을 다음과 같이 다운로드 합니다.
# cd /usr/local/apache/conf
# sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs
# sudo mv owasp-modsecurity-crs/ crs/
# cd crs/
# sudo mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf설정 파일을 열어서 다음과 같이 기본 설정하시고 로그 설정등을 추가하시기 바랍니다.
# sudo vi modsecurity_crs_10_setup.conf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecStatusEngine On
SecResponseBodyMimeType (null) text/html text/plain text/xml
SecResponseBodyLimit 524288
SecRequestBodyLimit 13107200
SecRequestBodyNoFilesLimit 131072
SecAuditEngine RelevantOnly
SecAuditLogType Serial
SecAuditLogParts ABCFHZ
SecAuditLogType concurrent
SecAuditLogStorageDir /usr/local/apache/logs/audit_log
SecAuditLog /usr/local/apache/logs/audit_log/modsec_audit.log
SecAuditLogRelevantStatus ^(?:5|4(?!04))
SecArgumentSeparator "&"
SecCookieFormat 0
SecDataDir /tmp
SecTmpDir /tmp
SecUploadDir /tmp
SecUploadKeepFiles Off
SecDebugLog /usr/local/apache/logs/debug_log/modsec-debug.log
SecDebugLogLevel 3
SecAuditLogDirMode 0777
SecAuditLogFileMode 0777
SecPcreMatchLimit 50000
SecPcreMatchLimitRecursion 50000
~~~ 중략 ~~~
SecDefaultAction "phase:2,log,auditlog,deny,status:403,tag:'SLA 24/7'"SecDefaultAction 설정에 유의 하시기 바라며, KISA에서 배포하는 룰셋의 설정과는 차이가 있으며 이 룰셋은 최신 버전에선 에러가 발생함을 주의하시기 바랍니다.
위의 셋팅 옵션의 자세한 설정과 설명은 아래 링크된 매뉴얼을 참조하시기 바랍니다.
메뉴얼: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual저장 후 터미널에서 아래와 같이 룰셋을 설치합니다.
# for f in `ls base_rules/` ; do sudo ln -s /usr/local/apache/conf/crs/base_rules/$f activated_rules/$f ; done
# for f in `ls optional_rules/ | grep comment_spam` ; do sudo ln -s /usr/local/apache/conf/crs/optional_rules/$f activated_rules/$f ; done
# ls -l activated_rules### 아파치 설정과 모듈 설정 ###
모듈과 방화벽 운영에 필요한 기본적인 설정을 아래와 같이 해 주시면 됩니다.
# sudo vi httpd.conf
LoadModule xml2enc_module modules/mod_xml2enc.so (주석 제거, 순서에 주의)
LoadModule unique_id_module modules/mod_unique_id.so (주석 제거)
LoadModule security2_module modules/mod_security2.so (모듈 추가)
~~~~ 중략 ~~~~
<IfModule security2_module>
Include conf/crs/modsecurity_crs_10_setup.conf
Include conf/crs/activated_rules/*.conf
</IfModule>위의 내용이 기본적인 설정 내용입니다만 phpMyAdmin을 이용하는 경우 방화벽에 의해 차단될 수 있으므로 phpMyAdmin의 경로를 지정하여 SecRuleEngine 아래와 같이 해제해 주시면 이상 없이 사용 가능합니다. (방법은 여러 가지 입니다만 .htacces 설정 하기도 귀찮아서 user-dir 옵션을 이용하여 저는 일괄적으로 처리 합니다만 설치 방법에 따라 달라질 수 있으므로 경로를 변경해 주시면 됩니다.)
<Directory /home/*/public_html/phpMyAdmin>
SecRuleEngine Off
</Directory>저장 후 방화벽 로그를 기록하기 위해 logs 디렉토리에 아래와 같이 설정합니다. (보통 개인적인 선호도에 따라 로그의 활용 방법도 달라질 수 있으므로 꼭 똑같이 설정하실 필요는 없습니다.)
# cd /usr/local/apache/logs
# sudo mkdir debug_log
# sudo mkdir audit_log
# sudo chown -R nobody:nobody audit_log/
# sudo chmod 777 audit_log/참고로 auditlog는 사고 발생시 매우 유용하므로 꼭 설정하시기 바랍니다.
위의 소유자와 그릅은 httpd.conf의 설정을 그대로 참조하시면 됩니다.이상으로 기본적인 설치와 설정은 완료되었으며 아파치를 다시 시작해 주시면 방화벽이 동작합니다.
추가적인 룰셋이 필요하다면 구글링을 통해 개인적으로 공부해 보시기 바랍니다.# sudo /etc/init.d/httpd restart
경험상으로 Mod_Security2가 KISA에서 배포하는 Whistl 보다는 안정적이며 속도와 보안에서 보다 더 안정적인 것 같습니다.
또한 OWASP의 공개 룰셋은 추가적인 룰셋 설정이 필요 없을 정도로 다양하고 휼륭합니다.
물론 개인의 선호도에 따라 달라질 수 있겠지만 말입니다.참고로 KISA에서 배포한 룰셋만 적용하신 서버 관리자가 있다면 나중에 후회하지 마시고 OWASP의 공개 룰셋을 적극 활용하시기를 추천합니다.
- 답변은 로그인 후 가능합니다.