# カスタムSAST & IaCルールを追加する

## はじめに <a href="#introduction" id="introduction"></a>

これらのカスタムルールを使用すると、コードベース内の特定のリスク、特にお使いの環境に特に関連するリスクをAikidoにスキャンさせることができます。これにより、より広範なSASTまたはIaCルールでは見落とされる可能性のある脆弱性を検出できます。

## ステップバイステップガイド <a href="#step-by-step-guide" id="step-by-step-guide"></a>

{% hint style="info" %}
この機能は、ワークスペースでデフォルトでは有効になっていません。有効にするにはAikidoにお問い合わせください。
{% endhint %}

**ステップ1:** [リポジトリチェック](https://app.aikido.dev/repositories/checks)ページに移動します。

**ステップ2:** SASTセクションの「[Create Custom Rule](https://app.aikido.dev/repositories/sast/custom/add)」をクリックします\
​

![カスタムのセキュリティおよびコンプライアンスルールを作成するオプションがあるリポジトリチェックダッシュボード。](https://help.aikido.dev/_assets/a1ad68911fee/ucarecdn-bdfc2dff-94ec-4dce-b75d-371457b06f62.png)

​**ステップ3:** ルールについて以下の詳細を入力します:

* **Opengrepルール:** Aikidoが検索するルールを定義します。**ヒント:** 保存する前に、[Opengrep playground](https://github.com/opengrep/opengrep-playground?tab=readme-ov-file#installation)[ ](https://semgrep.dev/playground)を使用してルールの有効性をテストしてください。
* **Title:** 識別しやすいようにルールに名前を付けます。
* **TL;DR:** 問題の簡潔な説明を入力します。これはサイドバーに表示されます。
* **How to fix it:** この問題を修正する最善の方法をチームに伝えます。
* **Language:** プログラミング言語を指定します。
* **Aikido Score:** メインフィードでの問題報告の優先度レベルを設定します。

<figure><img src="https://help.aikido.dev/_assets/bbda399e9ead/image-114.png" alt=""><figcaption></figcaption></figure>

**ステップ4:** ルールの設定に問題がなければ、「Save」をクリックしてAikidoのSASTチェックに追加します。カスタムルールが有効になり、今後のスキャンで自動的に適用されます。

### 補足情報 <a href="#extra-info" id="extra-info"></a>

* 全体として、Opengrepルール内のlanguage属性が常に優先されます。これは、すべての言語とファイルに一度に適用する必要があるカスタムルールを実装したい場合に便利です。
* IaCルールを作成したい場合は、言語をyaml/terraform/...に設定することで作成できます。

## 例 <a href="#examples" id="examples"></a>

*   **SASTルール:** JavaScriptで脆弱なMD5ハッシュアルゴリズムが使用されていないかを検索します。

    ```
    rules:
      - id: CUSTOM-RULE-XXXX
        message: It looks like MD5 is used 
        languages:
          - javascript
        paths: 
          include
            - "*.js"
        severity: WARNING
        pattern-either:
          - pattern: $CRYPTO.createHash("md5")
          - pattern: CryptoJS.MD5(...)
    ```
*   **IaCルール:** 危険な可能性のあるLambda関数を検出するためのカスタムルールです。

    ```
    rules:
       - id: CUSTOM-RULE-530
         languages:
           - hcl
         severity: WARNING
         message: >
           A Lambda function was found with the "type:monitored" tag, but without a "service" tag.
         patterns:
           - pattern: |-
               resource "aws_lambda_function" $ANYTHING {
                 ...
                 tags = {..., type = "monitored", ...}
               }
           - pattern-not: |-
               resource "aws_lambda_function" $ANYTHING {
                 ...
                 tags = {..., service= "...", ...}
               }
    ```
