Pattern

AST 및 Symbolic 기반 탐지

any/all

필드
설명

any

여러 조건 중 하나만 충족해도 될 때 사용

all

모든 조건 중 하나만 충족해도 될 때 사용 (기본 값으로 사용되나 비슷한 rule을 사용하고 싶을때는 explicit하게 사용해야함)

예제 1: 아래와 같이 method_1method_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_TYPE

regex

regex 기반으로 매칭을 제공

Backtracking 관련 regex는 효율적인 스캔을 위해 지원하지 않음

참고: https://docs.rs/regex/latest/regex/

예제: polyfill.io url 탐지

metvariable로 탐지된 STR을 regex로 사용하여 같은지 검증

아래 코드와 같이 탐지

Inside

패턴 내 패턴을 탐지할때 사용

예제: someMethod 함수 내 target 함수 사용 탐지

Generic 하게 아래와 같이 pattern 선언또한 가능합니다.

아래 코드와 같이 탐지

Metavariable

$를 prefix로 사용

Metavariable 유형
설명

$VAR

탐지된 AST 노드에 VAR를 저장

$$$VARS

여러개의 AST 노드들을 탐지하고 싶을 시 사용

$$$

여러 줄을 포함하여 탐지하고 싶을 시 사용

$$$은 아래와 같이 사용하여 multi-line 패턴을 탐지할 수 있음

Metavariable로 추출한 값들에 대해 아래와 같이 패턴 매칭 또한 가능함

아래 룰 겨우 NOVERIFY가 하드코딩된 string이거나 true일 경우 탐지

regex를 사용하여 Metavariable 대상으로 검사 또한 가능함

compare

Metavariable에 대한 계산 관련 조건 검사할 때 사용

  • Boolean

  • Number

    • Hex, Binary, Octal 지원 (예: 0x, 0b, 0o)

예제: 권한 검사

아래와 같이 BIT에 특정 range 내 포함되는지 확인할때 유용하게 사용 가능

Last updated