執行 Nessus 掃描

Nessus 是一種安全掃描器,用於偵測硬體和軟體中的安全漏洞。

本文將說明如何:

  • 安裝 Nessus

  • 執行 Nessus 掃描

  • 匯出 Nessus 掃描結果

1. 背景

Tenable Nessus 是授權的第三方工具。如要進一步瞭解 Nessus,請參閱下列資源:

2. 事前準備

  • 工作站

    • 您必須使用啟動程式 (te-bf) 或可存取工作站的同等運算子,才能代管 Nessus。
  • 需要存取權

    • 請按照 IAM-R0005 執行:

      • 取得每個目標叢集的叢集管理員角色。
    • 請按照 IAM-R0004 進行操作:

      • 為每個目標叢集產生 KUBECONFIG。
  • 所需工具

    • kubectl
    • ssh-keygen
  • 軟體

  • 授權

    • 您必須提供單一 Tenable Nessus 授權 (Pro、Export 或 Manager) 啟用代碼。如果沒有授權啟用代碼,請與團隊 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 UI,並以 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 UI 中:

  1. 建立名為 host-discovery 的主機探索掃描
  2. 指定主機:外部和內部 CIDR
  3. 儲存並啟動

5.3. 節點 OS 掃描

節點掃描會經過驗證,目的是檢查重要作業系統是否有已知安全漏洞、不安全的設定和法規遵循問題。

請完成本節的機構基礎架構叢集:

  1. 匯出叢集 kubeconfig:

    KUBECONFIG=
    
  2. 列出所有叢集節點:

    kubectl --kubeconfig=${KUBECONFIG:?} get nodes -o wide
    
  3. 請注意顯示每個節點資料 IP 的資料欄。請先透過 ping 確認可從 Nessus 工作站存取資料 IP,再繼續操作。

    ping <node_data_ip>
    
  4. 在 Nessus UI 中,開始建立名為 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,以及您認為合理的「報表範本」。建議使用的報表範本為「Detailed Vulnerabilities By Plugin with Compliance/Remediation」(依外掛程式列出詳細的安全性弱點,並提供法規遵循/修復資訊)。

7. 後續步驟

產生的 CSV / HTML 報表必須按照環境安全程序處理。如有疑問,請與 SecOps 或法規遵循 POC 聯絡,進一步瞭解正確做法。

8. 附錄

8.1. 新增叢集節點 SSH 認證

本節將逐步說明如何取得 Nessus 的 SSH 憑證,以便掃描目標叢集的節點。

  1. 匯出叢集 kubeconfig:

    KUBECONFIG=
    
  2. 列出叢集安全殼層金鑰

    kubectl --kubeconfig=${KUBECONFIG} get -A secret | grep ssh-key
    
  3. 找出與目標叢集相應的「ssh-key」密鑰命名空間,然後匯出該命名空間:

    CLUSTER_NS=
    
  4. 建立 Nessus ssh 目錄:

    NESSUS_FOLDER=nessus
    mkdir -p ${NESSUS_FOLDER}/.ssh
    
  5. 將安全殼層金鑰組匯出至 Nessus 安全殼層目錄:

    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 UI 的工作站。

  9. 在 Nessus 使用者介面中,前往掃描設定的「憑證」分頁。

  10. 建立新的 SSH 憑證,並選擇「憑證」做為驗證方式。

  11. 為憑證 SSH 驗證方法提供下列設定:

    • 使用者名稱:「root」

    • 使用者憑證:新增檔案 nessus-<cluster>-id_rsa-cert.pub

    • 私密金鑰:新增檔案 nessus-<cluster>-id_rsa

  12. 儲存 SSH 設定。

  13. 返回參照這個部分的頁面。