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 .