0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zero Point Secret Scanner

GitHubリポジトリ: Grimwald79/Zero-Point-Secret-Scanner

Gitの履歴に高エントロピーの暗号キーやAPIトークンが混入するのを防ぐために設計された、自動化されたローカルのPre-Commitシークレットスキャナーです。

従来の正規表現(Regex)に大きく依存する壊れやすいシークレットスキャナーとは異なり、このツールは「シャノンエントロピーの数学的アプローチ」と「抽象構文木(AST)解析」の組み合わせを活用してコードをセマンティック(意味論的)に理解し、誤検知(フォールスポジティブ)を劇的に減らします。

アーキテクチャ:なぜASTとエントロピーなのか?

多くのシークレットスキャナーは正規表現を使用して、「secret」や「password」といったキーワードを検索します。しかし、これは自然言語の文字列やドックストリング(docstring)が誤警報を引き起こし、頻繁に「アラート疲労(Alert Fatigue)」を招く原因となります。

このスキャナーは、コード解析に対して厳格に「スキルベース」のアプローチをとります:

セマンティックな理解(AST): Pythonの標準ライブラリである ast モジュール(ast.walk)を使用します。変数名、関数定義、コメントはインテリジェントに無視され、コード内で割り当てられたリテラル値(ast.Constant)のみを評価します。

数学的ランダム性(シャノンエントロピー): 文字列が評価される際、そのシャノンエントロピー()を計算します。AWSのアクセスキーのような暗号キーは、その文字のランダム性により、自然と高いエントロピースコアを示します。

構造的ヒューリスティクス: 長い英語の文章がエントロピーのしきい値を超えないように、スキャナーは空白を含む文字列を明示的に除外(フィルタリング)します。

組み込み済みの脅威モデル緩和策

コマンドインジェクションの防止: Gitへのサブプロセスコールは、悪意のあるコマンド実行を防ぐため、shell=False を指定した厳密なリストベースの引数を利用しています。

DoS(サービス拒否)攻撃の防止: ASTパーサーにメモリを割り当てる前に、ファイルサイズ制限(デフォルトで500 KB)を強制し、システムリソースを保護します。

情報漏洩の防止: 発見されたシークレットは、生成されるMarkdownレポートに書き込まれる前にローカルでマスキング(例:AKI...[MASKED]...PLE)されます。

パストラバーサルの保護: すべてのローカルファイル生成において、厳格なパス解決制限を利用し、意図した場所にのみファイルが書き込まれるようにします。

要件

Python: 3.12以上(最新の型ヒントと構文を利用)

Git: リポジトリで初期化されている必要があります

OS: クロスプラットフォーム(Windows、macOS、Linux)

インストールとセットアップ

ローカルリポジトリの防御を開始するために、複雑なCI/CDパイプラインを設定する必要はありません。付属のインストーラーが、コミットを傍受するGitフックを動的に生成します。

スクリプトをリポジトリのルートにクローンまたはコピーします。secret_scanner.py と install_hook.py が存在することを確認してください。

ターミナルからフックインストーラーを実行します:

python install_hook.py

期待される出力:

[+] Successfully installed pre-commit hook at: .git/hooks/pre-commit

[+] Your repository is now actively defended.

使い方

通常通りにコードを書きます。準備ができたら、標準的なGitワークフローを使用して変更のコミットを試みます:

git add .

git commit -m "feat: added new S3 connection logic"

正常なルート(クリーンなコード)

シークレットが検出されない場合、コミットは静かに、そして通常通り進行し、あなたの作業を一切妨げません。

ブロックされたルート(シークレットの検出)

誤って高エントロピーのAPIトークンをステージングしてしまった場合、スキャナーはコミットのライフサイクルを傍受し、リポジトリを保護するために即座に操作を中止(アボート)します:

[*] Running Zero Point Secret Scanner...

--- Running Automated Verification Suite ---

[PASS] Entropy calculations are mathematically sound.

[PASS] Secret masking prevents local data leaks.

[PASS] AST Scanner accurately isolates high-entropy constants.

--- Verification Complete ---

[*] Starting Pre-Commit Secret Scan...

[!] Found 1 potential secrets. Report written to /path/to/secrets_report.md

[!] COMMIT REJECTED: Secrets detected. Review the markdown report.

[-] Commit aborted by Secret Scanner.

生成された secrets_report.md を開いて、違反の原因となったファイルと行番号を正確に確認してください。コード内のシークレットをマスキングまたは削除し、変更を再度ステージングして、コミットをやり直してください。

自動検証(プロトコル10)

このツールは、コードは「無実と証明されるまで有罪(疑わしきは罰する)」という前提に立っています。スキャナーが実行されるたびに、シャノンエントロピーの計算が正しく調整され、ASTパーサーが定数を正常に分離していることをアサート(検証)する内部テストスイートが最初に実行されます。何らかの理由で計算が失敗した場合、セキュリティチェックの破損からパイプラインを保護するため、スキャナーは安全にコミットを中止します。

ライセンスと教育目的の免責事項

これは、静的アプリケーションセキュリティテスト(SAST)のメカニズムを実証するために設計された教育用ツールです。エンタープライズレベルの分散型スキャンについては、このロジックを集中型の .pre-commit-config.yaml フレームワークに組み込むことを検討してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?