1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kali Linux2022.1 でハッキングラボをつくってみる8 Wiresharkでパケットキャプチャ3 nmapのポートスキャンを解析する

Last updated at Posted at 2022-05-13

はじめに

「ハッキング・ラボのつくりかた」(IPUSIRON著)のP.440-460を参考にした記事となります。
ただし、ネットワークの構成が同書の構成とは異なります。

同書では、

  • Windows10(ホストOS) : 10.0.0.1
  • Kali(ゲストOS) : 10.0.0.2
  • Metasploitable(ゲストOS) : 10.0.0.5
  • DHCPサーバー : 10.0.0.100

となっていますが、

  • Ubuntu系ディストリビューション(ホストOS) : 192.168.56.1
  • Kali(ゲストOS) : 192.168.56.2
  • Metasploitable(ゲストOS) : 192.168.56.5
  • DHCPサーバー : 192.168.56.50

とします。

wireshark &コマンドを実行するか、アイコンをクリックすることで、Wiresharkを起動させます。インターフェースはホストオンリアダプターが接続されているものを指定して、キャプチャを開始します。

注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。

nmapのポートスキャンの種類の確認

  • TCPフルコネクトスキャン
  • TCP SYNスキャン
  • UDPスキャン
  • Pingスキャン
  • FINスキャン
  • Xmasスキャン
  • Nullスキャン
  • ACKスキャン

TCPのスキャン

TCPフルコネクトスキャン

-sTオプション
開いているポート80に次のコマンドを実行する。

nmap -sT -p 80 192.168.56.1

コマンド実行後のWiresharkの画面
VirtualBox_kali-linux-2022.1-wirenmap1.png
フロー図を表示する。メニューバーの「統計」>「フローグラフ」をクリックする。
VirtualBox_kali-linux-2022.1-wirenmap3.png
「フロー種別」はTCP Flowsを選択する。
上の画像を見ると、
192.168.56.2 → 192.168.56.1に向けて、 SYN ACK RST,ACKの通信が
192.168.56.1 → 192.168.56.2に向けて、SYN,ACKの通信が合計4回行われていることがわかる。
KaliLinuxからターゲットにSYNパケットが送られた後、その応答としてSYN,ACKが返される。
その後、KaliLinuxからターゲットにACK RST,ACKパケットが送られて、コネクションが確立する。
このスキャンは、ターゲットのサービスにログが残る。ポートスキャンの露見につながる。

今度は閉じているポート5555に次のコマンドを実行する。(正しくは、閉じているのではなく存在しないサービスのポート番号)

nmap -sT -p 5555 192.168.56.1

VirtualBox_kali-linux-2022.1-wirenmap4.png
192.168.56.2 → 192.168.56.1 SYN
192.168.56.1 → 192.168.56.2 RST,ACK
の2回の通信で終わってしまう。
ターゲットからRST,ACKが返されて、接続が拒否される。

最後に、ファイアフォール(ufw)でフィルタリングされているポートに対して次のコマンドを実行する。

nmap -sT -p 80 192.168.56.1

VirtualBox_kali-linux-2022.1-wirenmap5.png
192.168.56.2 → 192.168.56.1にSYNパケットが送信されるのみで、応答はなし。

TCP SYNスキャン

-sSオプション
開いているポート443に次のコマンドを実行する。

sudo nmap -sS -p 443 192.168.56.1

VirtualBox_kali-linux-2022.1-wirenmap6.png
192.168.56.2 → 192.168.56.1からSYN SYN,ACK RSTパケットが送られている。
最後にRSTパケットが送られているので、KaliLinuxからターゲットに接続を試みた後に、Kali自身から接続を遮断している流れ。
パケットのやり取りが、前述のフルコネクトスキャンと比較して少なくなるので、時間の節約になる。また、ターゲットのサービスのログに記録されない。

UDPスキャン

-sU
開いているポート111に次のコマンドを実行する。

sudo nmap -sU -p 111 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap7.png
応答があった。ポートは開いているが、最後のICMPポート到達不能エラーは、パケットの方向が逆になっている。ポート識別の判断材料にはならない。

今度は、閉じているポート2050に次のコマンドを実行する。

sudo nmap -sU -p 2050 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap8.png
"Destination unreachable"とICMPポート到達不能エラーがかえってきたら、ポートが閉じていると判断する。

最後に、ファイアウォール(ufw)にフィルタリングされたポート631につぎのコマンドを実行する。

sudo nmap -sU -p 631 192.168.56.1

VirtualBox_kali-linux-2022.1-wirenmap9.png
ターゲットが応答を返さない。
nmapの出力では、

PORT STATE SERVICE
631/udp open|filtered ipp

となっている。

Pingスキャン

-sP または -sn

対象ネットワークのIPアドレスを総当りでPingすることをPingスイーツと呼ぶ。
次のコマンドを実行。

nmap -sn 192.168.56.5
nmap -sP 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap10.png
ARPのパケットのほか、TCPのパケットも見られる。
--send-ipオプションを付けて、WANの端末を対象としてPingスキャンをする時の動きをLAN内の再現できる。

nmap -sn 192.168.56.5 --send-ip
nmap -sP 192.168.56.5 --send-ip

VirtualBox_kali-linux-2022.1-wirenmap11.png
--send-ipオプションを付けていないときとあまり変わらないような気がする・・・。
前者も後者もtcpパケットは送っていないはずなのだが、tcpパケットのやり取りが成立している点が奇妙。同書p.452に記述されているような結果にはなっていない。

特殊なパケットによるスキャン

特殊なパケットを送り、その反応からサービスが動いているかを確認するスキャン

FINスキャン

