導入
本記事は以下の続編です。
この記事で得られること
本記事を読むことで、以下の知見が得られます。
- 脆弱性スキャンの概要とスキャン方式の選定基準
- Nmap や脆弱性スクリプトを利用したスキャン手順
- スキャン結果の「読み解き方」および False Positive の見極めポイント
⚠️ 注意(必読)
本記事で扱う技術は、正しく扱わなければ法的リスク・運用リスクを伴います。
必ず許可された環境(演習用 VM・隔離されたラボ環境など)でのみ実行してください。
無許可のスキャンや侵入行為は、刑事罰の対象となります。
🧭 第3章の概要
本章では、攻撃前段階にあたる 「情報収集」→「脆弱性スキャン」→「スキャン結果の解析」 までの流れを扱います。
攻撃者視点では「偵察」フェーズ、防御者視点では「攻撃対象の可視化」として位置付けられる重要工程です。
3章詳細構成
- 🔍 受動的な情報収集(Passive Reconnaissance)(3.1章)
- 🚀 能動的な情報収集(Active Reconnaissance)(3.2章)
- 🛡 脆弱性スキャンの実行(Vulnerability Scanning)(3.3章) 👈本記事
- 📊 スキャン結果の解析(Vulnerability Assessment)(3.4章)👈本記事
🛡 3.3 脆弱性スキャンの実行
🎯 脆弱性スキャンとは何か
脆弱性スキャンは、偵察フェーズで得たサービス情報をもとに既知脆弱性の有無を体系的に把握するプロセスです。
スキャンの目的
- 攻撃対象領域の把握
- OS・サービスの脆弱性診断
- CVE / CVSS に基づくリスク評価
- 後続フェーズ(検証・悪用可能性確認)へ橋渡し
スキャナーの一般的な動作プロセス
- ホスト検出・ポートスキャン(Discovery)
- サービス識別(Service Enumeration)
- 脆弱性データベースとの照合(CVE Matching)
- レポート生成 & 優先度付け(Reporting)
⚠️ 自動スキャンのレポートには誤検知を多く含むため、
別途検証が必須である点に注意してください。
📡 スキャン方式の種類と使い分け
① 認証なしスキャン
- 最も一般的で攻撃者視点でのスキャン
- 認証情報なしで到達可能な範囲を評価
- 誤検知多め・内部プロセス情報は確認不可
② 認証スキャン
- SSH などで内部ログインしスキャン
- 権限(root)ユーザーか一般権限ユーザーかで結果が異なる
- 正確なサービス・パッチ情報が取得可能
③ ディスカバリースキャン
- 開放されたポートに応じて実施する詳細なスキャン
- ポート番号80/443がオープンであれば、Webサーバー(Apacheのどのバージョンかなど)を診断
- ポート番号22がオープンであれば、SSHの暗号スイートを解析
④ フルスキャン
- 全プラグインを実行
- 負荷が大きいため、本番環境では運用に注意
- スキャナー次第ではあるが、プラグインをカスタマイズしてフルスキャンすることで高速化が可能
⑤ ステルススキャン
- IDS / IPS の検知を最小化
- 稼働中の環境で利用
- SYN スキャン(ハーフオープンスキャン)が代表例
⑥ コンプライアンススキャン
- 医療機関でのHIPAA など規制準拠状況を確認したうえでのスキャン
- カスタムコンプライアンスポリシーを設計し実行する
🔧 実践演習①:Kaliツールを使用した脆弱性スキャン
脆弱性スキャンまでの流れをホスト確認やサービス列挙を駆使しながら流れで確認していきます。
1️⃣ ホスト到達確認(Ping)
基本のキとして対象ホストの疎通確認を行います。
┌──(kali㉿Kali)-[~]
└─$ ping -c 5 10.6.6.23
PING 10.6.6.23 (10.6.6.23) 56(84) bytes of data.
64 bytes from 10.6.6.23: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 10.6.6.23: icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from 10.6.6.23: icmp_seq=3 ttl=64 time=0.050 ms
64 bytes from 10.6.6.23: icmp_seq=4 ttl=64 time=0.052 ms
64 bytes from 10.6.6.23: icmp_seq=5 ttl=64 time=0.057 ms
--- 10.6.6.23 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4081ms
rtt min/avg/max/mdev = 0.050/0.052/0.057/0.002 ms
5回応答 → スキャン可能であると判断。
2️⃣ Nmap:サービスおよびバージョン検出
脆弱性スキャンを効果的に実行するために動作するポート及びそのバージョンを確認します。
┌──(kali㉿Kali)-[~]
└─$ nmap -sV 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-18 10:01 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00011s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
53/tcp open domain ISC BIND 9.11.5-P4-5.1+deb10u5 (Debian Linux)
80/tcp open http nginx 1.14.2
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: GRAVEMIND; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.28 seconds
出力結果から以下のサービスが稼働していることが確認できます。
- vsftpd 3.0.3
- OpenSSH 7.9p1
- BIND 9.11
- nginx 1.14.2
- Samba smbd 3.X - 4.X
3️⃣ OS推定
脆弱性の適用可否はOSバージョンにも依存するため確認します。
┌──(kali㉿Kali)-[~]
└─$ sudo nmap -O 10.6.6.23
[sudo] password for kali:
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-18 10:02 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.000068s latency).
Not shown: 994 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 02:42:0A:06:06:17 (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.53 seconds
19行目より
- Linux 4.15–5.8
が利用されていることがわかります。
4️⃣ Nmap + Vulners NSEスクリプトによる脆弱性抽出
実際に脆弱性を抽出します。
NmapとVulners NSEスクリプトを使用してCVEスコアが4以上のものを表示しています。
┌──(kali㉿Kali)-[~]
└─$ nmap -sV --script vulners --script-args mincvss=4 10.6.6.23
Starting Nmap 7.94 ( https://nmap.org ) at 2025-09-18 10:05 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.000099s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| vulners:
| vsftpd 3.0.3:
| CVE-2021-30047 7.5 https://vulners.com/cve/CVE-2021-30047
|_ CVE-2021-3618 7.4 https://vulners.com/cve/CVE-2021-3618
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| vulners:
| cpe:/a:openbsd:openssh:7.9p1:
| PACKETSTORM:173661 9.8 https://vulners.com/packetstorm/PACKETSTORM:173661 *EXPLOIT*
| F0979183-AE88-53B4-86CF-3AF0523F3807 9.8 https://vulners.com/githubexploit/F0979183-AE88-53B4-86CF-3AF0523F3807 *EXPLOIT*
| CVE-2023-38408 9.8 https://vulners.com/cve/CVE-2023-38408
| B8190CDB-3EB9-5631-9828-8064A1575B23 9.8 https://vulners.com/githubexploit/B8190CDB-3EB9-5631-9828-8064A1575B23 *EXPLOIT*
| 8FC9C5AB-3968-5F3C-825E-E8DB5379A623 9.8 https://vulners.com/githubexploit/8FC9C5AB-3968-5F3C-825E-E8DB5379A623 *EXPLOIT*
| BA3887BD-F579-53B1-A4A4-FF49E953E1C0 8.1 https://vulners.com/githubexploit/BA3887BD-F579-53B1-A4A4-FF49E953E1C0 *EXPLOIT*
| 4FB01B00-F993-5CAF-BD57-D7E290D10C1F 8.1 https://vulners.com/githubexploit/4FB01B00-F993-5CAF-BD57-D7E290D10C1F *EXPLOIT*
| CVE-2020-15778 7.8 https://vulners.com/cve/CVE-2020-15778
| CVE-2019-16905 7.8 https://vulners.com/cve/CVE-2019-16905
53/tcp open domain ISC BIND 9.11.5-P4-5.1+deb10u5 (Debian Linux)
| vulners:
| cpe:/a:isc:bind:9.11.5-p4-5.1%2Bdeb10u5:
| CVE-2021-25216 9.8 https://vulners.com/cve/CVE-2021-25216
| CVE-2020-8616 8.6 https://vulners.com/cve/CVE-2020-8616
| CVE-2020-8625 8.1 https://vulners.com/cve/CVE-2020-8625
| PACKETSTORM:180550 7.5 https://vulners.com/packetstorm/PACKETSTORM:180550 *EXPLOIT*
| MSF:AUXILIARY-DOS-DNS-BIND_TSIG_BADTIME- 7.5 https://vulners.com/metasploit/MSF:AUXILIARY-DOS-DNS-BIND_TSIG_BADTIME- *EXPLOIT*
| FBC03933-7A65-52F3-83F4-4B2253A490B6 7.5 https://vulners.com/githubexploit/FBC03933-7A65-52F3-83F4-4B2253A490B6 *EXPLOIT*
| CVE-2023-50387 7.5 https://vulners.com/cve/CVE-2023-50387
| CVE-2023-4408 7.5 https://vulners.com/cve/CVE-2023-4408
| CVE-2023-3341 7.5 https://vulners.com/cve/CVE-2023-3341
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
| vulners:
| nginx 1.14.2:
| F24D1B4E-B7ED-546A-9886-CDE6898D6FA6 9.3 https://vulners.com/gitee/F24D1B4E-B7ED-546A-9886-CDE6898D6FA6 *EXPLOIT*
| 3F71F065-66D4-541F-A813-9F1A2F2B1D91 8.8 https://vulners.com/githubexploit/3F71F065-66D4-541F-A813-9F1A2F2B1D91 *EXPLOIT*
| NGINX:CVE-2018-16845 8.2 https://vulners.com/nginx/NGINX:CVE-2018-16845
| NGINX:CVE-2022-41741 7.8 https://vulners.com/nginx/NGINX:CVE-2022-41741
| NGINX:CVE-2019-9513 7.8 https://vulners.com/nginx/NGINX:CVE-2019-9513
| NGINX:CVE-2019-9511 7.8 https://vulners.com/nginx/NGINX:CVE-2019-9511
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: GRAVEMIND; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.01 seconds
※実際にはもっと脆弱性が出てましたが、一部削除してます。
出力結果から
- 各サービスのバージョン情報に紐づくCVE一覧
- 高CVSS(9.0以上)の脆弱性が複数検出
がわかります。
各脆弱性の内容についてはNISTのデータベース(https://nvd.nist.gov/vuln/search) で確認可能です。
ただし、「検出された=悪用可能」とは限らないため、 脆弱性検証(Exploitation feasibility check) が必要です。
🔧 実践演習②:Greenbone Vulnerability Management(GVM)を使用した脆弱性スキャン
ここでは GVM(Greenbone Vulnerability Management)を用いた GUI ベースのスキャン手順を確認します。
1️⃣ GVMのセットアップ
CLIコマンドを利用してGVMのセットアップを実行します。
┌──(kali㉿Kali)-[~]
└─$ sudo gvm-check-setup
gvm-check-setup 22.5.0
Test completeness and readiness of GVM-22.5.0
Step 1: Checking OpenVAS (Scanner)...
OK: OpenVAS Scanner is present in version 22.7.3.
OK: Notus Scanner is present in version 22.5.0.
OK: Server CA Certificate is present as /var/lib/gvm/CA/servercert.pem.
Checking permissions of /var/lib/openvas/gnupg/*
OK: _gvm owns all files in /var/lib/openvas/gnupg
OK: redis-server is present.
OK: scanner (db_address setting) is configured properly using the redis-server socket: /var/run/redis-openvas/redis-server.sock
OK: the mqtt_server_uri is defined in /etc/openvas/openvas.conf
OK: _gvm owns all files in /var/lib/openvas/plugins
OK: NVT collection in /var/lib/openvas/plugins contains 86225 NVTs.
OK: The notus directory /var/lib/notus/products contains 440 NVTs.
Checking that the obsolete redis database has been removed
OK: No old Redis DB
OK: ospd-openvas service is active.
OK: ospd-OpenVAS is present in version 22.5.3.
Step 2: Checking GVMD Manager ...
OK: GVM Manager (gvmd) is present in version 22.5.5.
Step 3: Checking Certificates ...
OK: GVM client certificate is valid and present as /var/lib/gvm/CA/clientcert.pem.
OK: Your GVM certificate infrastructure passed validation.
Step 4: Checking data ...
OK: SCAP data found in /var/lib/gvm/scap-data.
OK: CERT data found in /var/lib/gvm/cert-data.
Step 5: Checking Postgresql DB and user ...
Starting postgresql service
OK: Postgresql version and default port are OK.
gvmd | _gvm | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
16435|pg-gvm|10|2200|f|22.5||
OK: At least one user exists.
Step 6: Checking Greenbone Security Assistant (GSA) ...
OK: Greenbone Security Assistant is present in version 22.05.1~git.
Step 7: Checking if GVM services are up and running ...
Starting gvmd service
Waiting for gvmd service
OK: gvmd service is active.
Starting gsad service
Waiting for gsad service
OK: gsad service is active.
Step 8: Checking few other requirements...
OK: nmap is present.
OK: ssh-keygen found, LSC credential generation for GNU/Linux targets is likely to work.
OK: nsis found, LSC credential package generation for Microsoft Windows targets is likely to work.
OK: xsltproc found.
WARNING: Your password policy is empty.
SUGGEST: Edit the /etc/gvm/pwpolicy.conf file to set a password policy.
Step 9: Checking greenbone-security-assistant...
OK: greenbone-security-assistant is installed
It seems like your GVM-22.5.0 installation is OK.
2️⃣ GVMへのログイン
ブラウザからループバックアドレスを指定しGVMを起動しログインをします。
GVMによるスキャン
スキャンタブ内のタスクを選択肢、左上にある魔法の杖のアイコンからスキャン先を設定しスキャンを実行します。
結果の確認
実行にはしばらく時間がかかります。完了したらレポート列から結果を表示して脆弱性を確認します。
GVMではレポートをpdf形式で出力可能です。
👉Nmap Vulners NSEスクリプト・GVMの結果を突き合わせることで
- 攻撃対象領域
- 深刻度の高いサービス
- 追加検証が必要な脆弱性
- 短期的に対策すべき部分
を抽出し、対処の優先順位付けに反映させられます。
実環境で実行時の注意点
- 脆弱性スキャンはリソース消費を多く伴うため以下の点に注意が必要です。
- 実行時間帯
- ネットワークトポロジ
- 帯域制限 ⇒ 対処としてスキャンレートのスロットリング(スキャン速度を落とす)
📊 3.4 スキャン結果の解析
脆弱性スキャン結果を評価する際のポイントです。
🔍 1. 誤検知(False Positive)の排除
スキャナーの性質上、誤検知は避けられません。
以下の確認を行います:
- サービスの実際のバージョン
- パッチ適用状況
- 設定による回避が行われているか
脆弱性調査に当たって有用な情報源をいくつか紹介しておきます。
- US-CERT: https://www.us-cert.gov
- カーネギーメロン大学のCERT部門: https://cert.org
- NIST: https://www.nist.gov/cyberframework
- JP-CERT: https://www.jpcert.or.jp/
- CVE: https://cve.mitre.org
- CWE: https://cwe.mitre.org
- CVSS: https://www.first.org/cvss/
🧩 2. 悪用可能性(Exploitation feasibility)の整理
検出されたCVEのうち、以下を評価します:
- 認証有無
- ネットワーク経路要件
- 設定差分による影響
👉1.2.セットで効果的なのは
MetasploitなどのエクスプロイトフレームワークのPoC(概念検証)を確認し、実際に成功し得るかの手動検証を実施すること
🧪 3. 脆弱性発見後の対処
全ての脆弱性への対処は難しいので、以下の優先度を参考に対処していくことが求められます。
- 脆弱性の重大度
- 重要なシステムかどうか
- 対象となるシステム数
etc...
🧾 本記事のまとめ
- 脆弱性スキャンは「自動化された検出」であり、検証がないと意味をなさない
- スキャン方式は目的に応じて選択すべき(認証/非認証、フル/ステルスほか)
- 脆弱性スキャナでは誤検知・過検知を前提とする
- スキャン後は 悪用可能性の見極め と 手動検証 が重要
📍 次回予告
次回は、4章の「ソーシャルエンジニアリング攻撃」について解説していきます。
次の記事はこちら




