Hping Kullanarak URPF Korumalı Ağlarda IP Spoofing

URPF(Unicast Reverse Path Forwarding) ağ ve güvenlik cihazlarında IP spoofing’le mücadele etmek için kullanılan bir özelliktir.

Basitce URPF paketin kaynak ip adresinin yonlendirme tablosu ile karsilastirilmasi sonucu paketin uygun arabirimden gelip gelmediginin kontrol eder. URPF, internetten gelecek paketler için değil, güvenlik/network cihazı tarafından korunan sistemler için geçerlidir.

DDoS testleri gerçekleştirilirken genellikle test yapılan ağın çıkışındaki bir ağ/güvenlik cihazı üretilen sahte ip paketlerini URPF’den (ya da benzeri bir özellikten) dolayı engelliyor olabilir. Bu gibi durumlarda DDoS testlerinde üretilen paketler internete çıkamayacağı için hedef sisteme etkisi olmayacaktır. Bu gibi ortamlarda gönderilecek paketler kullanılan sistemle aynı subnetten üretilirse (mesela DDoS testi icin kullanılan sistemin ip adresi 192.168.1.3/24 olsun, burada 192.168.1.0/24 subnetinden rastgele ip kullanılabilir) URPF’e takılmadan hedef sisteme erişecektir.

DDoS testlerinde yoğun kullanılan Hping,  network testleri icin kullanilan acik kaynak kodlu bir yazilimdir. Ozellikle –rand-source parametresi ile kaynak ip adreslerinin değişken olması sağlanabilmektedir.

Ancak istenen ip adres blogundan kaynak paketlerin gonderilebilmesi hping ile on tanımlı olarak saglanamamaktadir. BGA ekibinden Omer Albayrak tarafından  geliştirilen yama ile bu ozellik –rand-pattern-source parametresi ile sağlanabilmektedir. Ilgili yamanın uygulanması ve sonrasında kullanımına  dair ayrıntılar aşağıda anlatılmaktadır.

Kurulum öncesi sistem gereksinimleri:

– tcl paketleri kurulu olması lazım.
apt-get install tcl8.4 tcl8.4-dev

– libpcap için bir symbolic link atmak gerekiyor.

mkdir /usr/local/include/net
ln -sf /usr/include/pcap-bpf.h /usr/local/include/net/bpf.h
# wget http://www.hping.org/hping3-20051105.tar.gz
# wget http://cvs.bga.com.tr/hping-rand-pattern.patch
# tar -zxvf hping3-20051105.tar.gz
# cd hping3-20051105/
# patch -p1 -i ../hping-rand-pattern.patch
# ./configure; make; make install

Gerekli yamanin uygulanmasinin ardindan kurulum islemi tamamlanir ve –rand-pattern-source parametresi ile istenilen ip blogundan paketler gonderilebilmektedir. Ornegin 127.0.0.1 hedefinin tcp/3737 portuna 192.168.x.x kaynak ip adres blogundan paket gondermek icin;

# hping3 -c 3 -S -p 3737 127.0.0.1 –rand-pattern-source 192.168.x.x

seklinde bir kullanim gerekmektedir. Ilgili paketlere ait tcpdump ciktisi ise asagida goruldugu gibi olmaktadir.

# tcpdump -tttnn -i lo port 3737
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
00:00:00.000000 IP 192.168.111.137.1193 > 127.0.0.1.3737: Flags [S], seq 969737665, win 512, length 0
00:00:00.000019 IP 127.0.0.1.3737 > 127.0.0.1.1193: Flags [R.], seq 0, ack 969737666, win 0, length 0
00:00:01.000134 IP 192.168.108.254.1194 > 127.0.0.1.3737: Flags [S], seq 1919278313, win 512, length 0
00:00:00.000022 IP 127.0.0.1.3737 > 127.0.0.1.1194: Flags [R.], seq 0, ack 1919278314, win 0, length 0
00:00:01.000108 IP 192.168.174.173.1195 > 127.0.0.1.3737: Flags [S], seq 1078569436, win 512, length 0
00:00:00.000022 IP 127.0.0.1.3737 > 127.0.0.1.1195: Flags [R.], seq 0, ack 1078569437, win 0, length 0

Goruldugu gibi 192.168.111.137, 192.168.108.254 ve 192.168.174.173 kaynak ip adreslerinden paketler gelmektedir. Yine ayni sekilde 127.0.0.1 hedef sunucusunun tcp/3737 portuna 192.x.x.37 kaynak ip adres blogundan paket gondermek icin;

# hping3 -c 3 -S -p 3737 127.0.0.1 –rand-pattern-source 192.x.x.37

seklinde bir kullanim gerekmektedir. Ilgili paketlere ait tcpdump ciktisi ise asagida goruldugu gibi olmaktadir.

# tcpdump -tttnn -i lo port 3737
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
00:00:00.000000 IP 192.181.54.37.1956 > 127.0.0.1.3737: Flags [S], seq 119506247, win 512, length 0
00:00:00.000014 IP 127.0.0.1.3737 > 127.0.0.1.1956: Flags [R.], seq 0, ack 119506248, win 0, length 0
00:00:01.000141 IP 192.27.215.37.1957 > 127.0.0.1.3737: Flags [S], seq 556719496, win 512, length 0
00:00:00.000020 IP 127.0.0.1.3737 > 127.0.0.1.1957: Flags [R.], seq 0, ack 556719497, win 0, length 0
00:00:01.000126 IP 192.73.27.37.1958 > 127.0.0.1.3737: Flags [S], seq 1832818380, win 512, length 0
00:00:00.000021 IP 127.0.0.1.3737 > 127.0.0.1.1958: Flags [R.], seq 0, ack 1832818381, win 0, length 0

Goruldugu gibi 192.181.54.37, 192.27.215.37 ve kaynak ip adreslerinden paketler gelmektedir. Tamamen degisken kaynak ip adresleri uretmek icin ise –rand-pattern-source x.x.x.x kullanilamamaktadir. Hping ile on tanimli saglanan bu ozellik –rand-source parametresi araciligi ile gerceklestirilmektedir. Bu sekilde kullanildiginda ise asagidaki gibi uyari alinacaktir.

# hping3 -c 3 -S -p 3737 127.0.0.1 –rand-pattern-source x.x.x.x
HPING 127.0.0.1 (lo 127.0.0.1): S set, 40 headers + 0 data bytes
Try –rand-source yeah 🙂

Yine ayni sekilde hem –rand-pattern-source ve –rand-source parametreleri ayni anda kullanilamamaktadir. Bu durumda asagidaki gibi uyari mesaji alinacaktir.

# hping3 -c 3 -S -p 3737 127.0.0.1 –rand-pattern-source 127.x.x.x –rand-source
Not use both –rand-pattern-source && –rand-source options !

Kisaca bu yama ile hping istenen kaynak ip adresi yada ip adres blogundan istenen paketleri uretebilmektedir. Ozellikle network testlerinde kullanilan bu yontem hping ile gerceklestirilebilmektedir.