Rule Customization

룰 작성에 사용되는 구조

Custom 룰 구조설명
rules (Rules)탐지를 위한 룰을 저장
rule-tests (Tests)룰 검증을 위한 테스트 파일
utils신규 룰 작성시 재사용할수 있게 미리 만들어둔 룰 (유틸)

Rules - 룰 파일 구성

필드설명
id고유 식별 룰 ID
message짧은 룰 제목
description탐지에 대한 설명
language탐지 대상 언어
metadatacwe, category, references, technology 등 다양한 데이터 저장
(metadata) severitycritical | high | medium | low | info 로 취약점 중요성 표시
(metadata) scoreSAST 룰의 0부터 100까지의 정수 우선순위 점수. 70 이상은 피해가 크고 실제 취약점일 가능성이 높은 룰에만 사용하며, 모범 사례/하드닝 성격의 룰은 50 미만으로 설정. SCA, secrets 및 internal-threat 룰에는 필수가 아님
(metadata) fix_description조치 방안/대응 관련 내용 포함
rule탐지 룰

룰 예제

다음 룰은 Log4j의 info 호출 여부를 확인하는 예시이며, 호출 자체가 Log4j 취약점을 입증하는 것은 아닙니다.

yaml
id: log4j-logger-info
message: Log4j Logger info 사용
description: Log4j Logger info 함수 사용 여부를 확인합니다.
language: Java
metadata:
  category: security
  severity: info
  score: 35
  fix_description: |-
    사용 중인 Log4j 버전이 보안 권고의 영향을 받는지 확인하세요.
  references: https://www.cisa.gov/news-events/news/apache-log4j-vulnerability-guidance
rule:
  pattern: org.apache.logging.log4j.Logger.info($$$)

Rule-tests - 테스트 파일 구성

필드설명
id룰 아이디 (웹에서는 불필요)
valid일치하지 않아야 하는 코드
invalid일치해야 하는 코드

룰 테스트 예제

yaml
id: log4j-logger-info
valid: 
  - |
    import some.other.safe.Logger;
    
    public class VulnerableExample {
        private static final Logger logger = LogManager.getLogger(VulnerableExample.class);
        public void processUserInput(String userInput) {
            logger.info("User input: {}", userInput);
        }
    }
invalid:
  - |
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class VulnerableExample {
        private static final Logger logger = LogManager.getLogger(VulnerableExample.class);
        public void processUserInput(String userInput) {
            logger.info("User input: {}", userInput);
        }
    }

Utils 구성

필드 설명
id 고유 식별 룰 ID
language 탐지 대상 언어
rule 탐지 룰

Util 예제

yaml
id: detect-bad-class
language: Java
rule:
    pattern: new BadClass($_N, "BadKey")

룰 내 Util 사용 예제

yaml
id: bad-class-usage
message: BadClass 생성
description: detect-bad-class 유틸에 일치하는 객체 생성을 확인합니다.
language: Java
metadata:
    severity: info
rule:
    matches: detect-bad-class

관련 문서2