ポートスキャン
ポートスキャン(Port Scan)概要
ポートスキャンとは
ポートスキャンとは、ターゲットとなるホストの通信可能なポート番号を探査(スキャン)することです。
ポートスキャンでは、単にポートを確認するだけでなく、ホストの返すバナー情報からアプリケーションの種類やバージョンを確認することができます。
各種OSでTCP/IPという標準化されたプロトコルが実装されていますが、実際にはTCP/IPの実装に微妙な差異があります。
この差異からOSの種類を識別する手法をTCP/IPスタックフィンガープリンティングといいます。
ポートスキャンツール
ポートスキャンツールとしては「nmap」コマンドが有名です。
nmap(Network Mapper)コマンドは、ポートを順にスキャンして空いているポートを調べることができます。
# nmap <オプション> <ホスト名>
nmapコマンドではオプションを指定することで、スキャンするポートの範囲やスキャン方法を設定できます。(詳細はmanコマンドを参照)
# nmap -p1-65535 localhost
(snip)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
ポートスキャンの種類
TCPスキャン
TCP接続の3ウェイハンドシェイク(SYN+SYN/ACK+ACK)が確立した場合、そのポートはListen状態であると判断することができます。
コネクションを確立するため、ターゲットサーバのログに記録されます。
サーバのログを解析することでポートスキャンを受けたかどうか確認することができます。
TCP SYNスキャン(TCPハーフスキャン)
コネクションを確立せずにポートの状態を確認する手法です。
完全な3ウェイハンドシェイクを確立しないため、「ハーフオープンスキャン」または、「ステルススキャン」と呼ばれます。
ポートにSYNパケットだけを送信し、応答パケットを確認します。
・SYN/ACKパケットを受信した場合、そのポートはListen状態にあると判断し、
・RST/ACKパケットを受信した場合、そのポートはCLOSE状態であると判断する。
UDPスキャン
UDPパケットを送信した時に、応答がなければアクティブ状態であり、「ICMP port unreachable」メッセージを受信したなら、そのポートはCLOSE状態にあることがわかります。
UDPはコネクションを確立しない通信ですのでログに記録されません。
TCP FINスキャン
FINパケットを送信した時にRSTパケットを受信したなら、そのポートはCLOSE状態にある。
ターゲットホストがWindowsOSでは使えません。
TCP ACKスキャン
ACKフラグをONにしたパケットを送り、ポートの状態を判別します。
TCP NULLスキャン
すべてのフラグを「0」にしてパケットを送信した時にRSTパケットを受信したなら、そのポートはCLOSE状態にある。
ターゲットホストがWindowsOSでは使えません。
TCP XMASスキャン(TCPクリスマスツリースキャン)
FIN、URG、PUSHのフラグをセットしたパケットを送信した時にRSTパケットを受信したなら、そのポートはCLOSE状態にある。
ターゲットホストがWindowsOSでは使えません。
「TCP FIN」「TCP NULL」「TCP XMAS」などのステルススキャンは接続確立を行いません。
そのため、外部からの接続を禁止しているファイアウォール経由で内部ネットワークのスキャンが可能となります。
ポートスキャンの対策
ポートスキャンは調査行為であり、システムへの侵入やデータ破壊には直接結びつきません。
しかし、脆弱性を露呈することで、本格的な攻撃を受けることにつながりますので、対策が必要です。
予防
- ファイアウォールなどで不要ポートへのアクセスを遮断する。
- 不要サービスを停止する。
- 最新版パッチを適用して、脆弱性対処されたバージョンを利用する。
検知
- ネットワーク監視型IDSを利用する。
- ホスト監視型IDSやIPSを利用する。
- 定期的にログを解析する。
IDS(Intrusion Detection System) | IDSとは、侵入検知システムのことです。パケットやサーバイベント(ログインやプログラム実行など)をリアルタイム監視して、異常を検知します。 |
IPS(Intrusion Prevention System) | IPSとは、侵入防御システムのことです。不正アクセスの検知と遮断を行います。 |