Pencarian Host (Host Discovery)

Salah satu langkah pertama dalam misi network reconnaissance adalah mengurangi satu rentang IP (biasanya besar) ke sebuah daftar host yang aktif atau menarik. Memeriksa setiap port dari setiap alamat IP adalah lambat dan biasanya tidak perlu. Tentu saja apa yang membuat sebuah host menarik tergantung pada tujuan pemeriksaan. Administrator jaringan mungkin hanya tertarik pada host yang menjalankan layanan tertentu, sementara auditor keamanan ingin mengetahui semua device dalam satu alamat IP. Administrator mungkin nyaman cukup dengan menggunakan ping ICMP untuk menemukan host pada jaringan internalnya, sementara penetration tester eksternal mungkin menggunakan beragam probe dalam usahanya menghindari pembatasan firewall.

Oleh karena kebutuhan pencarian host sangat beragam, Nmap menawarkan sejumlah opsi untuk kustomisasi teknik yang dibutuhkan. Pencarian host seringkali disebut ping scan, namun ia lebih daripada sekedar melakukan pengiriman paket echo request ICMP yang diasosiasikan dengan tool terkenal ping. Pengguna dapat melewati langkah ping dengan list scan (-sL) atau dengan meniadakan ping (-PN), atau melakukan kombinasi probe multi-port TCP SYN/ACK, UDP, dan ICMP. Tujuan probe ini adalah memperoleh respon yang menunjukkan bahwa alamat IP sedang aktif (sedang digunakan oleh host atau device jaringan). Pada banyak jaringan, hanya sejumlah kecil persentase alamat IP yang aktif pada satu waktu. Hal ini terutama umum terjadi pada alamat IP privat seperti 10.0.0.0/8. Jaringan tersebut memiliki 16 juta IP, namun saya telah melihatnya digunakan oleh perusahaan dengan mesin berjumlah kurang dari seribu. Pencarian host dapat menemukan mesin-mesin dalam lautan alamat IP.

Jika tidak diberikan opsi pencarian host, Nmap mengirimkan sebuah paket TCP ACK yang ditujukan ke port 80 dan sebuah query ICMP echo request ke setiap mesin target. Pengecualian atas hal ini adalah scan ARP digunakan untuk sembarang target yang ada pada jaringan ethernet lokal. Untuk user shell Unix biasa, sebuah paket SYN dikirimkan alih-alih paket ACK dengan menggunakan system call connect. Nilai-nilai baku ini sama dengan opsi -PA -PE. Pencarian host ini seringkali cukup ketika melakukan pemeriksaan jaringan lokal, namun disarankan untuk melakukan probe pencarian yang lebih komprehensif ketika melakukan audit keamanan.

Opsi-opsi -P* (yang memilih tipe ping) dapat digabungkan. Anda dapat meningkatkan peluang anda menyusup firewall yang ketat dengan mengirimkan banyak jenis probe dengan menggunakan berbagai macam port/flag TCP dan kode ICMP. Perhatikan pula bahwa pencarian ARP discovery (-PR) secara baku dilakukan terhadap target pada jaringan ethernet lokal bahkan bila anda menspesifikasikan opsi -P* lain, karena ia selalu lebih cepat dan lebih efektif.

Secara baku, Nmap melakukan pencarian host dan lalu melakukan scan port terhadap setiap host yang ditentukan online. Hal ini benar bahkan bila anda menspesifikasikan tipe pencarian host yang tidak baku seperti probe UDP (-PU). Bacalah mengenai opsi -sP untuk mempelajari bagaimana melakukan hanya pencarian host, atau gunakan -PN untuk melewati pencarian host dan melakukan scan port untuk seluruh host. Opsi-opsi berikut ini mengendalikan pencarian host:

-sL (List Scan)

