Sebuah jaringan TCP/IP menggunakan alamat IP sebagai pengenal suatu host, alamat IP tersebut disimpan dalam tiap paket IP yang membawa data/informasi. Dengan adanya IP maka switch/router dapat menentukan jalur kemana paket tersebut harus dikirim.
Nama domain digunakan untuk mempermudah kita dalam mengingat suatu hostname. Proses translasi dilakukan oleh Domain Name System yaitu sebuah database terditribusi yang digunakan aplikasi TCP/IP untuk memetakan antara hostname dengan IP address. Proses tersebut biasa disebut resolve dan program yang melakan resolve domain name disebut resolver.
Konsep DNS dispesifikasikan pada RFC 1034, sedangkan implementasinya dijelaskan pada RFC 1035
Sebuah hostname biasanya direpresentasikan dalam sebuah fully qualified domain name (FQDN) yang memiliki bentuk/format sbb:
<domain>.<top level domain>
Hostname seperti ejlp.blogspot.com, google.com, students.xyz.ac.id adalah contoh-contoh FQDN.
Top level domain
TOp level domain adalah domain yang paling tinggi yang berada dalam struktur pohon DNS. Ada beberapa macam top level domain, yaitu:
- arpa merupakan domain khusus yang diperuntukan untuk mentranslasi dari IP address ke hostname
- organizational domain misalnya com, org, net, edu, gov, mil
- country/geographical domain misalnya id untuk indonesia, uk untuk ingris, de untuk jerman
Protokol DNS
Proses resolving suatu domain name dilakukan dengan cara melihat cache database lokal atau jika tidak ada, resolver akan menanyakan ke sebuah DNS server yang telah ditentukan.
DNS protocol digunakan untuk keperluan manajemen DNS. Sebuah DNS message memiliki header yang panjangnya tetap 12 bit kemudian diikuti oleh varibel yang panjangnya tidak tetap. Dibawah ini adalah format dari sebuah DNS message:
+----------------+
| IP (20 bytes) |
+----------------+
| UDP (8 bytes) |
+----------------+
| DNS header |
+----------------+
| question |
+----------------+
| answer |
+----------------+
| answer |
+----------------+
DNS message memiliki header yang panjangnya tetap 12 bit kemudian diikuti oleh varibel yang panjangnya tidak tetap.
Header terdiri dari
- ID atau identification yang diset oleh client dan dikembalikan dengan nilai yang sama oleh server, bagian ini dipergunakan untuk mengetahui pasangan request dan response
- flags yang terdiri dari 16 bit
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| QR | opcode | AA | TC | RD | RA | zero | rcode |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
<----> = 1 bit
- QR (query-response), 0 berarti query, 1 berarti response
- opcode 4 bit 0 standar query, 1 inverse query, 2 server status request
- AA
- TC, bit yang menunjukan jika jika paket dipecah (truncated) karena data yang dibawa lebih dari 512 byte.
- RD, bit yang beraarti recursion desired
- RA bit yang beraarti recursion available
- rcode (return code) 0 berarti no error, 3 berarti name error yang berarti hostname yang dimaksud tidak ada
DNS query dan answer biasanya menggunakan protokol UDP (RFC-768), tetapi dapat juga menggunakan protokol TCP. Protokol TCP digunakan jika resolver mendapatkan jawaban yang tidak dapat dikirim dengan sebuah paket UDP karena panjang jawaban lebih dari 512 bytes.
Proses query pertama kali dilakukan dengan menggunakan UDP. Jika paket lebih dari 512, name server akan memberikan jawaban dengan flag TC yang bernilai 1 kemudian klien akan melakukan query lagi dengan menggunakan TCP. Name server kemudian akan memberikan answer dengan paket TCP yang memiliki feature fragmentasi paket sehingga data yang lebih besar dari 512 bytes bisa dikirimkan ke resolver.
List query type dapat dilihat pada tabel berikut:
Nama Nilai numerik Query Response Deskripsi
------- ------------- ------ --------- -------------------------
A 1 Y Y IP address
NS 2 Y Y Name server
CNAME 5 Y Y Canonical name
PTR 12 Y Y Pointer record
HINFO 13 Y Y Host info
MX 15 Y Y Mail exchange record
AXFR 252 Y - request zone transfer
ANY 255 Y - request semua record
----------------------------------------------------------------
Klien melakukan koneksi ke name server atau DNS server pada port 53
Contoh query & reponse DNS yang diambil menggunakan tool wireshark (www.wireshark.com):
--- Query ----------------------------------------------------------------------
Frame 15 (82 bytes on wire, 82 bytes captured)
Ethernet II, Src: Usi_e2:a1:78 (00:16:41:e2:a1:78), Dst: Cisco_e3:e4:00 (00:16:9c:e3:e4:00)
Internet Protocol, Src: 192.1.1.1 (192.1.1.1), Dst: 192.1.1.17 (192.1.1.17)
User Datagram Protocol, Src Port: 4038 (4038), Dst Port: domain (53)
Source port: 4038 (4038)
Destination port: domain (53)
Length: 48
Checksum: 0x6cbc [correct]
Domain Name System (query)
[Response In: 18]
Transaction ID: 0x4e5c
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
halo.halo.com: type A, class IN
Name: halo.halo.com
Type: A (Host address)
Class: IN (0x0001)
--------------------------------------------------------------------------------
--- Response -------------------------------------------------------------------
Frame 16 (132 bytes on wire, 132 bytes captured)
Ethernet II, Src: Cisco_e3:e4:00 (00:16:9c:e3:e4:00), Dst: Usi_e2:a1:78 (00:16:41:e2:a1:78)
Internet Protocol, Src: 10.4.3.7 (10.4.3.7), Dst: 10.1.1.39 (10.1.1.39)
User Datagram Protocol, Src Port: domain (53), Dst Port: 4041 (4041)
Source port: domain (53)
Destination port: 4041 (4041)
Length: 98
Checksum: 0x6677 [correct]
Domain Name System (response)
[Request In: 33]
[Time: -3.000686000 seconds]
Transaction ID: 0x4e5c
Flags: 0x8183 (Standard query response, No such name)
1... .... .... .... = Response: Message is a response
.000 0... .... .... = Opcode: Standard query (0)
.... .0.. .... .... = Authoritative: Server is not an authority for domain
.... ..0. .... .... = Truncated: Message is not truncated
.... ...1 .... .... = Recursion desired: Do query recursively
.... .... 1... .... = Recursion available: Server can do recursive queries
.... .... .0.. .... = Z: reserved (0)
.... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
.... .... .... 0011 = Reply code: No such name (3)
Questions: 1
Answer RRs: 0
Authority RRs: 1
Additional RRs: 0
Queries
halo.halo.com: type A, class IN
Name: halo.halo.com
Type: A (Host address)
Class: IN (0x0001)
Authoritative nameservers
halo.com: type SOA, class IN, mname ns.halo.com
Name: halo.com
Type: SOA (Start of zone of authority)
Class: IN (0x0001)
Time to live: 40 minutes, 57 seconds
Data length: 38
Primary name server: ns.halo.com
Responsible authority's mailbox: hostmaster.halo.com
Serial number: 2008032501
Refresh interval: 2 hours
Retry interval: 1 hour
Expiration limit: 14 days
Minimum TTL: 1 hour
--------------------------------------------------------------------------------
DNS cache poisoning
DNS memiliki sebuah mekanisme caching yaitu penyimpanan sementara mapping antara hostname dan IP address setelah sebuah name server (NS) menerima informasi mapping tersebut dari NS lain sehingga
Data yang salah dari sebuah host penyerang (attacker) yang berperan remote Name Server (NS) disimpan pada DNS cache Name Server korban. Untuk melakukan penyerangan ini diperlukan trik menebak dari beberapa field yang ada pada paket DNS yaitu:
- Menebak destination port (65,535 kemungkinan)
- Menebak DNS transaction ID (identification) yang ada pada header paket DNS (65,535 kemungkinan)
- Menebak hostname/domain name yang yang di-query oleh klien
Karena implementasi yang kurang baik pada resolver, port dan transaction ID yang dibuat oleh klien dapat juga dengan mudah diprediksi oleh penyerang. Hal ini yang terjadi pada celah keamanan DNS pada Windows
Contoh skenario penyerangan ini adalah sebagai berikut:
1. Seorang penyerang membuat halaman website tipuan yang mirip dengan website www.abc-bank.com untuk dapat memperoleh username dan password nasabah.
Website tipuan tersebut disimpan dalam server dengan IP 202.2.2.1
2. Maksud si penyerang adalah jika ada sebuah host yang menggunakan ns.target.com sebagai DNS servernya akan mengakses http://www.abc-bank.com maka host tersebut akan melakukan request ke IP 202.2.2.1 yang berisi website tipuan dari abc-bank.com. Karena penyerang memiliki akses ke network halo.com dan dapat menyadap paket yang menuju ke sebuah name server halo.com yaitu ns.halo.com maka penyerang melakukan DNS query type A yang menanyakan IP address dari xxx.halo.com ke name server yang akan diserang misalnya ns.target.com.
3. Host xxx.halo.com sebenarnya tidak ada, penyerang hanya mengharapkan ns.target.com akan menanyakan ke ns.halo.com sehingga penyerang dapat menyadap serta melihat detail dari paket DNS query. Dengan melihat detail dari paket DNS query yang disadap dari ns.target.com ke ns.halo.com maka penyerang dapat memprediksi transaction ID yang akan dikirimkan oleh ns.target.com berikutnya.
4. Kemudian penyerang mengirimkan paket DNS query type A ke ns.target.com untuk host www.abc-bank.com. Penyerang mengharapkan ns.target.com akan menanyakan ke name server dari abc-bank.com sehingga penyerang dapat mengirimkan pake DNS reply tipuan (spoofed) yang menginformasikan bahwa www.abc-bank.com memiliki IP address 202.2.2.1
5. Jika transaction ID dari DNS reply tipuan sama dengan transaction ID dari DNS query yang dikirimkan dari ns.target.com ke name server abc-bank.com benar, dan packet reply tersebut diterima ns.target.com sebelum paket jawaban sebenernya (dari name server abc-bank.com) datang maka ns.target.com akan meng-update database cache-nya sehingga www.abc-bank.com memiliki IP address 202.2.2.1
6. Sekarang, siapa saja orang yang menggunakan ns.target.com sebagai DNS servernya maka ketika akan browsing ke http://www.abc-bank.com akan diarahkan ke website tipuan yang berada di 202.2.2.1
Tentu saja proses tersebut perlu dilakukan dengan sebuah tool sehingga proses bisa dilakukan dengan cepat dan berulang-ulang sehingga kemugkingn agar penyerangan sukses menjadi lebih besar.
DNS ID Spoofing
Dengan cara yang sama yaitu melakukan penebakan pada transaction ID, penyerangan juga dapat langsung ditargetkan ke sebuah client (bukan name server). Biasanya sebuah client (target yang akan diserang) akan melakukan DNS query ke DNS server yang diset pada level sistem operasi. Dengan membuat paket DNS reply tipuan, seorang peneyerang dapat membuat client mengarah pada alamat IP yang salah dari suatu hostname tertentu.
Contoh skenario penyerangan ini adalah sebagai berikut
1. Penyerang mengetahui bahwa temannya sebagai target biasanya melakukan akses ke www.abc-bank.com dan target menggunakan IP 207.1.1.7
2. Penyerang mengirimkan DNS query reply terus menerus dengan transaction ID tertentu yang mengarahkan www.abc-bank.com ke IP address milik penyerang yaitu 202.2.2.1
3. Pada saat target akan melaukan brwosing ke http://www.abc-bank.com browser akan memerintahkan resolver untuk melakukan query DNS, jika resolver tidak menemukan cache lokal maka ia akan mengirimkan paket DNS query type A ke DNS server.
4. Jika sebelum DNS server yang digunakan memberikan respon (yang menjawab query IP address dari www.abc-bank.com) target telah menerima paket DNS reply tipuan dari penyerang dan kebetulan transaction ID-nya match maka browser akan mengarahkan http://www.abc-bank.com ke IP yang salah yaitu 202.2.2.1
5. Penyerangan ini dapat lebih mudah dilakukan jika penyerang dan target berada dalam satu network sedemikian sehingga penyerang dapat menyadap paket yang dikirim dari host target sehingga penyerang tau transaction ID yang dikirim oleh target.
No comments:
Post a Comment