ネットワークセキュリティの診断や脆弱性調査において、ポートスキャンの役割は極めて重要であり、その中でもNmapは標準的なツールとして広く認知されています。
Nmapが提供する数多くのスキャン手法の中でも、特に利用頻度が高いのが「TCP SYNスキャン」です。
この手法は「ハーフオープン走査」とも呼ばれ、対象となるサーバーとの接続を完全に確立させないことで、効率的かつ目立ちにくい調査を可能にします。
本記事では、TCP SYNスキャンがどのような通信手順で動作し、なぜステルス性が高いと言われているのか、その仕組みを深く掘り下げていきます。
TCP SYNスキャンの基礎知識
TCP SYNスキャンは、Nmapにおいてデフォルトで使用されることが多い非常に強力なスキャン手法です。
このスキャンは、TCPプロトコルが持つスリーウェイ・ハンドシェイクの仕組みを巧妙に利用しています。
通常のTCP通信では、クライアントとサーバーの間で「SYN」「SYN/ACK」「ACK」という3段階のやり取りが行われます。
しかし、SYNスキャンではこの手順を最後まで完了させず、途中で通信を中断させるのが大きな特徴です。
接続を完了させないことから、「ハーフオープン(半分開いた状態)」なスキャンと呼ばれています。
この手法により、スキャン対象のサーバーに大きな負荷をかけることなく、高速にポートの状態を特定することが可能です。
また、多くのOSにおいて、接続が成立しなかった通信のログはアプリケーション層にまで到達しないため、痕跡が残りにくいという利点があります。
ただし、このスキャンを実行するには、生のパケット(Raw Socket)を構築して送信するための管理者権限(rootまたはAdministrator)が必要となります。
ハーフオープン走査の仕組みと動作原理
TCP SYNスキャンの具体的な動作を理解するためには、パケットのやり取りを順を追って確認する必要があります。
まず、Nmapはスキャン対象のポートに対して、接続要求を示す「SYNフラグ」を立てたパケットを送信します。
これを受け取ったターゲットサーバーの反応によって、そのポートがどのような状態にあるかを判断します。
ポートが「Open(開放)」の場合
ターゲットのポートでサービスが稼働しており、接続を受け入れている場合、サーバーは「SYN/ACKフラグ」を立てたパケットを返します。
このパケットは、「接続要求を了解し、自分からも接続を要求する」という意味を持ちます。
通常の通信であれば、ここでクライアント(Nmap側)が「ACK」を返して接続を確立します。
しかし、SYNスキャンにおいて、Nmapは「ACK」を返さず、代わりに「RST(リセット)フラグ」を送信して通信を強制終了させます。
これにより、サーバー側はコネクションが成立したとは認識せず、セッション情報が破棄されます。
ポートが「Closed(閉鎖)」の場合
ターゲットのポートでサービスが稼働していない場合、サーバーのOSは即座に「RSTフラグ」を含んだパケットを返信します。
この「RST/ACK」パケットを受け取った時点で、Nmapはそのポートが閉じていると判断します。
閉じているポートに対しては、それ以上のパケット送信は行われません。
ポートが「Filtered(フィルタ処理)」の場合
ターゲットサーバーの前段にファイアウォールやIPSが存在し、パケットを遮断している場合があります。
この場合、NmapがSYNパケットを送信しても、サーバーからの返信が一切届かない「タイムアウト」の状態になります。
あるいは、ファイアウォール側がICMPのエラーメッセージ(Destination Unreachableなど)を返すこともあります。
Nmapはこれらの反応を見て、ポートがフィルタリングされている(外部からの到達が制限されている)と結論付けます。
TCP接続スキャン(-sT)との比較
Nmapには、SYNスキャン(-sS)のほかに「TCP接続スキャン(-sT)」という手法も存在します。
これら二つの手法には、通信の完結性とログの残り方に明確な違いがあります。
| 比較項目 | TCP SYNスキャン (-sS) | TCP接続スキャン (-sT) |
|---|---|---|
| 接続の形態 | ハーフオープン(非完結) | フルコネクト(完結) |
| 必要な権限 | 管理者権限が必要 | 一般ユーザー権限で可能 |
| ステルス性 | 高い(ログに残りにくい) | 低い(接続が記録される) |
| 速度 | 非常に高速 | SYNスキャンよりは低速 |
TCP接続スキャンは、OSの標準的なconnect()システムコールを使用します。
そのため、ターゲットサーバーとの間でスリーウェイ・ハンドシェイクを最後まで完了させます。
接続が確立されると、Webサーバー(ApacheやNginx)などのアプリケーション側で「接続が確立された」というログが生成されます。
対してSYNスキャンは、接続が確立する直前で破棄するため、アプリケーション層のログには記録が残らないケースが多いのです。
SYNスキャンが「ステルス」である理由とその限界
SYNスキャンがステルススキャンと呼ばれる最大の理由は、アプリケーションログへの影響を最小限に抑えられる点にあります。
多くのサーバーアプリケーションは、TCP接続が正常に完了した時点、つまり3つ目のパケット(ACK)を受信したタイミングでログを書き出します。
SYNスキャンは、このACKを送信せずにRSTを送るため、アプリケーションプログラムは接続の試行自体を認識しません。
しかし、現代のネットワーク環境において「完全に検知されない」わけではありません。
次世代ファイアウォール(NGFW)や侵入検知システム(IDS/IPS)は、パケットレベルでの監視を行っています。
同一の送信元から短時間に大量のSYNパケットが送信され、かつ接続が確立されずに中断される挙動は、典型的なポートスキャンのシグネチャとして検知されます。
そのため、ネットワーク管理者側では「誰かがSYNスキャンを仕掛けてきた」ことを容易に把握できる場合があります。
ステルス性をより高めるためには、スキャンの速度を落とす「タイミングオプション」などを併用することが推奨されます。
NmapによるSYNスキャンの実行例
実際にNmapを使用してSYNスキャンを実行する場合のコマンドと、その出力結果について解説します。
SYNスキャンを指定するオプションは-sSです。
# 管理者権限でターゲットに対してSYNスキャンを実行
sudo nmap -sS -p 22,80,443 192.168.1.100
このコマンドを実行すると、指定した3つのポートに対してハーフオープン走査が行われます。
Starting Nmap 7.92 ( https://nmap.org ) at 202X-XX-XX XX:XX
Nmap scan report for 192.168.1.100
Host is up (0.00052s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
出力結果の「STATE」カラムに注目してください。
「open」はSYN/ACKが返ってきたポート、「closed」はRSTが返ってきたポートを示しています。
もしファイアウォールでブロックされている場合は、ここが「filtered」と表示されます。
SYNスキャンは非常に効率的であり、数千ものポートを数秒から数十秒で調査することが可能です。
高度なカスタマイズ:スキャンの精度と隠蔽
Nmapでは、SYNスキャンの動作をさらに細かく制御するためのオプションが豊富に用意されています。
例えば、パケットの送信間隔を調整する-Tオプションがあります。
-T0や-T1を指定すると、パケットの間隔を極めて長く設定でき、IDSによる検知を回避できる可能性が高まります。
また、送信元IPアドレスを偽装するデコイ(おとり)機能-Dを利用することも可能です。
デコイを使用すると、ターゲットのログには大量の偽の送信元からのスキャン履歴が残り、真の攻撃者を特定することが困難になります。
さらに、送信元ポート番号を特定の番号(例えばDNS用の53番ポートなど)に固定する--source-portオプションも、一部のフィルタリングを回避するために有効です。
これらのオプションを組み合わせることで、SYNスキャンは単なるポート調査ツールを超え、高度なペネトレーションテストの武器となります。
SYNスキャン実行時の倫理と法的遵守
SYNスキャンの強力な機能は、正しく使用すればセキュリティ向上に寄与しますが、悪用すれば攻撃の準備行為とみなされます。
許可を得ていないネットワークや外部のサーバーに対してスキャンを実行することは、不正アクセス禁止法への抵触や、サービスの妨害と判断されるリスクがあります。
特にSYNスキャンはハーフオープン状態のコネクションを一時的に生成するため、ターゲットのハーフオープン接続用リソースを消費させます。
あまりにも大量のSYNパケットを短時間で送りつけると、意図せず「SYN Flood」というDoS攻撃と同じ状態を引き起こす恐れがあります。
診断業務で利用する際には、必ず実施計画を策定し、対象範囲や時間帯について関係者の合意を得ることが不可欠です。
ツールの仕組みを理解することは、技術的なスキルの向上だけでなく、責任ある利用態度を養うことにも繋がります。
まとめ
NmapのTCP SYNスキャンは、TCPのスリーウェイ・ハンドシェイクを意図的に中断させる「ハーフオープン走査」によって、効率的なポート調査を実現しています。
この手法は、アプリケーション層に接続ログを残さないステルス性を備えている一方で、現代のネットワーク監視機器によってパケットレベルでの検知は可能です。
管理者権限を必要とするものの、その速度と精度の高さから、診断の現場では欠かせないツールとなっています。
「open」「closed」「filtered」といった各ステータスの背後にあるTCPフラグの動きを正しく理解することで、スキャン結果の分析精度は飛躍的に向上します。
セキュリティエンジニアとしては、単にコマンドを叩くだけでなく、パケット単位の動作原理を把握し、倫理に基づいた適切な検証を心がけてください。
