URPF (Unicast Reverse Path Forwarding) ağ ve güvenlik cihazlarında IP spoofing'le mücadele etmek için kullanılan bir özelliktir.
Basitçe,  URPF paketin kaynak IP adresinin yönlendirme tablosu ile karşılaştırılması sonucu paketin uygun arayüzden gelip gelmediğinin kontrol eder. URPF, internetten gelecek paketler için değil, güvenlik/ağ 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 ü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şebilecektir.
DDoS testlerinde yoğun kullanılan Hping,  ağ testleri icin kullanılan açık kaynak kodlu bir yazılımdır. Özellikle --rand-source parametresi ile kaynak IP adreslerinin değişken olması sağlanabilmektedir.

Ancak istenen ip adres bloğundan kaynak paketlerin gönderilebilmesi hping ile ön tanımlı olarak sağlanamamaktadır. Geliştirilen yama ile bu özellik --rand-pattern-source parametresi ile sağlanabilmektedir. İlgili yamanın uygulanması ve sonrasında kullanımına  dair ayrıntılar aşağıda anlatılmaktadır.

Kurulum öncesi sistem gereksinimleri

- tcl paketlerinin kurulu olması gerekmektedir.

# apt-get install tcl8.4 tcl8.4-dev

- libpcap için bir symbolic link ataması gerekmektedir.

# mkdir /usr/local/include/net
# ln -sf /usr/include/pcap-bpf.h /usr/local/include/net/bpf.h


Kurulum

# wget http://www.hping.org/hping3-20051105.tar.gz
# wget --no-check-certificate https://raw.github.com/galkan/araclar/master/hping-rand-pattern
# tar -zxvf hping3-20051105.tar.gz
# cd hping3-20051105/
# patch -p1 -i ../hping-rand-pattern
# ./configure; make; make install


Kullanım

Gerekli yamanın uygulanmasının ardından kurulum işlemi tamamlanır ve --rand-pattern-source parametresi ile istenilen IP bloğundan paketler gönderilebilmektedir. Örneğin 127.0.0.1 hedefinin tcp/3737 portuna 192.168.x.x kaynak IP adres bloğundan paket göndermek için;

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

şeklinde bir kullanım gerekmektedir. İlgili paketlere ait tcpdump çıktısı ise aşağıda göruldügü gibi olmaktadır.

# 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

Görüldüğü gibi 192.168.111.137, 192.168.108.254 ve 192.168.174.173 kaynak IP adreslerinden paketler gelmektedir. Yine aynı şekilde 127.0.0.1 hedef sunucusunun tcp/3737 portuna 192.x.x.37 kaynak ip adres bloğundan paket göndermek için;

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

şeklinde bir kullanım gerekmektedir. İlgili paketlere ait tcpdump çıktısı ise aşağıda görüldüğü gibi olmaktadır.

# 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

Görüldüğü gibi 192.181.54.37, 192.27.215.37 ve kaynak ip adreslerinden paketler gelmektedir. Tamamen değişken kaynak IP adresleri üretmek için ise --rand-pattern-source x.x.x.x kullanılamamaktadır. Hping ile ön tanımlı sağlanan bu özellik --rand-source parametresi aracılığı ile gerçekleştirilmektedir. Bu şekilde kullanıldığında ise aşağidaki gibi uyarı alınacaktır.

# 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 aynı şekilde hem --rand-pattern-source ve --rand-source parametreleri aynı anda kullanılamamaktadır. Bu durumda aşağıdaki gibi uyarı mesaji alınacaktır.

# 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 !


Sözün Özü

Bu yama ile Hping istenen kaynak IP adresi yada IP adres bloğundan istenen paketleri üretebilmektedir. Özellikle network testlerinde kullanilan bu yöntem hping ile gerçekleştirilebilmektedir.

Yazar: Gökhan ALKAN, twitter: @cigalkan

0 comments:

Post a Comment

 
Top