サマリ
Nmapというネットワークの調査や監査などに使用するオープンソースのツールを使ってポートスキャンにトライしてみました。
背景
資格を勉強する中で、セキュリティを脅かす手法としてポートスキャンを何度も目にしましたが、実際どうやるのか気になったのでやってみることにしました。
ゴール
NmapをWindowsにインストールし、TCP/UDPなどプロトコル単位、特定のポート番号単位でのスキャン、またOSのバージョン確認を行う
対象読者
- ポートスキャンに興味がある方
- Nmapに興味がある方
- 自分(備忘用)
前提
必須:WindowsPC
必須:インターネット環境
推奨:基礎的なネットワークの知識(TCP/UDPや、ポート番号についておおまかなイメージがつかめていること)
環境
- ホストOS:Window10 Home
- Nmap:7.93
手順
そもそもNmapとは
Wiki先生によると、以下とのことです。
nmapはGordon Lyonによって書かれたセキュリティスキャナである。ポートスキャン機能だけでなく、OSやバージョンの検出機能、サービスおよびそのバージョンの検出機能など、多くの機能を兼ね備えている。
名前は、ネットワーク上にどのような機器やサービスが動いているかという、ネットワークの地図を作成すること (Network Mapper) に由来する。
イメージつかみやすいです。(ほっ)
それではインストールしていきます。
Nmapのインストール
今回はこちらの記事を参考にさせていただきました。
公式ページからインストーラをダウンロードします。
(いかにも怪しげですね。。)
exeファイルをダブルクリックすると
Licence Agreementが出るので、I Agreeをクリック。
コマンドプロンプトでNmapのバージョン確認をして確かにインストールできていることを確認。
すんなりいってよかったです。。(ほっ)
Nmapでポートスキャン
コマンドオプションですが、
公式サイトにまとまってました(しかも日本語)。ありがたや~
しかもリファレンスガイドとして使い方もまとまっていますね、初心者に優しい~
該当ホストのポートスキャン
それでは、実際に使ってみます。
さっそく自宅のデフォルトゲートウェイ向けにポートスキャンをしました。
コマンドはnmap xx.xx.xx.xx
(xx.xx.xx.xxはIPアドレス)という非常にシンプルなものです。
すごい、簡単に空きポート(今回は53番と80番)がわかりますね…!(MACアドレスはお気持ちばかりに一応マスクしました)
STATEは以下の6つのようです。
open、closed、filtered、unfiltered、open|filtered、closed|filtered
ボリュームがあるので詳細はこちらの公式ページを参照ください。
見て少し気になったのは、closedであれば安心なのかと思いきや、そうではないということです。
以下公式ページ抜粋
closed(閉じた)ポートは、アクセス可能(Nmapのプローブパケットを受信したり応答したりする)だが、そこで受信待機しているアプリケーションはない。この種のポートは、あるIPアドレスでホストが稼動中であることを確認する場合(ホスト発見やpingスキャン)や、OS検出の一環として役に立つ場合もある。closedポートは到達可能なので、後にその一部が開放された場合は、スキャンの対象になる可能性がある。
ポートが閉じていること自体が情報になるんですね。これは勉強になります。
パケットフィルタの重要性を感じますね。。
ちなみに、GoogleのパブリックDNS(8.8.8.8)に対してコマンド実施した際の結果です。
Nmap scan report for dns.google(8.8.8.8)
とちゃんとGoogleのDNSのスキャン結果ですよというのが表示されています。おぉ~
53番と443番が空いていることがわかりますね。
ネットワーク内のホストを調べる
続いてネットワーク内でオンラインになっているホストを検索します。
nmap -sP xx.xx.xx.xx
です。
おお…すごい(感想が浅いんじゃ)
該当ホストのOSを調べる
nmap -O xx.xx.xx.xx
です。
Windows10と確かにでていますね。
バージョンまで推定できています。(実際は違うのですが)
ポート絞ってのスキャン
nmap -p 1-200 xx.xx.xx.xx
のように-pオプションの後ポートの範囲を指定するとその範囲内でスキャンができます。
該当のホストへのUDPポートを確認
nmap -sU xx.xx.xx.xx
です。
時間がかかってしまうため、-Fオプションを付けて実行しています。(高速に実行できるようです)
該当のホストへのTCPポートを確認
nmap -sS xx.xx.xx.xx
です。
今回も-Fオプションを付けて実行しています。
該当のホストへのTCPコネクションを確認
nmap -sT xx.xx.xx.xx
です。
-sSと-sTの違いですが、公式ページによると、おおまかにはTCPコネクションを確立するかどうかの違いのようです。
基本は-sSを使用して、それが難しい場合は-sTを使うみたいです。
-sSオプションの項目抜粋
SYNスキャンはデフォルトであり、正当な理由で最もよく使用されるスキャンオプションである。強制的なファイアウォールによる妨害のない、高速なネットワーク上では、数千ポート毎秒という高速なスキャンを実行できる。SYNスキャンは、TCPコネクションを確立しないため、比較的秘匿性が高い。
-sTオプションの項目抜粋
TCP Connect()スキャンは、SYNスキャンを選択できない場合のデフォルトのTCPスキャンタイプである。
と、いうわけで
やれることはほかにもたくさんありますが、本日はこの辺でご容赦ください。。
主要なオプションはこちらの記事を参考にさせていただきました。
ありがとうございました。
参考
また、いろいろ試して最後に気づきましたが、Nmapの基本についてはこちらの記事が非常によくわかりやすくまとめてくださっていました。
最初に気づいていれば…orz
結果
NmapをWindowsにインストールし、いろいろスキャンできました(雑)
学び
ツール導入も含めて意外と簡単にスキャンできることは個人的には新しい発見でした。
まとめ
今後はDDoSなど他の攻撃手法についても(もちろん遊び環境で)いろいろ試せないか勉強していきたいと思います。