セキュリティ診断で実際に使うOSSツール

※この記事は「エムティーアイ Blog Summer 2026」の 6/25 の記事です。

こんにちは、テクノロジー本部 Red Teamの下山です。
普段はセキュリティ診断業務に携わっています。
本記事では、診断の現場で実際に使っているOSSツールを3つ紹介します。

目次

はじめに

セキュリティ診断(脆弱性診断)の現場では、有償・無償さまざまなツールが使われています。本記事では、その中でも無料で使えるOSSツールを3つ紹介します。いずれもインストールが簡単で、自分が管理するサーバーやシステムに対してすぐ試せます。

⚠️ これらのツールは必ず自分が管理・権限を与えられたシステムに対してのみ使用してください。無断でのスキャンは不正アクセス禁止法等に抵触する恐れがあります。

脆弱性診断の一般的な流れ

脆弱性診断では、対象システムの情報収集から始めて、段階的に調査を進めていきます。以下は一般的なWeb診断の流れです。

ステップ 内容 使用ツール
1. ポートスキャン 開放ポートや稼働サービスを把握する Nmap
2. SSL/TLS診断 暗号設定や既知脆弱性を確認する testssl.sh
3. コンテンツ探索 公開されていないページやファイルを探す dirsearch
4. 手動診断 認証・入力値・セッション等を詳しく調べる Burp Suite 等

本記事ではステップ1〜3で使う3つのOSSツールを紹介します。ステップ4の手動診断で使うBurp SuiteやNessusは本格的な診断に有償ライセンスが必要なため、今回は対象外としています。

1. Nmap — ポートスキャン・サービス検出

概要

Nmap(Network Mapper)は、ネットワーク探索とセキュリティ監査のためのOSSツールです。対象ホストの開放ポートや稼働しているサービス・バージョンを調べられます。診断の最初のステップとして「どんなサービスが外から見えているか」を把握するのに使います。

ポートの状態

Nmapはスキャン結果としてポートの状態を以下の3つで表します。

状態 意味
open ポートが開いており、サービスが応答している
closed ポートは到達可能だがサービスが起動していない
filtered ファイアウォール等によりパケットがブロックされている

filtered のポートが多い場合、ファイアウォールが適切に機能していると判断できます。

よく使うコマンド例

# バージョン検出 + デフォルトスクリプト実行
nmap -sV -sC <ターゲットIP>

# OS推定も含める
nmap -sV -O <ターゲットIP>

# 特定ポートだけ指定
nmap -p 80,443,8080 <ターゲットIP>

# UDPスキャン(時間がかかるため範囲を絞るのが実用的)
nmap -sU -p 53,161 <ターゲットIP>

出力例

Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for example.com (93.184.216.34)
Host is up (0.023s latency).

PORT     STATE    SERVICE  VERSION
22/tcp   open     ssh      OpenSSH 8.9p1 Ubuntu (protocol 2.0)
80/tcp   open     http     nginx 1.18.0
443/tcp  open     ssl/http nginx 1.18.0
8080/tcp filtered http
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

open なポートとそのサービス・バージョンが一覧で確認できます。上記の例では nginx 1.18.0 が動いていることがわかるため、そのバージョンに既知の脆弱性がないかを次のステップで調べます。8080/tcpfiltered のため、ファイアウォールでブロックされていると推定できます。

主なオプション解説

  • -sV : 稼働しているサービスのバージョンを検出します。古いバージョンのミドルウェアが動いていないかの確認に使います。
  • -sC : デフォルトのNSE(Nmap Scripting Engine)スクリプトを実行します。HTTPのタイトル取得やSSH認証方式の確認など、簡易的な追加情報を自動で収集してくれます。
  • -O : OS推定を行います。TTL値やTCPウィンドウサイズ等の特徴からOSを推定します。
  • -sS : TCP SYNスキャン(root権限実行時のデフォルト)。3ウェイハンドシェイクを完了せずにスキャンするため高速です。

NSEスクリプトの活用

NmapにはNSEという仕組みがあり、目的に応じたスクリプトを追加で実行できます。

# 特定のスクリプトを指定して実行
nmap --script=http-headers <ターゲットIP>

# HTTPに関連するスクリプトをまとめて実行
nmap --script=http-* -p 80,443 <ターゲットIP>

脆弱性検査用のスクリプト(vulnカテゴリ)もありますが、対象への影響が出る場合があるため、使用には注意が必要です。

2. testssl.sh — SSL/TLS設定チェック

概要

testssl.sh は、サーバーのSSL/TLS設定を診断するシェルスクリプトのツールです。古いプロトコルや弱い暗号スイートが有効になっていないか、既知脆弱性への対応状況を確認できます。443番ポートのHTTPS以外にも、SMTP・IMAPなどSTARTTLSを使うサービスにも対応しています。

チェック項目

  • 対応プロトコル : SSLv2、SSLv3、TLS 1.0、TLS 1.1 が有効になっていないか(これらは非推奨)
  • 暗号スイート : RC4、DES、エクスポート暗号などの弱い暗号が有効になっていないか
  • 証明書 : 有効期限、署名アルゴリズム(SHA-1等の弱いものが使われていないか)
  • 既知脆弱性 : Heartbleed、POODLE、BEAST、ROBOT等への対応状況

よく使うコマンド例

# 基本スキャン(すべての項目をチェック)
./testssl.sh https://example.com

