Pattern
AST 및 Symbolic 기반 탐지
any/all
any
여러 조건 중 하나만 충족해도 될 때 사용
all
모든 조건 중 하나만 충족해도 될 때 사용 (기본 값으로 사용되나 비슷한 rule을 사용하고 싶을때는 explicit하게 사용해야함)
예제 1: 아래와 같이 method_1과 method_2를 탐지
any:
- pattern: method_1($$$)
- pattern: method_2($$$)예제 2:
all:
- pattern: method_1($$$)
- inside:
pattern: $F(async ($REQ, $RES) => {$$$})
- inside:
pattern: for($IN = $S; $$$; $$$) {$$$}not
특정 패턴을 제외하고 싶을때 사용
pattern: $REQ.META
not:
inside:
any:
- pattern: $REQ.META.CONTENT_LENGTH
- pattern: $REQ.META.CONTENT_TYPEregex
regex 기반으로 매칭을 제공
예제: polyfill.io url 탐지
metvariable로 탐지된 STR을 regex로 사용하여 같은지 검증
아래 코드와 같이 탐지
" 와 ' 는 패턴내에서 자동으로 유사하다 판단하여 각 룰을 따로 작성할 필요는 없음
Inside
패턴 내 패턴을 탐지할때 사용
예제: someMethod 함수 내 target 함수 사용 탐지
아래 코드와 같이 탐지
Metavariable
$를 prefix로 사용
$VAR
탐지된 AST 노드에 VAR를 저장
$$$VARS
여러개의 AST 노드들을 탐지하고 싶을 시 사용
$$$
여러 줄을 포함하여 탐지하고 싶을 시 사용
$$$은 아래와 같이 사용하여 multi-line 패턴을 탐지할 수 있음
Metavariable로 추출한 값들에 대해 아래와 같이 패턴 매칭 또한 가능함
아래 룰 겨우 NOVERIFY가 하드코딩된 string이거나 true일 경우 탐지
compare
Metavariable에 대한 계산 관련 조건 검사할 때 사용
Boolean
Number
Hex, Binary, Octal 지원 (예:
0x,0b,0o)
예제: 권한 검사
아래와 같이 BIT에 특정 range 내 포함되는지 확인할때 유용하게 사용 가능
Last updated