
ポートスキャナとは、サーバーやホスト上で開いているポートを検出するように設計されたアプリケーションです。このようなアプリケーションは、管理者がネットワークのセキュリティポリシーを確認するために使用したり、攻撃者がホスト上で実行されているネットワークサービスを特定して脆弱性を悪用するために使用したりすることがあります。
ポートスキャンとは、ホスト上のサーバーポートアドレスの範囲にクライアント要求を送信し、アクティブなポートを見つけることを目的としたプロセスです。これはそれ自体悪質なプロセスではありません。[ 1 ]ポートスキャンの用途の大部分は攻撃ではなく、リモートマシンで利用可能なサービスを特定するための単純なプローブです。
ポートスイープとは、特定のリスニングポートを複数のホストでスキャンすることです。これは通常、特定のサービスを検索するために使用されます。たとえば、SQLベースのコンピュータワームは、 TCPポート1433でリッスンしているホストを探すためにポートスイープを実行する場合があります。[ 2 ]
インターネットの設計と運用は、一般的にTCP/IPとも呼ばれるインターネットプロトコルスイートに基づいています。このシステムでは、ネットワークサービスはホストアドレスとポート番号という2つの要素を使用して参照されます。使用可能なポート番号は65535個あり、1から65535まで番号が振られています(ポート0は使用できません)。ほとんどのサービスは、1つ、またはせいぜい限られた範囲のポート番号を使用します。
ポートスキャナの中には、特定のホスト上で最も一般的なポート番号、あるいは脆弱なサービスと最も関連性の高いポートのみをスキャンするものもあります。
ポートのスキャン結果は通常、次の3つのカテゴリのいずれかに分類されます。
開いているポートには、管理者が注意しなければならない2つの脆弱性が存在する。
フィルタリングされたポートは、脆弱性を生じさせる可能性は低い。
ポートスキャンのすべての形式は、ターゲットホストがRFCに準拠しているという前提に基づいています。ほとんどの場合はそうですが、ホストのTCP/IPスタックがRFCに準拠していないか変更されている場合、ホストが奇妙なパケットを返したり、誤検出を生成したりする可能性があります。これは、 OSに依存するあまり一般的でないスキャン手法(たとえば、FINスキャン)に特に当てはまります。[ 3 ] TCP /IPスタックフィンガープリンティング方式も、特定の刺激に対するこれらの異なるネットワーク応答を利用して、ホストが実行しているオペレーティングシステムのタイプを推測します。
最も単純なポートスキャナはオペレーティングシステムのネットワーク機能を使用し、SYN が実行可能なオプションでない場合 (次に説明) に次ぐ次のオプションとなります。Nmapはこのモードを、Unix の connect()システムコールにちなんで connect scan と呼んでいます。ポートが開いている場合、オペレーティングシステムはTCP の3 ウェイ ハンドシェイクを完了し、ポートスキャナはサービス拒否攻撃の実行を回避するために接続をすぐに閉じます。[ 3 ]そうでない場合は、エラー コードが返されます。このスキャン モードの利点は、ユーザーが特別な権限を必要としないことです。ただし、OS のネットワーク機能を使用すると低レベルの制御が妨げられるため、このタイプのスキャンはあまり一般的ではありません。この方法は、特に「ポートスイープ」の場合、「ノイズ」が発生します。サービスが送信元 IP アドレスをログに記録したり、侵入検知システムがアラームを発したりする可能性があります。
SYNスキャンは、TCP スキャンのもう 1 つの形式です。ポート スキャナは、オペレーティングシステムのネットワーク機能を使用する代わりに、生の IP パケットを自分で生成し、応答を監視します。このスキャンタイプは、完全な TCP 接続を実際に開くことがないため、「ハーフオープン スキャン」とも呼ばれます。ポート スキャナは SYN パケットを生成します。ターゲット ポートが開いている場合、SYN-ACK パケットで応答します。スキャナ ホストは RST パケットで応答し、ハンドシェイクが完了する前に接続を閉じます。[ 3 ]ポートが閉じているがフィルタリングされていない場合、ターゲットはすぐに RST パケットで応答します。
生のネットワークを使用することにはいくつかの利点があり、スキャナは送信されるパケットと応答のタイムアウトを完全に制御でき、応答の詳細なレポートも作成できます。どちらのスキャンがターゲットホストへの干渉が少ないかについては議論があります。SYNスキャンの利点は、個々のサービスが実際に接続を受信しないことです。しかし、ハンドシェイク中のRSTは、特にプリンタなどの単純なデバイスなど、一部のネットワークスタックに問題を引き起こす可能性があります。どちらが優れているかについては、決定的な議論はありません。
UDP スキャンも可能ですが、技術的な課題があります。UDPはコネクションレスプロトコルであるため、TCP SYN パケットに相当するものはありません。ただし、開いていないポートに UDP パケットを送信すると、システムはICMPポート到達不能メッセージで応答します。ほとんどの UDP ポートスキャナはこのスキャン方法を使用し、応答がないことからポートが開いていると推測します。ただし、ポートがファイアウォールによってブロックされている場合、この方法ではポートが開いていると誤って報告されます。ポート到達不能メッセージがブロックされると、すべてのポートが開いているように見えます。この方法は ICMPレート制限の影響も受けます。[ 4 ]
別の方法として、アプリケーション固有のUDPパケットを送信して、アプリケーション層からの応答を期待する方法があります。たとえば、DNSサーバーが存在する場合、ポート53にDNSクエリを送信すると応答が得られます。この方法は、開いているポートを特定するのに非常に信頼性が高いです。ただし、アプリケーション固有のプローブパケットが利用可能なポートのスキャンに限定されます。一部のツール(Nmap、Unionscan [ 5 ]など)は通常20未満のUDPサービス用のプローブを備えていますが、商用ツールの中には70個ものプローブを備えているものもあります。場合によっては、サービスがポートで待機しているものの、特定のプローブパケットに応答しないように設定されていることがあります。
ACKスキャンは、ポートが開いているか閉じているかを正確に判断するのではなく、ポートがフィルタリングされているかフィルタリングされていないかを判断するため、より特殊なスキャンタイプの1つです。これは、ファイアウォールの存在とそのルールセットを調査する場合に特に有効です。単純なパケットフィルタリングでは確立された接続(ACKビットが設定されたパケット)が許可されますが、より高度なステートフルファイアウォールでは許可されない場合があります。[ 6 ]
ウィンドウ スキャンは時代遅れなためほとんど使われず、ポートが開いているか閉じているかを判断するのに信頼性が低い。ACK スキャンと同じパケットを生成するが、パケットのウィンドウ フィールドが変更されたかどうかをチェックする。パケットが宛先に到達すると、設計上の欠陥により、ポートが開いている場合はパケットのウィンドウ サイズを作成しようとして、送信者に戻る前にパケットのウィンドウ フィールドに 1 を付ける。この実装をサポートしなくなったシステムでこのスキャン テクニックを使用すると、ウィンドウ フィールドに 0 が返され、開いているポートが閉じているとラベル付けされる。[ 7 ]
SYNスキャンは十分に秘密裏に行われないため、ファイアウォールは一般的にSYNパケットの形式でパケットをスキャンしてブロックします。[ 3 ] FINパケットは変更なしでファイアウォールをバイパスできます。閉じているポートはFINパケットに対して適切なRSTパケットで応答しますが、開いているポートは手元のパケットを無視します。これはTCPの性質による典型的な動作であり、ある意味では避けられない欠点です。[ 8 ]
より特殊なスキャンタイプもいくつか存在する。これらには様々な制限があり、広くは使用されていない。Nmapはこれらのほとんどをサポートしている。[ 6 ]
多くのインターネットサービスプロバイダは、顧客が自社ネットワーク外の宛先に対してポートスキャンを実行する機能を制限しています。これは通常、顧客が同意しなければならないサービス利用規約または許容使用ポリシーに記載されています。 [ 9 ] [ 10 ]一部のISPは、特定のポートへの送信サービス要求を阻止するパケットフィルタまたは透過プロキシを実装しています。たとえば、ISPがポート80で透過HTTPプロキシを提供している場合、ターゲットホストの実際の構成に関係なく、任意のアドレスのポートスキャンではポート80が開いているように見えます。
ポートスキャンによって収集される情報は、ネットワークインベントリやネットワークのセキュリティ検証など、多くの正当な用途があります。しかし、ポートスキャンはセキュリティを侵害するためにも使用される可能性があります。多くのエクスプロイトは、ポートスキャンを利用して開いているポートを見つけ、バッファオーバーフローと呼ばれる状態を引き起こすために特定のデータパターンを送信します。このような動作は、ネットワークとその中のコンピュータのセキュリティを侵害し、機密情報の損失や漏洩、および業務遂行能力の低下につながる可能性があります。[ 3 ]
ポートスキャンによって引き起こされる脅威レベルは、スキャンに使用される方法、スキャンされるポートの種類、その数、ターゲットホストの値、およびホストを監視する管理者によって大きく異なります。しかし、ポートスキャンは攻撃の最初のステップと見なされることが多く、ホストに関する多くの機密情報を漏洩する可能性があるため、深刻に受け止められています。[ 11 ]それにもかかわらず、ポートスキャンのみで実際の攻撃が発生する確率は小さいです。ポートスキャンが脆弱性スキャン と関連付けられている場合、攻撃が発生する確率ははるかに高くなります。[ 12 ]
インターネットは本質的にオープンで分散型のアーキテクチャであるため、その誕生以来、立法者はサイバー犯罪者を効果的に訴追できる法的境界線を定めるのに苦慮してきた。ポートスキャン行為に関する事例は、違反行為を判断する際に直面する困難の一例である。こうした事例は稀ではあるが、多くの場合、法的手続きでは、単にポートスキャンを実行したという事実だけでなく、侵入や不正アクセスを企てた意図があったことを証明する必要がある。
2003年6月、イスラエル人のアヴィ・ミズラヒは、イスラエル当局からコンピュータ資料への不正アクセス未遂の罪で告発された。彼はモサドのウェブサイトをポートスキャンしていた。彼は2004年2月29日にすべての容疑で無罪となった。裁判官は、このような行為は肯定的な方法で行われる限り、抑制されるべきではないと判決を下した。[ 13 ]
17歳のフィンランド人が、フィンランドの大手銀行へのコンピュータ侵入未遂の容疑で告発された。2003年4月9日、フィンランド最高裁判所は彼を有罪とし、銀行が行ったフォレンジック分析の費用として12,000米ドルを支払うよう命じた。1998年、彼は閉鎖されたネットワークにアクセスしようとして銀行のネットワークをポートスキャンしたが、失敗した。[ 14 ]
2006年、英国議会は1990年コンピュータ不正使用法の改正案を可決し、「CMA第1条または第3条に基づく犯罪の過程または関連において使用するために設計または改造された物品を製造、改造、供給、または供給を申し出る者は犯罪を犯したことになる」とした。[ 15 ]しかしながら、この改正の適用範囲は曖昧であり、セキュリティ専門家から広く批判されている。[ 16 ]
ドイツも刑法典第202条a、b、c項で同様の法律を有しており、欧州連合理事会も、より詳細な規定ではあるものの同様の法律を制定する予定であるとのプレスリリースを発表している。[ 17 ]
1999 年 12 月、スコット・モールトンは FBI に逮捕され、ジョージア州のコンピュータ システム保護法およびアメリカのコンピュータ詐欺および濫用法に基づき、コンピュータへの不正侵入未遂の罪で告発された。当時、彼の IT サービス会社は、ジョージア州チェロキー郡と 911 センターのセキュリティの維持およびアップグレードに関する契約を結んでいた。彼はチェロキー郡のサーバーでセキュリティを確認するために複数のポート スキャンを実行し、最終的には別の IT 会社が監視しているWeb サーバーをポート スキャンしたため、訴訟に発展することになった。彼は 2000 年に無罪となり、トーマス・スラッシュ判事はMoulton v. VC3 ( ND Ga. 2000) [ 18 ]において、ネットワークの完全性と可用性を損なう損害はなかったと判決を下した。[ 19 ]