
静的解析ツールからのSARIF出力を処理し、ソースコード内のハードコードされたシークレットを検出して秘匿化(redact)し、元のシークレットを含まないクリーンなコピーを作成します。
SecretScrubは、ハードコードされた汚れたシークレットをすべて洗い流します。このスクリプトは、さまざまな静的解析ツールによって生成されるSARIFファイル形式のファイルを処理します。このツールはファイルシステム内のディレクトリをスキャンし、SARIFファイル内で検出されたすべてのシークレットインスタンスを秘匿化して、ディレクトリの新しいコピーに反映します。シークレットはGit履歴に存在することが多いため、生成されるコピーからは .git ディレクトリが除外されます。
SARIFは業界標準の形式ですが、さまざまなツールが生成するSARIF出力にはばらつきがあります。そのため、現在サポートされているツールは以下のとおりです。
| ツール | バージョン | コメント |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | --no-git オプションを使用して生成されたレポートでのみ動作します。これにより、ファイルシステムはスキャンされますが、存在する場合の基盤となるGitリポジトリはスキャンされません。 |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | Ccs出力は、付属の ccs2sarif.py スクリプトを使用してSARIF形式に前処理する必要があります。 |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | CQ出力は、付属の cq2sarif.py スクリプトを使用してSARIF形式に前処理する必要があります。CQ出力はノイズが多い可能性があるため、秘匿化作業を別途実行するか、CQファイルがディレクトリ内で最後に来るようにファイル名を付けることをお勧めします。 |
| BinDetect | 他のテキスト指向ツールでは通常見逃されるバイナリファイルを検出する組み込みツール。 |
SARIF出力のバリエーションのため、将来のバージョンのツールで生成された出力が正しく動作しない可能性があります。
依存関係は requirements.txt ファイルに記載されています。簡単に言うと、以下のパッケージが必要です。
| パッケージ |
|---|
$ python secretscrub.py --input <path> --srcdir <path> --outdir <path> [--report <path>]
$ python secretscrub.py --analyse-with <analysis-tool-list> --srcdir <path> --outdir <path> [--report <path>]
注: これらのツールが機能するには、現在のシステムに存在し、インストールされている必要があります。
このソースツリーからビルドされたDockerイメージには、SecretScrubツールと、Trivy、GitLeaks、ccs、cqツールのコピーが含まれています。
secretscrub:latest というタグでビルドされている場合、次のコマンドは付随するレポート付きで完全な分析および秘匿化作業を開始します。
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
これにはコンテナ内で2つのボリュームをマッピングすることが含まれることに注意してください。1つ目 -- <source-path> -- には元の未秘匿化のソースコードが含まれている必要があります。2つ目 -- <output-path> -- には秘匿化された出力とレポートが格納されます。
以下の例では、ソースが src という名前のサブディレクトリに保存され、SecretScrubが tools という名前のサブディレクトリにインストールされていることを前提としています。
$ python tools/secretscrub.py --analse-with trivy,gitleaks,bindetect --srcdir src --outdir src-redacted
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
| バージョン |
|---|
| asn1 | 2.7.0 |
| filetype | 1.2.0 |
| py7zr | 0.20.5 |
| pyzipper | 0.3.6 |
| regex | 2023.5.5 |
| sarif-tools | 1.0.0 |
| パラメータ | 説明 |
|---|
| input | 処理対象のSARIF結果の場所。サポートされている異なるツールで生成された複数のSARIFファイルを含めることができます。 |
| srcdir | 処理対象のCQ結果を生成するためにスキャンされた元のソースコードの場所。 |
| outdir | 秘匿化されたソースファイルが保存される場所。 |
| placeholder | 検出されたすべてのシークレットの代わりに挿入するプレースホルダー。以下の置換を使用できます。 - ${tool} シークレットの検出に使用されたツールの名前- ${rule} シークレットの検出に使用されたルールの名前- ${regex} シークレットの検出に使用されたルールに関連する正規表現- ${yaml} (既知の場合)シークレットの検出に使用されたツールとルールの名前のみを含むYAMLフロースタイル構造- ${yaml_regex} (既知の場合)シークレットの検出に使用されたツールとルールの名前、および正規表現を含むYAMLフロースタイル構造 |
| process-archives | スイッチを示す |
| report | スクラブされたシークレットの詳細を含む、生成されるCSVレポートの場所と名前。 |
| report-encryption | レポートファイルが生成された場合に使用する暗号化方式。指定可能な値: none, zip-aes256。デフォルト: zip-aes256 |
| log-level | ツールの出力に使用されるログレベル。指定可能な値: critical, fatal, error, warning, info, debug。デフォルト: info |
| パラメータ | 説明 |
|---|
| analyse-with | 呼び出すツールのカンマ区切りリスト。これには次のいずれかを含めることができます: trivy, gitleaks, ccs, cq, bindetect |
| srcdir | 処理対象のCQ結果を生成するためにスキャンされた元のソースコードの場所。 |
| outdir | 秘匿化されたソースファイルが保存される場所。 |
| placeholder | 検出されたすべてのシークレットの代わりに挿入するプレースホルダー。以下の置換を使用できます。 - ${tool} シークレットの検出に使用されたツールの名前- ${rule} シークレットの検出に使用されたルールの名前- ${regex} シークレットの検出に使用されたルールに関連する正規表現- ${yaml} (既知の場合)シークレットの検出に使用されたツールとルールの名前のみを含むYAMLフロースタイル構造- ${yaml_regex} (既知の場合)シークレットの検出に使用されたツールとルールの名前、および正規表現を含むYAMLフロースタイル構造 |
| report | スクラブされたシークレットの詳細を含む、生成されるCSVレポートの場所と名前。 |
| report-encryption | レポートファイルが生成された場合に使用する暗号化方式。指定可能な値: none, zip-aes256。デフォルト: zip-aes256 |
| log-level | ツールの出力に使用されるログレベル。指定可能な値: critical, fatal, error, warning, info, debug。デフォルト: info |
| ツール | コメント |
|---|
| Trivy | trivy コマンドがインストールされ、パス上でアクセス可能である必要があります。 |
| GitLeaks | gitleaks コマンドがインストールされ、パス上でアクセス可能である必要があります。 |
| ccs | ccs.py ファイルは、secretscrub.py ファイルを含むディレクトリ内の ccs という名前のサブディレクトリに配置されている必要があります。 |
| cq | cq.py と fn.py ファイルは、secretscrub.py ファイルを含むディレクトリ内の cq という名前のサブディレクトリに配置されている必要があります。 |
| bindetect | これは現在secretscrubに含まれており、追加のインストールは必要ありません。 |