룰 작성에 사용되는 구조
| Custom 룰 구조 | 설명 |
|---|---|
| rules (Rules) | 탐지를 위한 룰을 저장 |
| rule-tests (Tests) | 룰 검증을 위한 테스트 파일 |
| utils | 신규 룰 작성시 재사용할수 있게 미리 만들어둔 룰 (유틸) |
Rules - 룰 파일 구성
| 필드 | 설명 |
|---|---|
| id | 고유 식별 룰 ID |
| message | 짧은 룰 제목 |
| description | 탐지에 대한 설명 |
| language | 탐지 대상 언어 |
| metadata | cwe, category, references, technology 등 다양한 데이터 저장 |
| (metadata) severity | critical | high | medium | low | info 로 취약점 중요성 표시 |
| (metadata) score | SAST 룰의 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