こんにちは、虎の穴ラボのTYです。
今回は、脆弱性診断を行う Nessus というツールを使用して、自宅での簡単な脆弱性診断を試してみましたので、その手順をご紹介します。
Nessusとは
Tenable Network Security社が提供する包括的な脆弱性検知スキャナです。20年からの歴史があり、現在までに約10万件以上のプラグインと呼ばれる脆弱性チェックの為のスクリプトが追加されています。 本来は有償の製品ですが、個人の家庭内環境での使用で且つ、一度の診断が最大16IPアドレスという制限で使用できる「Nessus Home」という無償のエディションが提供されていますので、今回はそれを使用します。
Nessus Professional™ Vulnerability Scanner
事前に用意するもの
- mac (今回使用したマシンとなりますが、主にVagrantコマンドを使用しているため、Windowsでもあまり変わりは無いと思います。)
- Oracle VM VirtualBox
- Vagrant
Oracle VM VirtualBox と Vagrant は事前にダウンロードとインストールを行い、使用できる状態としておきます。
全体の手順
- Nessusのダウンロード
- Nessus Homeのアクティベーションコードの取得
- Nessusをインストールする仮想マシンの準備
- Nessusのインストール
- Nessusの初期設定
- スキャンポリシーの作成
- 脆弱性診断
- 診断後
1. Nessusのダウンロード
以下のダウンロードページからNessusのインストール対象とするOSに対応したファイルを取得しておきます。 今回は対象のOSをCentOS7としましたので、CentOS7用のファイルである Nessus-8.1.0-es7.x86_64.rpm をダウンロードしました。
2. Nessus Homeのアクティベーションコードの取得
以下のNessus Homeのページにアクセスを行い、「First Name」「Last Name」「Email」を入力して「Register」ボタンをクリックします。
しばらくすると「Email」に指定したアドレス宛てに「Tenable Nessus Home Activation Code」という件名のメールを受信します。 このメールの中に今回使用する「Nessus Home」のアクティベーションコードが記載されていますので、確認をしておきます。
3. Nessusをインストールする仮想マシンの準備
今回は VirtualBox と Vagrant を使用してNessusのインストール対象となる仮想マシンを準備します。
VagrantによりCentOS7のbox(と呼ばれる仮想マシンのイメージファイル)をダウンロードし起動します。 Vagrantでは公式にCentOS7のboxが用意されていますので、これを使用します。
Vagrant box centos/7 - Vagrant Cloud
Vagrant用のフォルダを作り、移動します
$ mkdir vagrant && cd vagrant
今回使用する仮想マシン用のフォルダを作り、移動します。
$ mkdir nessus && cd nessus
VagrantFileを準備します。
$ vagrant init centos/7
後ほどホストマシン側からNessusにアクセスする為、作成されたVagrantFileをエディタで開き、以下のようにポート転送の設定を追加しておきます。
# Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. # NOTE: This will enable public access to the opened port # config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 8834, host: 8834
CentOS7 の仮想マシンを起動します。(初回起動時はCentOS7のboxのダウンロードと、VirtualBoxへの設定も行われます。)
$ vagrant up
仮想マシンが起動をしたら、SSHのポート番号と秘密鍵ファイルのパスを確認します。 以下のコマンドを実行し、表示されるPortとIdentityFileの部分を確認してください。
$ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/user1/vagrant/nessus/.vagrant/machines/default/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL
SSHのポート番号が確認できたら、先ほどダウンロードしておいた Nussusのイメージファイルを仮想マシンにリモートコピーします。 この時、-i オプションには IdentityFile で示されていた秘密鍵ファイルのパスを、-P オプションにはポート番号を指定してください。
$ scp -i /Users/user1/vagrant/nessus/.vagrant/machines/default/virtualbox/private_key -P 2222 ~/Downloads/Nessus-8.1.0-es7.x86_64.rpm vagrant@localhost:/home/vagrant
4. Nessusのインストール
仮想マシンにログインを行い、Nessusのインストールを行います。
以下のコマンドで仮想マシンにログインを行います。
$ vagrant ssh
先ほどリモートコピーをした Nessusのイメージファイルを確認します。
[vagrant@localhost ~]$ ls -l -rw-r--r--. 1 vagrant vagrant 62331220 Dec 16 08:51 Nessus-8.1.0-es7.x86_64.rpm
以下のコマンドでインストールを行い、その後、起動します。
[vagrant@localhost ~]$ sudo yum localinstall -y Nessus-8.1.0-es7.x86_64.rpm [vagrant@localhost ~]$ sudo systemctl start nessusd
psコマンドを使用して、nessusd が起動していることを確認します。
[vagrant@localhost ~]$ ps aux | grep nessus root 4434 0.2 0.2 12684 1100 ? Ss 09:04 0:00 /opt/nessus/sbin/nessus-service -q root 4435 86.7 5.9 119340 29892 ? Sl 09:04 0:06 nessusd -q
起動確認後は仮想マシンからログアウトしておきます。
[vagrant@localhost ~]$ exit
5. Nessusの初期設定
ホストマシンのブラウザから以下のURLにアクセスを行うとNessusの初期設定画面が表示されます。
最初にSTEP 1/3として「Create an account」の画面が表示されるので、作成するアカウントのUsernameとPasswordを入力して「Continue」をクリックし、次の画面に移動します。 以後は、ここで登録した Username と Password でNessusにログインを行います。
次にSTEP 2/3として「Register your scanner」の画面が表示されるので、「Scanner Type」には「Home, Professional or Manager」を選択し、「Activation Code」には先にメールで取得したアクティベーションコードを入力して「Continue」をクリックし、次の画面に移動します。
STEP 3/3として「Initializing」画面が表示され Nessusの初期化が始まります。
初期化が終了すると、Nessus のメイン画面が表示されます。
6. スキャンポリシーの作成
脆弱性診断の前にスキャンポリシーの作成を行います。 画面左側のメニューより「Policies」をクリックして「Policies」画面に移動し、画面右上の「New Policy」をクリックすると作成できるスキャンポリシーの一覧が表示されます。 その中から「Advanced Scan」を選択します。
新しく作成するスキャンポリシーの設定画面が表示されますので、「Settings」タブを選択し、メニューから「BASIC」->「General」を選択し、「Name」に作成するポリシーの名称を入力します。 今回は Advanced_Scan_Policy と入力しておきます。
メニューから「DISCOVERY」->「Port Scanning」を選択し、「Ports」の「Port scan range: 」の設定を「default」から「all」または「1-65535」に変更します。 (設定の変更により、Nessusで指定している代表的なポートだけではなく、TCPの全ポートをスキャンします。)
メニューから「DISCOVERY」->「Service Discovery」を選択し、「Search for SSL/TLS on」の設定を「Known SSL/TLS ports」から「All ports」に変更します。 (設定の変更により、代表的なSSL/TLSポート以外もSSL/TLSポートとしてスキャンします。)
メニューから「ASSESSMENT」->「Web Applications」を選択し、「Scan web applications」の設定を「OFF」から「ON」に変更します。 (診断対象上でWebアプリケーションが動作していた際の設定です。)
メニューから「REPORT」を選択し、「Override normal verbosity」のチェックボックスにチェックを入れ、「Report as much information as possible」を選択します。 また、Output下の「Display hosts that respond to ping」のチェックボックスにもチェックを入れておきます。 (なるべく診断結果の情報量を増やすための設定です。)
メニューから「ADVANCED」を選択し、Performance Options 下の「Slow down the scan when network congestion is detected」のチェックボックスにチェックを入れます。 (ネットワークの輻輳が検出された際に、診断(スキャン)速度を遅くします。)
上記の設定が完了したら画面下部の「Save」をクリックし、スキャンポリシーを保存します。
7. 脆弱性診断
画面左側のメニューより「My Scans」をクリックして「My Scans」画面に移動し、画面右上の「New Scan」をクリックすると実行する脆弱性診断に使用するスキャンポリシーの一覧が表示されます。
一覧画面の「User Defined」タブをクリックすると、先ほど登録したスキャンポリシーが表示されます。
表示されたスキャンポリシーをクリックすると、脆弱性スキャンの設定画面が表示されますので、ここで「Name」に脆弱性診断の任意の名称(対象とするサーバーの名称など)を入力し、「Targets」に診断対象となるマシンのIPアドレスを設定して「Save」をクリックします。 ここでは「Name」に local_web_server を指定しています。 (「Targets」には複数のIPアドレスが設定できますが、Nessus Homeでは最大16IPアドレスの制限があります。)
スキャンの一覧画面に戻りますので、作成したスキャン設定の右側の矢印ボタン(Launchボタン)をクリックし、脆弱性診断を開始します。
診断完了後はスキャン設定の「Last Modified」の位置にチェックマークが付きます。(診断中はぐるぐると回転するアイコンが表示されています。)
診断完了後はスキャン設定名をクリックすると診断結果画面に移動しますので、内容を確認します。
8. 診断後
診断終了後は、以下のコマンドでNessusが稼働する仮想マシンを停止します。
$ vagrant halt
まとめ
今回はNessusの動作環境をVagrantで用意することで、手順の省略化を図ってみました。 説明では画面数が多くなってしまい煩雑なイメージを持たれる方もいるかもしれませんが、実際に操作をしてみると複雑な操作などはほとんど無く、脆弱性診断を行えます。 Nessusには他にも、上記の手順にも出てきました各種スキャンポリシー、外部から実行できる各種API、診断スクリプトの追加など興味を引く箇所が色々あるので、また機会があれば触ってみたいと思いました。
虎の穴ではJavaエンジニアをはじめとして一緒に働く仲間を絶賛募集中です! この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。 www.toranoana.jp