選択したファイルをルールに記載されたパターンでスキャンします。これは、誤ってファイルに書き込んでしまったシークレットを見つけるために使用されます。このスキャナーは、カスタムスキャナーによって GitLab の[脆弱性レポート](https://docs.gitlab.com/ee/user/application_security/vulnerability_report/)にデータを投入できる仕組みを示すために使用されます。動作中のデモは、[Secret List](https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/secret-list) プロジェクトのドキュメントに従って確認できます。
Fern のパターンスキャナーへようこそ。このスキャナーは、指定されたファイルをスキャンし、rules/rules.yaml 内で定義されたパターンを regex を使用して検出します。その後、すべての検出結果を含むレポートが生成されます。このプロジェクトは、カスタムのセキュリティスキャナーを GitLab に統合する方法を示し、パイプラインセキュリティタブ、脆弱性レポート、マージリクエストウィジェット に入力するために使用できることを紹介するためのものです。
注: 脆弱性レポートにアクセスするには、GitLab Ultimate のサブスクリプションが必要です。
このセキュリティスキャナーを有効にするには、.gitlab-ci.yml に以下を追加します:
include:
- remote: "https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner/-/blob/main/jobs/.fern-pattern-scanner.gitlab-ci.yml"
スキャナーが実行されている様子は、Secret List プロジェクトで確認できます。スキャナーが完了すると、 という名前のレポートが生成されます。そのレポートは検証され、 と に読み込まれます。
スキャナーが実行されているプロジェクト内の特定のパスをスキャン対象から除外したい場合は、以下の変数をカンマ区切りの値で設定できます:
variables:
FERN_ANALYZER_EXCLUDED_PATHS: "docs, tests"
GitLab で独自の正規表現パターンのルールセットを実行する場合は、次の操作を行う必要があります:
patterns:
- name: 'PATTERN NAME 1'
pattern: 'REGEX 1'
- name: 'PATTERN NAME 2'
pattern: 'REGEX 2'
fern_secret_detection:
script:
- /app/fern-pattern-scanner scan --rules "/path/to/rules.yaml" --report
コードをチェックインすると、スキャナーは新しいルールセットで実行を開始します。このスキャナーはコミットの差分をスキャンしません。プロジェクト全体からパターンを検索します。
パイプラインが完了したら、Security タブ をクリックして、検出されたすべての問題を表示できます。GitLab Ultimate をお持ちの場合は、これらの問題は 脆弱性レポート でも確認できます。
このスキャナーを使用すると、ローカルマシン上の選択したファイルタイプのパターンを検出できます。ローカルマシンでこのスキャナーを実行するには、以下の手順に従ってください:
$ go install gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner
注: これにより、ファイルが $GOBIN にダウンロードされます。Go を初めて使用する場合は、この playground で GO のインストールについて説明しています。
$ wget https://gitlab.com/gitlab-de/tutorials/security-and-governance/custom-scanner-integration/fern-pattern-scanner/-/raw/main/rules/rules.yaml
...
Resolving gitlab.com (gitlab.com)... 2606:4700:90:0:f22e:fbec:5bed:a9b9, 172.65.251.78
Connecting to gitlab.com (gitlab.com)|2606:4700:90:0:f22e:fbec:5bed:a9b9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 283 [text/plain]
Saving to: ‘rules.yaml’
rules.yaml 100%[===================>] 283 --.-KB/s in 0s
2023-05-20 16:02:46 (22.5 MB/s) - ‘rules.yaml’ saved [283/283]
注: このファイルは プロジェクト から直接ダウンロードすることもできます。
$ fern-pattern-scanner scan --rules path/to/rules.yaml
INFO[0000] The scanner is starting
INFO[0000] Skipping the following directories: []
INFO[0000] Possible Vulnerability Detected: {Id:139999 Name:password variation 1 Message:The pattern in rule: password variation 1 was found in a file Description:The pattern in rule: password variation 1 was found in a file. Examine the file, remove and rotate your secret. Location:/Users/fern/Desktop/secret-list/.git/index Line:3}
...
INFO[0000] The scanner completed successfully
Fern🌿 によって作成およびメンテナンスされています