Bagaimana cara mengatur resolver terbuka "aman"?

25

Ini adalah Pertanyaan Canonical tentang pengamanan resolusi DNS publik

Server DNS terbuka tampaknya cukup rapi dan nyaman, karena mereka memberikan alamat IP yang dapat kita gunakan secara konsisten di perusahaan kami di mana pun mereka berada. Google dan OpenDNS menyediakan fungsionalitas ini, tetapi saya tidak yakin bahwa saya ingin perusahaan-perusahaan ini memiliki akses ke permintaan DNS kami.

Saya ingin mengatur sesuatu seperti ini untuk digunakan oleh perusahaan kami, tetapi saya mendengar banyak tentang ini sebagai praktik berbahaya (terutama dalam hal serangan amplifikasi ) dan saya ingin memastikan bahwa kami melakukan ini dengan benar. Hal-hal apa yang perlu saya ingat ketika membangun jenis lingkungan ini?

Andrew B
sumber
5
Suara turun membuatku tertawa.
Andrew B

Jawaban:

34

Ada beberapa hal yang perlu Anda pahami tentang hal ini:


Ini adalah masalah rekayasa jaringan.

Sebagian besar orang yang mencari untuk mengatur jenis lingkungan ini adalah administrator sistem. Itu keren, saya juga administrator sistem! Bagian dari pekerjaan adalah memahami di mana tanggung jawab Anda berakhir dan tanggung jawab orang lain dimulai, dan percayalah, ini bukan masalah yang dapat diselesaikan oleh administrator sistem sendiri. Inilah alasannya:

  • UDP adalah protokol stateless. Tidak ada jabat tangan klien.
  • Kueri terhadap server DNS adalah transaksi dua langkah yang tidak diautentikasi (kueri, balas). Tidak ada cara bagi server untuk mengetahui apakah IP sumber dipalsukan sebelum dibalas.
  • Pada saat permintaan telah mencapai server, sudah terlambat untuk mencegah paket UDP palsu. Spoofing hanya dapat dicegah dengan praktik yang dikenal sebagai ingress filtering , suatu topik yang dicakup oleh dokumen BCP 38 dan BCP 84 . Ini diimplementasikan oleh perangkat jaringan yang duduk di depan server DNS Anda.
  • Kami tidak dapat memberikan Anda langkah-langkah tentang cara mengatur pusat data Anda dari ujung ke ujung, atau bagaimana menerapkan praktik terbaik ini. Hal-hal ini sangat spesifik untuk kebutuhan Anda sendiri. Format Tanya Jawab tidak berfungsi untuk ini, dan situs ini tidak dimaksudkan sebagai pengganti untuk mempekerjakan orang profesional untuk melakukan pekerjaan profesional.
  • Jangan berasumsi bahwa perusahaan Anda yang terlalu besar hingga miliaran dolar menerapkan penyaringan masuk dengan benar.

Ini bukan praktik terbaik. Praktik terbaik adalah tidak melakukan ini.

Sangat mudah untuk mengatur internet yang menghadapi resolver DNS. Dibutuhkan jauh lebih sedikit riset untuk membuat satu daripada memahami risiko yang terlibat dalam melakukannya. Ini adalah salah satu kasus di mana niat baik secara tidak sengaja memungkinkan kesalahan (dan penderitaan) orang lain.

  • Jika server DNS Anda akan merespons ke alamat IP sumber apa pun yang dilihatnya, Anda menjalankan resolver terbuka. Ini terus dimanfaatkan dalam serangan amplifikasi terhadap pihak yang tidak bersalah. Administrator sistem baru berdiri resolvers terbuka setiap hari , menjadikannya menguntungkan bagi individu jahat untuk memindai mereka secara konstan. Sebenarnya tidak ada pertanyaan apakah resolver terbuka Anda akan digunakan dalam serangan: pada 2015, itu cukup banyak diberikan. Ini mungkin tidak langsung, tetapi pasti akan terjadi.
  • Bahkan jika Anda menerapkan ACL menggunakan perangkat lunak DNS Anda (yaitu BIND), semua ini dilakukan adalah membatasi paket DNS palsu yang server Anda akan balas. Penting untuk dipahami bahwa infrastruktur DNS Anda dapat digunakan tidak hanya untuk menyerang perangkat di ACL, tetapi perangkat jaringan apa pun antara server DNS Anda dan perangkat yang akan ditanggapi. Jika Anda tidak memiliki pusat data, itu masalah untuk lebih dari sekadar Anda.

Google dan OpenDNS melakukan ini, jadi mengapa saya tidak bisa?

