ModSecurity란, 트러스트 웨이브 사에서 만든 웹 어플리케이션 방화벽 (WAF)입니다.
다음과 같이 인터넷에서 웹 서버로 접근을 시도할 때 WAF를 거쳐 룰 기반으로 필터링을 한 후에 웹 서버에 접근을 할 수 있게 해주는 것입니다.
WAF는 여러가지가 있고 KISA에서 개발한 CASTLE, ATRONIX에서 개발한 Webknight 등이 있습니다.
설치하기에 앞서 실습 현장을 구현해야 하므로 아파치와 톰캣 연동을 해야합니다.
여기 << 기업 환경 인프라 구성 때 작성한 글 참조
임의로 만든 입력 파라미터를 입력받아 출력하는 jsp로 구현한 홈페이지입니다.
apt-get install -y libapache2-mod-security2 git
cp -a /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
vi /etc/modsecurity/modcurity.conf*** SecRuleEngine Detection Only -> SecRuleEngine On 수정 (7번 라인) SecAuditLogParts ABDEFHIJZ -> SecAuditLogParts ABCEFHJKZ 수정 (187번 라인) ***
systemctl restart apache2
mv /usr/share/modsecurity-crs /usr/share/modsecurity-crs-old
mkdir /usr/share/modsecurity-crs
git clone https://www.github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs
cp /usr/share/modsecurity-crs/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf
vi /usr/share/modsecurity-crs/crs-setup.conf*** IncludeOptional /usr/share/modsecurity-crs/owasp-crs.load -> 추가 IncludeOptional /usr/share/modsecurity-crs/*.conf -> 추가 InlcudeOptional /usr/share/modsecurity-crs/rules/*.conf -> 추가 *** ##아무곳에나 추가해도 상관 없다
설치 및 설정이 끝나고 방화벽 룰을 설정하면 됩니다.
vi /etc/apache2/sites-available/000-default.conf
위에 두 줄 작성SecRuleEngine On SecRule ARGS:test "@contains test" "id:999,deny,status:403,msg:'Test Successful'"
SecRule ARGS:test
해당 페이지의 파라미터 변수 명 지정 (test라는 변수)
"@contains test"
지정한 파라미터 변수 (test)에 test라는 문자가 포함 시 뒤의 정책 시작
"id:999,deny,status:405,msg:'Test Successful'"
접근을 deny하고 상태 코드를 403(Frobidden)을 반환하고 msg는 Test Successful을 출력
test라는 파라미터에 test 값 입력 시 403 코드가 뜨는 모습
꼭 test가 아닌 입력 값에 test가 포함되어도 룰에 의해 차단
해당 jsp 파일에서 입력 받는 data의 값 파라미터 이름은 name이므로 룰을 수정해줍니다.
vi /etc/apache2/sites-available/000-default.conf
SecRule ARGS:name "@contains <" "id:999,deny,status:403,msg:'test success'" #수정
<script>alert(document.cookie);</script>
해당 사이트 쿠키 값 추출 시도
스크립트 언어에 사용되는 "<"문자 필터링으로 접근 실패
vi /etc/apache2/sites-available/000-default.conf
SecRule REMOTE_ADDR "@IPMatch [차단할 ip]" log,deny,id:1002 #추가
차단된 ip로 접근 시 Forbidden 상태 응답
Modsecurity의 로그는 /var/log/apache2/modsec_audit.log
파일에 저장됩니다.
로그 확인 시 차단된 HTTP 요청메세지, 바디 부, 응답 헤더, 상태 코드 모두 확인 가능합니다.
이상으로 Modsecurity 설치 및 실습을 마치겠습니다.