ポートスキャンとは?
コンピュータネットワークにおいて、“ポート”とは、コンピュータ上で動作している特定のプロセスやサービスのネットワーク接続点を識別するための抽象的な概念です。各ポートには 0 から 65535 までの一意の番号が割り当てられており、この番号によって、コンピュータは受信したデータをどのアプリケーションに送るべきかを判断できます。
コンピュータを大きなビルにたとえるなら、ポートはそのビル内の各部屋のドア番号のようなものです。よく見られる“ドア番号”には、HTTP Web サービスで通常使用されるポート 80、HTTPS の安全な Web 通信用のポート 443、電子メールサービス SMTP で使用されるポート 25 などがあります。データパケットがコンピュータに到達すると、システムはポート番号に基づいて、それを対応するサービスやアプリケーションへ正確に“配達”します。
ポートスキャンとは?
ポートスキャンとは、対象マシンの各ポートに特定のデータパケットを送信し、返ってくる応答に基づいて、どのポートが開いているか、または閉じているかを判断する行為です。これは、誰かがビルの外から一つずつドアをノックし、応答があるかどうかによって、どの部屋に人がいて、どの部屋が空いているかを判断するようなものです。
ポートスキャン自体は中立的な技術です——ネットワーク管理者はシステムのセキュリティ脆弱性を確認するために使用し、ペネトレーションテスターはシステムの防御能力を評価するために使用します。一方で、攻撃者は侵入の突破口を探すために悪用する可能性があります。
Web サイトはどのようにブラウザ上でポートスキャンを実行するのか?
不思議に思うかもしれません。普通の Web ページが、どうしてあなたのコンピュータ上のポートをスキャンできるのでしょうか?その背後では、ブラウザのいくつかの動作メカニズムが利用されています。
時間ベースのスキャン方法
初期のブラウザによるポートスキャン技術は、“タイミング攻撃”に依存していました。Web ページが XMLHttpRequest または fetch を通じて特定のポートにリクエストを送信する場合:
ポートが閉じている場合、ブラウザはすぐに“接続が拒否されました”という応答を受け取り、リクエストは短時間で失敗します
ポートが開いている場合、ブラウザはサーバー側の応答を待つため、この処理にはより長い時間がかかります
リクエストの応答時間を測定することで、Web サイトはどのポートが開いているかを推測できます。ただし、この方法はネットワークの揺らぎの影響を受けやすく、精度には限界があります。
iframe ベースのスキャン方法
その後、研究者たちは、主に Chrome ブラウザを対象とした、より信頼性の高い技術を発見しました。Chrome が閉じているポートへ接続しようとすると、ブラウザはページアドレスを chrome-error://chromewebdata/ に変更します。この特性を利用すると:
Web サイトは非表示の iframe を作成し、対象アドレス(例:http://127.0.0.1:8080)を読み込みます
ポートが閉じている場合、iframe の onload イベントは 2 回発火します(URL が変化するため)
ポートが開いている場合、onload イベントは 1 回だけ発火します
onload イベントの発火回数を数えることで、Web サイトはポートが開いているかどうかを正確に判断できます。
WebSocket ベースのスキャン方法
一部のツールでは、WebSocket 接続を利用してポートの状態を探査することもあります——接続に成功すればポートが開いていることを意味し、接続に失敗すればポートが閉じていることを意味します。
なぜ Web サイトはあなたのポートをスキャンするのか?
1. 不正対策とボット検出
多くの大規模 Web サイト(一部の政府系サービスサイトや EC プラットフォームを含む)は、ユーザーが本物の人間であるかどうかを検出するためにポートスキャンを行うことがあります。たとえば、特定のアンチボットシステムは 127.0.0.1:8888 への接続を試みます——これは Burp Suite などのセキュリティテストツールのデフォルトプロキシポートです。このポートが開いていることが検出されると、システムは訪問者がセキュリティ研究者または自動化スクリプトである可能性を疑い、追加の認証をトリガーすることがあります。
2. ユーザーフィンガープリントによる追跡
研究によると、ブラウザベースのポートスキャン結果には十分な一意性があり、ユーザー追跡の手段として利用できることが示されています。ローカルで開いているポートを検出することで、Web サイトはユーザーがどのソフトウェアを実行しているかを推測できます——たとえば、ポート 80 または 443 が開いていれば、ユーザーが Web サーバーを実行している可能性があり、ポート 25 が開いていれば、メールサーバーが動作している可能性があります。ユーザーごとにインストールされているソフトウェアの組み合わせは千差万別であり、これが独自の“ソフトウェアフィンガープリント”を構成します。
さらに懸念されるのは、わずか 1 秒間スキャンしただけでも、生成されるポートフィンガープリントが非常に高い一意性を持つことを示す研究がある点です。ポートスキャンの結果を他のフィンガープリント技術(Canvas フィンガープリント、WebGL フィンガープリントなど)と組み合わせると、追跡能力はさらに強化されます。
3. 内部ネットワーク機器の探査
ほとんどのブラウザはデフォルトで、公開 Web サイトからプライベート IP アドレス(127.0.0.1 や 192.168.x.x など)へのリクエスト送信を許可しています。つまり、悪意のある Web サイトは、あなたのコンピュータのローカルポートをスキャンできるだけでなく、自宅のルーター、スマートテレビ、ネットワークカメラなどの内部ネットワーク機器のポートもスキャンし、脆弱性が存在する可能性のある機器を見つけて攻撃することができるということです。
ブラウザによるポートスキャンを防ぐには?
1. ブラウザ拡張機能を使用する
uBlock Origin:設定内の“プライバシー”項目で、“外部からのローカルネットワーク侵入をブロックする”オプションにチェックを入れると有効になります
NoScript:ローカルネットワークへのアクセスをブロックするオプションを提供しています
一部の専用保護プラグインでも、Web サイトによるローカルポートスキャンをブロックできます
2. 内蔵保護機能を備えたブラウザを使用する
一部のブラウザには、すでにポートスキャン保護機能が組み込まれています。たとえば、特定のブラウザは既知の悪意あるスキャンスクリプトを能動的にブロックし、公開 Web サイトからローカルリソースへのアクセスを制限します。Chrome などのブラウザも、“Private Network Access(プライベートネットワークアクセス)”仕様を段階的に導入しており、Web サイトがローカルリソースへアクセスする前にユーザーの許可を取得することを求めています。
3. フィンガープリントブラウザを使用する
より高いプライバシー要件を持つユーザーには、アンチディテクトブラウザがより包括的な保護手段を提供します。この種のツールは異なるポート状態をシミュレートできるため、Web サイトは実際のポートスキャン結果を取得できなくなり、あなたのデバイスフィンガープリントのプライバシーを効果的に保護できます。
まとめ
ポートスキャンは、正当なセキュリティ監査に使用できる一方で、プライバシー侵害に悪用される可能性もある技術です。その仕組みと潜在的なリスクを理解することは、自分のネットワークセキュリティを守るための第一歩です。セキュリティ分野の古い格言にあるように、“自分の‘ドア’がどこで開いているかを知ってこそ、どの扉を閉めるべきかがわかる。”
