关于 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 集成)
- 从扫描器到目标管理端口的网络访问
- 来自系统所有者的书面授权
核心概念
为何使用凭据式扫描
未经身份验证的扫描只能评估外部可见的服务和横幅信息,往往导致:
- 遗漏本地已安装软件中的漏洞
- 因横幅变化而导致版本检测不准确
- 无法检查补丁级别、配置或本地策略
- 由于基于推断的检测,误报率更高
凭据式扫描通过直接查询目标操作系统解决了这些问题。
各平台的凭据类型
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 扫描信息):显示凭据状态
- 插件 21745(操作系统安全补丁评估):确认本地检查
- 插件 117887(本地安全检查):凭据验证
- 插件 110385(Nessus 凭据式检查):目标级别的身份验证状态
凭据安全最佳实践
- 使用密钥保管库(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