# 脆弱性チェックのみ
./testssl.sh --vulnerable https://example.com

# プロトコルのみチェック
./testssl.sh --protocols https://example.com

# 暗号スイートのチェック
./testssl.sh --ciphers https://example.com

# JSON形式で結果を保存
./testssl.sh --jsonfile result.json https://example.com

# STARTTLSを使うSMTPのチェック
./testssl.sh --starttls smtp example.com:25

出力例

 Testing protocols via sockets

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      offered (deprecated)
 TLS 1.1    offered (deprecated)
 TLS 1.2    offered (OK)
 TLS 1.3    offered (OK)

 Testing vulnerabilities

 Heartbleed (CVE-2014-0160)   not vulnerable (OK)
 CCS (CVE-2014-0224)          not vulnerable (OK)
 POODLE, SSL (CVE-2014-3566)  not vulnerable (OK)
 BEAST (CVE-2011-3389)        VULNERABLE -- but also supports TLS 1.3
 ROBOT (CVE-2017-13099)       not vulnerable (OK)

 Testing cipher categories

 NULL ciphers (no encryption)  not offered (OK)
 RC4 (CVE-2013-2566)          not offered (OK)
 LOW: 64 Bit + DES, RC2       not offered (OK)

上記の例では TLS 1.0/1.1 が offered (deprecated) と表示されており、無効化が推奨されます。BEAST については VULNERABLE と出ていますが、TLS 1.3 もサポートしているため実際のリスクは限定的です。このように検出結果の深刻度は文脈と合わせて判断することが重要です。

出力の見方

testssl.sh の出力では、問題の深刻度が色と記号で表示されます。

表示 意味
OK(緑) 問題なし
WARN(黄) 注意が必要
NOT ok(赤) 問題あり・修正推奨
VULNERABLE(赤) 既知の脆弱性あり

たとえば TLS 1.0/1.1 が有効な場合は offered (deprecated) と表示され、無効になっていれば not offered (OK) と表示されます。

よくある検出事項

  • TLS 1.0/1.1 が有効になっている(PCI DSS等の基準では無効化が必要)
  • SHA-1署名の証明書が使われている
  • 証明書の有効期限が近い、または切れている
  • 弱い暗号スイート(RC4等)が有効になっている

3. dirsearch — ディレクトリ・ファイル探索

概要

dirsearchは、Webアプリケーションの公開されていない隠しディレクトリやファイルを探索するツールです。バックアップファイル(.bak.old)や管理画面(/admin/wp-admin)が意図せず公開されていないかを確認できます。

動作の仕組み

ワードリスト(辞書ファイル)に記載されたパスに対してHTTPリクエストを送信し、レスポンスコードによって存在を判定します。

ステータスコード 意味
200 OK ファイル・ディレクトリが存在する
301/302 リダイレクトされる(存在する可能性あり)
403 Forbidden 存在するがアクセス拒否されている
404 Not Found 存在しない

403 のパスも「存在はしている」ため、診断対象として記録しておく必要があります。

よく使うコマンド例

# 基本スキャン
python3 dirsearch.py -u https://example.com

# 拡張子を指定(PHPサイトの場合など)
python3 dirsearch.py -u https://example.com -e php,html,bak,old

# スレッド数を増やして高速化
python3 dirsearch.py -u https://example.com -t 30

# 結果をファイルに保存
python3 dirsearch.py -u https://example.com -o result.txt

# カスタムワードリストを使用
python3 dirsearch.py -u https://example.com -w /path/to/wordlist.txt

出力例

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, html, bak | HTTP method: GET | Threads: 25
Target: https://example.com/

[10:23:46] 200 -    1KB - /index.php
[10:23:47] 403 -  276B  - /.git/
[10:23:48] 200 -   12KB - /admin/
[10:23:49] 200 -    4KB - /backup.zip
[10:23:51] 301 -  178B  - /images  ->  https://example.com/images/

上記の例では /admin//backup.zip200 OK で返っており、管理画面とバックアップファイルが外部からアクセスできる状態です。また /.git/403 ですが存在は確認できるため、Gitリポジトリが公開ディレクトリに残っている可能性があります。

主なオプション解説

  • -e : スキャン対象の拡張子を指定します。対象サイトで使われている言語・フレームワークに合わせて指定するのが効果的です。
  • -t : 並列スレッド数です。増やすほど速くなりますが、対象サーバーへの負荷も上がります。
  • -w : 使用するワードリストを指定します。デフォルトのリストで見つからない場合、用途に特化したリストに切り替えることがあります。
  • --exclude-status : 除外するステータスコードを指定します。大量の 404 が出る場合に --exclude-status 404 で結果を絞り込めます。

見つかると問題になるパスの例

パス リスク
/admin/wp-admin 管理画面への不正アクセス
/.git ソースコードの漏洩
/backup.zip/db.sql バックアップファイルの漏洩
/.env 環境変数(APIキー等)の漏洩

おわりに

3つとも無料・OSSで使えるツールです。

ツール 用途 対象
Nmap ポートスキャン・サービス検出 ネットワーク・ホスト全般
testssl.sh SSL/TLS設定診断 HTTPS・STARTTLSサービス
dirsearch 隠しディレクトリ・ファイル探索 Webアプリケーション

有償ツール(Burp Suite・Nessus等)と組み合わせることが多いですが、まず無料ツールで試してみる入口として最適です。自分が管理するシステムの診断に、ぜひ活用してみてください。

参考