【脆弱性診断の実例付き】Niktoコマンドの使い方から実践例まで徹底解説!

Webサーバーの脆弱性診断ツール
Nikto

外部に公開しているWebサーバーは脆弱性を突いたサイバー攻撃を受けやすく、継続的なセキュリティ対策が求められます。

そこで本記事では、Webサーバーに特化した脆弱性診断ツール「Nikto」の使い方から脆弱性診断の実例まで詳しく解説しています。

脆弱性が見つかった場合の対応策までフォローしているので、実践的なスキルアップに直結します。

目次

Niktoとは

Niktoは、Webサーバーに対する脆弱性を自動でスキャンするオープンソースの脆弱性診断ツールです。主にWebサーバーに対するセキュリティスキャンを目的としており、既知の脆弱性や設定ミス、不適切なファイル構成などを迅速に検出するために広く活用されています。

Niktoの主な機能
  • 既知の脆弱性のスキャン
  • デフォルトのファイルやディレクトリの検出
  • HTTPレスポンスヘッダの解析
  • バナー情報の収集
  • CGIスクリプトの脆弱性
  • SSL/TLS関連の簡易診断

最新情報は公式サイトをご確認ください。

Niktoは、2001年に最初のバージョンがリリースされ、2007年に現行のバージョン2系がリリースされました。現在はバージョン2系が主流で、最新版は2.5です。(2025年6月12日時点)

文献や資料では、バージョンを区別するためにNikto2という表記が使われることもありますが、通常「Nikto」とだけ書かれていてもバージョン2を指すことが一般的です。

主な特徴

Webサーバーに特化した脆弱性診断ツール

NiktoはWebサーバー専用のセキュリティスキャナで、既知の脆弱性を効率よく検出することを目的としています。具体的には、古いバージョンのソフトウェア、公開すべきでないファイルやディレクトリ、危険なファイルやスクリプトの存在などを調査し、攻撃対象となり得るポイントを洗い出します。

HTTPおよびHTTPSの両プロトコルに対応しており、主要なWebサーバーソフトを幅広くサポートしています。

実行は簡単なコマンド一つで可能で、詳細な出力結果が得られるため、初学者からセキュリティエンジニアまで広く利用されています。

既知の脆弱性に対応

Niktoの最大の特徴は、あらかじめ定義された脆弱性データベースに基づいて、スキャンを実施する点にあります。

  • 7,000種類以上の危険なファイルやプログラムを検出可能
    • 本来Webサーバーが公開すべきではない情報を含んでいたり、攻撃者が悪用できる危険なファイルやプログラムが存在しないか検査します。
  • 1,250種類以上のサーバーソフトについて、古いバージョンが使われていないかをチェック
    • 古いバージョンのソフトウェアには、セキュリティ上の脆弱性が内在していることが少なくありません。
  • 270種類以上のサーバーソフトに対して、バージョン特有の脆弱性を調査
    • そのサーバーの「特定のバージョンだけに存在する」セキュリティ問題を検出します。

ゼロから個別にテスト項目を作成する必要がなく、導入直後から一定レベルの診断が可能です。

CLIベースで自動化しやすい

Niktoはコマンドラインベース(CLI)で動作し、バッチ処理や自動化スクリプトへの組み込みにも適しています。特に継続的インテグレーション(CI)環境下において、簡易な脆弱性診断ステップとして導入するケースも増えています。これにより、開発と運用の両フェーズでセキュリティチェックを組み込む「DevSecOps」の一環として活用可能です。

オープンソース・無料

NiktoはPerlで開発されており、GNU General Public License(GPL)に基づいて配布されています。誰でも無償で利用でき、予算をかけずにセキュリティ診断を行いたい場合に最適です。

他のツールとの違い

Niktoの脆弱性スキャンは、HTTPリクエストベースでシンプルに行われ、「Webサーバーの脆弱性を手軽に洗い出したい」という場面において、非常に有効です。しかし、ゼロデイ脆弱性の検出やアプリケーションロジックの分析といった高度な分析は行えません。

一方、OWASP ZAPBurp Suiteはプロキシ型のインターセプトツールであり、ユーザーの操作を通じてWebアプリケーションの内部構造や挙動を解析できます。これらのツールは手動操作やスクリプトによるカスタムスキャンが可能で、クロスサイトスクリプティング(XSS)やSQLインジェクションといったアプリケーション層の脆弱性診断に適しています。

NiktoとOWASP ZAP、Burp Suiteの違い

項目NiktoOWASP ZAP
Burp Suite
検出方式シグネチャベースプロキシ+スキャン
対象範囲Webサーバーの設定/既知の脆弱性Webアプリケーション全体
UICUI(コマンドライン)GUI
検出可能な脆弱性の一例・既知の脆弱性
・ディレクトリリスティング
・バナー情報漏洩
・XSS
・SQLインジェクション
・CSRF

