Nessus 是一款安全扫描器,用于检测硬件和软件中的安全漏洞。
本文档介绍了以下步骤:
安装 Nessus
执行 Nessus 扫描
导出 Nessus 扫描结果
1. 背景
Tenable Nessus 是一款获得许可的第三方工具。如需详细了解 Nessus,请参阅以下资源:
2. 准备工作
工作站
- 引导加载程序 (te-bf) 或可访问的工作站(等效操作员)必须托管 Nessus。
需要访问权限
遵循 IAM-R0005:
- 为每个目标集群获取集群管理员角色。
遵循 IAM-R0004:
- 为每个目标集群生成 KUBECONFIG。
所需工具
- kubectl
- ssh-keygen
软件
- 需要与工作站操作系统兼容的 Nessus 安装程序。从 https://www.tenable.com/downloads/nessus 获取安装程序,并将其转移到 Nessus 工作站,然后再继续。
许可
- 需要单个 Tenable Nessus 许可(专业版、导出版或管理器版)激活码。如果您没有许可激活码,请与团队中负责第三方许可 / 软件物料清单的 POC 联系。
3. 安装 Nessus
本部分介绍了在 Nessus 工作站上安装 Nessus 的步骤。
如果 Nessus 已安装并激活,则应跳过此部分。
如果 Nessus 不再可用(例如,它安装在已不存在的机器上),则必须重置用于激活之前 Nessus 实例的许可,然后才能继续。
导出 Nessus 安装程序的路径:
NESSUS_INSTALLER=
使用 dpkg 安装 Nessus:
dpkg -i ${NESSUS_INSTALLER:?}
重启 Nessus 并确认其正在运行:
sudo systemctl restart nessusd sudo systemctl status nessusd
获取挑战代码以离线注册 Nessus:
/opt/nessus/sbin/nessuscli fetch --challenge
在连接到互联网的计算机上,访问 Nessus 离线激活页面 https://plugins.nessus.org/v2/offline.php。
将 Nessus 离线激活码和 Nessus 许可激活码复制到 Nessus 离线激活页面,然后按“提交”
Nessus 离线激活页面现在应会显示 Nessus 插件网址和产品许可。后续步骤需要用到这两个值。
将 Nessus 插件网址保存到安全的位置,以供日后参考,因为本指南后面会用到该网址。
将 Nessus 离线激活页面中的许可保存到 Nessus 工作站中,并命名为
/opt/nessus/etc/nessus/nessus.license
。将许可应用于 Nessus:
/opt/nessus/sbin/nessuscli fetch --register-offline /opt/nessus/etc/nessus/nessus.license
创建管理员用户:
按照
nessuscli adduser
的提示创建admin
用户。这些凭据稍后将用于执行扫描和下载结果,因此请将其保存在安全的位置。/opt/nessus/sbin/nessuscli adduser
Nessus 运行时,可通过端口 8834 访问其界面。使用您选择的浏览器前往
https://<nessus-workstation-ip>:8834
,然后以admin
用户身份登录。
4. 更新 Nessus 插件
必须先下载最新的 Nessus 插件并将其应用于 Nessus,然后才能运行扫描,以确保扫描结果相关且最新。必须直接从 Tenable 获取 Nessus 插件,方法是使用从 Nessus 离线激活页面获取的 Nessus 插件网址。
获取插件软件包。
方法 1:使用所选浏览器前往 Nessus 插件网址,系统会自动下载该软件包。
方法 2:使用 wget 下载软件包
wget "${PLUGIN_URL:?}" -O plugin-updates.tar.gz
将插件软件包转移到 Nessus 工作站,并导出文件的位置:
NESSUS_PLUGIN_BUNDLE=
将插件更新应用到 Nessus:
/opt/nessus/sbin/nessuscli update ${NESSUS_PLUGIN_BUNDLE:?}
插件更新需要大约 30 分钟才能完成编译。在此期间,您可以按照后续步骤创建扫描,但请在插件完成编译后再运行扫描。
5. 配置 Nessus 扫描
需要为目标类和凭据的每个唯一组合创建扫描。本部分将逐步介绍如何通过 Nessus 界面创建所需的扫描。
在继续之前,请确认您有权访问 https://<nessus-workstation-ip>:8834
中的 Nessus 界面,并以 admin
用户身份登录。
5.1. 收集网络 CIDR
创建 Nessus 扫描,以扫描环境的外部和内部网络 CIDR。
收集目标设备网络的外部和内部网络 CIDR(理想情况下,此网络不会与另一个相邻环境重叠)。
IP 范围可能包含不应扫描的引导加载程序 IP 或其他 IP。针对不应扫描的每个 IP(例如引导加载程序 IP)输入以下命令:
IGNORE_IP= IGNORE_IP_REASON= echo "# ${IGNORE_IP_REASON:?}" >> /opt/nessus/etc/nessus/nessusd.rules echo "reject ${IGNORE_IP:?}" >> /opt/nessus/etc/nessus/nessusd.rules
5.2. 主机发现扫描
网络发现扫描未经身份验证,旨在扫描网络以查找目标和不安全的网络暴露。
此扫描将配置为扫描上一部分中确定的外部和内部网络 CIDR。
在 Nessus 界面中:
- 创建名为
host-discovery
的主机发现扫描 - 指定主机:外部和内部 CIDR
- 保存并启动
5.3. 节点操作系统扫描
节点扫描经过身份验证,旨在检查关键操作系统是否存在已知漏洞、不安全的配置和合规性问题。
针对组织基础架构集群,完成本部分中的步骤:
导出集群 kubeconfig:
KUBECONFIG=
列出所有集群节点:
kubectl --kubeconfig=${KUBECONFIG:?} get nodes -o wide
请注意显示每个节点的数据 IP 的列。在继续操作之前,请仔细检查是否可以从 Nessus 工作站使用 ping 命令访问数据 IP。
ping <node_data_ip>
在 Nessus 界面中,开始创建名称为
nodeos-compliance-<cluster_name>
的“高级扫描”在高级扫描中,使用第 1 步中的所有节点数据 IP 的英文逗号分隔列表填充主机字段
按照附录:添加集群节点 SSH 凭据添加扫描凭据。
前往“合规性”标签页,然后选择“DISA STIG Ubuntu 20.04 v1”的最新可用修订版本。按原样保存合规性配置,而不对默认值进行任何更改。
保存扫描配置并启动扫描。
5.4. 休息一下
扫描应需要 30 分钟以上才能完成。现在可以休息一下或做点其他事情,直到这些任务完成。
6. 导出扫描结果
本部分将介绍导出扫描结果的流程。
对于每次完成的扫描,请下载结果:
选择已完成的扫描,以查看其结果。
点击右上角的“举报”按钮。
选择“报告格式”CSV,然后选择所有列。
点击“生成报告”。稍等片刻,报告应该就会下载完毕。
(可选)如果还需要 HTML 报告,请改为选择“报告格式 HTML”和任何合理的报告模板。建议使用的报告模板是“按插件列出的详细漏洞(含合规性/补救措施)”。
7. 后续步骤
必须根据您的环境安全流程处理生成的 CSV / HTML 报告。如有疑问,请与 SecOps 或合规性 POC 联系,以获取进一步说明。
8. 附录
8.1. 添加集群节点 SSH 凭据
本部分将逐步介绍如何获取一组 SSH 凭据,以便 Nessus 扫描目标集群的节点。
导出集群 kubeconfig:
KUBECONFIG=
列出集群 SSH 密钥
kubectl --kubeconfig=${KUBECONFIG} get -A secret | grep ssh-key
确定与目标集群对应的“ssh-key”Secret 的命名空间,然后导出该命名空间:
CLUSTER_NS=
创建 Nessus ssh 目录:
NESSUS_FOLDER=nessus mkdir -p ${NESSUS_FOLDER}/.ssh
将 SSH 密钥对导出到 Nessus SSH 目录:
kubectl --kubeconfig=${KUBECONFIG:?} get -n ${CLUSTER_NS:?} secret/ssh-key -o jsonpath='{ .data.id_rsa }' | base64 -d > ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa kubectl --kubeconfig=${KUBECONFIG:?} get -n ${CLUSTER_NS:?} secret/ssh-key -o jsonpath='{ .data.id_rsa-cert\.pub }' | base64 -d > ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa-cert.pub
修复密钥对的权限:
# fix permissions chmod 600 ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa chmod 600 ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa-cert.pub
使用空密码将私钥转换为 PEM 格式:
ssh-keygen -p -m PEM -f ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa
成功的输出应如下所示:
Key has comment 'root@te-bd-bootstrapper' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
将
nessus-<cluster>-id_rsa
和nessus-<cluster>-id_rsa-cert.pub
转移到用于访问 Nessus 界面的工作站。在 Nessus 界面中,前往扫描设置的“凭据”标签页。
创建新的 SSH 凭据,并选择“证书”作为身份验证方法。
为证书 SSH 身份验证方法提供以下设置:
用户名:“root”
用户证书:添加文件
nessus-<cluster>-id_rsa-cert.pub
私钥:添加文件
nessus-<cluster>-id_rsa
保存 SSH 设置。
返回到引用此部分的位置。