Firewall/IDS Evasion and Spoofing

Banyak pionir Internet mempunyai visi jaringan terbuka global dengan ruang alamat IP universal yang memungkinkan koneksi virtual antara dua node. Hal ini membuat host bertindak sebagai peer sebenarnya, menyajikan dan mengambil informasi satu sama lain. Orang dapat mengakses sistem di rumah mereka dari tempat kerja, merubah seting kendali iklim atau membuka pintu bagi tamu yang datang awal. Visi konektivitas universal ini telah dibatasi dengan kekurangan ruang alamat dan masalah keamanan. Di awal tahun 1990-an, organisasi mulai menggunakan firewall dengan tujuan mengurangi konektivitas. Jaringan besar dibatasi dari Internet oleh proxy aplikasi, network address translation, dan filter paket. Aliran informasi yang tidak terbatas berubah menjadi regulasi ketat atas kanal komunikasi dan isi yang melaluinya.

Penghalang jaringan seperti firewall dapat membuat pemetaan jaringan sukar. Ia tidak akan menjadi lebih mudah, karena mengurangi reconnaissance umum adalah tujuan utama implementasi device tersebut. Namun demikian, Nmap menawarkan banyak fitur untuk membantu memahami jaringan yang kompleks ini, dan untuk memverifikasi bahwa filter bekerja sebagaimana yang diharapkan. Ia bahkan mendukung mekanisme untuk melewati pertahanan yang diimplementasikan dengan buruk. Salah satu metode terbaik untuk memahami postur keamanan jaringan anda adalah dengan berusaha mengalahkannya. Tempatkan diri anda dalam pola pikir penyerang, dan gunakan teknik-teknik dari bagian ini terhadap jaringan anda. Lakukan scan FTP bounce, scan idle, serangan fragmentasi, atau berusaha melakukan tunnel melalui salah satu proxy anda.

Selain membatasi aktivitas jaringan, perusahaan semakin meningkatkan pemantauan lalu lintas dengan intrusion detection systems (IDS). Seluruh IDS utama menyertakan aturan yang dirancang untuk mendeteksi scan Nmap karena scan terkadang merupakan awal serangan. Banyak dari produk-produk ini yang sekarang berubah menjadi intrusion prevention systems (IPS) yang secara aktif memblokir lalu lintas yang dianggap berbahaya. Sayangnya bagi administrator jaringan dan vendor IDS, mendeteksi tujuan jahat dengan menganalisis data paket merupakan masalah yang berat. Penyerang dengan kesabaran, keahlian, dan bantuan opsi-opsi Nmap tertentu biasanya dapat melewati IDS tanpa terdeteksi. Selain itu, administrator harus berurusan dengan hasil false positive dalam jumlah besar sehingga aktivitas yang tidak berbahaya salah didiagnosa dan di-alert atau diblokir.

Terkadang orang menyarankan bahwa Nmap tidak seharusnya menawarkan fitur-fitur untuk melewati aturan firewall atau menyelinap dari IDS. Mereka berargumen bahwa fitur-fitur ini akan disalahgunakan oleh penyerang alih-alih digunakan oleh administrator untuk memperbaiki keamanan. Permasalahan dengan logika ini adalah metode-metode tersebut tetap akan digunakan oleh penyerang, yang akan mencari tool lain atau menambahkan fungsionalitas tersebut ke dalam Nmap. Sedangkan, administrator akan merasa lebih sulit melakukan pekerjaan mereka. Menggunakan server FTP yang telah dipatch dan modern adalah pertahanan yang jauh lebih baik daripada mencegah penyebaran tool implementasi serangan FTP bounce.

Tidak ada peluru ajaib (atau opsi Nmap) untuk mendeteksi dan menghindari firewall dan sistem IDS. Ia membutuhkan kemampuan dan pengalaman. Tutorial adalah di luar cakupan panduan referensi ini, yang hanya mendaftarkan opsi-opsi yang relevan dan menjelaskan apa yang mereka lakukan.

-f (fragment packets); --mtu (using the specified MTU)

