ModSecurity 사용 실습

Simcurity·2023년 4월 19일
0

1. ModSecurity란?

ModSecurity란, 트러스트 웨이브 사에서 만든 웹 어플리케이션 방화벽 (WAF)입니다.
다음과 같이 인터넷에서 웹 서버로 접근을 시도할 때 WAF를 거쳐 룰 기반으로 필터링을 한 후에 웹 서버에 접근을 할 수 있게 해주는 것입니다.
WAF는 여러가지가 있고 KISA에서 개발한 CASTLE, ATRONIX에서 개발한 Webknight 등이 있습니다.

 

2. 설치

설치하기에 앞서 실습 현장을 구현해야 하므로 아파치와 톰캣 연동을 해야합니다.

2-1) 아파치 톰캣 설치 및 연동

여기 << 기업 환경 인프라 구성 때 작성한 글 참조

2-2) 홈페이지 확인

임의로 만든 입력 파라미터를 입력받아 출력하는 jsp로 구현한 홈페이지입니다.

2-3) ModSecurity 설치 및 설정

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  -> 추가
***
##아무곳에나 추가해도 상관 없다

 

3. 방화벽 룰 설정

설치 및 설정이 끝나고 방화벽 룰을 설정하면 됩니다.

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가 포함되어도 룰에 의해 차단

4. 실습

4-1) 문자열 필터링

해당 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>

해당 사이트 쿠키 값 추출 시도
스크립트 언어에 사용되는 "<"문자 필터링으로 접근 실패

4-2) Remote ip 기반 필터링

vi /etc/apache2/sites-available/000-default.conf

SecRule REMOTE_ADDR "@IPMatch [차단할 ip]" log,deny,id:1002 #추가

차단된 ip로 접근 시 Forbidden 상태 응답

4-3) 로그 확인

Modsecurity의 로그는 /var/log/apache2/modsec_audit.log 파일에 저장됩니다.

로그 확인 시 차단된 HTTP 요청메세지, 바디 부, 응답 헤더, 상태 코드 모두 확인 가능합니다.

이상으로 Modsecurity 설치 및 실습을 마치겠습니다.

0개의 댓글