「ポートスキャンってなんですか?」 ─ ネットワークの戸締まりを確認する技術

サイバーセキュリティの世界で最も危険なのは、「知らないこと」です。
自分のシステムにはどんな入口があって、どこが開いているのでしょう?
それさえも知らずに「安全だ」と思い込むことほど、危ういことはありません。
ポートスキャンは、そんな「見えていない入口」を可視化するための技術です。
この技術は、「攻撃者の手法」として語られることが多いものの、実は防御する側にこそ必要な「システムの点検作業」なのです。
この記事では、次の項目について順を追って解説します。

・ポートスキャンの仕組み
・なぜ、それがセキュリティの出発点になるのか?

■ポートスキャンの仕組み

  1. ポートとは何か
     ─ 通信の「部屋番号」

・ネットワーク通信における「住所」と「部屋番号」
コンピュータがネットワーク通信をする際、IPアドレスの管理だけでは不十分です。
なぜなら、サーバとは、「一つのサーバー上で、複数のサービスを同時に提供すること」を前提に作られているためです。
IPアドレスが「建物の住所」だとするなら、ポート番号は「部屋番号」のようなものです。

サーバA(IP: 203.0.113.1)という建物の中に:

  • 22番室:SSH(リモートログイン用)
  • 80番室:HTTP(Webサイト表示用)
  • 443番室:HTTPS(暗号化されたWeb通信用)
  • 3306番室:MySQL(データベース用)

といったように、複数のサービスが建てられているのです。
OSは、外部から通信が来たときに、このポート番号から「どのサービスにデータを渡すか」判断します。

・ポートが「開いている」とはどういうことか
アプリケーションがポートで待ち受けている状態を「Listen状態」と呼びます。
これは、そのドアの向こうに誰かがいて、ノックに応答できる状態です。
逆に、何もListenしていなければ、ドアをノックしても誰も出てきません。

重要なのは、「開いているポート = 攻撃可能な入口」である事実です。**
たとえ脆弱性がなくても、「そこにサービスがある」と分かるだけで、攻撃者にとっては貴重な情報になります。

  1. なぜポート管理がセキュリティの出発点なのか

答えはシンプルです、それは「見えるものしか、守れない」ためです。
まず「何が見えているか」を知らなければ、「何を守るべきか」を知ることもできません。

現場でよくある事例:

 - 無効化したと思っていたサービスがポート111で動作し続けていた
(portmapper (RPCbind) のポート。古いUNIX系サービスで使われ、セキュリティホールになりやすい)

 - 内部用のデータベースが、なぜか外部から3306番でアクセス可能だった
(MySQLの標準ポート番号です。社内向けのDBが誤って外部公開されている典型例として有名)

 - DMZ配下の本番サーバに、開発用のサービスが33080番で残っていた
(このポートには、固定の標準サービスは割り当てられていません。しかしながら、Webや開発用アプリのテスト用ポートとしてよく使われます。「本番環境に開発用のサービスが残っている」という典型的なヒューマンエラーの例)

 これらが問題となるタイミングは、「攻撃者から、攻撃された」時点ではありません。
「そこにサービスがあることが攻撃者からバレている」時点で、すでにセキュリティは破られているのです。

・ハードニングとは「設計図と現実の差」を埋める作業
セキュリティポリシーがどれだけ厳格でも、現場に一つ余計なポートが開いていれば、そこから崩れる可能性があります。
ポートスキャンは、この「あるべき姿」と「現実」のギャップを可視化する手段です。

  1. ポートスキャンは「攻撃」ではない
    よくある誤解
    「ポートスキャンされた!攻撃だ!」という反応をよく見かけますが、これは早計です。
    ポートスキャンは単なる「調査手段」です。それが:
  • 攻撃者の手にあれば「侵入口の探索」
  • 管理者の手にあれば「点検と検証」
    同じ道具でも、目的によって意味が変わるのです。

防御のための定期スキャン

多くの企業では、以下のような「内部スキャン」を日常的に実施しています:

  • 週次での全サーバースキャン
  • 構成変更後の確認スキャン
  • 新規サービス公開前のチェック
    これは健康診断のようなものです。病気になってから検査するのではなく、定期的にチェックすることで、問題を早期に発見できます。
  1. TCPとUDP ─ 二つの通信方式の違い

・TCP:信頼を前提とした通信
 TCPは「3-Way Handshake」という手順を踏んで接続を確立します:

  1. SYN(同期):「通信を始めたいんだけど、今いいですか?」
  2. SYN/ACK(同期+確認応答):「OK、準備できてます」
  3. ACK(確認応答):「了解、それでは始めましょう」

