ルールのカスタマイズ

ルール作成に使う構成

カスタムルールの構成説明
rules (Rules)検出に使うルール
rule-tests (Tests)ルールを検証するテストファイル
utils新しいルールの作成時に再利用できるルール

Rules — ルールファイルの構成

フィールド説明
id一意のルール識別子
message短いルール名
description検出内容の説明
language対象言語
metadatacwe、category、references、technology などの追加情報
(metadata) severity重大度を critical | 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ルール識別子。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

関連ページ2