Opsi -f menyebabkan scan yang diminta (termasuk ping scan) untuk menggunakan paket IP terfragmentasi kecil. Idenya adalah membagi header TCP ke beberapa paket untuk membuat filter paket, IDS, dan gangguan lain kesulitan mendeteksi apa yang sedang anda lakukan. Hati-hatilah dengan ini! Beberapa program memiliki kesulitan menangani paket-paket kecil ini. Sniffer old-school bernama Sniffit akan menjadi segmentation faulted segera setelah menerima fragmen pertama. Spesifikasikan opsi ini sekali, dan Nmap membagi paket ke dalam delapan byte atau kurang setelah header IP. Sehingga paket header TCP 20-byte akan dibagi ke dalam tiga paket. Dua paket dengan delapan byte header TCP, dan satu paket dengan empat byte akhir. Tentu saja setiap fragmen juga memiliki header IP. Spesifikasikan -f lagi untuk menggunakan fragmen 16 byte (mengurangi jumlah fragmen). Atau anda dapat menspesifikasikan ukuran offset anda sendiri dengan opsi --mtu. Jangan berikan opsi -f bila anda menggunakan --mtu. Offset harus merupakan kelipatan delapan. Meskipun paket fragmented tidak akan melewati filter paket dan firewall yang membuat antrian seluruh fragment IP, seperti opsi CONFIG_IP_ALWAYS_DEFRAG dalam kernel Linux, beberapa jaringan tidak dapat mengatasi kerugian kinerja yang disebabkannya dan membiarkan opsi tersebut tidak aktif. Yang lain tidak dapat mengaktifkannya karena fragmen dapat mengambil rute yang berbeda ke jaringan mereka. Beberapa sistem sumber mendeframentasi paket outgoing dalam kernel. Linux dengan modul pelacakan koneksi iptable adalah salah satu contohnya. Lakukan scan ketika sniffer seperti Wireshark berjalan untuk memastikan bahwa paket yang dikirim terfragmentasi. Jika OS host anda menyebabkan masalah, cobalah opsi --send-eth untuk melewati lapisan IP dan mengirim frame ethernet raw.

Fragmentasi hanya didukung oleh fitur paket raw Nmap, yang mencakup scan port TCP dan UDP (kecuali scan connect dan FTP bounce scan) dan deteksi SO. Fitur seperti deteksi versi dan Nmap Scripting Engine umumnya tidak mendukung fragmentasi karena mereka tergantung pada stack TCP host anda untuk berkomunikasi dengan layanan target.

-D <decoy1>[,<decoy2>][,ME][,...] (Cloak a scan with decoys)

Menyebabkan dilakukannya decoy scan, yang membuat host remote menganggap bahwa host-host yang anda berikan sebagai umpan (decoy) juga melakukan pemeriksaan jaringan target. Karenanya IDS mereka mungkin melaporkan scan port sebanyak 5–10 dari alamat IP yang unik, tetapi mereka tidak akan tahu IP mana yang memeriksa mereka dan mana yang umpan. Meski hal ini dapat dikalahkan dengan router path tracing, response-dropping, dan mekanisme aktif lainnya, namun ia umumnya merupakan teknik efektif untuk menyembunyikan alamat IP anda.

