执行 Nessus 扫描

Nessus 是一款安全扫描器,用于检测硬件和软件中的安全漏洞。

本文档介绍了以下步骤:

  • 安装 Nessus

  • 执行 Nessus 扫描

  • 导出 Nessus 扫描结果

1. 背景

Tenable Nessus 是一款获得许可的第三方工具。如需详细了解 Nessus,请参阅以下资源:

2. 准备工作

  • 工作站

    • 引导加载程序 (te-bf) 或可访问的工作站(等效操作员)必须托管 Nessus。
  • 需要访问权限

    • 遵循 IAM-R0005:

      • 为每个目标集群获取集群管理员角色。
    • 遵循 IAM-R0004:

      • 为每个目标集群生成 KUBECONFIG。
  • 所需工具

    • kubectl
    • ssh-keygen
  • 软件

  • 许可

    • 需要单个 Tenable Nessus 许可(专业版、导出版或管理器版)激活码。如果您没有许可激活码,请与团队中负责第三方许可 / 软件物料清单的 POC 联系。

3. 安装 Nessus

本部分介绍了在 Nessus 工作站上安装 Nessus 的步骤。

如果 Nessus 已安装并激活,则应跳过此部分。

如果 Nessus 不再可用(例如,它安装在已不存在的机器上),则必须重置用于激活之前 Nessus 实例的许可,然后才能继续。

  1. 导出 Nessus 安装程序的路径:

    NESSUS_INSTALLER=
    
  2. 使用 dpkg 安装 Nessus:

    dpkg -i ${NESSUS_INSTALLER:?}
    
  3. 重启 Nessus 并确认其正在运行:

    sudo systemctl restart nessusd
    sudo systemctl status nessusd
    
  4. 获取挑战代码以离线注册 Nessus:

    /opt/nessus/sbin/nessuscli fetch --challenge
    
  5. 在连接到互联网的计算机上,访问 Nessus 离线激活页面 https://plugins.nessus.org/v2/offline.php

  6. 将 Nessus 离线激活码和 Nessus 许可激活码复制到 Nessus 离线激活页面,然后按“提交”

  7. Nessus 离线激活页面现在应会显示 Nessus 插件网址和产品许可。后续步骤需要用到这两个值。

  8. 将 Nessus 插件网址保存到安全的位置,以供日后参考,因为本指南后面会用到该网址。

  9. 将 Nessus 离线激活页面中的许可保存到 Nessus 工作站中,并命名为 /opt/nessus/etc/nessus/nessus.license

  10. 将许可应用于 Nessus:

    /opt/nessus/sbin/nessuscli fetch --register-offline /opt/nessus/etc/nessus/nessus.license
    
  11. 创建管理员用户:

    按照 nessuscli adduser 的提示创建 admin 用户。这些凭据稍后将用于执行扫描和下载结果,因此请将其保存在安全的位置。

    /opt/nessus/sbin/nessuscli adduser
    
  12. Nessus 运行时,可通过端口 8834 访问其界面。使用您选择的浏览器前往 https://<nessus-workstation-ip>:8834,然后以 admin 用户身份登录。

4. 更新 Nessus 插件

必须先下载最新的 Nessus 插件并将其应用于 Nessus,然后才能运行扫描,以确保扫描结果相关且最新。必须直接从 Tenable 获取 Nessus 插件,方法是使用从 Nessus 离线激活页面获取的 Nessus 插件网址。

  1. 获取插件软件包。

    方法 1:使用所选浏览器前往 Nessus 插件网址,系统会自动下载该软件包。

    方法 2:使用 wget 下载软件包 wget "${PLUGIN_URL:?}" -O plugin-updates.tar.gz

  2. 将插件软件包转移到 Nessus 工作站,并导出文件的位置:

    NESSUS_PLUGIN_BUNDLE=
    
  3. 将插件更新应用到 Nessus:

    /opt/nessus/sbin/nessuscli update ${NESSUS_PLUGIN_BUNDLE:?}
    
  4. 插件更新需要大约 30 分钟才能完成编译。在此期间,您可以按照后续步骤创建扫描,但请在插件完成编译后再运行扫描。

5. 配置 Nessus 扫描

需要为目标类和凭据的每个唯一组合创建扫描。本部分将逐步介绍如何通过 Nessus 界面创建所需的扫描。