Scan daftar (list scan) merupakan sebuah bentuk pencarian host yang hanya menampilkan setiap host pada jaringan yang dispesifikasikan, tanpa mengirimkan paket ke host target. Secara baku, Nmap tetap melakukan resolusi reverse-DNS pada host untuk mengetahui namanya. Seringkali mengejutkan berapa banyak informasi berharga yang diberikan nama host. Sebagai contoh, fw.chi adalah nama firewall satu perusahaan di Chicago. Nmap juga melaporkan jumlah total alamat IP pada bagian akhir. Scan daftar merupakan sebuah pemeriksaan untuk memastikan anda memiliki alamat IP yang tepat untuk target anda. Jika host menemukan nama domain yang tidak anda kenali, maka anda perlu melakukan penyelidikan lanjutan untuk mencegah pemeriksaan jaringan perusahaan yang tidak tepat.

Karena gagasannya adalah hanya menampilkan daftar host target, opsi untuk fungsionalitas lebih tinggi misalnya pemeriksaan port, deteksi sistem operasi, atau scanning ping tidak dapat dikombinasikan dengan opsi ini. Jika anda ingin meniadakan pemeriksaan ping namun masih ingin melakukan fungsionalitas tingkat tinggi, bacalah opsi -PN.

-sP (Ping Scan)

Opsi ini memberitahu Nmap untuk hanya melakukan scan ping (host discovery), lalu menampilkan host yang menanggapi pemeriksaan. Skrip host traceroute dan NSE juga dijalankan jika diminta, namun tidak dilakukan pemeriksaan lebih lanjut (seperti scan port atau deteksi SO). Opsi ini secara baku satu langkah lebih intrusif daripada list scan, dan seringkali dapat digunakan untuk tujuan yang sama. Ia memungkinkan reconnaissance ringan atas jaringan target tanpa menarik banyak perhatian. Mengetahui berapa banyak host yang up lebih bermanfaat bagi penyerang daripada daftar yang dihasilkan oleh list scan atas setiap IP dan nama host.

Administrator sistem juga sering menganggap opsi ini bermanfaat. Ia dapat digunakan untuk menghitung mesin-mesin yang tersedia pada jaringan atau memonitor ketersediaan server. Hal ini seringkali disebut ping sweep, dan lebih handal daripada mem-ping alamat broadcast karena banyak host tidak akan melakukan reply terhadap query broadcast.

Opsi -sP secara baku mengirimkan sebuah request ICMP echo dan sebuah paket TCP ACK ke port 80. Ketika dilakukan oleh user biasa, hanya sebuah paket SYN yang dikirimkan (dengan menggunakan call connect) ke port 80 pada target. Ketika user dengan privilege berusaha memeriksa target pada jaringan ethernet lokal, request ARP digunakan kecuali dispesifikasikan --send-ip. Opsi -sP dapat dikombinasikan dengan tipe probe pencarian lainnya (opsi-opsi -P*, kecuali -PN) untuk fleksibilitas yang lebih tinggi. Jika digunakan sembarang opsi tipe probe dan nomor port, probe baku (ACK dan echo request) akan di-override. Ketika terdapat firewall ketat di antara host sumber yang menjalankan Nmap dan jaringan target, direkomendasikan untuk menggunakan teknik lanjutan di atas. Jika tidak host dapat luput ketika firewall men-drop probe atau responnya.

-PN (No ping)

Opsi ini melompati tahap pencarian Nmap secara utuh. Secara normal, Nmap menggunakan tahap ini untuk menentukan mesin aktif untuk pemeriksaan lebih lanjut. Secara baku, Nmap hanya melakukan probe lanjutan seperti scan port, pemeriksaan versi, atau pemeriksaan SO terhadap host yang ditemukan up. Peniadaan pencarian host dengan opsi -PN menyebabkan Nmap melakukan fungsi pemeriksaan yang diminta terhadap setiap alamat IP target yang dispesifikasikan. Jadi bila pada perintah baris dispesifikasikan sebuah alamat target kelas B (/16), maka semua alamat IP yang berjumlah 65.536 akan diperiksa. Pencarian host yang tepat akan dilewati sebagaimana dengan list scan, namun alih-alih berhenti dan menampilkan daftar target, Nmap lalu melakukan fungsi-fungsi yang diminta sebagaimana bila setiap IP target aktif. Untuk mesin-mesin pada jaringan ethernet lokal, pemeriksaan ARP akan tetap dilakukan (kecuali diberikan opsi --send-ip) karena Nmap butuh alamat MAC untuk melakukan pemeriksaan lanjutan atas host target. Flag opsi ini dulunya adalah P0 (menggunakan nol), namun kemudian diganti untuk menghindari kerancuan dengan flag protokol ping PO (menggunakan huruf O).

