ファイルシステムモード - ファイル・キーストアスキャナー
ファイルシステムモード - ファイル・キーストアスキャナー
ディレクトリと OS 証明書ストア全体にわたる証明書、キーストア、秘密鍵の再帰的検出
実装済み - v1.0.0 で利用可能。並列トラバーサルには walkdir + rayon、証明書解析には x509-parser を使用して Rust で構築されています。
概要
ファイルシステムモードは、ディレクトリを再帰的にスキャンして証明書、キーストア、秘密鍵を検出します。walkdir と rayon を利用した並列ファイルトラバーサルを使用し、x509-parser クレートで証明書を解析します。ファイルベースのスキャンに加えて、Windows 証明書ストア (schannel クレートを介し、LocalMachine および CurrentUser ストアを対象) をオプションで列挙できます。
仕組み
ファイルシステムモードのフロー
ディレクトリトラバーサル
設定可能な最大深度で walkdir を使用してディレクトリを再帰的に走査
拡張子フィルタリング
拡張子 (.jks、.p12、.pfx、.pem、.crt、.cer、.key) でファイルをフィルタリングし、設定されたパスを除外
並列処理
rayon を使用して検出されたファイルを並列処理 (デフォルト 4 スレッド)
形式固有の解析
適切なパーサーを選択: PEM、DER、PKCS#12/PFX、JKS/JCEKS、または秘密鍵
証明書分析
x509-parser を介して X.509 証明書を解析し、アルゴリズム、鍵サイズ、有効期限を抽出
リスクスコアリング
検出された各資産の量子脆弱性スコアを計算
サポートされる形式
PEM 形式
- X.509 証明書 (.pem、.crt、.cer)
- 秘密鍵 (RSA、EC、汎用 PKCS#8)
- 公開鍵
- ファイルごとに複数の PEM ブロック
DER 形式
- バイナリエンコードされた X.509 証明書 (.der、.cer)
- バイナリエンコードされた秘密鍵
- x509-parser の from_der を介して解析
PKCS#12 / PFX
- .p12 および .pfx ファイル
- 証明書の抽出
- 秘密鍵の検出
- パスワード保護されたバンドル
Java キーストア
- JKS (Java KeyStore)
- JCEKS (Java Cryptography Extension KeyStore)
- エイリアスの列挙
- パスワード保護されたキーストアのサポート
秘密鍵
- RSA 秘密鍵
- EC 秘密鍵
- PKCS#8 でラップされた鍵
- スタンドアロンの .key ファイル
OS 証明書ストア
- Windows 証明書ストア (schannel クレート): LocalMachine および CurrentUser ストア
- --scan-windows-certstore で有効化 (ストアは --certstore-name で選択: MY、ROOT、CA、TRUST、または ALL)
使用方法
基本スキャン
# Scan current directory (default --path is .)
dke-scanner-agent filesystem
# Scan a specific directory recursively (recursive is true by default)
dke-scanner-agent filesystem --path /opt/applications
# Scan with output to a file
dke-scanner-agent filesystem --path /etc/ssl --output certs-report.json
# Scan and output in YAML format
dke-scanner-agent filesystem --path /srv --format yaml
コマンドラインオプション
| フラグ | 説明 | デフォルト | 必須 |
|---|---|---|---|
| --path <PATH> | スキャンするディレクトリパス | . (現在のディレクトリ) | いいえ |
| --recursive | サブディレクトリを再帰的にスキャン | true | いいえ |
| --max-depth <N> | 最大再帰深度 | 10 | いいえ |
| --extensions <EXT> | スキャンするファイル拡張子 (カンマ区切り) | .jks,.p12,.pfx,.pem,.crt,.cer,.key | いいえ |
| --exclude <PATHS> | 除外するディレクトリ (カンマ区切り) | node_modules,.git,target | いいえ |
| --threads <N> | 並列処理スレッド数 | 4 | いいえ |
| --scan-windows-certstore | Windows 証明書ストアをスキャン (LocalMachine および CurrentUser) | false | いいえ |
| --certstore-name <NAME> | スキャンする Windows 証明書ストア: MY、ROOT、CA、TRUST、または ALL | ALL | いいえ |
| --output <FILE> | 出力ファイルパス | stdout | いいえ |
| --format <FMT> | 出力形式: json、yaml、terminal、または html | json | いいえ |
高度な例
アーキテクチャ
ファイルシステムモードは、再帰的なディレクトリトラバーサルに walkdir、並列ファイル処理に rayon を使用します。
- 設定された最大深度 (デフォルト 10) までディレクトリツリーを走査し、設定された拡張子に一致し、除外パスにないファイルを保持します。
- 設定されたスレッド数にわたって、一致するファイルを並列で解析します。
--scan-windows-certstoreが設定されている場合、Windows 証明書ストア (LocalMachine + CurrentUser) をオプションで列挙します。
証明書の解析は x509-parser クレートによって処理され、PEM および DER 形式の両方から完全な X.509 証明書のデコードを提供します。
出力例
{
"scan_metadata": {
"scanner_version": "1.0.0",
"scan_mode": "filesystem",
"scan_date": "2025-01-30T15:45:22Z",
"scan_path": "/opt/applications",
"recursive": true,
"max_depth": 10
},
"summary": {
"files_scanned": 45678,
"keystores_found": 23,
"certificates_found": 156,
"private_keys_found": 67,
"total_findings": 246
},
"findings": [
{
"id": "fs-001",
"type": "keystore",
"file_path": "/opt/tomcat/conf/keystore.jks",
"format": "JKS",
"password_protected": true,
"certificates": [
{
"alias": "tomcat-ssl",
"subject": "CN=app.example.com",
"issuer": "CN=Example CA",
"not_after": "2025-12-31T23:59:59Z",
"algorithm": "RSA",
"key_size": 2048,
"has_private_key": true,
"quantum_vulnerable": true
}
],
"risk_assessment": {
"quantum_risk_score": 8.0,
"priority": "P1",
"severity": "HIGH"
}
},
{
"id": "fs-002",
"type": "certificate",
"file_path": "/etc/ssl/certs/server.crt",
"format": "PEM",
"certificate": {
"subject": "CN=www.example.com",
"algorithm": "ECDSA",
"curve": "P-256",
"quantum_vulnerable": true
},
"risk_assessment": {
"quantum_risk_score": 8.0,
"priority": "P1",
"severity": "HIGH"
}
}
]
}
デフォルトの動作
デフォルトでは、ファイルシステムモードは現在のディレクトリ (.) を10 レベルの深さまで4 スレッドで再帰的にスキャンします。拡張子 .jks、.p12、.pfx、.pem、.crt、.cer、.key を持つファイルを探し、node_modules、.git、target ディレクトリを自動的に除外します。