今回はnmapについて書きたいと思います。nmapはIPアドレスやドメインからそのサービスでどのポートが開いているかを調査することができます。

NMAP

ハッカーやネットワークエンジニアが行うことは基本的なNMAPを理解することです。NMAPは非常にシンプルなツールで、20年以上前から存在しており、基本的に何をするかというとターゲットにアクセスして、どのポートが開いているかを判断しようとします。ポートの背後にあるサービスを攻撃しているためそのシステムで何が実行されているかを知る必要があります。これは積極的な査察で最初に行うことの一つであり、そこから得られる情報はたくさんあります。サードパーティーの情報源からの受動的査察ですがポートが開いている場合はSHODANから入手できます。SHODANは少し古い場合もあります。SHODANでどのポートが開いているかを確認するとSHODANが世界をスキャンして調査を行うことがあります。追いつくまでに数週間かかるため、データが少し古い場合があります。

Nmap -hのヘルプ画面より多くの情報がありますが、実際には非常に単純なものに要約できます。

ヘルプ画面には下記のようなサンプルが書いてあります。

別の仮想マシンでKaliを起動します。

IPアドレスを確認してNMAPを使用します。

エンジニアの方はpingをブロックしている方もありますのでpingを送信してホストまで通らない表示されたからといってホストが起動していないという意味ではなく意図的にブロックしている可能性があります。 TCPにはインターネット接続に最も広く使われているプロトコルです。TCPには3ウェイハンドシェイクというものがあります。

最初に行われるのはフラグを付けたパケットを送信することです。SYNフラグを設定します。クライアントからサーバーにSYNフラグを送信して「~したい」と表示します。サーバーがそのポートで接続を受け入れている場合はそのIPアドレスでSYN-ACKが返されるのでSYNフラグを設定してパケットを送信します。SYN-ACKには二つのフラグが設定されており、戻ってきてACKを付けてすべてのパケットを送信します。ACKが接続されるすべてのパケットを設定します。これがTCP/IPの3ウェイハンドシェイクと呼ばれるものです。これは作業を開始する前に任意のサーバーに接続する方法です。トラフィックをサーバーに送信すると最初に行われるのは、この3ウェイハンドシェイクを通過する必要があるためです。これはハッカーによって有益な情報となる可能性があります。ネットワークエンジニアの場合、この情報を使用してこのシステムに関するポートやそのほかの情報を判断できるため、3ウェイハンドシェイクとは何かについて知っているのでTCP/IPヘッダを見てみましょう。下記がTCP/IPヘッダーです。

これはIPヘッダーとTCPの組み合わせです。これらは二つの別個のプロトコルです。インターネットプロトコルとTCPプロトコルがあり、通常、これらは一緒に機能するわけではありませんが一緒に機能します。IPプロトコルに関して、最も重要なことは送信元アドレスと宛先アドレスがあるということです。

 上記の表にあるFINフラグは接続を閉じたいことを意味します。RSTフラグはポートが開いてなく、使用できませんと伝える方法です。NMAPはこの情報を使用して、ターゲットがどのようなものであるかを判断できるように構築されています。  ほかのマシンの簡単なスキャンを実施します。これは最も単純なタイプのスキャンです。sTスキャンです。スキャンしてTCPスリーウェイハンドシェイクを使用します。このコマンドが最も信頼性が高く、最良の情報が得られます。各ポートに送信し、スリーウェイハンドシェイクを試行します。SYN→SYN-ACK→ACKの3ウェイハンドシェイクを行うことができない場合はポートが閉じられています。

あるドメインを試した場合です。開いているポートが表示されます。

ポートが開いていることが分かっている場合は上記のように一つのポートだけチェックする-pコマンドを入力します。ポート番号の指定をせずに実行すると上位1,000個のポートがチェックされます。16ビットがあるということはポートの数は65,536個と多くのポートがあります。すべてのポートをスキャンするのではなく単に上位1000個をチェックしてみましょう。下記の内容でDNSが開いているか確認できます。

Kaliや他の多くのLINUXやUNIXに組み込まれているnetcatは非常にシンプルなツールでリッスンまたは接続用のポートを開くことができます。

別のKaliを起動して下記のコマンドを入力してポート53を開きます。誰かが接続するのを待っているのでNMAPを実行すればスキャンを正しく実行して接続できます。

Nmapはどのポートが開いているのかを検出できる方法です。完ぺきではありませんがそこに何があるのかを判断できる優れたシンプルなツールです。

Nmapの結果としてポートが解放や閉じられている場合とフィルター済みと表示される場合があり、これはそこにファイアウォールがあることを意味するか、フィルタリングされていることを表示されています。上記の画面ではポート53が開いていてそれがドメインサーバーまたDNSサーバーであることがわかります。

 より正確な表示を取得したい場合は-Aを使用します。各ポートが調査され、どのサービスが実行されているか正確に判断することができます。どのバージョンが実行されているかもわかります。ネットワークエンジニアは任意のポートに任意のサービスを配置できるため、正しくない可能性もあります。  単に3ウェイハンドシェイクを送信するだけではなく、実際に何が起こっているかを判断するために調査しています。

バージョンや使用しているOSも教えてくれます。 WebサーバーにはApache、NGINX、IISがあります。Apacheは世界で最も広く使用されているWebサーバーです。NGINXは高速で軽い速度が特徴です。Apacheは25年以上存在しており、今でも最も広く使用されています。

まとめ

今回はサーバーの情報を収集するNMAPについて調べました。攻撃相手の情報を収集する基本的なコマンドです。TCP/IPの基本の3ウェイハンドシェイクについても仕組みを書きました。nmapを覚えることがハッキングの第一歩かもしれません。