Deteksi OS melalui Fingerprint TCP/IP oleh Fyodor <fyodor@insecure.org> (insecure.org) Ditulis: 18 Oktober 1998 Modifikasi terakhir: 10 April 1999 [French Translation by Arhuman <arhuman&at&francemel.com>] [Portuguese Translation by Frank Ned <frank&at&absoluta.org>] [Italian Translation by Rige <rigel&at&penguinpowered.com>] [Russian Translation by Alex Volkov <alex&at&nmap.ru>] [Spanish Translation by Marco Barbosa <mabs&at&hotmail.com>] [German Translation by Stefan Maly <stefan&at&maly.de>] [Chinese Translation by neko <neko&at&126.com>] [Turkish Translation by Egemen Tas <egement&at&karyde.com.tr>] [Hebrew Translation by Elad] [Japanese Translation by Yoriyuki Sakai <sakai&at&lac.co.jp> and Hiromi Yanaoka <yanaoka&at&lac.co.jp>] [Polish Translation by Pawel Wasylyszyn <wasylysp&at&wizard.ae.krakow.pl>] Catatan ini boleh didistribusikan secara bebas. Catatan terakhir tersedia di http://nmap.org/nmap-fingerprinting-article.html ABSTRAKSI Catatan ini membicarakan bagaimana mendapatkan informasi yang berharga tentang host melalui urutan stack TCP/IP nya. Pertama saya akan mempresentasikan beberapa metode klasik menentukan OS yang tidak menyertakan stack fingerprint. Kemudian saya akan menjelaskan "gaya seni"saat ini dalam peralatan stack fingerprint. Kemudian deskripsi beberapa teknik yang menyebabkan remote host untuk membocorkan informasi tentang dirinya sendiri. Terakhir saya akan menerangkan implementasi nmap saya, diikuti oleh informasi yang didapat dari nmap yang mengungkapkan OS yang dipakai di beberapa site internet yang populer. ALASAN Saya pikir kegunaan untuk menentukan OS apa yang dipakai sistem sangat jelas. Salah satu contoh yang kuat dari kegunaan itu adalah bahwa lubang-lubang keamanan tergantung dari versi OS. Taruhlah kamu melakukan tes penetrasi dan kamu menemukan port 53 terbuka. Jika ini termasuk Bind versi yang lemah/cacat, kamu hanya dapat satu kesempatan untuk mengeksploitnya karena usaha yang gagal akan merusak daemon. Dengan TCP/IP fingerprinter yang baik, kamu akan dengan cepat menemukan mesin ini menggunakan 'Solaris 2.51' atau 'Linux 2.0.35' dan kamu dapat menyesuaikan kode kamu sendiri. Kemungkinan buruk terjadi bila seseorang menscan 500.000 host untk melihat OS yang dipakai dan port berapa yang terbuka. Kemudian ketika seseorang mengatakan ada lubang comsat daemon di Sun, cracker kecil kita mendapat daftar untuk 'UDP/512' dan 'Solaris 2.6'dan segera dia punya banyak halaman boxes yang rootable. Hal ini mestinya dicatat sebagai tindakan SCRIPT KIDDIE. Kamu tidak punya skill dan tidak seorangpun berimpresi bahwa kamu dapat menemukan .edu yang cacat yang lubangnya belum dipatch. Juga, orang akan kurang impresif jika kamu menggunakan akses untuk men-deface website untuk menunjukkan kepintaran kamu dan betapa bodohnya sisadmin. Kemungkinan yang lain adalah teknik sosial atau 'social engineering'. Taruhlah kamu sedang menscan perusahaan target kamu dan nmap melaporkan 'Datavoice TxPORT PRISM 3000 T1 CSU/DSU 6.22/2.06'. Hacker mungkin akan menelepon sebagai 'Datavoice support' dan menanyakan tentang PRISM 3000. "Kita akan mengumumkan lubang keamanan segera, tapi pertama kita ingin pelanggan kita saat ini untuk menginstall patch-- Saya hanya mengemail ini untukmu". Beberapa administrator yang naif akan mengira hanya teknisi Datavoice yang tahu banyak tentang CSU/DSU. Penggunaan potensial yang lain adalah evaluasi perusahaan yang ingin diajak bisnis. Sebelum kamu memilih ISP yang baru, scanlah mereka dan lihat peralatan yang digunakan. "$99/tahun" akan terdengar buruk jika kamu tahu bahwa mereka punya router yang payah dan menawarkan service PPP Windows. TEKNIK KLASIK Stack fingerprint memecahkan masalah identifikasi OS dalam jalan yang unik Saya pikir teknik ini memegang banyak janji, tapi saat ini ternyata ada solusi yang lain . Sayangnya, hal ini merupakan teknik yang paling efektif. playground~> telnet hpux.u-aizu.ac.jp Trying 163.143.103.12 ... Connected to hpux.u-aizu.ac.jp. Escape character is '^]'. HP-UX hpux B.10.01 A 9000/715 (ttyp2) login: Di situ tidak akan muncul masalah fingerprint jika mesin mengumumkan kepada dunia sistem yang dipakai. Sayangnya, banyak vendor mengirim sistem saat ini dengan jenis banner yang seperti itu dan banyak admin tidak mematikannya. Hanya karena banyak jalan untuk mengetahui OS yang dipakai ( misalnya fingerprint), bukan berarti kita mesti mengumumkan OS dan arsitektur kita kepada setiap orang yang mencoba untuk koneksi. Masalah yang berhubungan dengan teknik ini adalah jumlah orang yang mematikan banner yang semakin meningkat, banyak sistem yang tidak memberikan informasi yang cukup dan usaha orang untuk membohongi di banner mereka. Bagaimanapun, pembacaan banner adalah semua yang kamu dapatkan untuk mengecek OS dan versi OS jika kamu menghabiskan $$$ untuk ISS scanner komersial. Download nmap dan tabungkan uangmu :). Bahkan jika kamu mematikan banner, banyak aplikasi yang dengan gembira memberi tahu jika diminta. Sebagai contoh lihat sebuah FTP server: payfonez> telnet ftp.netscape.com 21 Trying 207.200.74.26 ... Connected to ftp.netscape.com. Escape character is '^]'. 220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready. SYST 215 UNIX Type: L8 Version: SUNOS Pertama, ini memberitahu detail sistem di banner defaultnya. Kemudian jika kita beri perintah 'SYST' dengan gembiranya dia akan memberi informasi yang lebih banyak. Jika mendukung anon FTP, kita dapat sering download /bin/ls atau binari yang lain dan menentukan arsitektur apa yang dipakai. Banyak aplikasi terlalu bebas dengan informasi. Ambil webserver sebagai contoh: playground> echo 'GET / HTTP/1.0\n' | nc hotbot.com 80 | egrep '^Server:' Server: Microsoft-IIS/4.0 playground> Hmmm ... saya bertanya-tanya OS apa yang dipakai lamer. Teknik klasik yang lain termasuk record host info DNS(jarang efektif) dan teknik sosial. Jika mesin mendengar di 161/udp(snmp), kamu dijamin setumpuk info menggunakan 'snmp walk' dari distribusi alat CMU SNMP dan nama komunitas 'public' PROGRAM FINGERPRINT TERBARU Nmap bukan program identifikasi OS yang pertama menggunakan fingerprint TCP/IP. IRC spoofer sirc-nya Johan memasukkan teknik dasar fingerprint sejak versi 3. Itu berusaha untuk menempatkan host dalam kelas "Linux", "4.4BSD", "Win95", atau "Unknown" menggunakan tes flag TCP sederhana. Program lain seperti checkos, dirilis Januari tahun ini oleh Shok pada Confidence Remains High Issue #7. Teknik fingerprint sama seperti SIRC bahkan kodenya identik di beberapa tempat. Checkos tersedia khusus dan dalam jangka panjang akan dirilis untuk umum, jadi saya tidak punya ide siapa mengambil kode siapa. Tapi kelihatannya akan tercantum kredit kepada yang lain. Satu yang checkos tambahkan adalah pengecekan banner telnet yang berguna tapi punya masalah nantinya. [ Update: Shok menulis untuk mengatakan bahwa checkos tidak ditujukan untuk umum dan inilah mengapa dia belum terusik untuk meberi kredit SIRC untuk beberapa kode.] Su1d juga menulis program pengecek OS dan dinamai SS versi 3.11 dan dapat mengidentifikasi 12 tipe OS yang berbeda. Saya termasuk bagiannya karena dia memberi kredit program nmap saya untuk beberapa kode jaringannya :). Lalu ada queso. Program ini terbaru dan merupakan lompatan besar dari program yang lain. Tidak hanya mengenalkan beberapa test baru, tapi mereka juga yang pertama (yang saya lihat) memindahkan kode fingerprint OS. Scanner yang lain memasukkan kode seperti: /* dari ss */ if ((flagsfour & TH_RST) && (flagsfour & TH_ACK) && (winfour == 0) && (flagsthree & TH_ACK)) reportos(argv[2],argv[3],"Livingston Portmaster ComOS"); Bahkan queso memindahkan ini ke file konfigurasi yang ternyata lebih baik dan membuat tambahan OS semudah menambah sedikit baris ke file fingerprint. Queso ditulis oleh Savage, satu dari legenda di Apostols.org . Satu masalah dengan semua program yang dijelaskan diatas adalah bahwa mereka sangat terbatas pada jumlah test fingerprint yang membatasi granularitas jawaban. Saya ingin mengetahui lebih daripada hanya 'mesin ini OpenBSD, FreeBSD, atau NetBSD', saya ingin tahu secara persis versi berapa. Dengan kata lain, saya lebih suka melihat 'Solaris 2.6' daripada hanya 'Solaris'. Untuk mencapai ini, saya bekerja pada teknik fingerprint yang akan saya jelaskan nanti. METODOLOGI FINGERPRINT Disana ada banyak teknik yang dapat digunakan untuk me-fingerprint stack networking. Dasarnya, kamu hanya melihat benda yang berbeda diantara sistem operasi dan menulis perbedannya. Jika kamu kombinasikan, kamu dapat mempersempitnya secara tepat. Contohnya, nmap dapat membedakan Solaris 2.4 vs Solaris 2.5-2.51 vs Solaris 2.6. Juga dapat memberitahu kernel Linux 2.0.30 dari 2.0.31-34 atau 2.0.35. Berikut ini beberapa tekniknya: FIN probe -- Di sini kita mengirim paket FIN (atau paket tanpa flag ACK atau SYN ) untuk membuka port dan menunggu respon. Tindakan RFC 793 yang benar adalah tidak ada respon tapi implementasi yang buruk seperti MS Windows, BSDI, CISCO, HP/UX, MVS, dan IRIX mengirim kembali RESET . Banyak peralatan menggunakan teknik ini. Flag BOGUS probe -- Queso adalah scanner pertama yang menggunakan tes pintar ini. Idenya adalah mengeset flag TCP undefined (64 atau 128) pada header TCP dari paket SYN. Mesin Linux terutama 2.0.35 menjaga flag ini tetap di keadaan set pada responnya. Saya tidak menemukan OS lain mempunyai bug ini. Tapi, beberapa OS tampak mereset koneksi ketika mereka dapat paket SYN+BOGUS. Tingkah laku ini dapat berguna untuk mengidentifikasi mereka. Sampling TCP ISN --Ide di sini untuk menemukan pola pada angka urutan inisial yang dipilih oleh implementasi TCP ketika merespon permintaan koneksi. Dapat dikategorikan ke dalam banyak grup misalnya tradisional 64K( kotak UNIX lama), peningkatan random ( versi terbaru Solaris, IRIX, FreeBSD,Digital UNIX, Cray, dsb), random asli (Linux 2.0.*, OpenVMS, AIX terbaru, dsb). Kotak Windows (dan sedikit yang lain) menggunakan model "time dependent" (tergantung waktu) dimana ISN dinaikkan sedikit setiap waktu periode.Tanpa perlu dikata, ini hampir mudah diserang seperti 64K lama. Tentu teknik favorite saya adalah konstan. Mesin selalu menggunakan ISN yang sama :). Saya sudah lihat pada 3Com hubs(memakai 0x803) dan printer AppleLaserWriter( memakai 0x7001) Kamu dapat juga membagi grup ini seperti peningkatan random dengan variasi perhitungan, pembagi terbesar, dan fungsi lain pada set angka urutan dan selisihnya. Dicatat bahwa penciptaan ISN mempunyai implikasi keamanan yang penting. Untuk informasi yang lebih banyak , hubungi "ahli keamanan" Tsutomu "Shimmy" Shimomura di SDSC dan tanya dia bagaimana dia dimiliki. Nmap adalah program pertama yang saya lihat menggunakan ini untuk identifikasi OS. Bit "don't fragment" -- Banyak OS memulai untuk mengeset bit IP "Don't Fragment" pada beberapa paket yang mereka kirim. Ini memberikan keuntungan performasi yang beragam( meskipun ini dapat diabaikan-- inilah mengapa scan fragmentasi nmap tidak bekerja dari kotak Solaris). Pada beberapa kasus. tidak semua OS melakukan ini dan beberapa melakukannya pada kasus berbeda, jadi dengan memperhatikan bit ini kita dapat informasi tentang OS target. Saya belum melihat yang satu ini sebelumnya. Window inisial TCP -- Ini termasuk mengecek ukuran window pada paket yang dikembalikan. Scanner lama menggunakan window non-zero pada paket RST untuk mengartikan "BSD 4.4 turunan". Scanner terbaru seperti queso dan nmap menjaga jejak window asli karena merupakan konstanta sesuai tipe OS. Tes ini memberikan kita banyak informasi karena beberapa OS dapat diidentifikasi secara unik lewat window sendiri( misalnya, AIX adalah hanya OS yang saya lihat menggunakan 0x3F25) . Pada stack TCP untuk NT5, Microsoft menggunakan 0x402E. Menariknya, itu adalah angka yang digunakan OpenBSD dan FreeBSD. Nilai ACK -- Meskipun kamu berpikir ini standar, implementasinya berbeda pada nilai yang digunakan untuk field ACK pada kasus tertentu. Sebagai contoh, taruhlah kamu mengirim FIN|PSH|URG ke port TCP yang tertutup. Banyak implementasi akan mengeset ACK sama seperti angka urutan inisial, meskipun Windows dan beberapa printer yang bodoh akan mengirim urutan+1. Jika kamu mengirim SYN|FIN|URG|PSH ke port terbuka, Windows sangat tidak konsisten. Kadang-kadang mengirim kembali urutannya, lain waktu mengirim S++ atau nilai yang acak. Seseorang mesti bertanya-tanya kode apa yang ditulis MS sehingga berubah seperti itu. ICMP Error Message Quenching -- Beberapa OS mengikuti RFC 1812 saran untuk membatasi kecepatan mengirim pesan error. Misalnya, kernel Linux(pada net/ipv4/icmp.h) membatasinya 80 per 4 detik, dengan 1/4 detik penalti jika melewati.Satu jalan untuk mengetesnya adalah mengirim segudang paket ke beberapa port UDP secara acak dan menghitung yang tidak sampai yang diterima. Saya tidak menambah ini pada nmap (kecuali untuk scan port UDP).Tes ini membuat deteksi OS menjadi lebih lama karena kamu perlu mengirim segudang paket dan menunggunya kembali. Juga kemungkinan adanya paket yang drop akan menyakitkan. ICMP Message Quoting --RFC memberi tahu pesan error ICMP perlu sejumlah kecil pesan ICMP yang menyebabkan error yang beragam. Untuk pesan "port tidak dapat dicapai", hampir semua implementasi mengirim IP header + 8 bytes kembali. Tapi, Solaris mengirim lebih banyak bit dan Linux lebih dari itu. Cantiknya, ini mengijinkan nmap mengenali host Linux dan Solaris bahkan bila tidak ada port yang listening. ICMP Error message echoing integrity -- Saya dapat ide dari Theo De Raadt (developer OpenBSD ) pada comp.security.unix. Mesin mesti mengirim kembali bagian pesan yang asli dengan error port yang tidak dapat dicapai. Beberapa mesin memakai header sebagai 'scratch space' selama proses sehingga terjadi bitwarp oleh waktu yang kamu dapat kembali. Misal , AIX dan BSDI mengirim kembali field IP 'panjang total' yang 20 byte terlalu tinggi. Beberapa BSDI, FreeBSD, OpenBSD, ULTRIX, dan VAXen mengirim IP ID yang kamu kirim ke mereka. Ketika checksum berubah karena perubahan TTL, beberapa mesin (AIX, FreeBSD, dsb) mengirim kembali checksum inkonsisten atau 0. Beberapa berjalan dengan checksum UDP. Nmap melakukan 9 test berbeda pada error ICMP untuk mengendus perbedaan seperti itu. Tipe Service -- Untuk pesan port ICMP yang tidak dapat dicapai saya melihat nilai Type Of Service (TOS) dari paket yang kembali. Hampir semua implementasi memakai 0 untuk error ICMP ini meskipun Linux memakai 0xC0. Ini tidak mengindikasikan satu nilai standar TOS, tapi merupakan bagian field yang tidak terpakai(AFAIK). Saya tidak tahu mengapa ini diset, tapi jika mereka merubahnya ke 0 kita akan dapat mengidentifikasi versi lama dan baru. Penanganan Fragmentasi -- Ini merupakan teknik favorit Thomas H. Ptacek dari Secure Networks, Inc(sekarang milik user Windows di NAI). Ini mengambil keuntungan dari fakta bahwa implementasi berbeda sering menangani fragmen IP yang overlapping secara berbeda. Beberapa mengganti yang baru, lainnya masih suka yang lama. Di sana banyak perbedaan yang digunakanuntuk menentukan bagaimana paket disusun kembali. Saya tidak menambahkan kemampuan ini karena saya tahu tidak ada jalan portable untuk mengirim fragmen IP (khususnya, di Solaris). Untuk informasi lebih jauh tentang fragmen overlapping kamu dapat membaca catatan IDS (www.secnet.com). Pilihan TCP -- Di sini ada sebuah tambang emas pembocoran informasi. Kecantikan pilihan ini adalah bahwa: 1) Mereka secara umum opsional ( duh!) :) jadi tidak semua host mengimplementasikannya 2) Kamu tahu jika host mengimplementasikannya dengan mengirim urutan dengan pilihan set, target menunjukkan dukungan pilihan itu dengan mensetnya di tanggapan 3) Kamu dapat memiliki seluruh pilihan di satu paket untuk mengetes semuanya sekali saja Nmap mengirim pilihan ini di hampir semua paket probe: Window Scale=10; NOP; Max Segment Size = 265; Timestamp; End of Ops; Ketika kamu dapat respon , kamu lihat pilihan mana yang dikembalikan dan didukung. Beberapa OS seperti FreeBSD saat ini mendukung semua, sedang yang lain seperti Linux 2.0.X mendukung sedikit. Linux 2.1.x kernel mendukung semuanya. Dengan kata lain, mereka dapat diserang prediksi urutan TCP. Bahkan jika beberapa OS mendukung pilihan sama, kamu dapat membedakannya lewat nilai pilihan itu.Contoh, jika kamu mengirim nilai MSS kecil ke kotak Linux, ini akan mengembalikan MSS kembali ke kamu. Host yang lain akan memberi nilai yang beda. Dan jika kamu dapat set pilihan yang sama DAN nilai sama, kamu tetap data membedakannya lewat pesan pilihan yang diberikan, dan dimana padding dipakai. Contoh Solaris mengembalikan 'NNTNWME' yang berarti: <no op><no op><timestamp><no op><window scale><echoed MSS> Sedang Linux 2.1.122 mengembalikan MENNTW. Pilihan sama, nilai sama, tapi pesan berbeda! Saya belum melihat alat deteksi OS yang lain menggunakan pilihan TCP, tapi ini sangat berguna. Di sana ada sedikit pilihan berguna seperti dukungan T/TCP dan keterangan yang selektif. Kronologi Exploit -- Bahkan dengan semua tes diatas, nmap tidak dapat membedakan antara stack TCP Win95, WinNT atau Win98. Ini agak mengejutkan, khususnya sejak Win98 datang 4 tahun setelah Win95. Kamu mungkin berpikir mereka mengembangkan stack dengan jalan yang sama( seperti mendukung lebih banyak pilihan TCP) dan kita dapat mendeteksi perubahan dan membedakan OS. Sayangnya ini bukan kasusnya. Stack NT sama berantakan dengan stack '95 dan mereka tidak mengupgradenya untuk '98. Tapi jangan menyerah, ada solusinya. Kamu dapat memulai dengan Windows DOS attacks ( Ping of Death, Winnuke, dsb) dan pindah ke serangan yang lebih seperti Teardrop dan Land. Setelah serangan ping mereka untuk melihat apakah mereka crash. Ketika sudah crash kamu akan mempersempit apa yang mereka jalankan ke satu service pack atau hotfix. Saya tidak menambahkan fungsi ini ke nmap, meskipun saya mesti bilang ini sangat menggairahkan :). Resistansi SYN Flood -- Beberapa OS akan berhenti menerima koneksi baru jika kamu mengirim terlalu banyak paket SYN. Banyak OS hanya dapat menangani 8 paket. Linux kernel sekarang mengijinkan metode beragam seperti SYN cookie untuk mencegah menjadi masalah serius. Kemudian kamu dapat belajar tentang OS sasaran dengan mengirimkan 8 paket dari sumber ke port terbuka dan mengetes apakah kamu dapat membuat koneksi ke port itu sendiri. Ini tidak diimplementasikan di nmap karena orang sebal jika kamu meng-flood mereka SYN. Bahkan penjelasan bahwa kamu melakukan sedikit percobaan untuk menentukan OS yang meraka pakai tidak dapat membantu untuk membuat mereka tenang. IMPLEMENTASI NMAP DAN HASILNYA Saya telah membuat implementasi referensi teknik deteksi OS tersebut diatas. Saya telah tambahkan di scanner nmap saya yang berguna untuk mengetahui port berapa yang terbuka dan tertutup. Ini juga portable diantara Linux, *BSD, dan Solaris 2.51 dan 2.6 dan beberapa OS lain. Versi terbaru nmap membaca file dengan template fingerprint yang mengikuti tata bahasa sederhana. Inilah contohnya: FingerPrint IRIX 6.2 - 6.4 # Terima kasih Lamont Granquist TSeq(Class=i800) T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT) T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=N%W=C000|EF2A%ACK=O%Flags=A%Ops=NNT) T4(DF=N%W=0%ACK=O%Flags=R%Ops=) T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=N%W=0%ACK=O%Flags=R%Ops=) T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) Coba lihat baris pertama ( saya tambahkan '>' quote markers): > FingerPrint IRIX 6.2 - 6.3 # Terima kasih Lamont Granquist Ini mengatakan bahwa fingerprint meliputi IRIX versi 6.2 sampai 6.3 dan komentar mengatakan bahwa Lamont Granquist telah mengirim saya alamat IP atau fingerprint kotak IRIX yang telah dites. > TSeq(Class=i800) Ini berarti bahwa sampling ISN ditaruh di "class i800". Ini berarti setiap angka urutan yang baru kelipatan 800 lebih dari sebelumnya. > T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT) Test ini dinamai T1 (untuk test1, pintar yah?). Di tes ini kita kirim paket SYN sengan pilihan TCP ke port terbuka. DF=N berarti bit "Don't fragment" dari respon mesti jangan diset. W=C000|EF2A berarti iklan window yang kita terima harus 0xC000 atau EF2A. ACK=S++ berarti keterangan yang kita terima mesti angka urutan plus 1. Flags = AS berarti flag ACK dan SYN dikirim dalam responnya. Ops=MNWNNT berarti pilihan di respon harus (dalam pesan ini): <MSS (not echoed)><NOP><Window scale><NOP><NOP><Timestamp> > T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) Test 2 memasukkan NULL dengan pilihan sama ke port terbuka. Resp=Y berarti kita harus dapat respon. Ops= berarti disana harus tidak ada pilihan di paket respon. Jika tidak ada '%Ops=' lalu pilihan yang dikirim akan match. > T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AS%Ops=M) Test 3 adalah w/pilihan SYN|FIN|URG|PSH ke port yang terbuka. > T4(DF=N%W=0%ACK=O%Flags=R%Ops=) Ini adalah ACK ke port terbuka. Catat bahwa kita tidak ada Resp= di sini. ini berarti kekurangan respon ( seperti paket drop di jaringan atau di firewall) tidak akan mendiskualifikasi match selama semua test yang lain match. Kita lakukan ini karena secara virtual OS akan mengirim respon, jadi kekurangan respon merupakan atribut kondisi jaringan dan bukan OS itu sendiri. Kita taruh Resp pada test 2 dan 3 karena beberapa OS melakukan drop ketika tidak ada respon. > T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) > T6(DF=N%W=0%ACK=O%Flags=R%Ops=) > T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) Tes ini adalah SYN, ACK, dan FIN|PSH|URG ke port tertutup. Pilihan sama selalu diset. Tentu ini mungkin jelas diberinama 'T5', 'T6', dan 'T7' :) > PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) Yang menyebalkan adalah tes pesan "port unreachable". Kamu sebaiknya mengenali DF=N sekarang. TOS=0 berarti bahwa tipe IP dari field service adalah 0. Dua field berikutnya memberikan nilai (hex) field panjang total IP dari pesan header IP dan panjang total yang diberikan di header IP mereka kembali kirimkan ke kita. RID=E berarti nilai RID yang kita dapat di copy paket UDP asli adalah yang kita harapkan. RIPCK=E berarti mereka tidak dapat checksum (jika ya, mestinya RIPCK=F). UCK=E berarti checksum UDP benar. Lalu datang panjang UDP yang 0x134 dan DAT=E berarti mereka balikkan data UDP secara benar. Karena banyak implementasi(termasuk satu ini) tidak mengirim data UDP kembali, mereka dapat DAT=E secara default. Versi nmap dengan fungsi ini merupakan siklus beta khusus yang keenam. Ini mungkin basi oleh waktu kamu baca ini di Phrack. Lalu lagi, mungkin tidak. Lihat http://nmap.org/ untuk versi terbaru. SEKILAS SITE POPULAR Ini adalah hasil yang menyenangkan dari semua usaha kita. Kita dapat mencoba situs secara acak dan menentukan OS yang mereka pakai. Banyak orang telah mengeliminasi banner telnet,dsb untuk menjaga informasi khusus. Tapi ini percuma dengan fingerprinter baru kita! juga ini jalan terbaik untuk mengungkapkan <pengguna OS favorit> yang dijadikan lamer :)! Perintah yang digunakan adalah : nmap -sS -p 80 -O -v <host> Juga catat bahwa scan ini dilakukan pada 10/18/98. Beberapa mungkin sudah mengupgrade atau merubah server setelah itu. Catat bahwa saya tidak suka site-site di sini. # Situs "Hacker" atau (pada beberapa kasus) site yang sejenisnya www.l0pht.com => OpenBSD 2.2 - 2.4 insecure.org => Linux 2.0.31-34 www.rhino9.ml.org => Windows 95/NT # No comment :) www.technotronic.com => Linux 2.0.31-34 www.nmrc.org => FreeBSD 2.2.6 - 3.0 www.cultdeadcow.com => OpenBSD 2.2 - 2.4 www.kevinmitnick.com => Linux 2.0.31-34 # Free Kevin! www.2600.com => FreeBSD 2.2.6 - 3.0 Beta www.antionline.com => FreeBSD 2.2.6 - 3.0 Beta www.rootshell.com => Linux 2.0.35 # Berubah ke OpenBSD setelah # mereka dimiliki. # Vendor Keamanan, konsultan, dsb. www.repsec.com => Linux 2.0.35 www.iss.net => Linux 2.0.31-34 www.checkpoint.com => Solaris 2.5 - 2.51 www.infowar.com => Win95/NT # Vendor OS www.li.org => Linux 2.0.35 # Linux Internasional www.redhat.com => Linux 2.0.31-34 # Saya bertanya-tanya distro apa:) www.debian.org => Linux 2.0.35 www.linux.org => Linux 2.1.122 - 2.1.126 www.sgi.com => IRIX 6.2 - 6.4 www.netbsd.org => NetBSD 1.3X www.openbsd.org => Solaris 2.6 # Ahem :) (ini karena UAlberta # menge-host mereka) www.freebsd.org => FreeBSD 2.2.6-3.0 Beta # Ivy Univ www.harvard.edu => Solaris 2.6 www.yale.edu => Solaris 2.5 - 2.51 www.caltech.edu => SunOS 4.1.2-4.1.4 # Hallo! Ini era 90's :) www.stanford.edu => Solaris 2.6 www.mit.edu => Solaris 2.5 - 2.51 # sekolah-sekolah nampak suka Sun? # Mungkin ini 40% # .edu diskon :) www.berkeley.edu => UNIX OSF1 V 4.0,4.0B,4.0D www.oxford.edu => Linux 2.0.33-34 # Rock on! # Situs Lamer www.aol.com => IRIX 6.2 - 6.4 # Wajar mereka tidak aman :) www.happyhacker.org => OpenBSD 2.2-2.4 # Pahit , Carolyn? # Bahkan OS paling aman # tidak berguna di tangan # admin yang tidak kompeten # Misc www.lwn.net => Linux 2.0.31-34 # Situs berita Linux ! www.slashdot.org => Linux 2.1.122 - 2.1.126 www.whitehouse.gov => IRIX 5.3 sunsite.unc.edu => Solaris 2.6 Catatan: Di paper keamanan mereka, Microsoft bilang tentang kurangnya keamanan mereka: "asumsi ini telah berubah setelah Windows NT mendapat popularitas karena fitur keamanannya.". Hmmm, di mana saya berada tidak kelihatan Windows popular di komunitas keamanan :). Saya hanya melihat 2 kotak Windows dari seluruh grup dan Windows mudah bagi nmap untuk membedakannya karena terlalu berantakan. Dan tentu, ada satu situs yang harus kita cek. Ini adalah website perusahaan Transmeta yang rahasia. Menariknya perusahaan ini didanai oleh Paul Allen dari Microsoft, tapi mempekerjakan Linus Torvalds. Jadi apakah mereka ikut Paul dan memakai NT atau memberontak dan mengikuti revolusi Linux? Mari kita lihat: Kita gunakan perintah: nmap -sS -F -o transmeta.log -v -O www.transmeta.com//24 Ini berarti scan SYN untuk port yang diketahui (dari /etc/services), log hasilnya ke 'transmeta.log', bisa dilihat, melakukan scan OS dan scan kelas C dimana www.transmeta.com berada. Inilah hasilnya: neon-best.transmeta.com (206.184.214.10) => Linux 2.0.33-34 www.transmeta.com (206.184.214.11) => Linux 2.0.30 neosilicon.transmeta.com (206.184.214.14) => Linux 2.0.33-34 ssl.transmeta.com (206.184.214.15) => Linux unknown version linux.kernel.org (206.184.214.34) => Linux 2.0.35 www.linuxbase.org (206.184.214.35) => Linux 2.0.35 ( mungkin sama mesinnya ) Baik, saya kira ini menjawab pertanyaan kita secara jelas :) KETERANGAN Alasan Nmap mampu mendeteksi banyak OS berbeda adalah banyak orang di tim beta khusus berusaha mencari kotak yang baru dan menarik untuk fingerprint! Khususnya, Jan Koum, van Hauser, Dmess0r, David O'Brien, James W. Abendschan, Solar Designer, Chris Wilson, Stuart Stock, Mea Culpa, Lamont Granquist, Dr. Who, Jordan Ritter, Brett Eldridge, and Pluvius telah mengirim banyak alamat IP dari kotak dan/atau fingerprint mesin yang tidak dapat dicapai melalui internet. Terima kasih Richard Stallman atas penulisan GNU Emacs. Artikel ini akan tidak rapi wordwrapnya jika masih pakai vi atau cat dan ^D. Pertanyaan dan komentar dapat dikirim ke fyodor@insecure.org Nmap tersedia di http://insecure.org/nmap .