TCP SYN スキャンの通信の流れは?Wiresharkで解析してみる

ネットワーク

TCP フルコネクトスキャンに続いて、nmap を用いた TCP SYN スキャンの通信の流れを Wireshark で解析してみます。

TCP SYN スキャンとは?

名前の通り、TCP の SYN パケットを送信しその返答によりポートに開放状況を判断する手法です。
TCP フルコネクトスキャンでは 3way ハンドシェイクまで行っていたのに比べ、TCP SYN スキャンでは SYN パケットのみで判断するため、所要時間が大幅に短縮されます。
また、SYN パケットのみで判断するため、「ハーフオープンスキャン」と呼ばれることもあります。

nmap で TCP SYN スキャンを行う

実際に通信を発生させて、パケットキャプチャを解析していきます。
Wireshark によるパケットキャプチャの取得方法や解析については以下記事で説明しているので併せてご参照ください。

以下コマンドを Kali で実行することで TCP SYN スキャンを行うことができます。

root@kali:~# nmap -sS -p 445 10.0.0.5

「-sS」オプションを付与することで TCP SYN スキャンを行います。
「-p 445」オプションで、スキャン対象のポートを 445 番に限定しています。
10.0.0.5は Metasploitable の IP アドレスです。

root@kali:~# nmap -sS -p 445 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 21:16 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00070s 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.38 seconds
root@kali:~#

スキャン結果は「open」となっており、ポートは開放されていることがわかりました。

パケットキャプチャを解析する

Wireshark で通信の流れを見ていきます。

3回の通信のやり取りで終わっています。

No.通信内容
3Kali が Metasploitable に SYN パケットを送信
4Metasploitable が Kali に SYN/ACK を送信
(この時点でポートが開放されていると判断)
5 Kali が Metasploitable に RST/ACK を送信しコネクションをクローズ

TCP フルコネクトスキャンでは以下のように、Kali が Metasploitable に ACK を送信しており、1回多く通信を行っていました

No.通信内容
3Kali が Metasploitable に SYN パケットを送信
4Metasploitable が Kali に SYN/ACK を送信
5Kali が Metasploitable に ACK を送信
(この時点で3wayハンドシェイクが終了しコネクションが確立されるため、ポートが開放されていると判断)
6Kali が Metasploitable に RST/ACK を送信しコネクションをクローズ

冒頭で説明したように、TCP SYN スキャンでは SYN パケットの送信でポートの開放状況を判断します。
パケットキャプチャを見てもわかるように、Kali から SYN パケットを送信し、SYN/ACK パケットが返ってきたらポートが開放されていると判断しています。
そしてポートの開放状況が判断できたら、その後 RST パケットを送信し通信を終わらせています

ポートが閉じているときの通信の流れは?

ポートが開放しているときの通信の流れはわかりました。次に、ポートが閉じているときはどういった通信の流れとなるかを見ていきます。

開放されていない、24番ポートに対して TCP SYN スキャンを実施します。

root@kali:~# nmap -sS -p 24 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 21:30 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00064s 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 4.44 seconds
root@kali:~#

スキャン結果は「closed」となっており、ポートは閉じていることがわかりました。
この通信を Wireshark で見てみます。

上記パケットキャプチャを見ると、通信の流れは以下となっていることがわかります。

No通信内容
3Kali が Metasploitable に SYN を送信
4Metasploitable が Kali に RST/ACK を送信

ポートが開放されていないためコネクションは確立されず、スキャンの結果も closed となってしまいました。
この結果は TCP フルコネクトスキャンと同じです。

ファイアウォールでポートが閉じられているときの通信の流れは?

最後に、Metasploitable のポートは開放されているが、ファイアウォールで遮断される場合の通信の流れを確認していきます。

TCP フルコネクトスキャンの際と結果は変わるのか、見ていきたいと思います。

やり方は同様で、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 -sS -p 445 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 21:38 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00058s 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.57 seconds
root@kali:~#

結果は「filtered」となり、通信がフィルタリングされていることがわかりました。
この通信の流れを Wireshark で見ていきます。

こちらも TCP フルコネクトスキャン時と変わらず、ファイアウォールでDROPされているため応答がなく、その結果からフィルタリングされていると判断しています。通信の流れは以下です。

No.通信内容
3Kali から Metasploitable に SYN を送信
4応答がないため、Kali から Metasploitable に SYN を再度送信

※ iptables のルールは、その後必要ない場合は以下コマンドで削除しましょう。

msfadmin@metasploitable:~$ sudo iptables -D INPUT 1

まとめ

TCP SYN スキャンを行った際の通信の流れを3パターン確認しました。

TCP フルコネクトスキャンと通信の流れが異なるのは、ポートが開放されている場合のみということがわかりました。
コネクションが確立されるまでの動作は変わらないということですね。

また、コネクションが確立されないため、「コネクションが確立された」「コネクションが切断された」といったログがターゲット端末に残らないことが特徴です。
このことから、TCP SYN スキャンは 「ステルススキャン」とも呼ばれます。

ハッキングでは攻撃がばれないことが肝要のため、TCP ポートスキャンでは TCP SYN スキャンが使われることが多いようです。

今回は以上です。

くどり

この記事は「ハッキング・ラボのつくりかた 第7章 」をベースに作成しています。購入リンクは以下です。
※Amazonアソシエイトを使用しています。

コメント

タイトルとURLをコピーしました