SANS Institute によると、ポートスキャンは攻撃者がシステムに侵入するために利用できるサービスを見つけようとして使用する最も一般的な手法の1つです。ポートスキャンは本質的には悪質な意図を含むものではありませんが、ネットワークへの侵入や機密データの盗難/破壊を試みる際にハッカーが使用する偵察の最初のステップとなることがよくあります。このブログでは、ハッカーからの攻撃を防御し、潜在的な ネットワーク侵害を防ぐために実施できるネットワーク監視のベストプラクティスについて説明します。
まず最初に
ポートスキャンを実行するには、まずアクティブなホストのリストが必要です。ネットワークスキャンは、ネットワーク上のすべてのアクティブなホストを検出し、検出されたホストをその IP アドレスにマッピングするプロセスです。アクティブなホストのリストがあれば、ポートスキャン、ホスト上の特定のポートへのパケット送信、応答の分析(実行中のサービスに関する詳細をチェックしたり、潜在的な脆弱性を特定したりといった)などが実行できます。
ホスト検出のためのネットワークスキャン
どのシステムが稼働していてネットワーク上で待機しているかを判別するプロセスは、ホスト検出 と呼ばれます。多くのハッカーが敵意ある攻撃のために最初に使用するプロセスでもあります。ホスト検出には主に2つのプロトコルが使われます。アドレス解決プロトコル(Address Resolution Protocol、ARP)スキャンと、様々な形式のインターネット制御メッセージプロトコル(Internet Control Message Protocol、ICMP)スキャンです。
ARP スキャンは、ローカルサブネット上の IP アドレスを MAC アドレスにマッピングするプロセスです。ARP リクエストをローカルエリアネットワーク(Local Area Network、LAN)上のすべての IP アドレスに送信して、ARP リプライで応答するホストに基づいてどのホストが起動しているかを判断できます。ARP リクエストは LAN 内でのみ機能するため、ARP スキャンを使う潜在的な攻撃者がいる場合、その攻撃者は内部ネットワークとの接続が確立されているはずです。
LAN の外部からネットワークスキャンを実行するには、ARP の代わりに使用できる様々な ICMP パケットがあります。エコー要求、タイムスタンプ要求、アドレスマスク要求などです。エコー要求あるいは ping 要求はホストに到達できるかどうかを検出するために使用され、タイムスタンプパケットで2つのホスト間の待ち時間が判定できます。アドレスマスク要求を使用して、ネットワークで使用されているサブネットマスクを見つけることができます。
ICMP メッセージを介したネットワーク上のホスト検出の成否は、ターゲットホストから対応する応答を受信できるかどうかにかかっています。応答がない場合は、ターゲットアドレスにホストがないか、ICMP メッセージタイプがターゲットホストでサポートされていない可能性があります。最初の要求がファイアウォールやパケットフィルタによってブロックされている可能性もあります。一般的には、ネットワークの内部から発信されていない ICMPエコー(ping)要求はファイアウォールによってブロックされることが多いですが、タイムスタンプ要求やアドレスマスク要求がブロックされる可能性は低いです。
次のステップ:ポートスキャン
ネットワークスキャンが完了し、アクティブなホストのリストが用意できたら、次のステップはポートスキャンです。ポートスキャンを使用して、特定のポートがアクティブなホストによって使用可能にされているかどうかを識別できます。ポートスキャンは通常、ポートを次の3つのカテゴリのいずれかに分類します。
オープン: ターゲットホストは、そのポートで待機していることを示すパケットで応答します。オープン状態であれば、スキャンに使用されたサービス(通常は TCP または UDP)も使用可能になっています。
クローズ中: ターゲットホストは要求パケットを受信しましたが、そのポートで待機しているサービスがないことを示す応答を返します。
フィルタ中: 要求パケットが送信されても応答が受信されなかった場合、ポートはフィルタ中として分類されます。これは通常、要求パケットがファイアウォールによってフィルタリングされてドロップされたことを示します。
ポートスキャンの手法
前述のように、ポートスキャンで一般的に使用されるプロトコルは TCP と UDP であり、これらのプロトコルを使って実際にポートスキャンを実行する手法はいくつかあります。
TCP スキャンのうちで最も一般的なものは SYN スキャンです。SYN パケットを送信してホストからの応答を評価することによって、ターゲットポートでホストへの部分的な接続を行います。ホストは、要求パケットがファイアウォールによってフィルタリングまたはブロックされていなければ、ポートがオープンの場合は SYN/ACK パケットを送信し、ポートがクローズ中の場合は RST パケットを送信して応答します。
TCP スキャンのもう1つの方法は、TCP 接続スキャンです。スキャン実行者は、TCP 接続システムコールを使用してターゲットホストのポートに接続し、完全な TCP ハンドシェイクプロセスを開始しようとします。このプロセスはパケット送信のオーバーヘッドが非常に大きくなるので簡単に検出することができ、結果的に、ポートスキャンとしてはあまり利用されていません。
他のタイプの TCP ポートスキャンとしては、NULL、FIN、Xmas があります。これら3種類のスキャンは、TCP ヘッダーフラグを操作します。NULL スキャンはヘッダーにフラグが設定されていないパケットを送信し、FIN スキャンはヘッダーに FIN ビットのみが設定されています。Xmas スキャンパケットでは、FIN、PSH、URG の各フラグビットがオンになっているため、「クリスマスツリーのように点灯」しているように見えるので、Xmas スキャンという名前がついています。
UDP スキャンも、TCP スキャンと同様、ターゲットホストのさまざまなポートに UDP パケットを送信し、応答パケットを評価してホスト上のサービスの可用性を判断します。応答パケットが受信できれば、ポートがオープンであることがわかります。
ポートスキャンへの対策
近ごろは、たいていのネットワーク侵入検知システムとファイアウォールは、悪意のあるネットワークスキャンを検知するように事前設定されています。一方、潜在的な攻撃者はそれに対抗するようにより狡知になって、スキャンの頻度を変更したり、順番に関係なくポートにアクセスしたり、送信元アドレスを偽装したりすることで、よく使われる検出ルールの網の目をくぐり抜けようとします。ネットワークの抜け穴を見つけて侵入すようとする悪意あるネットワークスキャンから防御するための最善の策は、まず抜け穴がないように細心の注意を配ることです。
ネットワークセキュリティ全体を考えるとき、ホストの脆弱性を理解しておくことは大変重要です。ネットワークエンジニアには、マルウェア、ワーム、ハッカー、トロイの木馬、ウイルスなどからネットワーク・インフラストラクチャを守る責任があります。侵入して攻撃しようとする、悪意ある動きに対して、阻止するための対策が必要です。
ポートスキャンへの対策としてのベストプラクティスは、しばしば試みられる、「目には目を」的な手法を使うことです。守るべきネットワークの抜け穴を、悪意ある攻撃者が発見する前に、攻撃者と同じような視点でスキャンして、ふさぐことを考えます。