在继续之前,请确认您有权访问 https://<nessus-workstation-ip>:8834 中的 Nessus 界面,并以 admin 用户身份登录。

5.1. 收集网络 CIDR

创建 Nessus 扫描,以扫描环境的外部和内部网络 CIDR。

  1. 收集目标设备网络的外部和内部网络 CIDR(理想情况下,此网络不会与另一个相邻环境重叠)。

  2. 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 界面中:

  1. 创建名为 host-discovery 的主机发现扫描
  2. 指定主机:外部和内部 CIDR
  3. 保存并启动

5.3. 节点操作系统扫描

节点扫描经过身份验证,旨在检查关键操作系统是否存在已知漏洞、不安全的配置和合规性问题。

针对组织基础架构集群,完成本部分中的步骤:

  1. 导出集群 kubeconfig:

    KUBECONFIG=
    
  2. 列出所有集群节点:

    kubectl --kubeconfig=${KUBECONFIG:?} get nodes -o wide
    
  3. 请注意显示每个节点的数据 IP 的列。在继续操作之前,请仔细检查是否可以从 Nessus 工作站使用 ping 命令访问数据 IP。

    ping <node_data_ip>
    
  4. 在 Nessus 界面中,开始创建名称为 nodeos-compliance-<cluster_name> 的“高级扫描”

  5. 在高级扫描中,使用第 1 步中的所有节点数据 IP 的英文逗号分隔列表填充主机字段

  6. 按照附录:添加集群节点 SSH 凭据添加扫描凭据。

  7. 前往“合规性”标签页,然后选择“DISA STIG Ubuntu 20.04 v1”的最新可用修订版本。按原样保存合规性配置,而不对默认值进行任何更改。

  8. 保存扫描配置并启动扫描。

5.4. 休息一下

扫描应需要 30 分钟以上才能完成。现在可以休息一下或做点其他事情,直到这些任务完成。

6. 导出扫描结果

本部分将介绍导出扫描结果的流程。

对于每次完成的扫描,请下载结果:

  1. 选择已完成的扫描,以查看其结果。

  2. 点击右上角的“举报”按钮。

  3. 选择“报告格式”CSV,然后选择所有列。

  4. 点击“生成报告”。稍等片刻,报告应该就会下载完毕。

  5. (可选)如果还需要 HTML 报告,请改为选择“报告格式 HTML”和任何合理的报告模板。建议使用的报告模板是“按插件列出的详细漏洞(含合规性/补救措施)”。

7. 后续步骤

必须根据您的环境安全流程处理生成的 CSV / HTML 报告。如有疑问,请与 SecOps 或合规性 POC 联系,以获取进一步说明。

8. 附录

8.1. 添加集群节点 SSH 凭据

本部分将逐步介绍如何获取一组 SSH 凭据,以便 Nessus 扫描目标集群的节点。

  1. 导出集群 kubeconfig:

    KUBECONFIG=
    
  2. 列出集群 SSH 密钥

    kubectl --kubeconfig=${KUBECONFIG} get -A secret | grep ssh-key
    
  3. 确定与目标集群对应的“ssh-key”Secret 的命名空间,然后导出该命名空间:

    CLUSTER_NS=
    
  4. 创建 Nessus ssh 目录:

    NESSUS_FOLDER=nessus
    mkdir -p ${NESSUS_FOLDER}/.ssh
    
  5. 将 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
    
  6. 修复密钥对的权限:

    # fix permissions
    chmod 600 ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa
    chmod 600 ${NESSUS_FOLDER}/.ssh/nessus-${CLUSTER_NS}-id_rsa-cert.pub
    
  7. 使用空密码将私钥转换为 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.
    
  8. nessus-<cluster>-id_rsanessus-<cluster>-id_rsa-cert.pub 转移到用于访问 Nessus 界面的工作站。

  9. 在 Nessus 界面中,前往扫描设置的“凭据”标签页。

  10. 创建新的 SSH 凭据,并选择“证书”作为身份验证方法。

  11. 为证书 SSH 身份验证方法提供以下设置:

    • 用户名:“root”

    • 用户证书:添加文件 nessus-<cluster>-id_rsa-cert.pub

    • 私钥:添加文件 nessus-<cluster>-id_rsa

  12. 保存 SSH 设置。

  13. 返回到引用此部分的位置。