| name | performing-authenticated-scan-with-openvas |
| description | 使用 OpenVAS/Greenbone 漏洞管理(GVM)框架配置并执行凭据认证漏洞扫描,支持 SSH 和 SMB 凭据,实现全面的主机级别安全评估。 |
| domain | cybersecurity |
| subdomain | vulnerability-management |
| tags | ["openvas","gvm","authenticated-scan","vulnerability-scanning","greenbone","network-security","credentialed-scan"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 OpenVAS 执行认证扫描
概述
OpenVAS(开放式漏洞评估扫描器,Open Vulnerability Assessment Scanner)是 Greenbone 漏洞管理(GVM,Greenbone Vulnerability Management)框架的扫描组件。认证扫描使用有效凭据(Linux 使用 SSH、Windows 使用 SMB、VMware 使用 ESXi)登录目标系统,能够检测本地漏洞、缺失补丁以及未认证扫描无法发现的配置错误。认证扫描通常比未认证扫描发现多 10-50 倍的漏洞。
前置条件
- 已安装 GVM 22.x+(gvmd、openvas-scanner、gsad、ospd-openvas)
- 已为 gvmd 配置 PostgreSQL 数据库
- 已为 openvas-scanner 配置 Redis
- 已同步 NVT 漏洞数据库(greenbone-nvt-sync 或 greenbone-feed-sync)
- Linux 目标系统的 SSH 凭据或 Windows 目标系统的 SMB 凭据
- 扫描端口到目标主机的网络访问权限
安装
在 Kali Linux / Debian 上安装 GVM
sudo apt update && sudo apt install -y gvm
sudo gvm-setup
sudo gvm-check-setup
sudo gvm-start
通过 Docker 安装(推荐用于生产环境)
docker pull greenbone/gvm:stable
curl -fsSL https://greenbone.github.io/docs/latest/_static/docker-compose-22.4.yml \
-o docker-compose.yml
docker compose -f docker-compose.yml -p greenbone-community-edition up -d
docker compose -f docker-compose.yml -p greenbone-community-edition \
logs -f gvmd 2>&1 | grep -i "feed"
配置凭据
Linux 目标系统的 SSH 凭据
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_credential>
<name>Linux SSH Key</name>
<type>usk</type>
<login>scan_user</login>
<key>
<private><![CDATA['"$(cat /home/scan_user/.ssh/id_rsa)"']]></private>
<phrase>key_passphrase</phrase>
</key>
</create_credential>'
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_credential>
<name>Linux SSH Password</name>
<type>up</type>
<login>scan_user</login>
<password>scan_password_here</password>
</create_credential>'
Windows 目标系统的 SMB 凭据
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_credential>
<name>Windows SMB Cred</name>
<type>up</type>
<login>DOMAIN\scan_account</login>
<password>smb_password_here</password>
</create_credential>'
ESXi 凭据
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_credential>
<name>ESXi Root</name>
<type>up</type>
<login>root</login>
<password>esxi_password_here</password>
</create_credential>'
创建扫描目标
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_target>
<name>Linux Production Servers</name>
<hosts>192.168.1.10,192.168.1.11,192.168.1.12</hosts>
<port_list id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5"/>
<ssh_credential id="CREDENTIAL_UUID_HERE">
<port>22</port>
</ssh_credential>
<alive_test>ICMP, TCP-ACK Service and ARP Ping</alive_test>
</create_target>'
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_target>
<name>Windows Domain Controllers</name>
<hosts>192.168.1.20,192.168.1.21</hosts>
<port_list id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5"/>
<smb_credential id="SMB_CREDENTIAL_UUID_HERE"/>
<alive_test>ICMP, TCP-ACK Service and ARP Ping</alive_test>
</create_target>'
扫描配置
内置扫描配置
| 配置名称 | OID | 适用场景 |
|---|
| Full and fast | daba56c8-73ec-11df-a475-002264764cea | 标准生产环境扫描 |
| Full and deep | 708f25c4-7489-11df-8094-002264764cea | 深度扫描,可能影响性能 |
| System Discovery | 8715c877-47a0-438d-98a3-27c7a6ab2196 | 主机与服务枚举 |
为认证扫描创建自定义扫描配置
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_config>
<copy>daba56c8-73ec-11df-a475-002264764cea</copy>
<name>Authenticated Full Scan</name>
</create_config>'
执行扫描
创建并启动扫描任务
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_task>
<name>Weekly Authenticated Scan - Linux Prod</name>
<config id="CONFIG_UUID"/>
<target id="TARGET_UUID"/>
<scanner id="08b69003-5fc2-4037-a479-93b440211c73"/>
</create_task>'
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<start_task task_id="TASK_UUID"/>'
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<get_tasks task_id="TASK_UUID"/>'
配置周期性扫描
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<create_schedule>
<name>Weekly Sunday 2AM</name>
<icalendar>
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20240101T020000Z
RRULE:FREQ=WEEKLY;BYDAY=SU
DURATION:PT12H
END:VEVENT
END:VCALENDAR
</icalendar>
<timezone>UTC</timezone>
</create_schedule>'
导出扫描结果
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<get_reports report_id="REPORT_UUID" format_id="a994b278-1f62-11e1-96ac-406186ea4fc5"/>'
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<get_reports report_id="REPORT_UUID" format_id="c1645568-627a-11e3-a660-406186ea4fc5"/>'
python3 -c "
from gvm.connections import UnixSocketConnection
from gvm.protocols.gmp import Gmp
from gvm.transforms import EtreeCheckCommandTransform
connection = UnixSocketConnection(path='/run/gvmd/gvmd.sock')
transform = EtreeCheckCommandTransform()
with Gmp(connection=connection, transform=transform) as gmp:
gmp.authenticate('admin', 'password')
reports = gmp.get_reports()
print(f'Total reports: {len(reports)}')
"
验证认证成功
gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \
'<get_results filter="name=SSH rows=10 sort-reverse=severity"/>'
参考资料