Nessus は、ハードウェアとソフトウェアのセキュリティの脆弱性を検出するために使用されるセキュリティ スキャナです。
このドキュメントでは、次の手順について説明します。
Nessus をインストールする
Nessus スキャンを実行する
Nessus スキャン結果をエクスポートする
1. 背景
Tenable Nessus はライセンス取得済みのサードパーティ ツールです。Nessus の詳細については、以下のリソースをご覧ください。
2. 始める前に
ワークステーション
- Nessus をホストするには、ブートストラッパー(te-bf)または同等のオペレーターがアクセス可能なワークステーションが必要です。
アクセス権が必要です
IAM-R0005 に従います。
- 各ターゲット クラスタのクラスタ管理者ロールを取得します。
IAM-R0004 に従います。
- 各ターゲット クラスタの KUBECONFIG を生成します。
必要なツール
- kubectl
- ssh-keygen
ソフトウェア
- ワークステーションの OS と互換性のある Nessus インストーラが必要です。https://www.tenable.com/downloads/nessus からインストーラを入手し、続行する前に Nessus ワークステーションに転送します。
ライセンス
- Tenable Nessus ライセンス(Pro、Export、Manager)のアクティベーション コードが 1 つ必要です。ライセンス有効化コードがない場合は、サードパーティのライセンス / ソフトウェア部品表についてチームの担当者にお問い合わせください。
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 プラグインの URL とプロダクト ライセンスが表示されます。次の手順では、これらの両方の値が必要です。
Nessus プラグインの URL は、このガイドで後ほど必要になるため、安全な場所に保存しておいてください。
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 に適用し、スキャン結果が関連性があり最新の状態であることを確認する必要があります。Nessus プラグインは、Nessus オフライン アクティベーション ページから取得した Nessus プラグイン URL を使用して、Tenable から直接取得する必要があります。
プラグイン バンドルを取得します。
オプション 1: 任意のブラウザを使用して Nessus プラグインの URL に移動すると、バンドルが自動的にダウンロードされます。
オプション 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 UI を使用して必要なスキャンを作成する方法について説明します。
続行する前に、https://<nessus-workstation-ip>:8834
で Nessus UI にアクセスできることを確認し、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 UI で次の操作を行います。
host-discovery
という名前のホスト検出スキャンを作成する- ホストを指定する: 外部と内部の両方の CIDR
- 保存して起動
5.3. ノード OS のスキャン
ノードスキャンは認証され、既知の脆弱性、安全でない構成、コンプライアンスについて重要なオペレーティング システムを検査することを目的としています。
組織のインフラストラクチャ クラスタについて、このセクションの手順を行います。
クラスタの kubeconfig をエクスポートします。
KUBECONFIG=
クラスタのすべてのノードを一覧表示します。
kubectl --kubeconfig=${KUBECONFIG:?} get nodes -o wide
各ノードのデータ IP を示す列を確認します。続行する前に、データ IP に Nessus ワークステーションから ping でアクセスできることを再確認します。
ping <node_data_ip>
Nessus UI で、
nodeos-compliance-<cluster_name>
という名前の「高度なスキャン」の作成を開始します。詳細スキャンで、手順 1 のすべてのノードデータ IP のカンマ区切りリストをホスト フィールドに入力します。
付録: クラスタノードの SSH 認証情報を追加するに沿って、スキャン認証情報を追加します。
[コンプライアンス] タブに移動し、利用可能な最新リビジョンの「DISA STIG Ubuntu 20.04 v1」を選択します。デフォルト値を変更せずに、コンプライアンス構成をそのまま保存します。
スキャン構成を保存してスキャンを開始します。
5.4. 一時的に解除
スキャンが完了するまでに 30 分以上かかることがあります。完了するまで休憩したり、別のことをしたりするのにちょうどよいタイミングです。
6. スキャン結果をエクスポートする
このセクションでは、スキャン結果をエクスポートするプロセスについて説明します。
完了したスキャンごとに、結果をダウンロードします。
完了したスキャンを選択して、結果を確認します。
右上にある [レポート] ボタンをクリックします。
[レポート形式] で [CSV] を選択し、すべての列を選択します。
[レポートを生成] をクリックします。しばらくするとレポートがダウンロードされます。
(省略可)HTML レポートも必要な場合は、[Report Format] で [HTML] を選択し、[Report Template] で適切なテンプレートを選択します。推奨されるレポート テンプレートは、「Detailed Vulnerabilities By Plugin with Compliance/Remediation」です。
7. 次のステップ
生成された CSV / HTML レポートは、環境のセキュリティ プロセスに従って処理する必要があります。不明な点がある場合は、SecOps またはコンプライアンスの POC にお問い合わせください。
8. 付録
8.1. クラスタノードの SSH 認証情報を追加する
このセクションでは、Nessus がターゲット クラスタのノードをスキャンするための SSH 認証情報を取得するプロセスについて説明します。
クラスタの kubeconfig をエクスポートします。
KUBECONFIG=
クラスタの SSH 認証鍵を一覧表示する
kubectl --kubeconfig=${KUBECONFIG} get -A secret | grep ssh-key
ターゲット クラスタに対応する「ssh-key」Secret の Namespace を特定し、Namespace をエクスポートします。
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 UI へのアクセスに使用するワークステーションに転送します。Nessus UI で、スキャン設定の [Credentials] タブに移動します。
新しい SSH 認証情報を作成し、認証方法として「証明書」を選択します。
証明書 SSH 認証方式に次の設定を指定します。
ユーザー名: 「root」
ユーザー証明書: ファイル
nessus-<cluster>-id_rsa-cert.pub
を追加秘密鍵: ファイルを追加
nessus-<cluster>-id_rsa
SSH 設定を保存します。
このセクションが参照されていた場所に戻ります。