Niktoは「既知の問題」に対する検出に優れている一方で、「ゼロデイ脆弱性」や「ビジネスロジックの欠陥」など、より高度な診断には対応していません。そのため、Niktoはあくまで「一次診断」として位置づけ、より高度な分析には他のツールと併用するアプローチが効果的です。

この記事の検証で使用した環境

Niktoの実行マシンは、ペネトレーションテストや脆弱性診断に広く利用されているKali Linuxを使用します。Kali Linuxには、Niktoを含む脆弱性診断ツールが豊富にプリインストールされています。

スキャン対象のWebサーバーは、やられアプリであるOWASP BWAを使用します。OWASP BWAには、多数の脆弱性が意図的に組み込まれており、Niktoの動作検証には最適な環境です。

  • Nikto実行マシン
    • Kali Linux 2025.1
    • Nikto 2.5.0
    • Perl 5.40.1
  • スキャン対象マシン
    • OWASP BWA(Ubuntu 10.04)
    • 192.168.10.105

なお、Kali Linux、およびOWASP BWAは、Windows 10上のVirtualBoxに仮想マシンとして構築し、ローカルマシン内で検証を行っています。

Niktoの使い方

許可のない環境に対してNiktoを使用することは絶対にやめてください。たとえ善意の脆弱性診断であっても、不正アクセス禁止法などに抵触する可能性があります。

学習や練習を目的とする場合は、DVWAやOWASP Juice Shopなどの「やられアプリ」を利用しましょう。

インストール方法

ここでは、Niktoの一般的なインストール方法について解説します。DockerやWindowsなど、個別のインストール手順については、Nikto公式ドキュメントをご確認ください。

前提条件

NiktoはPerlで書かれており、Perl 5が実行可能な環境であれば基本的に動作します。

Niktoをインストール

NiktoはGitHub上でソースコードが公開されており、公式リポジトリから直接クローンする方法が一般的です。gitコマンドが使用可能であることを確認した上で、以下のコマンドを実行します。

git clone https://github.com/sullo/nikto

動作確認

インストールが完了したら、以下のコマンドで動作確認を行います。

cd nikto/program
perl nikto.pl -Version

バージョン情報が表示されれば、インストールは正常に完了しています。

Niktoはインストール後のビルドやコンパイルが不要で、スクリプトファイルnikto.plをそのまま実行する形となっているため、他のバイナリ型ツールと比較して導入が容易です。

Niktoの実行方法

一般的なシステムの場合

NiktoはPerlで書かれたCLIベースのツールであり、インストール後はターミナル上で以下のように実行できます。

$ perl nikto.pl -h [スキャン対象ホスト]

このコマンドを実行すると、Niktoは対象ホストに対して脆弱性スキャンを開始し、HTTPレスポンスを解析しながら既知の脆弱性、設定ミス、不適切なファイルやディレクトリの存在などを検出していきます。スキャンの結果はターミナル上にリアルタイム表示されます。

Kali Linuxの場合

Kali Linuxでは、niktoコマンドとして実行できるようにラッパースクリプトが用意されており、

$ nikto -h [スキャン対象ホスト]

で実行できます。

ラッパースクリプトの中身

$ which nikto
/usr/bin/nikto

$ cat /usr/bin/nikto
#!/usr/bin/env sh
set -e
exec /var/lib/nikto/nikto.pl "$@"

前述のとおり、この記事の検証ではKali Linuxを採用しているため、niktoコマンドを使用します。

基本的な使い方

Niktoを使用してWebサーバーに対する脆弱性スキャンを行うには、スキャン対象のホスト名またはIPアドレスを指定して実行します。

基本的な実行コマンド

$ nikto -h [スキャン対象ホスト]

なお、Niktoはデフォルトでポート80(HTTP)に対してスキャンを行いますが、ポート番号を指定したい場合は-pオプションを使用します。例えば、HTTPSの標準ポート443を対象としたい場合は、以下のように指定します。

$ nikto -h [スキャン対象ホスト] -p 443 -ssl

スキャン対象ホストに「ホスト」「ポート」「プロトコル」を指定することもできます。

$ nikto -h https://example.com:443/

ヘルプは-Helpオプション、バージョン確認は-Vオプションを使用します。

例)ヘルプ
$ nikto -Help

例)バージョン確認
$ nikto -V      # -Versionでも可

-hオプションは、ヘルプではなく、スキャン対象のホストの指定に使用します。

主なオプション

