ルール作成に使う構成
| カスタムルールの構成 | 説明 |
|---|---|
| rules (Rules) | 検出に使うルール |
| rule-tests (Tests) | ルールを検証するテストファイル |
| utils | 新しいルールの作成時に再利用できるルール |
Rules — ルールファイルの構成
| フィールド | 説明 |
|---|---|
| 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 | ルール識別子。Web 画面では不要 |
| 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 | 一意のユーティリティルール識別子 |
| language | 対象言語 |
| rule | 照合するルール |
ユーティリティの例
yaml
id: detect-bad-class
language: Java
rule:
pattern: new BadClass($_N, "BadKey")
ルール内でユーティリティを使う例:
yaml
id: bad-class-usage
message: BadClass の生成
description: detect-bad-class ユーティリティに一致するオブジェクト生成を確認します。
language: Java
metadata:
severity: info
rule:
matches: detect-bad-class