-sFオプション
FINパケットは、通常、通信を終了させたいときに使用されるが、このスキャンは、通信前にFINパケットを送信して、ターゲット端末の様子を観察する。

開いているポート21に次のコマンドを実行する。

sudo nmap -sF -p 21 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_fin.png
ターゲットからの応答はない。ポートが開いている場合、通常は応答がない。ファイアウォールなどによって、フィルタリングされている場合も応答はない。WindowsもFINスキャンに対して反応しない。

次は、閉じているポート24に次のコマンドを実行する。

sudo nmap -sF -p 24 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_fin2.png
表示が分かりづらいが、"RST,ACK"と応答があるので、ポートが閉じていると判断できる。

Xmasスキャン

-sXオプション
これは、TCPパケット(FIN/URG/PUSHの3つのフラグを設定したもの)を送信するもの。
FINは通信を終了させるフラグ、URGは緊急を要するときに用いるフラグ、PUSHはアプリケーション層へ引きつぐデータを持つパケットであることを示す。
開いているポート21に、次のコマンドを実行する。

sudo nmap -sX -p 21 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_Xmas.png

送りっぱなしで、ターゲットからの応答はない。

次は、閉じているポート24に、次のコマンドを実行する。

sudo nmap -sX -p 24 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_Xmas2.png

応答があった。ポートが閉じていると判断できる。

Nullスキャン

-sNオプション
このオプションは、何のフラグも設定しないでTCPパケットを送信する。
-snオプション(Pingスキャン)と見た目が似ているが、別物。

開いているポート21に、次のコマンドを実行する。

sudo nmap -sN -p 21 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_null1.png
パケットをターゲットに送りっぱなしの状態。

次は、閉じているポート24に、次のコマンドを実行する。

sudo nmap -sN -p 24 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_null2.png
応答がある。

同書p.457に、

フロー図の画面にて、この特殊なTCPパケットだけを表示するために、「Flow Type」を「TCP Flows」にすると、Wiresharkが落ちる

とあるが、そういったことは起こらなかった。どうやら、バグが修正されたっぽい。

ACKスキャン

-sAオプション
このスキャンは、ポートが閉じているか否かを判別せずに、ファイアウォールのルールセットを明らかにするために用いられ、ファイアウォールがステートフルか否か、どのポートがフィルタされているかなどを判別する。
開いているポート21に、次のコマンドを実行する。

sudo nmap -sA -p 21 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_ack1.png
RSTフラグのパケットが返される。

次は、閉じているポート24に、次のコマンドを実行する。

sudo nmap -sA -p 24 192.168.56.5

VirtualBox_kali-linux-2022.1-wirenmap_ack2.png
ポートが開いているときと同じように、RSTフラグのパケットが返される。

最後に、ファイアフォール(ufw)でフィルタリングされているポートに対して次のコマンドを実行する。

sudo nmap -sA -p 80 192.168.56.1

VirtualBox_kali-linux-2022.1-wirenmap_ack3.png
パケットは送りっぱなしで、応答はない。

ポートが開かれているまたは閉じている場合は、nmapの出力に"STATE unfiltered"と表示され、ファイアウォール(ufw)にフィルタリングされている場合は、"STATE filtered"と表示される。

おわりに

まとめるとこんな感じです。

TCPフルコネクトスキャン
TCPのポートスキャンとしてスタンダード
ポートが開いていたら4回、閉じていたら2回、双方向でパケットをやり取りする。
フィルタリングされていたら、パケットの流れは一方通行のみ。
サービスを確実に特定できるが、後述のTCP SYNスキャンと比べて時間がかかる。

TCP SYN スキャン
TCPのポートにSYN要求だけを行って、途中で接続を打ち切ってしまうポートスキャン。
ポートが開いていたら3回、閉じていたら2回、双方向でパケットをやり取りする。
フィルタリングされていたら、パケットの流れは一方通行のみ。
前述のTCPフルコネクトスキャンの簡略版といった感じ。たくさんのポートをスキャンする際の、時間短縮に。

UDPスキャン
UDPのポートにスキャンを行う。
UDPはTCPとは違い、パケットがきちんと到達したかどうかは保証しない。
それゆえ、スキャン結果も信頼性に欠ける。また、TCPをスキャンと比較して時間がかかる。

Pingスキャン
ネットワーク内の端末にpingを送るスキャン。
ネットワークに接続している端末のIPアドレスなどの情報を調べる。pingを行うだけなので、ポートスキャンにはならず、ターゲットのログにも残りにくい。

FINスキャン
FINフラグを設定したTCPパケットを送るスキャン。
開いているポート、フィルタリングされているポートに送っても、応答はない。
閉じているポートに送ると、RST,ACKを返して応答する。

Xmasスキャン
FIN/URG/PUSHフラグを設定したTCPを送るスキャン。
開いているポートに送っても、応答はない。
閉じているポートに送ると、RST,ACKを返して応答する。

Nullスキャン
何のフラグも設定しないTCPパケットを送るスキャン。
開いているポートに送っても、応答はない。
閉じているポートに送ると、RST,ACKを返して応答する。

3つの特殊なパケットによるスキャンは、基本的に同じような振る舞いをする。
この3つのスキャンは、特定のファイアウォール、フィルタリングをすり抜けやすかったり、他のスキャン方法よりも秘匿性が高い。

Ackスキャン
ポートが、ファイアウォールによってフィルタリングされているかどうかを調べるスキャン。
フィルタリングされていないポートに送ると、RSTを応答する。
フィルタリングされているポートに送ると、応答はない。

参考にしたもの
「ハッキング・ラボのつくりかた」(IPUSIRON著)
「情報ネットワークの基礎」(田坂修二)
「図解でわかるネットワークのすべて」(小泉修)

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?