NiktoはコマンドラインベースのWebサーバー脆弱性スキャナであり、多様なオプションを指定することで柔軟なスキャンが可能です。以下では、実際の診断業務でよく使用されるオプションについて解説します。

-h(-host):スキャン対象のホスト

$ nikto -h [スキャン対象ホスト]    # -hostでも可

-p(-port):スキャン対象のポート番号

$ nikto -h [スキャン対象ホスト] -p [ポート番号]    # -portでも可

デフォルトでは80番ポートをスキャン対象としていますが、Webサービスが別のポートで稼働している場合、スキャン対象ポートを明示的に指定します。

-o(-output):スキャン結果をファイル出力

$ nikto -h [スキャン対象ホスト] -o [ファイル名]    # -outputでも可

スキャン結果をファイルに保存するためのオプションです。

拡張子に応じてHTML、CSV、TXTなどの形式で出力されます。-Formatオプションを使って、明示的に出力形式を指定することもできます。

-Format:スキャン結果のフォーマット

$ nikto -h [スキャン対象ホスト] -o [ファイル名] -Format [ファイル形式]

出力ファイルのフォーマットを明示的に指定します。

指定できるフォーマット
  • csv:カンマ区切り
  • json:JSON形式
  • htm:HTML形式
  • nbe:Nessus NBE形式
  • sql:Generic SQL形式
  • txt:テキスト形式
  • xml:XML形式

-ssl:SSL対応

$ nikto -h [スキャン対象ホスト] -p 443 -ssl

スキャン対象のWebサーバーのプロトコルがHTTPSである場合、-sslオプションを指定します。

Niktoを使って脆弱性診断を実施

Niktoは、Webサーバーに対する脆弱性診断を迅速かつ網羅的に行うためのツールとして広く利用されています。ここでは、実際にNiktoを使って対象のWebサーバーに脆弱性スキャンを実施する手順を解説します。

Niktoはセキュリティ診断において有効なツールですが、無断で他人のサーバーをスキャンすると不正アクセス禁止法に抵触する可能性があります。学習目的の場合、OWASP BWAなどの「やられアプリ」を使用しましょう。

Niktoを実行

以下のコマンドで、指定したWebサーバーに対して、脆弱性スキャンを開始します。

$ nikto -h http://192.168.10.105/peruggia/ -o output.html -Format htm

マシンスペックやサーバー環境にもよりますが、数分程度でスキャンが終了します。

診断結果

スキャンが終了すると、Niktoは以下のような脆弱性情報を出力します。(HTML形式の場合)

Niktoの実行結果

「X-Powered-Byヘッダが出力されている」「サポート切れのApacheを使用している」「既知の脆弱性(CVE-2003-1418)が含まれている」など、具体的なリスクが明示されます。

脆弱性が見つかった場合の対処方法

STEP

診断結果の精査

Niktoによるスキャンの結果、脆弱性が検出された場合、まずその内容を正確に理解することが重要です。Niktoは既知の脆弱性情報(例えば、特定のWebサーバーバージョンにおける既知のCVE)や危険な設定(ディレクトリリスティングの有効化、パスワード保護されていない管理画面の露出など)を元に診断を行います。

検出された各項目について、その深刻度、再現性、ビジネスへの影響を冷静に判断する必要があります。

STEP

脆弱性の有無を再確認

次に行うべきは、対象となる脆弱性の技術的根拠を確認することです。Niktoの出力には、該当するCVE番号やベンダーのセキュリティアドバイザリへのリンクが含まれている場合がありますので、まずはそれらの一次情報に目を通し、自社のシステムに本当に影響するのかを評価します。

例えば「Apache 2.4.49 におけるパストラバーサルの脆弱性(CVE-2021-41773)」が指摘された場合、対象のサーバーがそのバージョンであるかどうか、外部から該当の攻撃が成立するかを検証する必要があります。

STEP

対応策の実施

検証の結果、リスクが現実的であると判断された場合、速やかにパッチの適用、設定変更、機能の無効化といった具体的な対策を講じます。パッチの適用が困難な場合には、WAFによる攻撃遮断や、該当サービスのアクセス制御(たとえばVPN経由に限定するなど)を講じて、一時的なリスク軽減策を取ることが重要です。

STEP

再検証と継続的改善

最後に、脆弱性の対応後には、再度Niktoを用いて診断を行い、リスクが実際に軽減されたかを確認します。加えて、脆弱性管理のプロセスとして、検出→評価→対策→再検証という一連のフローを文書化し、継続的に改善していくことが、企業としてのセキュリティ体制の成熟に繋がります。

脆弱性への対応は単発的な作業ではなく、サイバー攻撃に対抗するための継続的なリスクマネジメントの一環であるという認識を持つことが重要です。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次