この"握手"を経て、初めて本格的な通信が始まります。

TCPの特徴:

  • パケットが順番通りに届く
  • 失われたら再送される
  • 相手と確実につながっていることが保証される

・UDP:握手をしないプロトコル
これに対して、UDPは、TCPのような接続確立を行いません。
いきなりデータを送りつける、「こちらから一方的に送って、あとは知らん」という方式です。

UDPの特徴:

  • 速い、軽い(オーバーヘッドが少ない)
  • 順序保証なし、到達保証なし
  • DNSや動画ストリーミングなど、速さ重視の通信に使われる

・セキュリティ上の違い
TCPは応答が明確なため、ポートの開閉が判断しやすい。
一方、UDPは「返事がない」ことが正常な場合も多く、スキャンが困難です。
さらに、UDPは送信元を偽装しやすいため、DDoS攻撃などに悪用されやすい性質があります。

  1. ポートスキャンの仕組み
    ・基本的な動作原理
    ポートスキャンは、対象のポートに通信を試みて、その反応を観察する技術です。
    TCPポートスキャンの場合:
  • SYN → SYN/ACK が返る → ポートは開いている(open)
  • SYN → RST が返る → ポートは閉じている(closed)
  • SYN → 無応答 → フィルタリングされている(filtered)

・なぜ「SYNスキャン」が使われるのか
最も一般的な「SYNスキャン」は、完全な接続を確立せずに、SYN/ACKの応答だけを見て判断します。
これには以下の利点があります:

  • 高速(完全な接続より処理が軽い)
  • ステルス性(ログに残りにくい)
  • root権限があれば実行可能

・UDPスキャンの難しさ
UDPでは明確な応答がないことが多く、以下のような曖昧な結果になりがちです:

  • 応答があった → 何かが動いている
  • ICMP Port Unreachableが返った → 閉じている
  • 何も返ってこない → 開いているか、フィルタされているか不明(open|filtered)
  1. Nmapによる実践的なスキャン
    ・基本的な使い方
    ここでは、bashを対象としています。

TCPの1-1000番ポートをスキャン

nmap -sS -p 1-1000 192.168.1.1

UDPも含めてスキャン

nmap -sS -sU -p 1-1000 192.168.1.1

サービスバージョンも検出

nmap -sV -p 22,80,443 192.168.1.1

・スキャン結果の読み方
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1
80/tcp open http Apache httpd 2.4.29
3306/tcp open mysql MySQL 5.7.30
161/udp open|filtered snmp

この結果から読み取れること:

  • SSHが標準ポートで公開されている(ブルートフォース攻撃の対象になりやすい)
  • MySQLが外部から見える(本来は内部のみアクセス可能にすべき)
  • SNMPの状態が曖昧(古い設定が残っている可能性)
  1. スキャン結果をどう活かすか

・発見から改善へのステップ

  1. 設計との照合
  • 構成図と実際の開放ポートを突き合わせる
  • 意図しない開放があれば原因を調査
  1. 不要なサービスの停止
  • 使用していないポートは即座に閉じる
  • テスト用サービスの消し忘れをチェック
  1. ファイアウォール設定の見直し
  • 必要最小限のポートのみ開放
  • 送信元IPの制限を追加
  1. 継続的な監視体制の構築
  • 定期スキャンのスケジュール化
  • 変化があった場合のアラート設定

・ポート番号を変更する「軽い対策」
よく使われるポート番号をそのまま使うと、自動化された攻撃の標的になりやすくなります:

  • SSH:22番 → 22222番へ
  • MySQL:3306番 → 13306番へ
    これだけで、大量の自動攻撃を回避できます。完璧な対策ではありませんが、防御の一層として有効です。

まとめ:見えるものだけが守れる
ポートスキャンを通じて見えてきたのは、以下の事実です:

定期的な点検が、継続的なセキュリティを生む
セキュリティとは、「守るべきものを知り、備える姿勢」です。ポートスキャンは、その最初の問いかけ──「そこに何があるか?」という対話なのです。
「必要なサービスだけが、意図通り見えるように」
「それ以外は、存在を気取らせないように」
この理想を保ち続けるために、私たちは定期的に、あえて「見に行く」必要があります。
最後に──防御とは、無関心との戦いです。
誰かが叩くその前に、自分で叩いて確認する。
それは面倒な作業ではなく、責任ある沈黙の設計なのです。

ポートは通信の入口であり、意図しない開放はリスクになる

自分で見に行くことで、攻撃者より先に問題を発見できる