-PS <port list> (TCP SYN Ping)

Opsi ini mengirimkan sebuah paket TCP kosong dengan flag SYN diset. Port tujuan baku adalah 80 (dapat dikonfigurasi pada waktu kompilasi dengan merubah DEFAULT_TCP_PROBE_PORT_SPEC dalam nmap.h). Port-port alternatif dapat dispesifikasikan sebagai parameter. Sintaksnya sama dengan opsi -p kecuali specifier jenis port seperti T: tidak diperbolehkan. Contohnya adalah -PS22 dan -PS22-25,80,113,1050,35000. Perhatikan bahwa tidak boleh ada spasi antara -PS dan daftar port. Jika dispesifikasikan banyak probe mereka akan dikirim secara paralel.

Flag SYN memberitahu sistem remote bahwa anda berusaha membuat sebuah koneksi. Normalnya port tujuan tertutup, dan sebuah paket RST (reset) akan dikirimkan. Jika port terbuka, target akan melakukan langkah kedua dari TCP three-way-handshake dengan mengirimkan paket SYN/ACK TCP. Mesin yang menjalankan Nmap lalu memutuskan koneksi tersebut dengan mengirimkan sebuah paket RST alih-alih mengirimkan sebuah paket ACK yang akan melengkapi three-way-handshake dan membuat koneksi penuh. Paket RST dikirim oleh kernel mesin yang menjalankan Nmap sebagai tanggapan atas SYN/ACK yang tidak diharapkan, bukan oleh Nmap sendiri.

Nmap tidak peduli apakah port terbuka atau tertutup. Tanggapan RST atau SYN/ACK yang didiskusikan di atas memberitahu Nmap bahwa host tersedia dan menanggapi.

Pada mesin Unix, umumnya hanya user privilege root yang dapat mengirim dan menerima paket-paket TCP raw. Untuk user tanpa privilege, secara otomatis sebuah workaround akan dijalankan yaitu system call connect akan digunakan untuk setiap port target. Hal ini mempunyai efek mengirimkan paket SYN ke host target, dalam usaha membuat koneksi. Jika connect memberikan sukses cepat atau kegagalan ECONNREFUSED, stack TCP di bawahnya telah menerima sebuah SYN/ACK atau RST dan host ditandai sebagai tersedia. Jika usaha koneksi dibiarkan hingga tercapai timeout, host ditandai sebagai down. Workaround ini juga digunakan untuk koneksi IPv6, karena dukungan untuk pembuatan paket raw IPv6 belum tersedia di Nmap.

-PA <port list> (TCP ACK Ping)

Ping TCP ACK hampir serupa dengan ping SYN yang baru didiskusikan. Perbedaannya adalah, sebagaimana dapat anda duga, bahwa flag TCP ACK diset alih-alih flag SYN. Paket ACK tersebut memberitahu data pada koneksi TCP yang telah tercipta, namun tidak ada koneksi. Sehingga host remote harus selalu menanggapi dengan sebuah paket RST, yang akan memberitahukan keberadaan mereka.

Opsi -PA menggunakan port baku yang sama dengan probe SYN (80) dan dapat menerima daftar port tujuan dalam format yang sama. Jika user tanpa privilege mencobanya, atau dispesifikasikan target IPv6, workaround connect yang didiskusikan sebelumnya akan digunakan. Workaround ini tidak sempurna karena connect sebenarnya mengirimkan paket SYN dan bukan paket ACK.