Terkadang perlu mempertimbangkan antusiasme terhadap kenyataan. Berikut adalah beberapa pertanyaan sulit untuk ditanyakan pada diri sendiri:

  • Apakah ini sesuatu yang Anda ingin atasi, atau ini sesuatu yang Anda punya beberapa juta dolar untuk diinvestasikan dalam melakukannya dengan benar?

  • Apakah Anda memiliki tim keamanan khusus? Tim penyalahgunaan khusus? Apakah keduanya memiliki siklus untuk menangani penyalahgunaan infrastruktur baru Anda, dan keluhan yang akan Anda dapatkan dari pihak luar?

  • Apakah Anda memiliki tim hukum ?

  • Ketika semua ini dikatakan dan dilakukan, akankah semua upaya ini bahkan dari jauh mulai membayar untuk dirinya sendiri, menghasilkan keuntungan bagi perusahaan, atau melebihi nilai moneter dari berurusan dengan ketidaknyamanan yang membawa Anda ke arah ini?


Sebagai penutup, saya tahu utas ini adalah T&J adalah jenis kekecewaan bagi sebagian besar dari Anda yang terhubung dengannya. Serverfault ada di sini untuk memberikan jawaban, dan jawaban "ini adalah ide yang buruk, jangan lakukan itu" biasanya tidak dianggap sangat membantu. Beberapa masalah jauh lebih rumit daripada yang terlihat pada awalnya, dan ini adalah salah satunya.

Jika Anda ingin mencoba membuat ini berfungsi, Anda masih dapat meminta bantuan kami saat Anda mencoba menerapkan solusi semacam ini. Hal utama yang harus disadari adalah bahwa masalahnya terlalu besar dengan sendirinya untuk dijawab dalam format tanya jawab yang nyaman. Anda harus menginvestasikan banyak waktu untuk meneliti topik, dan mendekati kami dengan masalah logika spesifik yang Anda temui selama implementasi Anda. Tujuan dari T&J ini adalah untuk memberi Anda pemahaman yang lebih baik tentang gambaran yang lebih besar, dan membantu Anda memahami mengapa kami tidak dapat menjawab pertanyaan seluas ini.

Bantu kami menjaga keamanan internet! :)

Andrew B
sumber
5
Sebagai pelengkap, orang dapat memeriksa bahwa mereka tidak memiliki relay dns terbuka pada jangkauan publik mereka melalui proyek openresolver . Setiap orang harus ingat bahwa internet mengandung sekitar 20 juta relay terbuka yang menerima permintaan rekursif. Contoh konsekuensinya: CloudFlare mengalami serangan amplifikasi 300 Gb / s menggunakan 0,1% dari ini
Xavier Lucas
Tidak bisakah Anda menonaktifkan UDP dan memaksa semua kueri untuk menggunakan TCP?
小 太郎
@ 小 太郎Lihat pertanyaan ini. Pustaka resolver akan default ke mode UDP dan dalam banyak kasus coba lagi dengan TCP jika balasan terpotong, tapi hanya itu. Ini akan bekerja jika aplikasi melewati OS dan melakukan pencarian sendiri, tetapi itu biasanya akan mengalahkan tujuan dari apa yang orang coba capai dengan pengaturan ini.
Andrew B
0

Apakah Anda menjalankan recursor DNS terbuka atau server DNS resmi, masalahnya adalah sama dan sebagian besar solusi yang mungkin juga sama.

Solusi terbaik

Cookie DNS adalah standar yang diusulkan yang memberikan server DNS cara untuk meminta klien mengirim cookie untuk membuktikan bahwa alamat IP klien belum dipalsukan. Ini akan dikenakan biaya satu perjalanan pulang pergi tambahan untuk pencarian pertama, yang merupakan biaya overhead terendah yang bisa ditawarkan oleh solusi apa pun.

Pengembalian untuk klien yang lebih tua

Karena cookie DNS belum distandarisasi, tentu saja akan diperlukan untuk mendukung klien yang lebih tua sekarang dan untuk tahun-tahun mendatang.

Anda dapat menilai permintaan batas dari klien tanpa dukungan cookie DNS. Tetapi batas nilai memudahkan penyerang untuk melakukan DNS server DNS Anda. Berhati-hatilah karena beberapa server DNS memiliki fitur batas laju yang dirancang hanya untuk server DNS otoritatif. Karena Anda bertanya tentang penyelesai rekursif, implementasi pembatasan tarif semacam itu mungkin tidak berlaku untuk Anda. Batas nilai menurut desain akan menjadi hambatan bagi server Anda, dan dengan demikian seorang penyerang perlu mengirimkan lebih sedikit lalu lintas untuk menyebabkan permintaan sah dibatalkan daripada yang akan ia miliki jika tidak ada batas nilai.

Salah satu keuntungan dari batas nilai adalah jika penyerang membanjiri server DNS Anda dengan permintaan DNS, Anda lebih mungkin memiliki kapasitas tersisa yang akan memungkinkan Anda untuk melakukan ssh ke server dan menyelidiki situasinya. Selain itu, batas nilai dapat dirancang untuk terutama membatalkan permintaan dari IP klien yang mengirim banyak permintaan, yang mungkin cukup untuk melindungi Anda dari DoS dari penyerang yang tidak memiliki akses ke spoof IP klien.

Karena alasan itu, batas nilai sedikit di bawah kapasitas Anda yang sebenarnya mungkin merupakan ide yang baik, bahkan jika itu sebenarnya tidak melindungi terhadap amplifikasi.

Menggunakan TCP

