Options rule configuration in ZAP

ZAP에서 옵션쪽 좀 보다가 Rule configuration 이란 부분이 있는데, 제가 아는 일반적인 스캔 룰 설정이라는 달라서 긴가민가한 부분이 있어 내용 정리해둡니다.

Options Rule Configuration

이름만 보면 마치 어떤스캔을 포함하고, 어떤 스캔을 포함하지 않을지 결정하는 룰 같지만 실제론 active/passive scan에서의 세부 동작을 명시하는 룰입니다. 갯수가 많진 않으니 가볍게 살펴봅시다.

rules.common.sleep

rules.common.sleep 은 timing 계통의 attack(e.g sqli, rce 등등..) 시 사용할 시간 값 입니다. 단위는 초(sec) 단위이며 기본값은 15초로 설정되어 있습니다. 이를 조정하면 timing 계통의 테스팅 작업을 의도한 시간 단위로 조정해서 테스트할 수 있습니다.

rules.cookie.ignorelist

쿠키 관련 테스팅에서 제외시킬 쿠키의 이름을 명시합니다. 명시는 쉽표로 구분되며 아래와 같은 패턴으로 등록할 수 있습니다.

auth,x-api-key,testhahwul

테스팅에 민감한 쿠키등이 있는 경우에는 사용해볼만 하겠네요.

rules.csrf.ignore*

다음은.. csrf 관련 부분들인데요 공통적으로 anti-csrf tokens 모듈에 의한 스캔 시 제외할 id, attribute, value 들을 명시할 수 있습니다.

rules.csrf.ignorelist (form-id)

rules.csrf.ignorelist 는 예외 처리할 form 태그의 id 값을 의미합니다. 예를들어 rules.csrf.ignorelist=logout-form 이라는 형태로 명시되었다고 한다면..

<form id="logout-form" action="/logout" method="post">
	<input type="submit" value="logout">
</form>

아래 form 태그는 csrf 체크에서 무시되게 됩니다.

rules.csrf.ignore.attname

rules.csrf.ignore.attname는 이름 그대로 attribute의 이름을 기반으로 예외처리합니다. 만약 rules.csrf.ignore.attname=itoken 처럼 명시되었다면 태그 중 <input type="password" itoken="abcd~~" 형태로 존재하는 태그는 anti-csrf 체크에서 무시하게 됩니다.

rules.csrf.ignore.attvalue

위와 비슷합니다. value 패턴을 보고 예외처리 할 수 있습니다.

Anti-CSRF Tokens에 대한 개인적인 의견

물론 잘 스캔하는건 중요하지만, 개인적인 생각으론 오탐이 많아서 SDLC 등에 녹여서 사용하시는 경우엔… disable 이나 Risk 레벨을 낮춰서 중요하지 않은 이슈로 보시는걸 추천합니다.

rules.domains.trusted

마지막은 신뢰 도메인 설정인데, 여기 설정된 도메인은 이슈를 무시하게 됩니다. 이는 단일 URL 스캔에서는 크게 문제 없겠지만, Context 단위(여러개의 URL과 인증 정보를 포함한..)의 스캔인 경우 rules.domains.trusted를 설정하여 특정 시스템 등은 무시하도록 설정할 수 있습니다. (예를들면 내부 개발 플랫폼 같은..)

이 항목도 다른것 과 동일하게 comma를 통해 구별되며 정규식으로 작성합니다.

rules.domains.trusted=www.hahwul.com,www.google.com

이외…

위에 기본 값 이외에도 각 plugin 등에서 사용하는 옵션 값등을 Rule configuration에서 설정할 수 있습니다. 이는 ZAP Plugin에서 조금 더 디테일한 설정을 할 수 있도록 도와줍니다. 하나 예시를 들어보면..

rules.domxss.browserid

References