Selasa, 27 Maret 2012

Teknik Scanning Port

          Sebagai seorang pemula yang melakukan perbaikan otomotif, saya dapat berjuang berjam-jam untuk menyesuaikan alat sederhana saya (palu, duct tape, dsb.) untuk tugas yang ada. Ketika saya gagal dan menyerahkannya pada mekanik sebenarnya, ia mencari dalam kotak perangkatnya hingga menemukan alat yang tepat yang membuat pekerjaan tersebut menjadi mudah. Seni scanning port juga serupa. Para ahli memahami beragam teknik pemindaian dan memilih satu (atau kombinasi) yang sesuai untuk tugas yang ada. User tidak berpengalaman dan script kiddies, di lain pihak, berusaha menyelesaikan semua masalah dengan scan SYN baku. Oleh karena Nmap gratis, satu-satunya penghalang menguasai scanning port adalah pengetahuan. Hal itu tentu saja mengalahkan dunia otomotif, setelah membutuhkan keahlian tinggi untuk menentukan bahwa anda butuh kompresor pegas strut, lalu anda mesti harus membayar ribuan dolar untuknya.
Kebanyakan jenis scan hanya tersedia untuk user privilege. Hal ini karena mereka mengirim dan menerima paket raw, yang membutuhkan akses root pada sistem Unix. Pada sistem Windows, menggunakan akun administrator disarankan, meski terkadang Nmap dapat bekerja untuk unprivileged users ketika WinPcap telah dimuatkan ke SO. Kebutuhan akan privilege root merupakan sebuah batasan serius ketika Nmap dirilis pada tahun 1997, karena banyak user hanya mempunyai akses ke shared shell. Saat ini, hal tersebut berbeda. Komputer telah lebih murah, lebih banyak orang memiliki akses langsung Internet always-on, dan banyak sistem Unix desktop (termasuk Linux dan Mac OS X). Versi Nmap Windows kini tersedia, membuatnya berjalan di lebih banyak desktop. Karena alasan-alasan ini, user memiliki sedikit alasan untuk menjalankan Nmap dari akun shared shell yang terbatas. Ini merupakan keberuntungan, karena opsi privilege membuat Nmap lebih powerful dan fleksibel.
Meski Nmap berusaha memberikan hasil yang akurat, namun perlu diperhatikan bahwa seluruh pandangannya didasarkan pada paket yang dikembalikan oleh mesin target (atau firewall di depan mereka). Host tersebut mungkin tidak dapat dipercaya dan responnya bertujuan membingungkan atau mengacaukan Nmap. Yang lebih umum adalah host yang tidak sesuai dengan RFC yang tidak menanggapi sebagaimana yang seharusnya atas probe Nmap. Scan FIN, NULL, dan Xmas terutama rentan terhadap masalah ini. Isu tersebut adalah spesifik untuk jenis scan tertentu dan didiskusikan dalam entri jenis scan individual.
Bagian ini mendokumentasikan selusin atau lebih teknik scan port yang didukung oleh Nmap. Hanya satu metode yang boleh digunakan di satu waktu, kecuali scan UDP (-sU) dapat digabungkan dengan sembarang jenis scan TCP. Sebagai pengingat, opsi jenis scan port adalah dalam bentuk -s<C>, dengan <C> merupakan karakter utama dalam nama scan, biasanya yang pertama. Satu pengecualian untuk ini adalah scan bounce FTP yang telah kuno (-b). Secara baku, Nmap melakukan SYN Scan, meski ia menggantinya dengan scan connect bila user tidak memiliki privilege untuk mengirim paket raw (membutuhkan akses root pada Unix) atau bila dispesifikasikan target IPv6. Dari semua scan yang ada di bawah ini, unprivileged user hanya dapat menjalankan scan connect dan FTP bounce.
-sS (TCP SYN scan)
SYN scan merupakan opsi scan baku dan terpopuler dengan alasan yang baik. Ia dapat dilakukan dengan cepat, memeriksa ribuan port per detik pada jaringan yang cepat tidak dihalangi oleh firewall yang membatasi. Scan SYN relatif tidak mengganggu dan tersembunyi, karena ia tidak pernah melengkapi koneksi TCP. Ia juga bekerja terhadap stack TCP yang sesuai alih-alih tergantung pada platform khusus sebagaimana scan FIN/NULL/Xmas, Maimon dan idle. Ia juga memungkinkan pembedaan yang tegas dan handal antara status openclosed, danfiltered.
Teknik ini seringkali diacu sebagai pemeriksaan setengah terbuka (half-open scanning), karena anda tidak membuka seluruh koneksi TCP. Anda mengirim sebuah paket SYN, seperti anda ingin melakukan koneksi sesungguhnya dan kemudian menunggu tanggapan. SYN/ACK menandakan port sedang mendengarkan (open), RST (reset) menandakan tidak sedang mendengarkan. Jika tidak ada tanggapan setelah beberapa kali pengiriman ulang, port ditandai sebagai tersaring (filtered). Port juga ditandai sebagai tersaring bila diterima kesalahan ICMP unreachable (tipe 3, kode 1, 2, 3, 9, 10, atau 13).
-sT (TCP connect scan)
Scan TCP connect merupakan jenis scan baku TCP ketika scan SYN tidak dapat digunakan. Hal ini terjadi ketika user tidak memiliki privilege untuk paket raw atau ketika melakukan pemeriksaan jaringan IPv6. Alih-alih menulis paket raw sebagaimana dilakukan jenis scan lainnya, Nmap meminta SO membuat koneksi dengan mesin target dan port dengan memberikan system call connect. Ini merupakan system call yang digunakan oleh web browsers, klien P2P, dan kebanyakan aplikasi jaringan lainnya untuk membuat koneksi. Ia merupakan bagian dari interface pemrograman yang dikenal sebagai Berkeley Sockets API. Nmap juga menggunakan API ini untuk memperoleh informasi status setiap usaha koneksi.
Ketika tersedia SYN scan, ia merupakan pilihan yang lebih baik. Nmap kurang memiliki kendali atas call connect daripada paket raw, membuatnya kurang efisien. System call membuat koneksi lengkap untuk membuka port target daripada membuat reset setengah-terbuka (half-open reset) yang dilakukan SYN scan. Hal ini tidak saja lebih lambat dan membutuhkan lebih banyak paket untuk memperoleh informasi yang sama, namun juga mesin target kemungkinan mencatat koneksi. IDS yang baik akan mendeteksi hal ini, namun kebanyakan mesin tidak memiliki sistem alarm tersebut. Kebanyakan layanan pada sistem Unix umum akan membuat catatan ke syslog, dan seringkali pesan kesalahan yang rumit, ketika Nmap membuka dan menutup koneksi tanpa mengirim data. Layanan yang benar-benar buruk akan crash ketika hal ini terjadi, meskipun tidak umum. Administrator yang melihat serangkaian usaha koneksi dari sistem tunggal di lognya seharusnya tahu bahwa ia telah diperiksa dengan metode connect.
-sU (UDP scan)
Walau kebanyakan layanan populer di Internet menggunakan protokol TCP, layanan UDP luas dipergunakan. DNS, SNMP, dan DHCP (port 53, 161/162, dan 67/68) adalah tiga yang paling umum. Karena pemeriksaan UDP umumnya lebih lambat dan lebih sulit dibanding TCP, beberapa audit keamanan mengabaikan port ini. Ini merupakan kesalahan, karena eksploitasi layanan UDP cukup umum dan penyerang tentu saja tidak mengabaikan seluruh protokol. Untungnya, Nmap dapat membantu inventori port UDP.
Scan UDP diaktifkan dengan opsi -sU. Ia dapat digabungkan dengan jenis scan TCP seperti SYN scan (-sS) untuk memeriksa kedua buah protokol sekaligus.
Scan UDP bekerja dengan mengirimkan header UDP kosong (tanpa data) ke setiap port yang diinginkan. Jika diperoleh kesalahan ICMP port unreachable (tipe 3, kode 3), port itu closed. Kesalahan ICMP lainnya (tipe 3, kode 1, 2, 9, 10, atau 13) menandakan port sebagai filtered. Seringkali, sebuah layanan akan menanggapi dengan paket UDP, membuktikan bahwa iaopen. Jika tidak ada tanggapan setelah transmisi ulang, port dianggap open|filtered. Hal ini berarti bahwa port dapat berada dalam keadaan open, atau mungkin packet filter memblokir komunikasi. Deteksi versi (-sV) dapat digunakan untuk membantu membedakan antara port yang terbuka dengan yang disaring.
Tantangan terbesar scanning UDP adalah melakukannya dengan cepat. Port terbuka dan tersaring jarang mengirimkan tanggapan, membuat Nmap time out dan kemudian melakukan transmisi ulang bilamana probe atau respon hilang. Port tertutup seringkali merupakan masalah yang lebih besar. Mereka umumnya mengirimkan ulang kesalahan ICMP port unreachable. Namun tidak seperti paket RST yang dikirim oleh port TCP tertutup sebagai respon atas scan SYN atau connect, banyak host secara baku membatasi pesan ICMP port unreachable. Linux dan Solaris terutama sangat ketat mengenai hal ini. Sebagai contoh, kernel Linux 2.4.20 membatasi pesan destination unreachable ke satu per detik (dalam net/ipv4/icmp.c).
Nmap mendeteksi pembatasan ini dan memperlambat kerjanya untuk menghindari pemenuhan jaringan dengan paket-paket tidak perlu yang akan di-drop oleh mesin target. Sayangnya, pembatasan ala Linux dengan satu paket per detik membuat pemeriksaan 65.536 membutuhkan waktu lebih 18 jam. Ide untuk mempercepat scan UDP termasuk pemeriksaan lebih banyak host secara paralel, melakukan pemeriksaan atas port-port populer dulu, pemeriksaan di belakang firewall, dan menggunakan --host-timeout untuk melewati host lambat.
-sN-sF-sX (TCP NULL, FIN, dan Xmas scan)
Ketiga jenis scan ini (bahkan kemungkinan lebih dengan adanya opsi --scanflags yang dijelaskan pada bagian berikutnya) mengeksploitasi kelemahan dalam RFC TCP untuk membedakan antara port open dan closed. Halaman 65 RFC 793 mengatakan bawha “if the [destination] port state is CLOSED .... an incoming segment not containing a RST causes a RST to be sent in response.” Lalu halaman berikutnya mendiskusikan paket yang dikirim ke port terbuka tanpa bit SYN, RST, atau ACK diset, menyatakan bahwa : “you are unlikely to get here, but if you do, drop the segment, and return.”
Ketika memeriksa sistem yang sesuai dengan teks RFC ini, sembarang paket yang tidak berisikan bit SYN, RST, atau ACK akan berakibat pengembalian RST bila port tertutup dan tidak ada respon bila port terbuka. Selama ketiga bit ini tidak disertakan, sembarang kombinasi ketiga bit lainnya (FIN, PSH, dan URG) adalah OK. Nmap mengeksploitasi celah ini dengan ketiga jenis scan berikut :
Null scan (-sN)
Tidak mengirimkan bit(header flag TCP adalah 0)
FIN scan (-sF)
Hanya menset bit FIN TCP.
Xmas scan (-sX)
Menset flag FIN, PSH, dan URG, menerangi paket seperti sebuah pohon Natal.
Ketiga jenis scan ini serupa perilakunya kecuali untuk flag TCP yang diset dalam paket probe. Jika diterima paket RST, port dianggap closed, tidak ada respon berarti ia open|filtered. Port ditandai filtered bila diterima kesalahan ICMP unreachable (tipe 3, kode 1, 2, 3, 9, 10, atau 13).
Keuntungan utama jenis scan ini adalah bahwa mereka dapat menyusup melalui non-stateful firewall dan router packet filtering tertentu. Keunggulan lain adalah bahwa ketiga scan ini lebih tersembunyi bahkan bila dibandingkan dengan SYN scan. Jangan mengandalkan hal ini karena produk IDS modern dapat dikonfigurasi untuk mendeteksi mereka. Kelemahan utama adalah tidak semua sistem mematuhi RFC 793 secara tepat. Sejumlah sistem mengirim respon RST atas probe tanpa perduli apakah port terbuka atau tertutup. Hal ini membuat seluruh port dianggap sebagai closed. Sistem operasi utama yang melakukan hal ini adalah Microsoft Windows, banyak device Cisco devices, BSDI, dan IBM OS/400. Scan ini tidak bekerja terhadap kebanyakan sistem berbasis Unix. Kekurangan lainnya adalah scan ini tidak dapat membedakan antara port open dengan port tertentu yang filtered, memberikan anda tanggapanopen|filtered.
-sA (TCP ACK scan)
Scan ini berbeda dengan yang telah didiskusikan sejauh ini yaitu ia tidak pernah menentukan port open (or even open|filtered). Ia digunakan untuk memetakan aturan firewall, menentukan apakah mereka stateful atau tidak dan port mana saja yang disaring.
Paket probe scan ACK hanya memiliki flag ACK di-set (kecuali anda menggunakan --scanflags). Ketika memeriksa sistem yang tidak disaring, port open dan closed keduanya akan mengembalikan paket RST. Nmap kemudian menandakan mereka sebagai unfiltered, yang berarti mereka dapat dicapai oleh paket ACK, namun belum dapat ditentukan apakah merekaopen atau closed. Port yang tidak menanggapi, atau mengirim kembali pesan kesalahan ICMP (tipe 3, kode 1, 2, 3, 9, 10, atau 13), dianggap sebagai filtered.
-sW (TCP Window scan)
Window scan serupa dengan ACK scan kecuali bahwa ia mengeksploitasi detil implementasi pada sistem tertentu yang membedakan port terbuka dengan port tertutup, alih-alih selalu menampilkan unfiltered ketika dikembalikan RST. Ia melakukan hal ini dengan memeriksa field TCP Window paket RST yang dikembalikan. Pada beberapa sistem, port terbuka menggunakan ukuran jendela positif (bahkan untuk paket RST) sementara port tertutup memiliki jendela nol. Sehingga alih-alih selalu menampilkan port sebagai unfiltered ketika menerima kembali RST, Window scan menampilkan port sebagai open atau closed jika nilai TCP Window dalam reset tersebut positif atau nol.
Scan ini mengandalkan detil implementasi sedikit sistem yang ada di Internet, sehingga anda tidak dapat selalu mempercayainya. Sistem yang tidak mendukungnya biasanya akan mengembalikan semua port sebagai closed. Tentu saja, adalah mungkin mesin benar-benar tidak memiliki port terbuka. Jika kebanyakan port yang diperiksa adalah closed namun beberapa angka port umum (seperti 22, 25, 53) adalah filtered, informasi ini kemungkinan benar. Seringkali, sistem akan memberitahukan perilaku sebaliknya. Jika scan anda menunjukkan bahwa 1000 port terbuka dan tiga port tertutup atau disaring, maka ketiga port tersebut mungkin saja adalah port yang terbuka.
-sM (TCP Maimon scan)
Scan Maimon dinamakan dengan nama penemunya, Uriel Maimon. Ia menjelaskan teknik ini dalam Phrack Magazine issue #49 (November 1996). Nmap, yang menyertakan teknik ini, dirilis dua isu kemudian. Teknik ini sama persis dengan scan NULL, FIN, dan Xmas, kecuali probenya adalah FIN/ACK. Menurut RFC 793 (TCP), paket RST seharusnya dihasilkan sebagai tanggapan atas probe tersebut entah port terbuka atau tertutup. Namun demikian, Uriel memperhatikan bahwa banyak sistem berbasis BSD men-drop paket jika port terbuka.
--scanflags (Custom TCP scan)
User Nmap mahir tidak perlu membatasi dirinya pada jenis scan yang tersedia secara baku. Opsi --scanflags memungkinkan anda merancang scan anda sendiri dengan menspesifikasikan sembarang flag TCP.. Biarkan cairan kreatif anda mengalir, sementara mengakali intrusion detection system yang vendornya sekedar membaca man page Nmap menambahkan aturan khusus!
Argumen --scanflags dapat berupa nilai flag numerik seperti 9 (PSH dan FIN), namun menggunakan nama simbolik lebih mudah. Gabungkan saja sembarang kombinasi URGACKPSH,RSTSYN, dan FIN. Sebagai contoh, --scanflags URGACKPSHRSTSYNFIN menset semuanya, meskipun ia tidak terlalu bermanfaat untuk pemeriksaan. Urutan spesifikasi tidaklah relevan.
Selain dengan menspesifikasikan flag yang diinginkan, anda dapat pula memberikan jenis scan TCP (seperti -sA atau -sF). Jenis dasar tersebut memberitahu Nmap bagaimana menginterpretasikan respon. Sebagai contoh, SYN scan menganggap no-response sebagai indikasi port filtered, sementara FIN scan mengganggapnya sebagai open|filtered. Nmap akan berperilaku sama dengan jenis scan dasar, kecuali ia akan menggunakan flag TCP yang anda spesifikasikan Jika anda tidak menspesifikasikan tipe dasar, akan digunakan SYN scan.
-sI <zombie host>[:<probeport>] (idle scan)
Metode scan tingkat tinggi ini memungkinkan scan port TCP secara tersembunyi (artinya tidak ada paket dikirim ke target dari alamat IP anda yang sebenarnya). Alih-alih, serangan side-channel mengeksploitasi pembuatan urutan ID fragmentasi IP yang mudah ditebak pada host zombi untuk memperoleh informasi tentang port terbuka pada target. Sistem IDS akan menampilkan scan berasal dari mesin zombi yang anda spesifikasikan (yang harus up dan memenuhi beberapa kriteria). Jenis scan menarik ini terlalu kompleks untuk dijelaskan dalam panduan referensi ini, sehingga saya menulis dan menaruh paper informal dengan detil penuh di http://nmap.org/book/idlescan.html.
Selain sangat tersembunyi (karena sifat blind-nya), jenis scan ini mengijinkan pemetaan relasi kepercayaan berbasis IP antar mesin. Daftar port menampilkan port terbuka dari perspektif host zombi. Sehingga anda dapat berusaha memeriksa target dengan menggunakan beragam zombi yang anda anggap terpercaya (melalui aturan router/packet filter).
Anda dapat menambah tanda titik dua diikuti nomor port pada host zombi jika anda ingin memeriksa port tertentu pada zombi untuk perubahan ID IP. Jika tidak Nmap akan menggunakan port baku yang digunakan untuk ping TCP (80).
-sO (IP protocol scan)
Scan protokol IP memungkinkan anda menentukan protokol IP mana (TCP, ICMP, IGMP, dsb.) yang didukung oleh mesin target. Secara teknis ini bukanlah scan port, karena ia menggunakan nomor protokol IP alih-alih nomor port TCP atau UDP. Namun ia tetap menggunakan opsi -p untuk memilih nomor protokol yang diperiksa, melaporkan hasilnya dalam format tabel port normal, dan bahkan menggunakan mesin scan yang sama dengan metode scanning port sebenarnya. Ia cukup dekat dengan scan port sehingga berada di sini.
Selain memiliki fungsi tertentu, scan protokol mendemonstrasikan kekuatan software open-source. Meskipun ide dasarnya cukup sederhana, saya tidak berpikir atau menerima permintaan untuk menambah fungsionalitas semacam itu. Lalu pada musim panas tahun 2000, Gerhard Rieger menerima ide tersebut, menulis patch yang bagus untuk mengimplementasikannya, dan mengirimnya ke milis nmap-hackers. Saya menggabungkan patch tersebut ke Nmap dan merilis versi baru di hari berikutnya. Sedikit software komersial memiliki user yang cukup antusias untuk merancang dan memberikan kontribusi perbaikan!
Scan protocol bekerja dalam cara yang sama dengan scan UDP. Alih-alih beriterasi atas field nomor port paket UDP, ia mengirim header paket IP dan beriterasi pada field protokol IP delapan-bit. Header biasanya kosong, tidak berisi data dan bahkan tiada header yang sesuai untuk protokol yang diklaim. Tiga pengecualian adalah TCP, UDP, dan ICMP. Header protokol yang sesuai untuk mereka disertakan karena beberapa sistem tidak akan mengirimnya dan karena Nmap telah memiliki fungsi untuk membuatnya. Alih-alih mengamati pesan ICMP port unreachable, scan protocol mencari pesan ICMP protocol unreachable. Bila Nmap menerima respon dalam sembarang protokol dari host target, Nmap menandai protokol tersebut sebagaiopen. Kesalahan ICMP protocol unreachable (tipe 3, kode 2) menyebabkan protokol ditandai sebagai closed. Kesalahan ICMP unreachable lainnya (tipe 3, kode 1, 3, 9, 10, atau 13) menyebabkan protokol ditandai filtered (meskipun mereka membuktikan bahwa ICMP open di waktu yang sama). Jika tidak menerima respon setelah transmisi ulang, protokol ditandai sebagai open|filtered
-b <FTP relay host> (FTP bounce scan)
Satu fitur menarik protokol FTP (RFC 959) mendukung koneksi FTP proxy. Hal ini memungkinkan user untuk koneksi ke satu server FTP, lalu meminta file dikirimkan ke server pihak ketiga. Fitur tersebut rentan terhadap penyalahgunaan di banyak tingkat, sehingga banyak server berhenti mendukungnya. Salah satu penyalahgunaan yang dibolehkan fitur ini adalah membuat server FTP melakukan scan port ke host lain. Cukup minta server FTP mengirim sebuah file ke setiap port yang diinginkan pada host target. Pesan kesalahan akan menjelaskan apakah port terbuka atau tidak. Hal ini merupakan cara yang baik untuk melewati firewall karena server FTP organisasi biasanya lebih memiliki akses ke host internal daripada host Internet. Nmap mendukung scan bounce FTP dengan opsi -b option. Ia mengambil argumen dalam bentuk <username>:<password>@<server>:<port><Server> adalah nama atau alamat IP server FTP yang rentan. Sebagaimana dengan URL normal, anda dapat menghilangkan <username>:<password>, sehingga menggunakan login anonim (user: anonymous password:-wwwuser@) . Nomor port (dan tanda titik dua sebelumnya) dapat dihilangkan juga, sehingga menggunakan port FTP baku (21) pada <server>.
Kerentanan ini meluas di tahun 1997 ketika Nmap dirilis, namun telah diperbaiki. Server-server yang rentan masih ada, sehingga patut dicoba bila teknik yang lainnya gagal. Jika tujuan anda adalah melewati firewall, scan jaringan target untuk port 21 (atau bahkan untuk sembarang layanan FTP jika anda scan seluruh port dengan deteksi versi) yang terbuka, lalu coba scan bounce. Nmap akan memberitahu anda apakah host rentan atau tidak. Jika anda hanya ingin menutupi jejak anda, anda tidak perlu (dan bahkan tidak seharusnya) membatasi diri anda pada host pada jaringan target. Sebelum anda memeriksa alamat Internet acak untuk mencari server FTP yang rentan, pertimbangkan bahwa sysadmin mungkin tidak akan menghargai anda menggunakan server mereka dengan cara ini.

Tidak ada komentar:

Posting Komentar