
告知記事をご覧ください: https://www.praetorian.com/blog/titus-open-source-secret-scanner/。Titus リポジトリは https://github.com/praetorian-inc/titus にあります。
Nosey Parker は、テキストデータから secrets や機密情報を発見する CLI ツールです。本質的には、secrets 検出のための特殊な grep ライクなツールです。
攻撃的セキュリティ(例:レッドチームでのラテラルムーブメントの実現)向けに設計されていますが、防御的セキュリティテストにも役立ちます。Praetorian での数百もの攻撃的セキュリティエンゲージメントで secrets を発見してきました。
主な特徴:
典型的なワークフローは 3 つのフェーズです:
scan コマンドを使用して対象の入力をスキャンreport コマンドを使用してスキャン結果の詳細を報告brew install noseyparker
最新の リリースページ には、x86_64/aarch64 Linux および macOS 向けのプレビルドバイナリが含まれています。
docker pull ghcr.io/praetorian-inc/noseyparker:latest
最新のコミット は main タグでも利用可能です。
docker pull ghcr.io/praetorian-inc/noseyparker-alpine:latest
最新のコミット は main タグでも利用可能です。
https://aur.archlinux.org/packages/noseyparker
Nosey Parker は Windows 上ではネイティブにビルドできません (#121)。ただし、WSL1 とネイティブ Linux リリースを使用して Windows 上で実行すること は 可能です。
Ubuntu Linux と macOS の複数バージョン(x86_64 および aarch64)でテスト済みです。
必要な依存関係:
cargo: 推奨方法: https://rustup.rs からインストールcmake: vectorscan-sys クレートおよびその他いくつかの依存関係のビルドに必要boost: vectorscan-sys クレートのビルドに必要 (対応バージョン >=1.57)git: noseyparker CLI にバージョン情報を埋め込むために必要patch: vectorscan-sys クレートのビルドに必要pkg-config: vectorscan-sys クレートのビルドに必要noseyparker バイナリを引数なしで実行すると、トップレベルのヘルプが表示されて終了します。特定のコマンドの短縮ヘルプは noseyparker COMMAND -h で取得できます。詳細なヘルプは help コマンドまたは長形式の --help オプションで利用できます。
プレビルドリリースには、コマンドラインヘルプをまとめた man ページも含まれています。これらの man ページを Markdown 形式に変換したものもリポジトリの こちら に含まれています。
このドキュメントで回答されていない質問がある場合は、ディスカッションを開始 してください。
datastore は、Nosey Parker が発見結果を記録し、内部状態を維持するために使用する特別なディレクトリです。datastore は必要に応じて scan コマンドによって暗黙的に作成されます。
スキャンされた各入力は blob と呼ばれます。各 blob には一意の blob ID があり、これは git と同じ方法で計算された SHA-1 ダイジェストです。
各 blob には、1 つ以上の provenance エントリが関連付けられています。provenance エントリは、ファイルシステム上のファイルや Git リポジトリ履歴内のファイルなど、入力がどのように発見されたかを説明するメタデータです。
Nosey Parker は正規表現を使用するルールベースのシステムです。各 rule には、マッチ内容を周囲のコンテキストから分離する少なくとも 1 つのキャプチャグループを含む単一のパターンがあります。利用可能なルールは noseyparker rules list で一覧表示できます。
ルールのコレクションは ruleset に編成されます。Nosey Parker のデフォルトの ruleset には、secrets のように見えるものを検出するルールが含まれています。他の ruleset も利用可能です。noseyparker rules list で一覧表示できます。
ルールのパターンが入力にマッチすると、match が生成されます。マッチはルール、blob ID、開始バイトオフセット、終了バイトオフセットによって一意に定義されます。これらのフィールドを使用して、一意のマッチ識別子が計算されます。
同じルールとキャプチャグループを共有するマッチは finding に結合されます。つまり、finding はマッチのグループです。これは Nosey Parker のレポートの最上位単位です。
Docker イメージを使用する場合、以下のコマンドの noseyparker を、マウントされたボリュームを使用する Docker 呼び出しに置き換えてください:
docker run -v "$PWD":/scan ghcr.io/praetorian-inc/noseyparker:latest <ARGS>
Docker コンテナは /scan を作業ディレクトリとして実行するため、コンテナ内の /scan に $PWD をマウントすると、タブ補完やコマンドライン呼び出しの相対パスが機能します。

Nosey Parker は、ファイル、ディレクトリ、Git リポジトリの全履歴のスキャンをネイティブでサポートしています。
例えば、CPython の Git クローンをローカルの cpython.git に持っている場合、scan コマンドでスキャンできます。Nosey Parker は新しい datastore を cpython.np に作成し、発見結果をそこに保存します。(cpython.np という名前は重要ではなく、任意の名前を使用できます。)
$ noseyparker scan -d cpython.np cpython.git
Scanned 19.19 GiB from 335,849 blobs in 17 seconds (1.11 GiB/s); 2,178/2,178 new matches
Rule Findings Matches Accepted Rejected Mixed Unlabeled
──────────────────────────────────────────────────────────────────────────────────────────────
Generic API Key 1 8 0 0 0 1
Generic Password 8 1,283 0 0 0 8
Generic Username and Password 2 40 0 0 0 2
HTTP Bearer Token 1 108 0 0 0 1
PEM-Encoded Private Key 61 151 0 0 0 61
netrc Credentials 27 588 0 0 0 27
Run the `report` command next to show finding details.
詳細は noseyparker help scan を参照してください。
例えば、Nosey Parker リポジトリ自体をスキャンするには:
noseyparker scan --datastore np.noseyparker --git-url https://github.com/praetorian-inc/noseyparker
詳細は noseyparker help scan を参照してください。
--github-user=USER または --github-org=ORG を使用します。例えば、octocat ユーザーがアクセス可能なリポジトリをスキャンするには:
noseyparker scan --datastore np.noseyparker --github-user octocat
これらの入力指定子は、NP_GITHUB_TOKEN 環境変数で利用可能な場合、オプションの GitHub トークンを使用します。アクセストークンを提供すると、API レート制限が緩和され、追加のリポジトリにアクセスできる可能性があります。
詳細は noseyparker help scan を参照してください。
関連プロジェクト Nosey Parker Explorer を参照してください:



Nosey Parker はスキャン終了時に発見結果の要約を出力します。スキャン後にこのステップを個別に実行することもできます:
$ noseyparker summarize --datastore np.cpython
Rule Distinct Groups Total Matches
───────────────────────────────────────────────────────────
PEM-Encoded Private Key 1,076 1,192
Generic Secret 331 478
netrc Credentials 42 3,201
Generic API Key 2 31
md5crypt Hash 1 2
追加の出力形式(JSON や JSON Lines など)は、--format=FORMAT オプションでサポートされています。
詳細は noseyparker help summarize を参照してください。
github repos list コマンドを使用して、GitHub ユーザーまたは組織に属するリポジトリの URL を一覧表示します。このコマンドは GitHub REST API を使用して、ユーザーまたは組織に属するリポジトリを列挙します。例:
$ noseyparker github repos list --user octocat
https://github.com/octocat/Hello-World.git
https://github.com/octocat/Spoon-Knife.git
https://github.com/octocat/boysenberry-repo-1.git
https://github.com/octocat/git-consortium.git
https://github.com/octocat/hello-worId.git
https://github.com/octocat/linguist.git
https://github.com/octocat/octocat.github.io.git
https://github.com/octocat/test-repo1.git
このコマンドは、NP_GITHUB_TOKEN 環境変数で利用可能な場合、オプションの GitHub トークンを使用します。アクセストークンを提供すると、API レート制限が緩和され、追加のリポジトリにアクセスできる可能性があります。
追加の出力形式(JSON や JSON Lines など)は、--format=FORMAT オプションでサポートされています。
詳細は noseyparker help github を参照してください。
Nosey Parker にはいくつかのサードパーティ製インテグレーションがあります:
ここに記載されていないインテグレーションを共有したい場合は、PR を作成してください。
質問やアイデアは Discussions で共有してください。
コントリビューションを歓迎します。特に新しい正規表現ルールを歓迎します。新しい正規表現ルールの開発は別のドキュメントで詳しく説明されています。
大幅なコード変更を検討している場合は、まず issue を開く か ディスカッションを開始 してください。
このプロジェクトでは、pre-commit フックがいくつか有効になっており、使用することを推奨します。ローカルリポジトリにインストールするには、pre-commit がインストールされていることを確認し、以下を実行してください:
$ pre-commit install
これらのチェックは単純なエラーを素早く検出するのに役立ちます。
Nosey Parker は Apache License, Version 2.0 の下でライセンスされています。
sha256sumcoreutilszsh: ビルドスクリプトに必要create-release.zsh スクリプトを使用してビルド$ rm -rf release && ./scripts/create-release.zsh
成功すると、リリースアーティファクトが格納されたディレクトリ構造が release に作成されます。コマンドラインプログラムは release/bin/noseyparker に配置されます。