Dimungkinkan untuk memaksa klien menggunakan TCP dengan mengirimkan kode kesalahan yang menunjukkan bahwa jawabannya terlalu besar untuk UDP. Ini memiliki beberapa kekurangan. Biayanya dua pulang pergi tambahan. Dan beberapa klien yang salah tidak mendukungnya.

Biaya dua pulang pergi tambahan dapat dibatasi hanya untuk permintaan pertama menggunakan pendekatan ini:

Ketika IP klien belum dikonfirmasi, server DNS dapat mengirim respons terpotong untuk memaksa klien untuk beralih ke TCP. Respons terpotong dapat sesingkat permintaan (atau lebih pendek jika klien menggunakan EDNS0 dan respons tidak) yang menghilangkan amplifikasi.

IP klien apa pun yang menyelesaikan jabat tangan TCP dan mengirim permintaan DNS pada koneksi dapat sementara masuk daftar putih. Setelah masuk daftar putih IP dapat mengirim permintaan UDP dan menerima tanggapan UDP hingga 512 byte (4096 byte jika menggunakan EDNS0). Jika respons UDP memicu pesan kesalahan ICMP, IP akan dihapus dari daftar putih lagi.

Metode ini juga dapat dibalik menggunakan daftar hitam, yang hanya berarti bahwa IP klien diizinkan untuk melakukan permintaan lebih dari UDP secara default tetapi pesan kesalahan ICMP menyebabkan IP menjadi daftar hitam yang memerlukan permintaan TCP untuk keluar dari daftar hitam.

Bitmap yang mencakup semua alamat IPv4 yang relevan dapat disimpan dalam memori 444MB. Alamat IPv6 harus disimpan dengan cara lain.

Saya tidak tahu apakah ada server DNS yang menerapkan pendekatan ini.

Juga telah dilaporkan bahwa beberapa tumpukan TCP dapat dieksploitasi dalam serangan amplifikasi. Namun itu berlaku untuk layanan berbasis TCP dan bukan hanya DNS. Kerentanan tersebut harus dikurangi dengan meningkatkan ke versi kernel di mana tumpukan TCP telah diperbaiki untuk tidak mengirim lebih dari satu paket sebagai tanggapan terhadap paket SYN.

kasperd
sumber
Agar adil, jawaban saya terfokus pada teknologi di luar kotak yang ada di tangan kita sekarang. Sebagian besar orang yang mengajukan pertanyaan ini pada Serverfault tidak mencari untuk mengembangkan perangkat lunak server nama mereka sendiri atau menulis tambalan untuk perangkat lunak server nama yang ada. Alnitak telah memberi tahu kami bahwa pendekatan daftar putih TCP + yang Anda sarankan tampaknya telah dipatenkan , meskipun ia belum mengutip paten yang sebenarnya.
Andrew B
Juga, apakah Anda dapat menghasilkan serangan DoS yang Anda sebutkan dalam menggunakan salah satu perangkat lunak server DNS saat ini yang mengimplementasikan RRL, atau mengetahui kasus di mana orang lain telah mencapainya? Saya cukup yakin ini akan muncul di sejumlah milis tempat saya berlangganan.
Andrew B
@AndrewB Saya belum menguji karena saya tidak ingin menyebabkan banjir di server orang lain. Dan beberapa orang yang menyebutkan pembatasan tingkat memiliki sikap yang membuat saya berpikir mereka tidak akan mempercayai hasilnya jika saya melakukannya di server saya sendiri. Tetapi karena Anda bertanya saya akan mencobanya, saya hanya perlu menyiapkan server DNS terpisah untuk mengujinya. Apakah menggunakan versi Bind default pada Ubuntu LTS 14.04 terdengar seperti pengaturan yang masuk akal? Pengaturan tepat mana pada server resmi yang menurut Anda masuk akal untuk pengujian semacam itu?
kasperd
Sayangnya saya bukan orang terbaik untuk meminta pengaturan, kami belum memulai pengujian lab. Saya masih akan mendorong Anda untuk mencoba dan membuat skenario yang diusulkan: terlepas dari sikap pihak-pihak yang telah Anda ajak bicara, ada banyak pihak di berbagai pangkalan pemasangan perangkat lunak yang akan tertarik pada eksploitasi praktis. Saya juga menyarankan agar Anda memantau UDP menerima antrian yang meluap menggunakan SNMP, grafik yang akan membantu untuk menunjukkan apakah Anda berhasil meredam kemampuan perangkat lunak untuk menerima paket.
Andrew B
@AndrewB Saya baru menyadari perbedaan kecil di sini. Pertanyaan ini adalah tentang penyelesai rekursif. Tetapi pembatasan tingkat tidak dirancang untuk penyelesai rekursif. Deliberately open recursive DNS servers are outside the scope of this document.Untuk saat ini saya telah menambahkan peringatan tentang itu. Saya harus menguji apakah mungkin untuk mengaktifkan pembatasan tingkat pada Bind yang dikonfigurasi sebagai resolver rekursif, dan apakah itu akan berperilaku dengan benar.
kasperd