mcpField
P
performing-authenticated-vulnerability-scan

performing-authenticated-vulnerability-scan

github.com/mukul975安全35.2k108 次安装8 周前更新
代码仓库

关于 performing-authenticated-vulnerability-scan

这是一份面向安全审计和漏洞管理人员的认证漏洞扫描指南,说明如何配置凭据并验证扫描访问,以检查主机上的软件、补丁和安全设置。

主要功能

  1. 01按平台选择扫描凭据
  2. 02创建专用服务账户
  3. 03配置扫描器认证信息
  4. 04验证凭据访问权限
  5. 05检查扫描认证结果

适用场景

  1. 01执行定期主机安全审计
  2. 02核查已安装软件和补丁状态
  3. 03验证系统配置及安全设置
  4. 04排查凭据或网络访问导致的扫描失败

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-authenticated-vulnerability-scan

安装后在 Claude Code 中输入/performing-authenticated-vulnerability-scan确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.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 凭据式检查):目标级别的身份验证状态

凭据安全最佳实践

  1. 使用密钥保管库(HashiCorp Vault、CyberArk、AWS Secrets Manager)存储凭据
  2. 轮换凭据,每 90 天一次或人员变动后立即进行
  3. 最小权限原则 - 仅授予所需的最低访问权限
  4. 审计凭据使用情况 - 监控服务账户的登录事件
  5. 传输中加密 - 优先使用 SSH 密钥而非密码,WinRM 使用 HTTPS
  6. 为每个扫描器使用独立账户 - 切勿跨工具共享凭据
  7. 尽可能禁用扫描服务账户的交互式登录
  8. 在 SIEM 中记录扫描账户的所有身份验证事件

常见陷阱

  • 使用域管理员账户而非最小权限服务账户
  • 在明文扫描配置中存储凭据
  • 扫描启动前未测试凭据(导致扫描窗口浪费)
  • 忘记为 Linux 目标配置 sudo/提权
  • Windows UAC 阻止远程凭据检查
  • 防火墙规则阻止扫描器与目标之间的 WMI/WinRM/SSH
  • 多次认证失败导致凭据锁定

相关技能

  • scanning-infrastructure-with-nessus
  • performing-network-vulnerability-assessment
  • implementing-continuous-vulnerability-monitoring

评论

支持 Markdown