Linux DNS Bind RPZ (Response Policy Zone)

Saat ini semakin banyak malware yang melakukan penetrasi hingga bisa menginfeksi sistem dengan cara yang advanced dan evasif. Sudah bukan hal baru lagi malware yang melakukan infeksi sistem secara terpecah-pecah (batch) agar lolos dari signature anti virus. Umumnya dengan Dropper atau Downloader yaitu sebuah binary kecil yang kemudian akan melakukan download part virus/malware lainnya hingga pada akhirnya dapat menjadi 1 binary malware yang utuh dan berfungsi maksimal. Untuk download part-part tersebut, diperlukan koneksi ke C&C (command and control) server pembuat malwarenya, dengan connect ke suatu domain tertentu.

Dropper Step-by-step
Dropper Step-by-step

Pada gambar di atas cukup jelas bahwa langkah 1, 5, 7, 10 adalah aktifitas Dropper ketika melakukan koneksi ke situs malware untuk download “part” malware lainnya. Beberapa varian ada yang menggunakan Domain Generation Algorithm (DGA) sehingga domain C&C yang dikontak bisa berubah-ubah. Namun ada pula yang hardcoded ataupun statis sehingga mudah diidentifikasi. Dalam kesempatan kali ini kita akan melakukan preventif untuk kasus kedua, yaitu non-DGA.

Response Policy Zone (RPZ), adalah metode yang dapat digunakan untuk meng-kustomisasi jawaban/response dari suatu query DNS dari client dengan policy zone. Pembuat “open standard” RPZ ini adalah ISC, yang juga merupakan pembuat named/bind (aplikasi DNS server). Merujuk dari web RPZ, saat ini fitur RPZ hanya bisa digunakan di sistem bind versi 9.8.1 ke atas, appliance BlueCat, dan InfoBlox saja.

Customisasi RPZ bisa beragam, misalnya, menjawab query DNS untuk domain pornografi akan dialihkan ke IP 10.1.99.2, dan domain game akan dijawab “NXDOMAIN”, dll. Pada kesempatan ini, RPZ kita gunakan untuk sink hole domain malware ke IP loopback 127.0.0.1. Kita juga akan mengaktifkan DNS logging untuk mengetahui siapa saja client yang melakukan query DNS ke domain malware, untuk kebutuhan analisa & investigasi lebih lanjut pada client tersebut. List domain malware yang digunakan adalah list domain malware di internet yang dimaintain oleh DNS-BH. Btw, untuk pornografi sendiri, menkominfo punya list domain yang bisa di implementasi RPZ, list domainnya ada di sini.

Berikut adalah objektif kita dengan implementasi DNS RPZ:

DNS RPZ & Logging
DNS RPZ & Logging

Sesuai gambar di atas, kita akan mengkonfigurasi bind DNS server untuk kustomisasi response dari query domain pada langkah 1, 5, 7, 10, yang termasuk dalam list domain malware, menjadi IP 127.0.0.1 (localhost itu sendiri) dan meng-generate log nya untuk kemudian dapat diforward ke suatu system logging & alerting terpusat.

Konfigurasi

Syarat untuk dapat menggunakan RPZ adalah harus menggunakan bind versi 9.8.1 ke atas. Jika kondisi ini sudah terpenuhi, maka aktivasi RPZ ini relatif mudah untuk diimplementasi.

Langkah pertama buka file named.conf, biasanya di direktori /etc/named.conf. Tambahkan baris response-policy di konfigurasi eksisting:

options {
// ...
// option config bind yang lain di sini... 
// ...

response-policy { zone "rpz"; };
}

Serta tambahkan zone baru “rpz” masih pada file named.conf:

zone "rpz" {
 type master;
 file "/var/named/db.rpz.zone";
};

Kita juga akan mengaktifkan logging, masih di file named.conf, tambahkan directive logging jika belum ada sbb:

logging {
 channel rpz-queries {
 file "/var/log/rpz.log" versions 10 size 500k;
 severity info;
 };
 category rpz {
 rpz-queries;
 };
};

Kita sudah selesai mengaktifkan RPZ pada bind. Langkah selanjutnya adalah menyiapkan database situs malware. Contoh kali ini saya menggunakan list malware dari DNS-BH yang format isinya adalah hanya list nama domain saja. (NB: Jika ingin menggunakan DNS-BH, please read Term of Use dari mereka)

Siapkan file db.rpz.zone di direktori /var/named/

touch /var/named/db.rpz.zone

Inisiasi isi file db.rpz.zone dengan isi sebagai berikut:

$TTL 1H
@ IN SOA LOCALHOST. hostmaster.local. (1 1h 15m 30d 2h)
@ IN NS LOCALHOST.
@ IN A 127.0.0.1
@ IN AAAA ::1

Kemudian tambahkan list domain pada file “justdomain” yang didapatkan dari DNS-BH tadi ke dalam file db.rpz.zone. Namun karena format bind adalah “{namadomain} IN A {IP_address}”, maka perlu ditambahkan embel-embel “IN A 127.0.0.1” pada setiap baris domainnya. Kita menggunakan pertolongan awk:

awk '{print $1" IN A 127.0.0.1"}' justdomain >> /var/named/db.rpz.zone

Langkah terakhir adalah restart bind, agar seluruh konfigurasi RPZ mulai bekerja di DNS server bind. Pada Slackware adalah sebagai berikut:

/etc/rc.d/rc.bind restart

Testing

Lakukan testing meng-query domain dari client ke domain-domain yang termasuk di database db.rpz.zone sbb:

nslookup byxlujke.ru

Non-authoritative answer:
Name: byxlujke.ru
Addresses: 127.0.0.1

Dan cek apakah insiden client melakukan query ke domain malware blacklist ini telah tercatat di log:

tail /var/log/rpz.log

Hasilnya, tadaaa, IP user tercatat melakukan query ke salah satu domain malware. Usernya perlu diinvestigasi lebih lanjut hehe:

client 10.245.37.86#53547 (byxlujke.ru): rpz QNAME Local-Data rewrite byxlujke.ru via byxlujke.ru.malware

3 thoughts on “Linux DNS Bind RPZ (Response Policy Zone)

  1. Boss..
    ane nemuin problem di logging nya

    ketika service named start ditemukan problem :
    isc_stdio_open ‘/var/named/rpz.log’ failed: permission denied

    ini confignya di named.conf :
    logging {
    channel default_debug {
    file “data/named.run”;
    severity dynamic;
    };
    channel rpz-queries {
    file “/var/named/rpz.log” versions 10 size 500k;
    severity info;
    };
    category rpz {
    rpz-queries;
    };

    };

    mohon pencerahannya

    terima kasih

  2. gimana cara bikin virtualhost untuk domain dari rpz?
    maksudnya supaya, setiap akses domain yg udah kena filter bakal di alihkan ke virtualhost buatan kita sendiri

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.