Ping Sweeps

Date : 2005-03-10
Author : Defolos

CONTENTS

(1.) Ping Sweepsとは
(2.) Outline of Ping
- Linuxの場合
- Windowsの場合
(3.) Ping Sweepsの利用
(4.) ステルスPing
(5.) Pingのセキュリティ(Linux)
(6.) ShellScriptによる簡易Pinger

Ping Sweepsとは

 ピンスイープ[Ping Sweeps]とはネットワークスキャンの一種で、Pingコマンドを利用してネットワーク上で稼動しているコンピュータを探すスキャンです。
 また、ピンスイープを行うスキャナをPingerといいます。Pingerは高速化のため、複数ICMPエコー要求を並列で送信できます。


Outline of Ping

 ピン[Ping]とは、ICMPのエコー要求(Echo Request)とエコー返答(Echo Reply)を用いて指定したIPアドレスにコンピュータが稼動しているか、または稼動している場合の反応速度を調べるためのユーリティです。

+--------+                    +--------+
| client |--[Echo Riquest]--->| host.A |
|        |<---[Echo Reply]----|        |
+--------+                    +--------+

● Linuxの場合

$ ping [-LRdfnqrv] [-c count] [-i ウェイト] [-l preload] [-p パターン] [-s size] [-t ttl] [-I InterFaceAddress] ホスト名

$ ping 192.168.0.3

64 bytes from 192.168.0.3: icmp_seq=0. ttl=225 time=542.15

64 bytes from 192.168.0.3: icmp_seq=1. ttl=225 time=520.33

64 bytes from 192.168.0.3: icmp_seq=2. ttl=225 time=458.20

64 bytes from 192.168.0.3: icmp_seq=3. ttl=225 time=512.36

 上の例で確認できるicmp_seqとはICMPヘッダに含まれるシーケンス番号(sequence number)であり、この値は新しいICMP要求があるごとに増えていきます。
 ttlはパケット生存時間(Time to Live)を表しています。ttlとは、パケットがネットワーク上で存在できる時間です。

● Windowsの場合

> ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [-j host-list] | [-k host^list]] [-w timeout] ホスト名


Ping Sweepsの利用

 Pingを送りたいホストが192.168.0.3であったとすると、その前後のIPアドレス(192.168.0.2や192.168.0.4)などにPingを送ることで公開されてないコンピュータを検出できる可能性があります。また、Ping Sweepsツールを使えば広範囲IPアドレスを短時間で調べられるので、ターゲッティングの足がかりにも使えます。


ステルスPing

 ルータで内側から外側へ出て行くICMPのEcho Replyをフィルタリングすれば、返答パケットは送信元に届かないため、こちらのコンピュータが存在していないように見えます。それによって、不必要なアタックを避けることができます。
 しかし、nmap(ポートスキャナー)のオプション-p0により検出されてしまいますが、-p0での検索は時間がかかるため、アタッカーはあまり用いないでしょう。それ故、ルータでのフィルタリングも無駄ではありません。


Pingのセキュリティ(Linux)

● Pingloggerの利用

 Pingloggerは、ICMPリクエストを検知するデーモンです。

  1. wgetを利用してRPMファイルをダウンロードします。
  2. ダウンロードしたらインストールしましょう。
  3. デーモンとして起動させます。
  4. 起動以降は、Pingリクエストを受け取ると/var/log/ping.logファイルにログをとります。
# wget http://redhat.ifsic.univ-rennes1.fr/contrib/libc6/i386/pinglogger-1.1-0.i 386.rpm

--05:40:54-- http://redhat.ifsic.univ-rennes1.fr:80/contrib/libc6/i386/pinglogger-1.1-0.i386.rpm => `pinglogger-1.1-0.i386.rpm'

redhat.ifsic.univ-rennes1.fr:80 に接続しています... 接続しました
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 19,297 [application/x-rpm]

0K -> ..................                             [100%]

05:40:57 (15.32 KB/s) - `pinglogger-1.1-0.i386.rpm' を保存しました [19297/19297]

# rpm -Uvh pinglogger-1.1-0.i386.rpm
pinglogger  ##################################################

# /etc/rc.d/init.d/pinglogger start
Starting pinglogger daemon:                              [ OK ]

# tail /var/log/ping.log
Thu Nov 14 05:45:04: ICMP Echo Request Received From: 192.168.1.3
Thu Nov 14 05:45:05: ICMP Echo Request Received From: 192.168.1.3
Thu Nov 14 05:45:06: ICMP Echo Request Received From: 192.168.1.3
Thu Nov 14 05:45:07: ICMP Echo Request Received From: 192.168.1.3

 一秒間に十数個の要求があった場合、PingDOSを受けてる可能性が高いと言えます。


ShellScriptによる簡易Pinger

 ごくごく単純なPingerの例を挙げてみます。実は、ほんとに必要なのは最後の4行だけです。(^^;)


#!/bin/sh

#This script require file that name is "target".
#Contents of target file is IP addressz
#that you wanna scan address.
#And this script output result to "result" file.

echo "Hey! I'11 skyan 2 4arg3t h0s4!"
echo "Don't w0rri. You c@n 1ive it up 2 me!"

for box in `cat target`
do
ping -c 1 -s 8 $box >> result done

 このスクリプトを実行するには"tartet"という名前の、スキャンしたいIPアドレスが書かれたファイルが必要になります。また、結果の出力を"result"という名前のファイルに行いますので、"result"という名前のファイルが作成されます。targetファイルの書式は次の通りです。

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
....

 ソースとtargetファイルを見てもらえば分かる通り、ただ単にPingを自動化しただけです。お粗末なスクリプトで申し訳ないです。


■参考文献


go back to the TOP page of Glazheim Lykeion.