performing-authenticated-vulnerability-scan について
セキュリティ評価担当者や脆弱性管理チーム向けの認証付きスキャンガイドです。認証情報の設定と検証を行い、ソフトウェア、パッチ、ホストのセキュリティ設定を調べる手順を説明します。
主な機能
- 01プラットフォーム別の認証情報選定
- 02専用サービスアカウントの作成
- 03スキャナー認証情報の設定
- 04認証情報によるアクセスの検証
- 05スキャン認証結果の確認
活用シーン
- 01定期的なホストセキュリティ監査
- 02インストール済みソフトウェアとパッチの確認
- 03システム構成とセキュリティ設定の検証
- 04認証情報やネットワークアクセスに起因するスキャン失敗の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-authenticated-vulnerability-scanインストール後、Claude Code で/performing-authenticated-vulnerability-scanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
認証済み脆弱性スキャンの実施
概要
認証済み(資格情報を使用した)脆弱性スキャンでは、有効なシステム資格情報を使用して対象ホストにログインし、インストール済みソフトウェア、パッチ、構成、セキュリティ設定を詳細に調査します。未認証スキャンと比較すると、インストール済みパッケージ、レジストリキー、ファイルシステムの内容を直接照会できるため、誤検知を大幅に減らしながら、45~60%多くの脆弱性を検出できます。
使用する場面
- 認証済み脆弱性スキャンを実施するセキュリティ評価を行う場合
- 関連するセキュリティインシデントについて、インシデント対応手順に従う場合
- 定期的なセキュリティテストや監査を実施する場合
- 実地テストを通じてセキュリティ制御を検証する場合
前提条件
- 脆弱性スキャナー(Nessus、Qualys、OpenVAS、Rapid7 InsightVM)
- 対象システムで適切な権限を持つサービスアカウント
- 安全な資格情報の保管(Vault との連携を推奨)
- スキャナーから対象の管理ポートへのネットワークアクセス
- システム所有者による書面での承認
基本概念
認証済みスキャンが必要な理由
未認証スキャンで評価できるのは外部から確認可能なサービスとバナーだけであり、次のような問題が生じることがあります。
- ローカルにインストールされたソフトウェアの脆弱性を見逃す
- バナーの変更によってバージョン検出が不正確になる
- パッチレベル、構成、ローカルポリシーを確認できない
- 推測に基づく検出により誤検知率が高くなる
認証済みスキャンでは、対象の OS に直接問い合わせることで、これらの問題を解決します。
プラットフォーム別の資格情報の種類
Linux/Unix システム
- SSH キー認証:RSA/Ed25519 キーペア(推奨)
- SSH ユーザー名/パスワード:鍵ベースの認証を使用できないシステム向けの代替手段
- Sudo/Su による権限昇格:sudo 権限を持つ非 root ユーザー
- 証明書ベースの SSH:エンタープライズ環境向けの X.509 証明書
Windows システム
- SMB(Windows):ドメインまたはローカルの管理者資格情報
- WMI:Windows Management Instrumentation クエリ
- WinRM:Windows Remote Management(HTTPS を推奨)
- Kerberos:サービスチケットを使用したドメイン認証
ネットワークデバイス
- SNMP v3:認証とプライバシー(AES-256)を使用する USM
- SSH:Cisco IOS、Juniper JunOS、Palo Alto PAN-OS 向け
- API トークン:最新のネットワークプラットフォーム向け REST API
データベース
- Oracle:SYS/SYSDBA 資格情報または TNS 接続
- Microsoft SQL Server:Windows 認証または SQL 認証
- PostgreSQL:ロールベース認証
- MySQL:SELECT 権限を持つユーザー名/パスワード
ワークフロー
ステップ 1:専用のサービスアカウントを作成する
# Linux: Create scan service account
sudo useradd -m -s /bin/bash -c "Vulnerability Scanner Service Account" nessus_svc
sudo usermod -aG sudo nessus_svc
# Configure sudo for passwordless specific commands
echo 'nessus_svc ALL=(ALL) NOPASSWD: /usr/bin/dpkg -l, /usr/bin/rpm -qa, \
/bin/cat /etc/shadow, /usr/sbin/dmidecode, /usr/bin/find' | sudo tee /etc/sudoers.d/nessus_svc
# Generate SSH key pair
sudo -u nessus_svc ssh-keygen -t ed25519 -f /home/nessus_svc/.ssh/id_ed25519 -N ""
# Distribute public key to targets
for host in $(cat target_hosts.txt); do
ssh-copy-id -i /home/nessus_svc/.ssh/id_ed25519.pub nessus_svc@$host
done
# Windows: Create scan service account via PowerShell
New-ADUser -Name "SVC_VulnScan" `
-SamAccountName "SVC_VulnScan" `
-UserPrincipalName "[email protected]" `
-Description "Vulnerability Scanner Service Account" `
-PasswordNeverExpires $true `
-CannotChangePassword $true `
-Enabled $true `
-AccountPassword (Read-Host -AsSecureString "Enter Password")
# Add to local Administrators group on targets via GPO or:
Add-ADGroupMember -Identity "Domain Admins" -Members "SVC_VulnScan"
# For least privilege, use a dedicated GPO for local admin rights instead
# Enable WinRM on targets
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Service\AllowRemote -Value $true
winrm set winrm/config/service '@{AllowUnencrypted="false"}'
ステップ 2:スキャナーの資格情報を設定する
Nessus の設定
{
"credentials": {
"add": {
"Host": {
"SSH": [{
"auth_method": "public key",
"username": "nessus_svc",
"private_key": "/path/to/id_ed25519",
"elevate_privileges_with": "sudo",
"escalation_account": "root"
}],
"Windows": [{
"auth_method": "Password",
"username": "DOMAIN\\SVC_VulnScan",
"password": "stored_in_vault",
"domain": "domain.local"
}],
"SNMPv3": [{
"username": "nessus_snmpv3",
"security_level": "authPriv",
"auth_algorithm": "SHA-256",
"auth_password": "stored_in_vault",
"priv_algorithm": "AES-256",
"priv_password": "stored_in_vault"
}]
}
}
}
}
ステップ 3:資格情報によるアクセスを検証する
# Test SSH connectivity
ssh -i /path/to/key -o ConnectTimeout=10 nessus_svc@target_host "uname -a && sudo dpkg -l | head -5"
# Test WinRM connectivity
python3 -c "
import winrm
s = winrm.Session('target_host', auth=('DOMAIN\\\\SVC_VulnScan', 'password'), transport='ntlm')
r = s.run_cmd('systeminfo')
print(r.std_out.decode())
"
# Test SNMP v3 connectivity
snmpwalk -v3 -u nessus_snmpv3 -l authPriv -a SHA-256 -A authpass -x AES-256 -X privpass target_host sysDescr.0
ステップ 4:認証済みスキャンを実行する
Nessus API を使用してスキャンを設定し、開始します。
# Create scan with credentials
curl -k -X POST https://nessus:8834/scans \
-H "X-Cookie: token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"uuid": "'$TEMPLATE_UUID'",
"settings": {
"name": "Authenticated Scan - Production",
"text_targets": "192.168.1.0/24",
"launch": "ON_DEMAND"
},
"credentials": {
"add": {
"Host": {
"SSH": [{"auth_method": "public key", "username": "nessus_svc", "private_key": "/keys/id_ed25519"}],
"Windows": [{"auth_method": "Password", "username": "DOMAIN\\SVC_VulnScan", "password": "vault_ref"}]
}
}
}
}'
ステップ 5:資格情報が正常に使用されたことを確認する
スキャンの完了後、資格情報の検証結果を確認します。
- プラグイン 19506(Nessus Scan Information):資格情報のステータスを表示します
- プラグイン 21745(OS Security Patch Assessment):ローカルチェックが行われたことを確認します
- プラグイン 117887(Local Security Checks):資格情報を検証します
- プラグイン 110385(Nessus Credentialed Check):対象レベルの認証ステータスを表示します
資格情報のセキュリティに関するベストプラクティス
- 資格情報の保管にはシークレット用 Vault(HashiCorp Vault、CyberArk、AWS Secrets Manager)を使用します
- 資格情報をローテーションします。90 日ごと、または人員の変更後に実施してください
- 最小権限の原則に従い、必要最小限のアクセス権のみを付与します
- 資格情報の使用状況を監査し、サービスアカウントのログインイベントを監視します
- 通信中のデータを暗号化します。パスワードの代わりに SSH キーを、WinRM には HTTPS を使用します
- スキャナーごとにアカウントを分け、ツール間で資格情報を共有しないでください
- 可能な場合は、スキャン用サービスアカウントの対話型ログインを無効化します
- SIEM でスキャン用アカウントのすべての認証イベントを記録します
よくある落とし穴
- 最小権限のサービスアカウントではなく、ドメイン管理者アカウントを使用すること
- スキャン設定に認証情報を平文で保存すること
- スキャン開始前に認証情報をテストしないこと(スキャン時間が無駄になります)
- Linux のターゲットで sudo/権限昇格を設定し忘れること
- Windows UAC によって、リモートでの認証済みチェックがブロックされること
- ファイアウォールルールによって、スキャナーとターゲット間の WMI/WinRM/SSH 通信がブロックされること
- 認証に複数回失敗し、アカウントがロックされること
関連スキル
- scanning-infrastructure-with-nessus
- performing-network-vulnerability-assessment
- implementing-continuous-vulnerability-monitoring
コメント
Markdown 対応