Nessus 스캔 실행

Nessus는 하드웨어 및 소프트웨어의 보안 취약점을 감지하는 데 사용되는 보안 스캐너입니다.

이 문서에서는 다음 단계를 설명합니다.

  • Nessus 설치

  • Nessus 스캔 실행

  • Nessus 스캔 결과 내보내기

1. 배경

Tenable Nessus는 라이선스가 부여된 서드 파티 도구입니다. Nessus에 대해 자세히 알아보려면 다음 리소스를 참고하세요.

2. 시작하기 전에

  • 워크스테이션

    • 부트스트래퍼 (te-bf) 또는 이에 상응하는 작업자 액세스 가능 워크스테이션이 Nessus를 호스팅해야 합니다.
  • 액세스 권한 필요

    • IAM-R0005를 따르세요.

      • 각 대상 클러스터의 클러스터 관리자 역할을 획득합니다.
    • IAM-R0004를 따르세요.

      • 각 타겟 클러스터의 KUBECONFIG를 생성합니다.
  • 필요한 도구

    • kubectl
    • ssh-keygen
  • 소프트웨어

    • 워크스테이션 OS와 호환되는 Nessus 설치 프로그램이 필요합니다. https://www.tenable.com/downloads/nessus에서 설치 프로그램을 다운로드하고 계속하기 전에 Nessus 워크스테이션으로 전송합니다.
  • 라이선스

    • 하나의 Tenable Nessus 라이선스 (Pro, Export 또는 Manager) 활성화 코드가 필요합니다. 라이선스 활성화 코드가 없는 경우 서드 파티 라이선스 / 소프트웨어 BOM에 대해 팀 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 플러그인 URL과 제품 라이선스가 표시됩니다. 다음 단계에서는 두 값이 모두 필요합니다.

  8. 나중에 이 가이드에서 필요하므로 Nessus 플러그인 URL을 안전한 위치에 저장하여 나중에 참조하세요.

  9. Nessus 오프라인 활성화 페이지의 라이선스를 /opt/nessus/etc/nessus/nessus.license 파일에 저장하여 Nessus 워크스테이션에 저장합니다.

  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에 적용해야 합니다. Nessus 플러그인은 Nessus 오프라인 활성화 페이지에서 얻은 Nessus 플러그인 URL을 사용하여 Tenable에서 직접 얻어야 합니다.

  1. 플러그인 번들을 가져옵니다.

    옵션 1: 원하는 브라우저를 사용하여 Nessus 플러그인 URL로 이동하면 번들이 자동으로 다운로드됩니다.

    옵션 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 UI를 통해 필요한 스캔을 만드는 방법을 안내합니다.

계속하기 전에 https://<nessus-workstation-ip>:8834에서 Nessus UI에 액세스할 수 있는지 확인하고 admin 사용자로 로그인합니다.

5.1. 네트워크 CIDR 수집

환경의 외부 및 내부 네트워크 CIDR을 검사하기 위해 Nessus 검사가 생성됩니다.

  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를 보여주는 열을 확인합니다. 계속하기 전에 Nessus 워크스테이션에서 ping을 사용하여 데이터 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과 적절한 보고서 템플릿을 선택합니다. 권장되는 보고서 템플릿은 '규정 준수/수정 사항이 포함된 플러그인별 세부 취약점'입니다.

7. 다음 단계

결과로 생성된 CSV / HTML 보고서는 환경 보안 프로세스에 따라 처리해야 합니다. 확실하지 않은 경우 SecOps 또는 규정 준수 담당자에게 문의하여 추가 안내를 받으세요.

8. 부록

8.1. 클러스터 노드 SSH 사용자 인증 정보 추가

이 섹션에서는 Nessus가 타겟 클러스터의 노드를 검사할 수 있도록 ssh 사용자 인증 정보를 가져오는 과정을 설명합니다.

  1. 클러스터 kubeconfig를 내보냅니다.

    KUBECONFIG=
    
  2. 클러스터 SSH 키 나열

    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. 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 UI에 액세스하는 데 사용되는 워크스테이션으로 nessus-<cluster>-id_rsanessus-<cluster>-id_rsa-cert.pub을 전송합니다.

  9. Nessus UI에서 스캔 설정 사용자 인증 정보 탭으로 이동합니다.

  10. 새 SSH 사용자 인증 정보를 만들고 인증 방법으로 '인증서'를 선택합니다.

  11. 인증서 SSH 인증 방법에 다음 설정을 제공합니다.

    • 사용자 이름: 'root'

    • 사용자 인증서: 파일 추가 nessus-<cluster>-id_rsa-cert.pub

    • 비공개 키: 파일 추가 nessus-<cluster>-id_rsa

  12. SSH 설정을 저장합니다.

  13. 이 섹션이 참조된 위치로 돌아갑니다.