BIND dan DNS

Mengamankan Server DNS Anda (BIND)

Oleh Iwan Setiawan
http://www.duniasemu.org/writings
2003/04/11 18:09:28

Pada artikel sebelumnya kita sudah mengenal mengenai konsep dan gambaran Domain Name System (DNS) dan Berkeley Internet Name Domain (BIND) sebagai salah satu implementasinya, pembuatan server DNS resolving-caching tanpa domain, dan pembuatan server DNS dengan domain.
Sekarang penulis akan membahas tentang keamanan server DNS yang menggunakan BIND.

DNS yang merupakan tulang punggung jaringan terutama Internet sering sekali dijadikan target serangan oleh para hacker/cracker. Ketika seseorang sudah berhasil menguasai server DNS dan dapat mengontrolnya maka akibatnya akan sangat luas pada jaringan dan memungkinkan untuk mendapatkan akses yang lebih besar.

Beberapa serangan dan issue keamanan yang terjadi pada server DNS adalah:

BIND sebagai implementasi dari DNS yang umum digunakan di Internet ternyata mempunyai sejarah keamanan yang banyak.

Beberapa kelemahan keamanan pada BIND:

Catatan:

Administrator yang mempunyai tanggung jawab terhadap server DNS diharapkan dapat terus memonitor dan mencegah adanya serangan dan eksploitasi terhadap server DNS-nya. Pencegahan dapat dilakukan dengan cara konfigurasi dan implementasi yang aman pada server DNS.

