1.2 ポートスキャン

相手ホストにダメージを与える、若しくは侵入するといったとき、 事前の準備としポートスキャンと呼ばれることを行う場合が多くあります。
ポートスキャンは、泥棒が家屋に侵入する、どこに鍵がかかっているか、 そして鍵がかかっていないところを探す行為に近いと考えることができます。
ポートスキャンが違法行為かどうかは意見の分かれるところですが、 悪意を持った場合もあります。
ポートスキャンを受ける側としては、穴を見せないということが必要です。 攻撃する側からは、ポートスキャンを行い、穴を発見するとそこから攻撃を行います。 つまり、弱い部分を見せると確実に狙われるということです。
攻撃を受けないためには、弱い部分を発見するポートスキャンを受けた段階で、 弱味を見せないということが大前提なのです。

ポートの状態を確認した後は、攻撃するためにOSを絞り込む作業を行います。
これによって、より的確な攻撃を行うことができます。

ポートスキャンは攻撃のときばかり使用するわけではありません。 管理者が、どのポートが空いているのか等を確認するときにも使用します。
これは、ポートスキャンに限らず、スキャナ全般において言えることです。 まずは、不要なポートが空いていないかポートスキャンを行う必要があります。 もし、ポートスキャンの結果が問題無いようであっても安心はできません。 安全性を確認するものではなく、少しでも安全な環境に近づくためのものに過ぎないのです。

1.2.1 ポートスキャンの実際

では実際にポートスキャンはどのようにして行われるのでしょうか。
まず、ポートスキャンを行うには、相手を絞る必要があります。 この相手を絞るためのものはいくつかありますが、たとえば次のようなものです。

このように、ある程度対象を絞ります。次に対象となるサイトがどのIPアドレスを使用しているかを調べます。これは、ドメイン情報から簡単に確認することができます。
スキャン対象となるサイトのIPアドレスの範囲が割り出せると、実際にどのIPアドレスにホストが接続されているかを調べる作業に入ります。


画面1.2.1-1 稼動ホストを調べる

このように、スキャン対象のサイトには192.168.0.1というIPアドレスが実際に使用されていることがわかります。
それでは、このIPアドレス(192.168.0.1)に対してどのポートが開いているかをポートスキャンによって確認してみます。


画面1.2.1-2 ポートスキャンの実行

ここまでで対象となるホストはポート 21,22,23,25,111 が空いていることが分かりました。 このポートに対して攻撃を行うことになります。攻撃する側からは、 闇雲に攻撃を仕掛けるのでは時間と労力の無駄になります。
たとえば、存在しないホストに対して攻撃するほど無駄なことはないでしょう。 同様に、空いてもいないポートに対して攻撃を行っても大きな意味はありません。
ただし、ポートスキャンで空いていないポートにも攻撃を行うことは可能です。 空いていないポートが安全なのではなく、空いているより良いという程度に考えておくようにしてください。

なお、ポートスキャンで使用するツールは元々管理用として作成されたものです。

1.2.2 ポートスキャンの各種方法

ポートスキャンにはいくつかの方法があります。 どれもTCP/IPの特性を利用したものです。 これを表にまとめました。

表1.2.2-1 ポートスキャンの主な方法
方法 TCP/UDP 概要
TCPスキャン TCP 標的ポートに接続し、3wayハンドシェークと呼ばれるSYN-SYN/ACK-ACKのシーケンスを実行します。
被攻撃サイトにおいてスキャン行為の検出は容易。
SYNスキャン TCP 完全なTCP接続を行わないスキャン手法です。 ハーフオープンスキャンまたはステルススキャンと呼ばれています。 代わりに、SYNパケットを標的のポートに送信する。
  • 標的ポートからSYN/ACKを受信した場合のポートはリスン状態
  • 標的ポートからRST/ACKを受信した場合のポートは非リスン状態
FINスキャン TCP 標的にFINパケットを送信するスキャン手法です。 標的ホストは、RFC793に基づき、 クローズした全てのポートにRSTを送り返さなければなりません。
この手法は、UNIXのBSDソケットにしか通用しません。
クリスマスツリースキャン TCP 標的ポートに、FIN,URG,PUSHパケットを送信するスキャン手法です。
FINスキャン同様、標的ホストはクローズした全てのポートについて RSTを送り返さなければなりません。
NULLスキャン TCP 全てのフラグを"0"にするスキャン手法。
FINスキャン同様、標的ホストはクローズした全てのポートについて RSTを送り返さなければなりません。
UDPスキャン UDP 標的ポートにUDPパケットを送信。標的ポートが "ICMP port unreachable" というメッセージで応答した場合、ポートはクローズされていることを確認するスキャン手法です。
パケットフィルタリングを施したデバイスに対するUDPスキャンは、 比較的時間がかかります。 また、UDPの性質上、ネットワーク越しにスキャンを行う場合の信頼性は非常に低くなります。

1.2.3 スタックフィンガープリンティングとは?

スタックフィンガープリンティングとは、ホストのOSを特定するものです。
OSが特定されるとその攻撃方法の範囲が決まります。 以下で紹介するnmap は元々管理用として作成されたものであり、自組織内部で利用するものです。 管理用のツールによってポートがオープンされていなくてもOS特定が可能となります。

1.2.4 Anonymous FTPによるポートスキャン

サーバ側でポートスキャンの状況をロギングしにくい方法があります。 この方法の一つがAnonymous FTPを使用したポートスキャンです。
FTPは、コマンドとデータの通信では異なるポートを利用します。 これによって、ロギング上ではFTPの利用として見える訳なのです。
しかし、下記のように500番代のエラーを返すFTPサーバのソフトウェアを使用するか、 設定を加えることでFTPによるポートスキャンは回避することができます。

  1. Anonymous FTPにtelnet(ポート21)で接続する。
  2. ユーザ名anonymousでログイン。
    user anonymous
  3. パスワードとしてメールアドレスを入力します。
    pass mymail@attack.co.jp
  4. PORTコマンドでIPアドレスとポート番号を送ります。
    port IPアドレス,ポート1,ポート2
    ここで、500番台の数字が返された場合、 このAnonymous FTPサーバではポートスキャンを行うことができません。
  5. もしPORTコマンドが利用可能であればLISTコマンドでファイルリストを取得
    list
  6. PORTコマンドの結果を確認
    指定されたポートが開いているならば150が返され、 ポートが開いていないならば425が返されます。
    425 Can't build data connection: Connection refused.

このようにあらゆる手法によってポートスキャンが行われています。
注意してログ等を確認しないと気づかないこともあります。 そして、ポートスキャンを受け発見された弱点から攻撃や踏み台として利用されるのです。


    Copyright(C)  2001 Information-technology Promotion Agency, Japan.  All rights reserved.