Alasan menyertakan probe ping SYN dan ACK adalah memaksimalkan peluang melewati firewall. Banyak administrator mengkonfigurasi router dan firewall sederhana untuk memblokir paket SYN incoming kecuali yang ditujukan untuk layanan publik seperti server website atau mail perusahaan. Hal ini mencegah koneksi incoming lainnya ke organisasi, namun tetap membolehkan user melakukan koneksi outgoing ke Internet. Pendekatan non-stateful ini membutuhkan sedikit sumber daya pada firewall/router dan didukung luas oleh filter hardware dan software. Software firewall Linux Netfilter/iptables memberikan opsi --syn untuk mengimplementasikan pendekatan stateless ini. Ketika rule firewall stateless seperti ini digunakan, probe ping SYN (-PS) kemungkinan akan diblokir ketika dikirim ke port target yang tertutup. Dalam kasus ini, probe ACK akan bersinar karena ia dapat mengatasi rule tersebut.

Jenis firewall umum lainnya menggunakan rule stateful yang akan men-drop paket tidak diharapkan. Fitur ini mulanya hanya ditemukan pada firewall high-end, namun sekarang telah umum digunakan. Sistem Linux Netfilter/iptables mendukungnya melalui opsi --state, yang mengkategorikan paket berdasarkan status koneksi. Probe SYN kemungkinan berfungsi untuk sistem tersebut, karena paket ACK yang tidak diharapkan umumnya dikenali sebagai palsu dan di-drop. Solusi untuk masalah ini adalah dengan mengirimkan probe SYN dan ACK secara bersamaan dengan memberikan opsi -PS and -PA.

-PU <port list> (UDP Ping)

Opsi pencarian host lainnya adalah ping UDP, yang mengirim paket UDP kosong (kecuali --data-length dispesifikasikan) ke port yang diberikan. Daftar port menggunakan format yang sama dengan yang telah didiskusikan pada opsi -PS dan -PA. Jika tidak ada port yang dispesifikasikanya, bakunya adalah 31338. Port baku ini dapat dikonfigurasi pada waktu kompilasi dengan merubah DEFAULT_UDP_PROBE_PORT_SPEC dalam nmap.h. Port tinggi yang tidak umum, digunakan secara baku karena mengirim ke port terbuka seringkali tidak diharapkan untuk jenis pemeriksaan ini.

Ketika menemui port tertutup pada mesin target, probe UDP seharusnya menerima paket ICMP port unreachable. Hal ini memberitahu Nmap bahwa mesin up dan tersedia. Banyak jenis kesalahan ICMP lainnya, seperti host/network unreachables atau TTL exceeded menandakan host down atau tidak dapat dihubungi. Tidak ada respon juga termasuk di dalamnya. Jika ditemukan sebuah port terbuka, kebanyakan layanan akan mengabaikan paket kosong dan gagal mengirim tanggapan. Inilah alasan mengapa port probe bakunya adalah 31338, yang kemungkinan tidak digunakan. Beberapa layanan, seperti protokol Character Generator (chargen), akan menanggapi paket UDP kosong, dan karenanya memberitahu Nmap bahwa mesin tersedia.

Keuntungan utama jenis scan ini adalah ia melewati firewall dan filter yang hanya memeriksa TCP. Sebagai contoh, saya pernah memiliki Linksys BEFW11S4 wireless broadband router. Interface external device ini secara baku memfilter seluruh port TCP, namun probe UDP tetap memberikan pesan port unreachable dan karenanya memberitahu mengenai device ini.

-PE; -PP; -PM (ICMP Ping Types)

