hping

hping(現在はhping3)はpingライクなパケット生成ツールです。ファイアウォールの動作検証等が一般的な用途になるでしょう。
本編では、ファイアウォールのフィルタリングルールを検証するためのhpingの使用法を解説します。
※hping3はhttp://gd.tuwien.ac.at/www.hping.org/index.htmlから取得できます。

TCPフィルタリングの検証

hping3はデフォルトでTCPパケットを生成・送出するようになっています。

# hping3 <ipアドレス>("#"はコマンドプロンプト)

これでTCPパケットを<ipアドレス>に向けて送信します。ただし、このままではTCP 0番ポートに、SYNやACKなどのフラグが一切立っていないパケットを送り続けるので、必要に応じてオプションを指定する必要があります。</ipアドレス>

# hping3 -S -p <宛先ポート番号> <IPアドレス>

上の例では、SYNフラグを立てたTCPパケットを宛先ポート <ポート番号>に向けて送信しています。フィルタリングの基本的な動作を試すのであれば上のコマンドで充分でしょう。
また、ポート番号の前に”++”をつけることで、指定したポート番号から始めて1パケットごとにポート番号を1つインクリメントします。

# hping3 -S -p ++<宛先ポート番号> <IPアドレス>

更に、ポートスキャナーとして使用することも可能です。

# hping3 -V -8 <宛先ポート番号> -S <IPアドレス>

“-8″がポートスキャンオプションです。<宛先ポート番号>には”1-100″のようにハイフンで範囲を指定することも、”150,200,250″のようにカンマで区切って複数のポートを指定することも出来ます。

ICMP、UDPフィルタリングの検証

ICMPパケットを生成するにはオプションに”-1″を指定します。

# hping3 -1 <IPアドレス>

生成されるICMPのデフォルトはICMP Echo Request(type=8, code=0)です。以下のようにすると、ICMPのタイプとコードを指定出来ます。

# hping3 -1 --icmptype <タイプ番号> --icmpcode <コード番号> <IPアドレス>

UDPパケットを生成するにはオプションに”-2″を指定します。フィルタリングの基本的な動作を試すのであれば以下のコマンドで充分でしょう。

# hping3 -2 -p <宛先ポート番号> <IPアドレス>

IPスプーフィング

以下のようにすることで送信元IPアドレスを偽ることが出来ます。送信マシンの持つIPアドレスを使用しない場合、当然ながら応答パケットを受け取ることができません。

# hping3 -a <偽のIPアドレス> -S -p <ポート番号> <IPアドレス>

以上の手法を用いてパケットを作りだし、ファイアウォールのログや宛先マシンでのパケットダンプを確認することで、基本的なフィルタリング動作は確認できるでしょう。

パケットの生成

今節では、hping3がどれだけ多種多様なパケットを作り出せるか確認するために、hping3を使用して「不正な」(疑いのある)パケットを作り出してみることにします。そこでYAMAHAのファイアウォール・ルータSRT100の不正アクセス検知機能で検知可能な「不正なパケット」のうちのいくつかをhping3で作り出してみました。生成した「不正な」パケットの解説などは以下のYAMAHAのサイトをご覧ください。

【参考URL】
YAMAHA RTシリーズの資料庫/文書庫
不正アクセス検知機能(IDS)
http://www.rtpro.yamaha.co.jp/RT/docs/ids/index.html

– Unknown IP protocol

IPヘッダのprotocolフィールドを指定するには、-0でRAW IPモードにする必要があります。-Hオプションでプロトコル番号を記述します。

# hping3 -0 -H 130 192.168.0.2

– Land attack

送信元IPアドレスとあて先IPアドレスが同じになっていると不正アクセスとみなされます。送信元IPアドレスは-aオプションで指定できます。

# hping3 -a 192.168.0.2 -p 80 192.168.0.2

– TCP no bits set

オプションをまったく指定しないと、何のオプションビットも立っていないTCPパケットになります。

# hping3 -p 80 192.168.0.2

– TCP SYN and FIN
– TCP FIN and no ACK

SYNは-S、FINは-Fで指定できます。

# hping3 -SF -p 80 192.168.0.2
# hping3 -F -p 80 192.168.0.2

– Record route IP opt

–rrouteを指定することでrecord routeオプションを有効にすることができます。

# hping3 -S -p 80 --rroute 192.168.0.2

– ICMP timestamp req

-Cオプションで、ICMPのTYPEを、-KでICMPのCODEを指定することができます。コマンドラインオプションではTYPE 15(Information request)や16(Information reply)をサポートしていないようで、エラーになってしまいます。そのような場合は後述のインタラクティブモードでパケットを作り出す必要があります。

# hping3 -1 -C 13 192.168.0.2

– ICMP too large

-dでデータサイズを指定することができます

# hping3 -1 -d 1472 192.168.0.2

– Short IP header

IPヘッダフィールドが示すヘッダ長と実際のヘッダ長が異なるパケットは、hping3のコマンドラインオプションで作り出すことができません。次の通り、インタラクティブモードに移行して「hping send」コマンドを使用するとIPパケットの各フィールドを指定することができます。
IPオプションフィールドを指定していないIPパケットのヘッダ長(ihl)は5(20バイト)なので、この値を4に変えることでShort IP headerを作り出します。

# hping3 [Enter]
hping3> hping send “ip(ihl=4,proto=1,saddr=192.168.1.2,daddr=192.168.0.2,ttl=255)+icmp(type=8
,code=0)”

パケットによってはコマンドラインオプションを用いて作り出せないものもありますが、様々なタイプのパケットを比較的容易に生成できることが分かるでしょう。