どんなことをやってるかはなんとなくわかるけど、実際にどうパケットがやり取りされてスキャンされているのかはわからない。。
今回はTCPフルコネクトスキャンをnmapで行い、その通信をWireshark で解析しパケットの中身を見てみたいと思います。
TCPフルコネクトスキャンとは?
はじめに、そもそもTCPフルコネクトスキャンとはなんでしょうか。TCPのポートが開放されているかをスキャンするということはわかりますが、「フルコネクト」は何を指しているのでしょうか。
フルコネクトスキャンとは、、、実際の通信と同じやり取りを行うことでスキャンする方法のことのようです。
つまり、3Wayハンドシェイクを行いコネクションを確立することでポートが開放されていることを確認します。
3ウェイ・ハンドシェイク (スリーウェイハンドシェイク, three-way handshaking) とは、TCP などにおいて使用されている、接続(コネクション)を確立するための手順。
3ウェイ・ハンドシェイク
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Kali で Wireshark を起動する
今回は Kali から Metasploitable へTCPフルコネクトスキャンを行います。
Kali で Wireshark を起動してパケットキャプチャの取得を行います。
Wireshark を起動すると以下画面が表示されるので、Metasploitable と通信する「eth0」をクリックします。

するとパケットキャプチャの取得が始まるので、この状態で次に進みます。
nmap で TCP フルコネクトスキャンを行う
パケットキャプチャの取得を開始したので、次のコマンドで TCP フルコネクトスキャンを行います。
root@kali:~# nmap -sT -p 445 10.0.0.5
「-sT」オプションを付与すると TCP フルコネクトスキャンを行います。
「-p 445」オプションで、スキャン対象のポートを 445 番に限定しています。
「10.0.0.5 」は Metasploitable の IP アドレスです。
root@kali:~# nmap -sT -p 445 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 09:16 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00073s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds
root@kali:~#
スキャンの結果「open」となっていることがわかりました。
スキャンが終わったので、Wireshark のパケットキャプチャの取得を停止させます。■ボタンをクリックすれば停止できます。

パケットキャプチャを解析する
それでは、Wireshark で通信の流れを見ていきます。
まず、確認しやすいように表示のフィルタリングを行います。今回は大した数ではないですが実際の通信環境では膨大なパケット数の中から解析を行っていくため、フィルタリングは必須です。
今回は IP アドレスでフィルタリングを行います。
フィルタに「ip.addr == 10.0.0.5」と入力し Enter を押下します。

すると、上図のように 10.0.0.5 とやり取りしたパケットのみにフィルタリングされました。
この状態になれば、通信が以下の流れになっていることがわかります。
No. | 通信内容 |
---|---|
3 | Kali が Metasploitable に SYN パケットを送信 |
4 | Metasploitable が Kali に SYN/ACK を送信 |
5 | Kali が Metasploitable に ACK を送信 (この時点で3wayハンドシェイクが終了しコネクションが確立されるため、ポートが開放されていると判断) |
6 | Kali が Metasploitable に RST/ACK を送信しコネクションをクローズ |
より通信の流れを見やすくするために、フロー図を表示します。
Statics > Flow Graph でフロー図を表示させることができます。

Flow Type を TCP Flows に変更すると TCP のやり取りに限定させてフロー図を表示できます。

上述した通信のが流れが可視化されて、より可読性の高い内容となっていることがわかります。
ポートが閉じているときの通信の流れは?
ポートが開放しているときの通信の流れはわかりました。次に、ポートが閉じているときはどういった通信の流れとなるかを見ていきます。
開放されていない、24番ポートに対して TCP フルコネクトスキャンを実施します。
Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds
root@kali:~# nmap -sT -p 24 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 09:49 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00086s latency).
PORT STATE SERVICE
24/tcp closed priv-mail
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds
root@kali:~#
スキャンの結果「closed」となっていることがわかりました。
この通信を Wireshark で見てみます。


上記パケットキャプチャを見ると、通信の流れは以下となっていることがわかります。
No | 通信内容 |
---|---|
3 | Kali が Metasploitable に SYN を送信 |
4 | Metasploitable が Kali に RST/ACK を送信 |
ポートが開放されていないためコネクションは確立されず、スキャンの結果も closed となってしまいました。
ファイアウォールでポートが閉じられているときの通信の流れは?
最後に、Metasploitable のポートは開放されているが、ファイアウォールで遮断される場合の通信の流れを確認していきます。
Metasploitable 側で iptables を編集し、TCP の通信を遮断させます。
デフォルトでは全て許可する状態なので、以下コマンドを実行することで、Metasploitable に送信される TCP 通信をすべて DROP させます。
iptables -A INPUT -p tcp -j DROP
msfadmin@metasploitable:~$ sudo iptables -A INPUT -p tcp -j DROP
msfadmin@metasploitable:~$ sudo iptables --list
[sudo] password for msfadmin:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
msfadmin@metasploitable:~$
この状態で Kali から TCP フルコネクトスキャンを行います。
root@kali:~# nmap -sT -p 445 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 10:17 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00051s latency).
PORT STATE SERVICE
445/tcp filtered microsoft-ds
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.81 seconds
root@kali:~#
結果は「filtered」となりました。
この通信の流れを Wireshark で見ていきます。


ファイアウォールでDROPされているため応答がなく、フィルタリングと判断しています。通信の流れは以下です。
No. | 通信内容 |
---|---|
3 | Kali から Metasploitable に SYN を送信 |
4 | 応答がないため、Kali から Metasploitable に SYN を再度送信 |
※ iptables のルールは、その後必要ない場合は以下コマンドで削除しましょう。
msfadmin@metasploitable:~$ sudo iptables -D INPUT 1
まとめ
TCPフルコネクトスキャンを行った際の通信の流れを3パターン確認しました。
実際の通信の流れに即してポートの開放状況を判断しているため、結果が正確なのが特徴です。
しかし、ターゲット端末が「コネクションを確立した」「切断した」といった記録を残してしまうため、スキャンが行われたことがばれやすいことがデメリットと言えます。
このことが理由で、ポートスキャンとしては SYN スキャンと比較して使用頻度は高くないようです。
今回は以上です。
くどり
この記事は「ハッキング・ラボのつくりかた 第6章 」をベースに作成しています。購入リンクは以下です。
※Amazonアソシエイトを使用しています。
コメント