Selain tipe pencarian host TCP dan UDP yang tidak umum di atas, Nmap dapat mengirimkan paket dengan menggunakan program ping. Nmap mengirim sebuah paket ICMP tipe 8 (echo request) ke alamat IP target, mengharapkan balasan paket tipe 0 (echo reply) dari host yang ada. Sayangnya bagai pengeksplorasi jaringan, saat ini banyak host dan firewall yang memblokir paket-paket ini, alih-alih menanggapi sebagaimana yang ditentukan oleh RFC 1122. Karena alasan ini, scan ICMP-only relatif tidak handal terhadap target tak dikenal pada Internet. Namun untuk administrator sistem yang memonitor jaringan internal, mereka mungkin merupakan pendekatan yang praktis dan efisien. Gunakan opsi -PE untuk menggunakan perilaku echo request ini.

Meski echo request merupakan standar query ping ICMP, Nmap tidak berhenti di sana. Standar ICMP (RFC 792) juga menspesifikasikan paket timestamp request, information request, dan address mask request dengan kode 13, 15, dan 17. Walaupun tujuan query-query ini adalah untuk memperoleh informasi seperti address masks dan waktu saat ini, mereka dapat dengan mudah digunakan sebagai pencarian host. Sistem yang memberi tanggapan adalah up dan tersedia. Nmap tidak mengimplementasikan paket information request, karena mereka tidak didukung luas. RFC 1122 berkeras bahwa sebuah host TIDAK SEHARUSNYA mengimplementasikan pesan ini. Query timestamp dan address mask dapat dikirim dengan opsi -PP and -PM. Reply timestamp (ICMP kode 14) atau reply address mask (kode 18) memberitahukan bahwa host tersedia. Kedua query ini bermanfaat ketika administrator secara khusus memblokir paket-paket echo request namun lupa bahwa query ICMP lainnya dapat digunakan untuk tujuan yang sama.

-PO <protocol list> (IP Protocol Ping)

Opsi pencarian host terbaru adalah ping protokol IP, yang mengirimkan paket IP dengan nomor port yang dispesifikasikan dalam header IP-nya. Daftar protokol menggunakan format yang sama seperti daftar port dalam opsi pencarian host TCP dan UDP yang telah didiskusikan sebelumnya. Jika tidak didefinisikan protokol, secara bakunya adalah mengirimkan banyak paket IP untuk ICMP (protokol 1), IGMP (protokol 2), dan IP-in-IP (protokol 4). Protokol baku dapat dikonfigurasi pada waktu kompilasi dengan merubah DEFAULT_PROTO_PROBE_PORT_SPEC dalam nmap.h. Perhatikan bahwa untuk ICMP, IGMP, TCP (protokol 6), dan UDP (protokol 17), paket dikirim dengan header protokol yang sesuai sementara protokol lainnya dikirim tanpa data tambahan selain header IP (kecuali diberikan opsi --data-length).

Metode pencarian host ini melihat respon yang menggunakan protokol yang sama dengan probe, atau protokol ICMP unreachable messages yang memberitahu bahwa protokol dimaksud tidak didukung pada host tujuan. Kedua jenis respon di atas menandakan bahwa host target ada.

-PR (ARP Ping)

Salah satu skenario penggunaan Nmap yang umum adalah memeriksa LAN ethernet. Pada kebanyakan LAN, terutama yang menggunakan rentang alamat privat sebagaimana dijelaskan oleh RFC 1918, mayoritas alamat IP tidak digunakan. Ketika Nmap berusaha mengirim paket IP raw seperti sebuah ICMP echo request, sistem operasi harus menentukan alamat hardware tujuan (ARP) yang sesuai dengan IP target sehingga ia dapat mengirimkan frame ethernet dengan tepat. Hal ini seringkali lambat dan bermasalah, karena sistem operasi tidak ditulis dengan maksud mereka akan melakukan jutaan request ARP atas host-host yang tidak ada dalam waktu yang singkat.

Scan ARP menempatkan Nmap dan algoritma teroptimisasinya untuk menangani request ARP. Dan bila ia memperoleh respon, Nmap tidak perlu kuatir mengenai paket ping berbasis IP karena ia telah mengetahui bahwa host up. Hal ini membuat scan ARP jauh lebih cepat dan handal dibanding scan berbasis IP. Sehingga ia dilakukan secara baku ketika memeriksa host ethernet yang dideteksi Nmap berada pada jaringan ethernet lokal. Bahkan bila digunakan jenis ping (seperti -PE atau -PS), Nmap menggunakan ARP untuk sembarang target yang berada dalam LAN yang sama. Jika anda tidak menginginkan scan ARP, berikan opsi --send-ip.

