はじめに
この実験では、オープンソースの Web サーバースキャナーである Nikto を使用して、潜在的な脆弱性を検出する方法を学びます。Nikto のインストールから、テスト用 Web サーバーのスキャン、結果の保存、そしてセキュリティ上の弱点を特定するための調査結果の分析までを体験します。この実践的な演習を通じて、Web セキュリティ評価の基礎となるスキルを身につけることができます。
Nikto のインストールと確認
脆弱性のスキャンを開始する前に、Nikto ツールをインストールする必要があります。このステップでは、システムのパッケージリストを更新し、apt パッケージマネージャーを使用して Nikto をインストールする手順を説明します。すべてのコマンドはターミナルで実行します。デフォルトの作業ディレクトリは /home/labex/project です。
まず、パッケージリストを更新して、リポジトリで利用可能な最新バージョンのソフトウェアを取得できるようにします。
sudo apt update
次に、Nikto をインストールします。-y フラグを使用すると、インストールの確認が自動的に行われるため、手動で「Y」を入力する必要がありません。
sudo apt install -y nikto
インストールが完了したら、ツールが正しくインストールされたことを確認するのが良い習慣です。バージョンの確認を行うことで、これをチェックできます。
nikto -Version
次のような Nikto のバージョン番号を表示する出力が表示されるはずです。正確なバージョンは異なる場合があります。
---------------------------------------------------------------------------
- Nikto v2.5.0
---------------------------------------------------------------------------
Nikto のインストールが正常に完了しました。これで Web サーバーのスキャンに進む準備が整いました。
基本的なスキャンの実行
Nikto がインストールされたので、次のステップはターゲットとなる Web サーバーに対して基本的なスキャンを実行することです。この実験では、テスト用の Web サーバーが環境内ですでに稼働しています。スキャンを行う前には、必ずターゲットがオンラインでアクセス可能であることを確認する必要があります。
まず、ターゲットの Web サーバーが動作していることを確認します。curl コマンドに -I フラグを付けて使用し、サーバーから HTTP ヘッダーのみを取得します。この実験のターゲットは http://localhost:8000 です。
curl -I http://localhost:8000
正常なレスポンスには HTTP/1.0 200 OK という行が含まれます。これは、サーバーがアクティブでリクエストを受け付ける準備ができていることを示しています。
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Date: ...
Content-type: text/html
Content-Length: 71
それでは、最初の Nikto スキャンを実行しましょう。ターゲットを指定するには -h(または -host)フラグを使用します。
nikto -h http://localhost:8000
Nikto がターゲットのスキャンを開始します。さまざまなテストが実行されるにつれて、ターミナルにリアルタイムで出力が表示されます。スキャンはターゲットに関する情報の表示から始まり、その後に発見された潜在的な脆弱性がリストアップされます。
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.
...
+ 1 host(s) tested
これで基本的な Web サーバーのスキャンが完了しました。次のステップでは、これらの結果を後で分析するために保存する方法を学びます。
スキャン結果をファイルに保存する
スキャンを実行してターミナルで出力を確認するのは素早いチェックには便利ですが、プロフェッショナルな評価においては、結果を保存することが不可欠です。保存されたレポートは発見事項の記録となり、修正のために他のメンバーと共有することができます。
Nikto では、スキャン結果をさまざまな形式で保存できます。このステップでは、レポートをプレーンテキストファイルとして保存します。出力ファイルを指定するには -o(または -output)フラグを使用します。
スキャンを再度実行しますが、今回は出力を nikto_report.txt という名前のファイルに書き込みます。
nikto -h http://localhost:8000 -o nikto_report.txt
スキャンは前回と同様に実行されますが、今回は画面に結果を表示するだけでなく、現在のディレクトリ(/home/labex/project)内の指定されたファイルにも保存されます。
スキャンが完了したら、ファイルとその詳細をリスト表示する ls -l コマンドを使用して、レポートファイルが作成されたことを確認します。
ls -l nikto_report.txt
新しいレポートファイルが表示され、ファイルサイズが 0 より大きいことが確認できるはずです。
-rw-rw-r-- 1 labex labex 1234 ... nikto_report.txt
ファイルの内容を素早く確認するには、head コマンドを使用して最初の 20 行を表示します。
head -n 20 nikto_report.txt
これにより、スキャンの概要と最初のいくつかの発見事項を含むレポートの冒頭部分が表示されます。これで、スキャンの永続的な記録が作成されました。
スキャンレポートの分析
スキャン結果が保存されたので、最後のステップはレポートを分析して、特定された脆弱性を理解することです。これには、レポートを読み込み、フィルタリングを行って最も重要な情報を抽出する作業が含まれます。
まず、cat コマンドを使用してレポート全体を表示できます。これは、Nikto が収集したすべての情報の全体像を把握するのに役立ちます。
cat nikto_report.txt
完全なレポートは長くなる可能性があるため、多くの場合、フィルタリングを行う方が効率的です。Nikto は、興味深い発見や潜在的な脆弱性を示す行の先頭に + 記号を使用します。grep コマンドを使用すると、これらの行だけを表示できます。
grep '+' nikto_report.txt
このコマンドはレポートをフィルタリングし、Nikto がフラグを立てたすべての項目を簡潔なリストとして表示します。
+ Target Host: localhost
+ Target Port: 8000
+ GET /: The anti-clickjacking X-Frame-Options header is not present.
+ HEAD /: SimpleHTTP/0.6 appears to be outdated (current is at least 1.2)
これらの発見事項を確認する際は、設定ミス(セキュリティヘッダーの欠落など)や機密ファイルの存在を示す説明に注意を払ってください。各発見事項は、さらなる調査を開始するための出発点となります。
まとめ
この実験では、Nikto のインストールに成功し、ターゲット Web サーバーに対して脆弱性スキャンを実行しました。スキャンの実行方法、発見事項のレポートファイルへの保存方法、および潜在的なセキュリティ問題を特定するための結果の分析方法を学びました。セキュリティツールのインストール、スキャンの実行、レポートの解釈といったこれらの基礎スキルは、サイバーセキュリティやペネトレーションテスト(侵入テスト)を始めるすべての人にとって不可欠なものです。