Pisahkan setiap host umpan dengan koma, dan anda dapat secara opsional menggunakan ME sebagai salah satu umpan untuk mewakili posisi alamat IP real anda. Jika anda menempatkan ME pada posisi keenam atau lebih, beberapa detektor scan port umum (seperti Solar Designer's Scanlogd yang bagus) tidak akan menampilkan alamat IP anda sama sekali. Jika anda tidak menggunakan ME, Nmap akan menempatkan anda pada posisi acak. Anda dapat juga menggunakan RND untuk menghasilkan alamat IP acak dan non-reserved, atau RND:<number> untuk menghasilkan alamat <number>

Perhatikan bahwa host yang anda gunakan sebagai umpan harus hidup atau anda akan secara tidak sengaja mebanjiri target anda dengan SYN. Juga mudah menentukan host mana yang memeriksa jika hanya satu host saja yang hidup pada jaringan. Anda mungkin ingin menggunakan alamat IP alih-alih nama (sehingga jaringan umpan tidak melihat anda dalam log DNS mereka).

Umpan digunakan dalam scan ping awal (menggunakan ICMP, SYN, ACK, atau apapun) dan selama fase pemeriksaan port. Umpan juga digunakan selama deteksi SO (-O). Umpan tidak bekerja dengan deteksi versi atau scan connect TCP. Ketika berlaku scan delay, delay ditegakkan antara setiap batch probe palsu, tidak antara setiap probe invididual. Karena umpan dikirim sebagai satu batch keseluruhan, mereka mungkin melanggar batasan kendali kongesti secara sementara.

Penting diperhatikan bahwa penggunaan terlalu banyak umpan mungkin memperlambat scan anda dan secara potensial membuatnya kurang akurat. Dan juga, beberapa ISP akan menyaring paket-paket palsu anda, namun banyak juga yang tidak membatasi paket IP palsu.

-S <IP_Address> (Spoof source address)

Dalam beberapa keadaan, Nmap mungkin tidak dapat menentukan alamat sumber anda (Nmap akan memberitahu anda hal ini). Dalam situasi ini, gunakan -S dengan alamat IP interface yang ingin anda gunakan untuk mengirim paket.

Kemungkinan lain penggunaan flag ini adalah untuk memalsukan scan untuk membuat target berpikir bahwa orang lain sedang memeriksa mereka. Bayangkan sebuah perusahaan sedang diperiksa portnya secara berulang-ulang oleh pesaing! Opsi -e dan -PN umumnya dibutuhkan untuk penggunaan seperti ini. Perhatikan bahwa anda biasanya tidak menerima paket reply (mereka akan ditujukan ke alamat IP yang anda palsukan), sehingga Nmap tidak akan menghasilkan laporan yang berguna.

-e <interface> (Use specified interface)

Memberitahu Nmap interface untuk mengirim dan menerima paket. Nmap seharusnya dapat mendeteksinya secara otomatis, namun ia akan memberitahu anda bila ia tidak dapat melakukannya.

--source-port <portnumber>; -g <portnumber> (Spoof source port number)

Salah satu kesalahan konfigurasi umum yang mengagetkan adalah mempercayai lalu lintas hanya berdasarkan nomor port sumber. Adalah mudah memahami bagaimana hal ini terjadi. Administrator akan mensetup firewall baru, hanya untuk dibanjiri dengan keluhan user yang aplikasinya berhenti bekerja. Secara khusus, DNS mungkin tidak berfungsi karena reply UDP DNS dari server eksternal tidak dapat lagi memasuki jaringan. FTP adalah contoh umum lainnya. Dalam transfer FTP aktif, server remote berusaha membuka koneksi ke klien untuk mengirim file yang diminta.

Terdapat solusi aman untuk masalah ini, seringkali berupa proxy level-aplikasi atau modul firewall protocol-parsing. Sayangnya terdapat pula solusi yang lebih mudah dan tidak aman. Dengan memperhatikan bahwa balasan DNS datang dari port 53 dan active FTP dari port 20, banyak aadministrator terjebak dengan membolehkan lalu lintas incoming dari port-port ini. Mereka terkadang berasumsi bahwa tidak ada penyerang akan memperhatikan dan memanfaatkan lubang firewall ini. Dalam kasus lain, administrator menganggap ini sebagai solusi sementara hingga mereka dapat mengimplementasikan solusi yang lebih aman. Lalu mereka lupa melakukan upgrade keamanan.

Administrator jaringan yang terlalu banyak kerja bukan satu-satunya yang jatuh dalam jebakan ini. Sejumlah produk dikirim dengan rule tidak aman ini. Bahkan Microsoft telah bersalah. Filter IPsec yang disertakan dengan Windows 2000 dan Windows XP berisikan sebuah rule implisit yang membolehkan semua lalu lintas TCP atau UDP dari port 88 (Kerberos). Dalam kasus terkenal lain, firewall personal Zone Alarm hingga versi 2.1.25 membolehkan sembarang paket UDP incoming dengan port sumber 53 (DNS) atau 67 (DHCP).

Nmap menawarkan opsi -g dan --source-port (mereka ekivalen) untuk mengeksploitasi kelemahan ini. Cukup berikan nomor port dan Nmap akan mengirim paket dari port itu bila memungkinkan. Nmap harus menggunakan nomor port yang berbeda bagi beberapa tes deteksi SO tertentu agar bekerja dengan benar, dan request DNS mengabaikan flag --source-port karena Nmap mengandalkan pada librari sistem untuk menangani hal ini. Kebanyakan scan TCP, termasuk SYN scan, mendukung opsi secara penuh, demikian pula scan UDP.

--data-length <number> (Append random data to sent packets)

Normalnya Nmap mengirim paket minimalis yang hanya berisi header. Sehingga paket TCP umumnya berukuran 40 byte dan request ICMP echo cuma 28. Opsi ini memberitahu Nmap untuk menambahkan random byte sejumlah tertentu untuk kebanyakan paket yang dikirimnya. Paket deteksi SO (-O) tidak terpengaruh karena akurasinya membutuhkan konsistensi probe, namun kebanyakan paket ping dan portscan mendukung opsi ini. Ia sedikit memperlambat, namun dapat membuat scan tidak terlalu mencurigakan.

--ip-options <S|R [route]|L [route]|T|U ... >; --ip-options <hex string> (Send packets with specified ip options)

Protokol IP menawarkan beberapa opsi yang dapat ditempatkan pada header paket. Tidak seperti opsi TCP yang umum, opsi IP jarang ditemukan karena masalah kepraktisan dan keamanan. Nyatanya, banyak router Internet memblokir opsi yang paling berbahaya seperti source routing. Namun opsi dapat tetap berguna dalam beberapa kasus untuk menentukan dan memanipulasi rute jaringan ke mesin target. Sebagai contoh, anda mungkin dapat menggunakan opsi record route untuk menentukan path ke target bahkan ketika pendekatan tradisional bergaya traceroute gagal. Atau bila paket anda di-drop oleh firewall tertentu, anda mungkin dapat menspesifikasikan rute yang berbeda dengan opsi source routing yang ketat atau longgar.

Cara paling powerful untuk menspesifikasikan opsi IP adalah cukup dengan memberikan nilainya sebagai argumen ke --ip-options. Dahului setiap angka hex dengan \x lalu dua digit. Anda dapat mengulang karakter tertentu dengan menambahkan tanda bintang dan diikuti jumlah perulangan yang anda inginkan. Sebagai contoh, \x01\x07\x04\x00*36\x01 adalah sebuah string hex berisi 36 NUL byte.

Nmap juga menawarkan mekanisme shortcut untuk menspesifikasikan opsi. Cukup berikan huruf R, T, atau U untuk meminta record-route, record-timestamp, atau keduanya, Source routing ketat atau longgar dapat dispesifikasikan dengan tanda L atau S diikuti oleh spasi dan kemudian daftar alamat IP yang dipisah-spasi.

Jika anda ingin melihat opsi dalam paket yang dikirim dan diterima, berikan --packet-trace. Informasi dan contoh lebih lanjut tentang penggunaan opsi IP dengan Nmap, dapat dilihat di https://seclists.org/nmap-dev/2006/q3/0052.html.

--ttl <value> (Set IP time-to-live field)

Set field time-to-live IPv4 dalam paket yang dikirim ke nilai yang diberikan.

--randomize-hosts (Randomize target host order)

Beritahu Nmap untuk mengacak setiap kelompok hingga 16384 host sebelum memeriksa merekaa. Hal ini dapat membuat scan kurang mencurigakan bagi berbagai sistem monitoring jaringan, terutama bila anda menggabungkannya dengan opsi pewaktuan yang lambat. Jika anda ingin mengacak dalam ukuran yang lebih besar, naikkan nilai PING_GROUP_SZ dalam nmap.h dan kompilasi ulang. Solusi alternatif adalah menghasilkan daftar IP target dengan list scan (-sL -n -oN <filename>), acaklah dengan skrip Perl, lalu berikan seluruh daftar ke Nmap dengan -iL.

--spoof-mac <MAC address, prefix, or vendor name> (Spoof MAC address)

Meminta Nmap untuk menggunakan alamat MAC yang diberikan untuk seluruh frame ethernet raw yang dikirimkan. Opsi ini mengimplikasikan --send-eth untuk memastikan bahwa Nmap benar-benar mengirim paket level-ethernet. MAC yang diberikan dapat dalam beragam format. Jika berupa angka 0, Nmap memilih alamat MAC yang acak untuk sesi itu. Jika string yang diberikan adalah angka genap digit hex (setiap digit berpasangan dipisahkan oleh tanda titik dua), Nmap akan menggunakannya sebagai MAC. Jika diberikan kurang dari 12 digit hex, Nmap mengisi sisa 6 byte-nya dengan nilai acak. Jika argumen bukanlah nol atau string hex, Nmap mencari melalui file nmap-mac-prefixes untuk menemukan nama vendor berisikan string yang diberikan (tidak case sensitive). Jika ditemukan kecocokan, Nmap menggunakan OUI (three-byte prefix) vendor dan mengisi tiga byte sisanya secara random. Contoh argumen yang valid --spoof-mac adalah Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, dan Cisco. Opsi ini hanya mempengaruhi scan paket raw seperti SYN scan atau deteksi SO, dan tidak berlaku pada fitur berorientasi-koneksi seperti deteksi versi atau Nmap Scripting Engine.

--badsum (Send packets with bogus TCP/UDP checksums)

Meminta Nmap untuk menggunakan checksum TCP atau UDP tidak valid untuk paket yang dikirimkan ke host target. Karena secara virtual seluruh stack IP host akan secara tepat men-drop paket ini, sembarang respon yang diterima adalah kemungkinan berasal dari firewall atau IDS yang tidak peduli untuk memverifikasi checksum. Detil lebih lanjut mengenai teknik ini, dapat dilihat pada https://nmap.org/p60-12.html