--traceroute (Trace path to host)

Traceroute dilakukan setelah scan menggunakan informasi dari hasil sscan untuk menentukan port dan protocol yang berpeluang besar mencapai target. Ia dapat digunakan untuk seluruh jenis scan kecuali scan connect (-sT) dan scan idle (-sI). Seluruh pelacakan menggunakan model pewaktuan dinamis Nmap dan dilakukan secara paralel.

Traceroute bekerja dengan mengirimkan paket dengan TTL (time-to-live) rendah agar tidak memperoleh pesan ICMP Time Exceeded dari hop langsung antara scanner dan host target. Implementasi standar traceroute dimulai dengan TTL 1 dan menaikkan TTL hingga host tujuan tercapai. Traceroute Nmap dimulai dengan TTL tinggi dan kemudian menurunkan TTL hingga nol. Dengan melakukan secara terbalik Nmap menggunakan algoritma caching cerdas untuk mempercepat pelacakan atas banyak host. Secara rata-rata Nmap mengirimkan paket kurang dari 5–10 per host, tergantung pada kondisi jaringan. Jika dilakukan scan atas satu subnet tunggal (misal 192.168.0.0/24) Nmap mungkin hanya perlu mengirim satu paket untuk kebanyakan host tersebut.

-n (No DNS resolution)

Memberitahu Nmap untuk tidak melakukan resolusi reverse DNS pada alamat IP aktif yang ditemukannya. Karena DNS dapat lambat meskipun dengan menggunakan resolver paralel built-in Nmap, opsi ini dapat mempercepat waktu pemeriksaan.

-R (DNS resolution for all targets)

Memberitahu Nmap untuk selalu melakukan resolusi reverse DNS pada alamat IP target. Normalnya reverse DNS hanya dilakukan terhadap host yang online.

--system-dns (Use system DNS resolver)

Secara baku, Nmap meresolve alamat IP dengan mengirimkan query secara langsung ke server DNS yang dikonfigurasi pada host anda dan mendengarkan responnya. Banyak request (seringkali selusin) dilakukan secara paralel untuk meningkatkan kinerja. Gunakan opsi ini untuk menggunakan resolver sistem anda (satu IP pada satu waktu melalui call getnameinfo). Hal ini lebih lambat dan jarang bermanfaat kecuali anda menemukan bug dalam resolver paralel Nmap (mohon beritahu kami bila demikian). Resolver sistem selalu digunakan untuk scan IPv6.

--dns-servers <server1>[,<server2>[,...]] (Servers to use for reverse DNS queries)

Secara baku, Nmap menentukan server DNS anda (untuk resolusi rDNS) dari file resolv.conf anda (Unix) atau Registry (Win32). Selain itu, anda dapat menggunakan opsi ini untuk menspesifikasikan server alternatif. Opsi ini tidak diindahkan bila anda menggunakan --system-dns atau melakukan scan IPv6. Dengan menggunakan banyak server DNS seringkali lebih cepat, terutama bila anda memilih server otoritatif untuk ruang IP target anda. Opsi ini juga dapat meningkatkan kemampuan sembunyi (stealth), karena request anda dapat diberikan ke sembarang server DNS rekursif di Internet.

Opsi ini juga bermanfaat ketika memeriksa jaringan privat. Terkadang hanya beberapa name server yang memberikan informasi rDNS yang tepat, dan mungkin anda tidak tahu di mana mereka. Anda dapat memeriksa jaringan untuk port 53 (mungkin dengan deteksi versi), lalu coba scan list Nmap (-sL) dengan menspesifikasikan setiap name server pada satu waktu dengan --dns-servers hingga anda menemukan yang berfungsi.