1.11. ModSecurity를 사용하여 웹 서버에서 웹 애플리케이션 보안
ModSecurity는 Apache, Nginx 및 olm과 같은 다양한 웹 서버에서 지원하는 오픈 소스 웹 애플리케이션 방화벽(WAF)으로, 웹 애플리케이션의 보안 위험을 줄입니다. ModSecurity는 서버 구성을 위한 사용자 정의 가능한 규칙 세트를 제공합니다.
mod_security-crs
패키지에는 웹 사이트 간 스크립팅, 잘못된 사용자 에이전트, SQL 삽입, 트로이 목마, 세션 하이재킹 및 기타 악용에 대한 규칙이 포함된 핵심 규칙 세트(CRS)가 포함되어 있습니다.
1.11.1. Apache용 ModSecurity 웹 기반 애플리케이션 방화벽 배포 링크 복사링크가 클립보드에 복사되었습니다!
ModSecurity를 배포하여 웹 서버에서 웹 기반 애플리케이션을 실행하는 것과 관련된 위험을 줄이려면 Apache HTTP 서버에 대한 mod_security
및 mod_security_crs
패키지를 설치합니다. mod_security_crs
패키지는 ModSecurity 웹 기반 애플리케이션 방화벽(WAF) 모듈에 대한 코어 규칙 세트(CRS)를 제공합니다.
프로세스
mod_security
,mod_security_crs
및httpd
패키지를 설치합니다.yum install -y mod_security mod_security_crs httpd
# yum install -y mod_security mod_security_crs httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd
서버를 시작합니다.systemctl restart httpd
# systemctl restart httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
Apache HTTP 서버에서 ModSecurity 웹 기반 애플리케이션 방화벽이 활성화되어 있는지 확인합니다.
httpd -M | grep security
# httpd -M | grep security security2_module (shared)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/modsecurity.d/activated_rules/
디렉터리에mod_security_crs
:에서 제공하는 규칙이 포함되어 있는지 확인합니다.ls /etc/httpd/modsecurity.d/activated_rules/
# ls /etc/httpd/modsecurity.d/activated_rules/ ... REQUEST-921-PROTOCOL-ATTACK.conf REQUEST-930-APPLICATION-ATTACK-LFI.conf ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.11.2. ModSecurity에 사용자 정의 규칙 추가 링크 복사링크가 클립보드에 복사되었습니다!
ModSecurity 코어 규칙 세트(CRS)에 포함된 규칙이 시나리오에 부합하지 않고 추가 가능한 공격을 방지하려면 ModSecurity 웹 기반 애플리케이션 방화벽에서 사용하는 규칙 세트에 사용자 지정 규칙을 추가할 수 있습니다. 다음 예제에서는 간단한 규칙을 추가하는 방법을 보여줍니다. 더 복잡한 규칙을 만들려면 ModSecurity Wiki 웹 사이트의 참조 설명서를 참조하십시오.
사전 요구 사항
- Apache용 ModSecurity가 설치 및 활성화되어 있습니다.
프로세스
선택한 텍스트 편집기에서
/etc/httpd/conf.d/mod_security.conf
파일을 엽니다. 예를 들면 다음과 같습니다.vi /etc/httpd/conf.d/mod_security.conf
# vi /etc/httpd/conf.d/mod_security.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SecRuleEngine On
으로 시작하는 줄 뒤에 다음 예제 규칙을 추가합니다.SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"
SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 규칙은
data
매개 변수에잘못된
문자열이 포함된 경우 사용자에게 리소스 사용을 금지합니다.- 변경 사항을 저장하고 편집기를 종료합니다.
httpd
서버를 다시 시작합니다.systemctl restart httpd
# systemctl restart httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
테스트.html
페이지를 생성합니다.echo "mod_security test" > /var/www/html/test.html
# echo "mod_security test" > /var/www/html/test.html
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd
서버를 다시 시작합니다.systemctl restart httpd
# systemctl restart httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP 요청의
GET
변수에서 악의적인 데이터 없이test.html
을 요청합니다.curl http://localhost/test.html?data=good
$ curl http://localhost/test.html?data=good mod_security test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP 요청의
GET
변수에 악성 데이터로test.html
을 요청합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/httpd/error_log
파일을 확인하고 잘못된 데이터 메시지가포함된 param 데이터로
액세스를 거부하는 방법에 대한 로그 항목을 찾습니다.[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]
[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow