メインコンテンツまでスキップ

ファイルシステムモード - ファイル・キーストアスキャナー

適用対象:
PEM / DER / PKCS#12 / PFXJKS / JCEKS KeystoresPrivate Key DetectionWindows Certificate Storev1.0.0
ステータス

実装済み - v1.0.0 で利用可能。並列トラバーサルには walkdir + rayon、証明書解析には x509-parser を使用して Rust で構築されています。

概要​

ファイルシステムモードは、ディレクトリを再帰的にスキャンして証明書、キーストア、秘密鍵を検出します。walkdir と rayon を利用した並列ファイルトラバーサルを使用し、x509-parser クレートで証明書を解析します。ファイルベースのスキャンに加えて、Windows 証明書ストア (schannel クレートを介し、LocalMachine および CurrentUser ストアを対象) をオプションで列挙できます。

仕組み​

ファイルシステムモードのフロー

1

ディレクトリトラバーサル

設定可能な最大深度で walkdir を使用してディレクトリを再帰的に走査

2

拡張子フィルタリング

拡張子 (.jks、.p12、.pfx、.pem、.crt、.cer、.key) でファイルをフィルタリングし、設定されたパスを除外

3

並列処理

rayon を使用して検出されたファイルを並列処理 (デフォルト 4 スレッド)

4

形式固有の解析

適切なパーサーを選択: PEM、DER、PKCS#12/PFX、JKS/JCEKS、または秘密鍵

5

証明書分析

x509-parser を介して X.509 証明書を解析し、アルゴリズム、鍵サイズ、有効期限を抽出

6

リスクスコアリング

検出された各資産の量子脆弱性スコアを計算

サポートされる形式​

📄 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-certstoreWindows 証明書ストアをスキャン (LocalMachine および CurrentUser)falseいいえ
--certstore-name <NAME>スキャンする Windows 証明書ストア: MY、ROOT、CA、TRUST、または ALLALLいいえ
--output <FILE>出力ファイルパスstdoutいいえ
--format <FMT>出力形式: json、yaml、terminal、または htmljsonいいえ

高度な例​

アーキテクチャ​

ファイルシステムモードは、再帰的なディレクトリトラバーサルに walkdir、並列ファイル処理に rayon を使用します。

  1. 設定された最大深度 (デフォルト 10) までディレクトリツリーを走査し、設定された拡張子に一致し、除外パスにないファイルを保持します。
  2. 設定されたスレッド数にわたって、一致するファイルを並列で解析します。
  3. --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 ディレクトリを自動的に除外します。

トラブルシューティング​

ベストプラクティス​