Di bawah ini adalah implementasi dan rekomendasi yang relatif aman pada BIND:

  1. Penggunaan versi BIND terbaru.
    Sebagian besar versi BIND lama mempunyai bug dan dapat dieksploitasi sehingga akan menimbulkan serangan. Dengan menggunakan versi terbaru diharapkan dapat meminimalkan adanya bug dan eksploitasi yang bisa dilakukan terhadap name-server karena bug pada versi sebelumnya biasanya sudah diperbaiki pada versi yang lebih baru. Jangan lupa ketika meng-upgrade baca perubahan yang ada (release notes), karena pada beberapa versi terbaru ada perubahan konfigurasi untuk mengaktifkan fitur baru dan kinerjanya.
  2. Mengurangi kesalahan pada satu titik
    Ada beberapa cara:
  3. Pembatasan zone-transfer
    Melakukan pembatasan zone-transfer hanya kepada secondary name-server atau mesin yang benar-benar mempunyai authority terhadap informasi atau data pada zone yang bersangkutan. Pada /etc/named.conf tambahkan baris allow transfer { [ip-atau-jaringan-yang-boleh-melakukan-zone-transfer]}; di bagian options atau zone. Contoh:

    options {
    		allow-transfer {192.168.3.3;};
    };
    

    atau pada zone

    zone "my-server.com" IN {
    		type master;
    		file "db.my-server.com";
    		allow-transfer {192.168.3.3;};
    };
    

    Selain itu bisa juga dengan menggunakan metode Transaction SIGnature (TSIG). Contoh:

    key transfer.my-server.com. {
       algorithm hmac-md5;
       secret jggRewTTCgdTOUvWPd0cqPoRiQ/=;
    };
    
    zone "my-server.com" {
       type master;
       file "db.my-server.com";
       allow-transfer {key transfer.my-server.com.;};
    };
    

    Zone-transfer tidak dapat dilakukan oleh name-server yang meminta tanpa key (kode TSIG) yang sama pada primary-master name-server.
  4. Membatasi dynamic update
    Dynamic update harus dibatasi pada server DNS kita dari permintaan update informasi host/domain. Pada /etc/named.conf tambahkan baris allow update { [ip-atau-jaringan-yang-boleh-melakukan-update]}; di bagian options atau zone. Contoh:

    options {
    		allow-update {192.168.3.3;};
    };
    

    atau pada zone

    zone "tech-server.com" IN {
    		type "master";
    		file "db.tech-server.com";
    		allow-update {127.0.0.1; 192.168.3.0/24;};
    };
    

    Selain itu bisa juga dengan menggunakan kode TSIG.

    key update.my-server.com. {
       algorithm hmac-md5;
       secret dkYjggRewTCgdT0qPoRiQjLoO8Gd;
    };
    
    zone "my-server.com" {
       type master;
       file "db.my-server.com";
       allow-update { key update.my-server.com.; };
    };
    

    Dynamic update tidak dapat dilakukan oleh name-server yang meminta tanpa key (kode TSIG) yang sama pada primary-master name-server.
  5. Pembatasan query
    Membatasi query atau permintaan terhadap data atau informasi yang ada dalam database-cache atau berkas zone server DNS. Pada /etc/named.conf tambahkan baris allow query { [ip-atau-jaringan-yang-boleh-melakukan-query]}; di bagian options atau zone. Contoh:

    options {
    		allow-query {127.0.0.1; 192.168.3.0/24;};
    };
    

    atau pada zone

    zone "my-server.com" IN {
    		type master;
    		file "db.my-server.com";
    		allow-query {127.0.0.1; 192.168.3.0/24;};
    };
    

  6. Membatasi permintaan rekursif
    Dengan pembatasan permintaan rekursif pada server DNS maka dapat meminimalkan ancaman DNS spoofing/cache poisoning. Permintaan rekursif dapat dibatasi dengan options allow-recursion. Contoh:

    options {
    		...
    		allow-recursion {192.168.3.0/24;};
    		...
    };
    

    Jika ingin mematikan fasilitas permintaan rekursif dapat menggunakan options recursion no. Contoh:

    options {
    		recursion no;
    };
    

  7. Membagi fungsi dua name-server.
    Pembagian fungsi dari name-server yaitu:

    Ketika kita mencoba membuat dua server DNS, kita membutuhkan dua komputer server (perangkat keras). Dengan BIND versi 8 ke atas kita dapat membuat dua name-server dalam satu komputer sehingga kita dapat membagi name-server untuk menerima dan menjawab query atau permintaan resolving nama domain.

  8. Menolak permintaan versi BIND
    Permintaan versi perangkat lunak BIND biasanya dilakukan penyerang untuk mengetahui versi dari BIND dan akan membandingkan dengan daftar versi yang mempunyai kelemahan. Selanjutnya si penyerang akan menyerang dengan serangan atau eksploitasi yang spesifik pada versi BIND tertentu. Kita harus menolak permintaan versi dan mencatat permintaan tersebut, yaitu dengan mengedit /etc/named.conf dan zone. Contoh:

    zone "bind" chaos {
    		type master;
    		file "bind";
    		allow-query {localhost;};
    };
    

    dan pada zone BIND

    $TTL 86400
    @	CHAOS	SOA	localhost.	root.localhost. {
    						2002081219 ; Serial
                                  28800      ; Refresh
                                  14400      ; Retry
                                  3600000    ; Expire
                                  86400 )    ; Minimum
    NS		localhost.
    

  9. Menjalankan named sebagai pengguna biasa atau non-root.
    Penggunaan account root untuk menjalankan named adalah tindakan yang penuh resiko. Orang lain atau penyusup dapat mengekploitasi atau memanfaatkan kelemahan layanan yang dijalankan oleh root sehingga dia bisa mendapatkan hak root dengan eksploitasinya. Tambahkan pengguna baru misal: named, set direktori kerja /var/named/, pastikan pengguna named hanya dapat menjalankan program name-server named saja.

    # useradd -d /var/named/ -s /bin/false named
    
    # groupadd named
    

    Pastikan pengguna named mempunyai hak akses pada direktori kerja named (/var/named/), berkas zone dan juga hak untuk menulis pid dari named. Jalankan named dengan mengetikkan:

    # /usr/sbin/named -u named -g named
    

  10. Konfigurasi antarmuka dimana named mendengarkan permintaan resolving host/domain.
    Dengan mengkonfigurasi antarmuka jaringan (misal kartu jaringan eth0) untuk mendengarkan atau listening pada port 53 maka dapat membatasi jaringan mana yang dapat mengirimkan query atau permintaan resolving nama domain terhadap server DNS. Contoh:

    listen-on { 192.168.3.1;};
    

  11. Kontrol akses untuk host-host yang dipercaya.
    Kontrol akses atau Access Control Lists (ACL) ini dapat membatasi layanan DNS kepada host/jaringan yang dipercaya yaitu dengan memasukkan data host dan jaringan tersebut ke dalam berkas konfigurasi. Data atau informasi database-cache server DNS hanya dapat diakses oleh host dan jaringan yang terpercaya sehingga mempersempit kesempatan seorang penyusup untuk melakukan pengambilan data host dan jaringan pada suatu perusahaan. Contoh: Deklarasi ACL dengan nama "dalam" untuk jaringan internal.

    acl "dalam" {
    		{ 192.168.3.0/24;};
    };
    

    Pada named.conf:

    zone "internal.my-server.com" {
    			type master;
    			file "internal";
    			allow-query {"dalam";};
    };
    

  12. Chroot Jail
    Teknik ini akan menghindari named digunakan oleh penyusup untuk melakukan modifikasi filesystem serta menghindari adanya buffer overflow.
    Secara umum langkah menjalankan named dengan lingkungan chroot() yaitu: Pilih direktori kerja named misal /var/named/, jika anda menginginkan direktori lain bisa anda buat sendiri. Salin berkas-berkas yang penting untuk menjalankan named: named (binary), named.conf, zone. Jalankan named dengan option -t.

    # /usr/sbin/named -u named -t /var/named/
    

  13. Mematikan layanan yang tidak perlu dan mem-filter lalu lintas data.
    Layanan-layanan yang tidak digunakan pada host yang menjalankan name-server sebaiknya dimatikan selain itu juga perlu dilakukan pem-filteran-an lalu lintas data.
    Lalu lintas atau permintaan yang menuju port 53/tcp dan port 53/udp diijinkan tetapi tetap di-filter dan dibatasi melalui konfigurasi name-server. Layanan lain pada host yang masih digunakan dapat di-filter menggunakan firewall.
  14. Memonitor server DNS dan berita keamanan BIND.
    Seiring dengan waktu keamanan menjadi ancaman bagi sistem kita. Untuk memperkecil atau mempersempit terjadinya pemanfaatan kelemahan sistem kita terutama server DNS maka kita harus tetap memonitor server (monitor berkas catatan/log sistem) dan mengikuti informasi melalui mailing-list keamanan BIND ataupun di website keamanan/sekuriti. Di milis dan website tersebut biasanya tersedia informasi kelemahan-kelemahan yang terjadi pada suatu perangkat lunak ataupun sistem dan cara mencegahnya.
    Beberapa website dan mailing list keamanan:

Artikel mengamankan server DNS (BIND) ini diharapkan dapat memberikan gambaran mengenai keamanan layanan DNS dan kesadaran kita untuk dapat menjaga layanan DNS ini agar dapat tetap eksis dalam jaringan.

Akhirnya selesai sudah perjalanan pembahasan BIND dan DNS ini. Silahkan untuk bereksperimen dan mengeksplorasi lebih dalam.
Saran dan kritik dapat dialamatkan ke stwn[at]duniasemu[dot]org.

URL

Referensi