공개 SW 솔루션설치 & 활용가이드 시스템 SW > 보안 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 ModSecurity는웹서비스의공격을효과적으로차단할수있는공개웹응용프로그램방화벽모듈 (WAF) 웹서비스를통해서공격을시도하는 XSS, SQL Injection, Command Execute 과같은공격을효과적으로차단하는역할을수행하는보안모듈이며, Apache HTTP 서버, 마이크로소프트 IIS 및 NGINX 에서도사용가능 대분류 시스템 SW 소분류 보안 라이선스형태 Apache License Version 2.0 사전설치솔루션 pcre, apr, apr-util, libxml2, pcredevel, libxml2-devel, curl-devel 실행하드웨어 Cross-platform 버전 2.9.2 (2018 년 10 월기준 ) 특징보안취약점개발후원사공식홈페이지 ModSecurity 는가장널리알려져있는 HTTP,HTTPS 를이용한공격을차단할수있는웹방화벽 공개 SW 로무료사용가능하며다양한웹서버에서사용가능 실시간애플리케이션보안모니터링및액세스제어및전체 HTTP 트래픽로깅 취약점 ID : CVE-2013-5705 심각도 : 5.0 MEDIUM (V2) 취약점설명 : 웹애플리케이션보안을강화하려는 Apache 모듈인 ModSecurity 에서 cunked 요청이처리되는방식의결함을발견 대응방안 : 2.6.6 이상으로버전업그레이드 참고경로 : https://www.debian.org/security/2014/dsa-2991 Trustwave : http://www.trustwave.com https://www.modsecurity.org/
- 4-2. 기능요약 ModSecurity 의주요기능 - ModSecurity 는웹공격에대한침입탐지및침입방지기능을추가해주는아파치웹서버하나의모듈로동작 - 웹클라이언트와아파치웹서버사이에 ModSecurity 가존재함 - 클라이언트로부터악의적인접속요청이발견되면공격차단, 로깅등사전에정의된행위수행
- 5-3. 실행환경 하드웨어제약이거의없음 OS 플랫폼종류에따른지원 - Unix 계열 - 비Unix 플랫폼 : Windows ( 비Unix 플랫폼으로통상사용하지않음 ) ModSecurity를설치하는쉬운방법은기존 OS 패키지관리자응용프로그램 (Yum 또는 Aptitude) 을사용하여기본 OS 저장소OS Repository에서설치 ( 우분투및윈도우설치는다음 URL 을참고 : https://www.modsecurity.org/download.html) RHEL/CentOS Yum Repository (Jason Litka) Debian (Alberto Gonzalez Iniesta) Fedora Core (Michael Fleming) FreeBSD (Alex Dupre) Gentoo Apache 2.x on Windows (Steffen) HP-UX (Internet Express) Netware, Windows (Guenter Knauf)
- 6-4. 설치및실행 세부목차 4.1 설치환경준비및설치 (CentOS-Source)
- 7-4. 설치및실행 4.1 설치환경준비및설치 (1/9) 설치파일버전 (18년 10월기준최신 / 안정화권고버전사용및파일다운로드 ) - OS version: CentOS Linux release 7.5.1804 (Core) - Apache HTTP version : httpd-2.4.35 Download : https://httpd.apache.org/download.cgi#apache24 - modsecurity version : modsecurity-2.9.2 Download : https://www.modsecurity.org/download.html
- 8-4. 설치및실행 4.1 설치환경준비및설치 (2/9) Apache HTTP 설치 1. 설치경로 - Apache 설치경로 : /app/web/apache24 2. Apache install - 다운로드받은 Apache 파일의경로에서아래의명령어 (cli) 실행 # tar xvf httpd-2.4.35.tar.gz # cd httpd-2.4.35/ #./configure --prefix=/app/web/apache24 --with-mpm=worker --enable-mods-shared=all # make && make install # cd /app/web/apache24/bin #./apachectl t
- 9-4. 설치및실행 4.1 설치환경준비및설치 (3/9) 3. Apache HTTP 기동및확인 # vi../conf/httpd.conf - ServerName {hostname} 입력 #./apachectl start # ps -ef grep httpd # curl 127.0.0.1
- 10-4. 설치및실행 4.1 설치환경준비및설치 (4/9) ModSecurity 설치 (1/6) 1. 모듈설치 - 다운로드받은파일압축해제 # tar xvf modsecurity-2.9.2.tar.gz # cd modsecurity-2.9.2 #./configure --with-apxs=/app/web/apache24/bin/apxs # make && make install # cp modsecurity.conf-recommended /app/web/apache24/conf/modsecurity.conf # cp unicode.mapping /app/web/apache24/conf/ 2. Apache module 확인 # cd /app/web/apache24/modules # ls -lart 제일하단부에 ModSecurity2.so so파일추가로생성확인
- 11-4. 설치및실행 4.1 설치환경준비및설치 (5/9) ModSecurity 설치 (2/6) 3. httpd.conf 에해당모듈추가 # vi /app/web/apache24/conf/httpd.conf LoadModule security2_module modules/modsecurity2.so LoadModule unique_id_module modules/mod_unique_id.so - 적용확인 #./apachectl -M grep security security2_module (shared) 4. 룰셋다운로드및적용 4.1 2점대버전의룰셋다운로드 https://github.com/spiderlabs/owasp-modsecurity-crs/releases - 2.2.9 버전다운로드 (OWASP는최소한의웹어플리케이션보안을제공하기위해 Modsecurity Core Rule Set (CRS) 프로젝트를진행하고있으며, OWASP TOP10을포함한강력한룰셋제공
- 12-4. 설치및실행 4.1 설치환경준비및설치 (6/9) ModSecurity 설치 (3/6) 4.2 다운로드파일압축해제파일이동 # unzip owasp-modsecurity-crs-2.2.9.zip # mv owasp-modsecurity-crs-2.2.9 modsecurity-crs # mv modsecurity-crs /app/web/apache24/conf/ # cd /app/web/apache24/conf/modsecurity-crs 4.3 룰셋적용 (* 룰셋 : 광범위한웹공격으로부터웹응용프로그램을보호하기위한일반적인공격탐지규칙의집합 ) # cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf # for f in `ls base_rules/` ; do ln s /app/web/apache24/conf/modsecuritycrs/base_rules/$factivated_rules/$f ; done # ln -s /app/web/apache24/conf/modsecurity-crs/modsecurity_crs_10_setup.conf activated_rules/modsecurity_crs_10_setup.conf
- 13-4. 설치및실행 4.1 설치환경준비및설치 (7/9) ModSecurity 설치 (4/6) # vi modsecurity_crs_10_setup.conf 아래의옵션추가 SecRuleEngine On SecAuditEngine On SecAuditLog /app/web/apache24/logs/modsec_audit.log SecAuditLogParts ABCFHZ SecDataDir /tmp 아래의옵션수정 원본 SecDefaultAction "phase:1,deny,log" SecDefaultAction "phase:2,deny,log 수정내역 SecDefaultAction "phase:1,deny,log,auditlog" SecDefaultAction "phase:2,deny,log,auditlog"
- 14-4. 설치및실행 4.1 설치환경준비및설치 (8/9) ModSecurity 설치 (5/6) # vi /app/web/apache24/conf/httpd.conf 맨아랫부분에추가 Include conf/modsecurity-crs/activated_rules/*.conf # cd /app/web/apache24/bin #./apachectl t 재기동
- 15-4. 설치및실행 4.1 설치환경준비및설치 (9/9) ModSecurity 설치 (6/6) - 로그확인 # cd /app/web/apache24/logs
- 16-5. 기능소개 세부목차 5.1 ModSecurity 주요기능
- 17-5. 기능소개 5.1 ModSecurity 주요기능 (1/2) ModSecurity 의주요기능은 HTTP 의포스팅악용이나 Buffer overflow 등의공격, 웹의취약점을 이용한 SQL Injection / php injection 등의공격을 drop 할수있는기능을제공하며, 설치후 로그를분석하여공격형태및패턴을분석하여룰을작성할수있는아파치모듈의일종임 요청 (request) 필터링기능 - 클라이언트로부터웹요청이들어올때, 웹서버또는다른모듈들이처리하기전에 ModSecurity 가 요청내용을분석하여필터링처리 우회방지기술기능 - 경로와파라미터를분석하기전에정규화시켜우회공격을차단, 즉 //, \/,., %00 등우회 공격용스트링을제거하고, 인코딩된 URL 디코딩함
- 18-5. 기능소개 5.1 ModSecurity 주요기능 (2/2) HTTP 프로토콜이해 - 엔진이 HTTP 프로토콜을이해하기때문에전문적이고정밀한필터링수행함 POST 페이로드 (payload) 분석 - GET 방식뿐만아니라 POST 메소드를사용해서전송되는컨텐츠도가로채어분석가능 감사로깅 - POST 를포함하여모든요청의모든상세한부분들까지추후분석을위해서로깅 - ModSecurity 에서차단기능을비활성화시킨후, 강력한로깅기능만으로침입탐지시스템역할수행 HTTPS 필터링 - 엔진은웹서버에임베디드되어있기때문에복호화한후에요청데이터에접근하여 HTTPS 를통한공격 필터링함
- 19-6. 활용예제 세부목차 6.1 기본기능설정및지시자 6.2 기능점검및활용예제
- 20-6. 활용예제 6.1 기본기능설정및지시자 (1/6) ModSecurity.conf 옵션정리 1. SecRuleEngine On Off DetectionOnly ModSecurity 기능활성화 (enable) On : ModSecurity 기능활성화 Off : ModSecurity 기능비활성화 DetectionOnly : 활성화는하지만차단하지않고탐지만함 2. SecAuditEngine On Off RelevantOnly 감사로깅에대한설정구성 On : 모든트랜젝션로깅 Off : 모든트랜젝션로깅하지않음 DetectionOnly : Error 또는, Warning 의트랜젝션, 그리고 SecAuditLogRelevantStatus 에정의된상태코드와일치하는트랜젝션만로깅
- 21-6. 활용예제 6.1 기본기능설정및지시자 (2/6) 3. SecAuditLog logs/modsec_audit.log 감사로그파일의경로정의 예 ) SecAuditLog /usr/local/apache2/logs/modsec_audit.log 4. SecAuditLogParts 로그파일에기록할항목정의예 ) SecAuditLogParts ABCFHZ audit log header ( 필수 ) request header request body(request body가존재하고 modsecurity 가 request body를검사하도록설정되어있는경우에만 ) 보류중, response header의중개 ( 현재지원안됨 ) response body 중간단계 ( 현재 modsecurity가 response body를검사하며감사로깅엔진이이를저장하게끔설정되어있는경우에만 ) 최종 response header( 마지막컨텐츠전달과정에서아파치에의해매번추가되는날짜와서버헤더제외 )
- 22-6. 활용예제 6.1 기본기능설정및지시자 (3/6) 실제 response body ( 현재지원안됨 ) 감사로그트레일러 이옵션은 C를대체하는옵션, multipart/form-data 인코딩이사용되었을때를제외한모든경우엔 C와같은데이터기록 보류중, multipart/form-data 인코딩을사용하는파일업로드에대한정보를포함할때효과가있음 로그의끝의미 ( 필수 ) 5. SecAuditLogRelevantStatus REGEX 감사로깅의목적과관련된 response 상태코드의값설정 매개변수에는정규표현식들어감예 ) SecAuditLogRelevantStatus ^[45]
- 23-6. 활용예제 6.1 기본기능설정및지시자 (4/6) 6. SecAuditLogType Serial Concurrent 감사로깅구조의타입설정 Serial - 모든로그는메인로그파일에저장, 일시적으로편리할순있지만하나의파일에만기록되기때문에느려질수있음 Concurrent - 로그가각트랜잭션별로나누어저장이방식은로그파일을원격 ModSecurity Console host로보낼때사용하는방식 7. SecDefaultAction "log, auditlog, deny, status:403, phase:2, t:lowercase 룰이매칭되면기본적으로취할행동정의 룰이특정액션들에대한개별룰을적용하거나다른 SecDefaultAction 이정의되어있지않다면최초지정된 SecDefaultAction의설정따름 위의예는룰이매칭되었을때차단하며로그를남기고, 403 상태코드페이페이지를보여주며필터링단계는 2 이며, 기본적으로대문자는모두소문자로바뀌어필터링됨
- 24-6. 활용예제 6.1 기본기능설정및지시자 (5/6) 8. SecRequestBodyAccess On Off Request 값에서 Body 부분에대한처리어떻게할것인지구성 On : RequestBody 접근을시도 Off : RequestBody 접근시도를하지않음이지시자는 Request 값에서의 POST_PAYLOAD 검사할때필요 POST값을필터링하기위해서는 phase:2와 REQUESET_BODY 변수 / 로케이션, 3가지가모두구성되어야만처리가가능 9. SecReponseBodyAccess On Off Response 값에서 Body 부분에대한처리를어떻게할것인지구성 On : ResponseBody 접근시도 ( 그러나 MIME 타입과일치해야만함 ) Off : ResponseBody 접근시도하지않음이지시자는 html 응답을조사하기위해필요함 "phase:4" 의처리단계와 RESPONSE_BODY 변수 / 로케이션, 3가지가설정되어있지않으면, response body를검사할수없음
- 25-6. 활용예제 6.1 기본기능설정및지시자 (6/6) 10. SecResponseBodyLimit ModSecurity 가 Response Body 크기로할당할수있는메모리최대크기설정 SecRequestBodyLimit 524228 이값을넘어가면서버는 500 내부서버오류메시지만표시 11. SecReponseBodyMimeType mime/type Response 값에서 Body 값을버퍼링할 MIME 타입설정 SecResponseBodyMimeType text/plain text/html // 기본값 Mime 타입은복수로추가 12. SecReponseBodyMimeTypesClear ResponseBody 의버퍼링위해 Mime 타입의목록지우며, 처음에위치 SecResponseBodyMimeType
- 26-6. 활용예제 6.2 기능점검및활용예제 (1/6) ModSecurity 적용확인 # curl --head 192.168.56.101 # vi /app/web/apache24/conf/modsecurity-crs/modsecurity_crs_10_setup.conf SecServerSignature "modsecurity_test 추가 - 아파치재기동 # curl --head 192.168.56.101 (Apache 가아닌 modsecurity_test 가출력되면정상 )
- 27-6. 활용예제 6.2 기능점검및활용예제 (2/6) ModSecurity 테스트를위한 XSS 공격테스트 # curl 'http://192.168.56.101/?q="><script>alert(1)</script> ModSecurity 가정상적으로적용되었다면 403 Forbidden 응답이표시 (Apache 웹서버에악의적인요청 (XSS 공격 ) 을 ModSecurity 가차단 )
- 28-6. 활용예제 6.2 기능점검및활용예제 (3/6) ModSecurity rule 를통한 ip 예외처리 적용후웹서버를재기동하면기본페이지가 403 에러코드로보이게됨 즉정상적인접근도차단 웹서버로그를통해어떤룰을통해서 Forbidden 이발생하는지확인
- 29-6. 활용예제 6.2 기능점검및활용예제 (4/6) ModSecurity rule를통한 ip 예외처리설정반복되는로그를확인해보면 ID 960017 확인해당 ID는전체적인 modsecurity 설정에서제외시켜줄수있음 ( 파일명 : modsecurity_crs_21_protocol_anomalies.conf, ID : 960017 )
- 30-6. 활용예제 6.2 기능점검및활용예제 (5/6) ModSecurity rule 를통한예외처리 - ( 화이트리스트 ) 로그를통해확인한 ID 입력 # vi /app/web/apache24/conf/modsecurity-crs/activated_rules/modsecurity_crs_21_protocol_anomalies.conf SecRuleRemoveById 960017 - 아파치재기동후 127.0.0.1 호출성공 ( 화이트리스트적용 )
- 31-6. 활용예제 6.2 기능점검및활용예제 (6/6) 기타룰셋활용 - 13p 내용에서적용된 base_rules 폴더를확인해보면기본적으로사용할수있는다양한룰셋들제공 - 예를들어 modsecurity_crs_41_sql_injection_attacks.conf 같은경우에는 SQL Injection 공격을차단함 (DB에대한삭제, 추가, 열람시도등차단 )
- 32-7. FAQ Q 아파치 2.0 라이선스란무엇인가요? A Apache Software Foundation(ASF) 에의해서만들어지는소프트웨어에붙는License입니다. ASF에서만들어지는소프트웨어는모두공개SW Apache License V2.0이적용됩니다. 소스코드에대한사용비용을지불하지않으며, 수정프로그램에대한소스코드의공개를요구하지않기때문에상용SW에무제한사용이가능합니다. Q ModSecurity 의장점이무엇인가요? A ModSecurity 모듈은현재가장널리알려져있으며, 웹서비스의공격을효과적으로차단할수있는웹방화벽입니다. 아파치웹서버뿐만아니라 Nginx, 마이크로소프트 IIS 등다양한웹서버에도활용이가능합니다.
- 33-8. 용어정리 용어 설명 WAF Web Application Firewall, WAF ( 웹방화벽 ) Apache Httpd CentOS Apache 재단에서만든웹서버로써원래이름이 apache httpd 이기때문에단독으로 apache, httpd 라고부르기도하며, 본문에서는 httpd 라고함 The Community Enterprise Operating System CLI Command Line Interface ( 키보드로명령어를입력하는방식 ) OWASP CRS The Open Web Application Security Project 오픈소스웹애플리케이션보안프로젝트 무료탐지룰 : OWASP ModSecurity Core Rule Set 무료 Commercial Rules from Trustwave SpiderLabs 유료
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.