「ポートスキャンってなんですか?」 ─ ネットワークの戸締まりを確認する技術
サイバーセキュリティの世界で最も危険なのは、「知らないこと」です。
自分のシステムにはどんな入口があって、どこが開いているのでしょう?
それさえも知らずに「安全だ」と思い込むことほど、危ういことはありません。
ポートスキャンは、そんな「見えていない入口」を可視化するための技術です。
この技術は、「攻撃者の手法」として語られることが多いものの、実は防御する側にこそ必要な「システムの点検作業」なのです。
この記事では、次の項目について順を追って解説します。
・ポートスキャンの仕組み
・なぜ、それがセキュリティの出発点になるのか?
■ポートスキャンの仕組み
- ポートとは何か
─ 通信の「部屋番号」
・ネットワーク通信における「住所」と「部屋番号」
コンピュータがネットワーク通信をする際、IPアドレスの管理だけでは不十分です。
なぜなら、サーバとは、「一つのサーバー上で、複数のサービスを同時に提供すること」を前提に作られているためです。
IPアドレスが「建物の住所」だとするなら、ポート番号は「部屋番号」のようなものです。
サーバA(IP: 203.0.113.1)という建物の中に:
- 22番室:SSH(リモートログイン用)
- 80番室:HTTP(Webサイト表示用)
- 443番室:HTTPS(暗号化されたWeb通信用)
- 3306番室:MySQL(データベース用)
といったように、複数のサービスが建てられているのです。
OSは、外部から通信が来たときに、このポート番号から「どのサービスにデータを渡すか」判断します。
・ポートが「開いている」とはどういうことか
アプリケーションがポートで待ち受けている状態を「Listen状態」と呼びます。
これは、そのドアの向こうに誰かがいて、ノックに応答できる状態です。
逆に、何もListenしていなければ、ドアをノックしても誰も出てきません。
重要なのは、「開いているポート = 攻撃可能な入口」である事実です。**
たとえ脆弱性がなくても、「そこにサービスがある」と分かるだけで、攻撃者にとっては貴重な情報になります。
- なぜポート管理がセキュリティの出発点なのか
答えはシンプルです、それは「見えるものしか、守れない」ためです。
まず「何が見えているか」を知らなければ、「何を守るべきか」を知ることもできません。
現場でよくある事例:
- 無効化したと思っていたサービスがポート111で動作し続けていた
(portmapper (RPCbind) のポート。古いUNIX系サービスで使われ、セキュリティホールになりやすい)
- 内部用のデータベースが、なぜか外部から3306番でアクセス可能だった
(MySQLの標準ポート番号です。社内向けのDBが誤って外部公開されている典型例として有名)
- DMZ配下の本番サーバに、開発用のサービスが33080番で残っていた
(このポートには、固定の標準サービスは割り当てられていません。しかしながら、Webや開発用アプリのテスト用ポートとしてよく使われます。「本番環境に開発用のサービスが残っている」という典型的なヒューマンエラーの例)
これらが問題となるタイミングは、「攻撃者から、攻撃された」時点ではありません。
「そこにサービスがあることが攻撃者からバレている」時点で、すでにセキュリティは破られているのです。
・ハードニングとは「設計図と現実の差」を埋める作業
セキュリティポリシーがどれだけ厳格でも、現場に一つ余計なポートが開いていれば、そこから崩れる可能性があります。
ポートスキャンは、この「あるべき姿」と「現実」のギャップを可視化する手段です。
- ポートスキャンは「攻撃」ではない
よくある誤解
「ポートスキャンされた!攻撃だ!」という反応をよく見かけますが、これは早計です。
ポートスキャンは単なる「調査手段」です。それが:
- 攻撃者の手にあれば「侵入口の探索」
- 管理者の手にあれば「点検と検証」
同じ道具でも、目的によって意味が変わるのです。
防御のための定期スキャン
多くの企業では、以下のような「内部スキャン」を日常的に実施しています:
- 週次での全サーバースキャン
- 構成変更後の確認スキャン
- 新規サービス公開前のチェック
これは健康診断のようなものです。病気になってから検査するのではなく、定期的にチェックすることで、問題を早期に発見できます。
- TCPとUDP ─ 二つの通信方式の違い
・TCP:信頼を前提とした通信
TCPは「3-Way Handshake」という手順を踏んで接続を確立します:
- SYN(同期):「通信を始めたいんだけど、今いいですか?」
- SYN/ACK(同期+確認応答):「OK、準備できてます」
- ACK(確認応答):「了解、それでは始めましょう」
この"握手"を経て、初めて本格的な通信が始まります。
TCPの特徴:
- パケットが順番通りに届く
- 失われたら再送される
- 相手と確実につながっていることが保証される
・UDP:握手をしないプロトコル
これに対して、UDPは、TCPのような接続確立を行いません。
いきなりデータを送りつける、「こちらから一方的に送って、あとは知らん」という方式です。
UDPの特徴:
- 速い、軽い(オーバーヘッドが少ない)
- 順序保証なし、到達保証なし
- DNSや動画ストリーミングなど、速さ重視の通信に使われる
・セキュリティ上の違い
TCPは応答が明確なため、ポートの開閉が判断しやすい。
一方、UDPは「返事がない」ことが正常な場合も多く、スキャンが困難です。
さらに、UDPは送信元を偽装しやすいため、DDoS攻撃などに悪用されやすい性質があります。
- ポートスキャンの仕組み
・基本的な動作原理
ポートスキャンは、対象のポートに通信を試みて、その反応を観察する技術です。
TCPポートスキャンの場合:
- SYN → SYN/ACK が返る → ポートは開いている(open)
- SYN → RST が返る → ポートは閉じている(closed)
- SYN → 無応答 → フィルタリングされている(filtered)
・なぜ「SYNスキャン」が使われるのか
最も一般的な「SYNスキャン」は、完全な接続を確立せずに、SYN/ACKの応答だけを見て判断します。
これには以下の利点があります:
- 高速(完全な接続より処理が軽い)
- ステルス性(ログに残りにくい)
- root権限があれば実行可能
・UDPスキャンの難しさ
UDPでは明確な応答がないことが多く、以下のような曖昧な結果になりがちです:
- 応答があった → 何かが動いている
- ICMP Port Unreachableが返った → 閉じている
- 何も返ってこない → 開いているか、フィルタされているか不明(open|filtered)
- 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の状態が曖昧(古い設定が残っている可能性)
- スキャン結果をどう活かすか
・発見から改善へのステップ
- 設計との照合
- 構成図と実際の開放ポートを突き合わせる
- 意図しない開放があれば原因を調査
- 不要なサービスの停止
- 使用していないポートは即座に閉じる
- テスト用サービスの消し忘れをチェック
- ファイアウォール設定の見直し
- 必要最小限のポートのみ開放
- 送信元IPの制限を追加
- 継続的な監視体制の構築
- 定期スキャンのスケジュール化
- 変化があった場合のアラート設定
・ポート番号を変更する「軽い対策」
よく使われるポート番号をそのまま使うと、自動化された攻撃の標的になりやすくなります:
- SSH:22番 → 22222番へ
- MySQL:3306番 → 13306番へ
これだけで、大量の自動攻撃を回避できます。完璧な対策ではありませんが、防御の一層として有効です。
まとめ:見えるものだけが守れる
ポートスキャンを通じて見えてきたのは、以下の事実です:
定期的な点検が、継続的なセキュリティを生む
セキュリティとは、「守るべきものを知り、備える姿勢」です。ポートスキャンは、その最初の問いかけ──「そこに何があるか?」という対話なのです。
「必要なサービスだけが、意図通り見えるように」
「それ以外は、存在を気取らせないように」
この理想を保ち続けるために、私たちは定期的に、あえて「見に行く」必要があります。
最後に──防御とは、無関心との戦いです。
誰かが叩くその前に、自分で叩いて確認する。
それは面倒な作業ではなく、責任ある沈黙の設計なのです。
ポートは通信の入口であり、意図しない開放はリスクになる
自分で見に行くことで、攻撃者より先に問題を発見できる