Konektivitas SSH yang lebih aman dengan DNSSEC


Setiap orang yang menggunakan SSH tahu bahwa saat pertama kali mereka terhubung ke server, sebuah pesan muncul mengkonfirmasi sidik jari kunci. Selanjutnya, kunci disimpan di sisi klien, dan pesan ini tidak ditampilkan lagi sampai kunci yang disimpan diubah. Tetapi apa arti praktis dari prosedur ini?

Dalam kehidupan nyata, hampir tidak ada yang memeriksa sidik jari kunci SSH server tanpa benar-benar memikirkan kemungkinan serangan MiTM. Dengan munculnya catatan DNS SSHFP, sidik jari kunci server dapat disimpan dalam DNS dan diautentikasi menggunakan DNSSEC. Dalam hal ini, Anda bahkan tidak perlu mengkonfirmasi kunci pada koneksi pertama. Artikel ini akan menunjukkan kepada Anda cara mengkonfigurasi catatan SSHFP untuk server SSH Anda.

Server uji


Pertama, kita memerlukan server. Pada panel RuVDS, detail untuk akses SSH terletak langsung pada kartu server. Kami menyimpan alamat IP dan kata sandi untuk koneksi.



Anda juga dapat mengkonfigurasi firewall langsung dari panel kontrol untuk memungkinkan akses SSH hanya untuk IP Anda.

Untuk mengonfigurasi SSHFP, domain harus diarahkan ke alamat IP server, kami akan mengonfigurasi data DNS untuk domain ini.

Cara kerja kunci di SSH


Dalam contoh, kami hanya akan mempertimbangkan paket OpenSSH, karena ini adalah opsi yang paling populer.

Saat memasang server baru, kunci SSH acak dihasilkan, biasanya ini terjadi segera ketika menginstal paket OpenSSH atau selama boot pertama jika gambar sistem siap pakai digunakan.

File-file utama ada di sini:

$ ls -la /etc/ssh/ssh_host_*_key*

/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub

Dalam daftar ini ada beberapa kunci dari berbagai jenis sekaligus: dsa, rsa, ecdsa, ed25519. Ini dilakukan untuk kompatibilitas dengan klien SSH yang berbeda. Pada tahap koneksi, klien dan server menyetujui algoritma kunci mana yang akan digunakan. Klien dapat meminta server untuk menggunakan algoritma yang berbeda jika yang diusulkan tidak didukung. Server mengirimkan bagian publik dari kuncinya ke klien dan pengguna diminta untuk memeriksa sidik jarinya secara manual.


Server mengirimkan sidik jari kunci publik ke klien pada saat koneksi.

Jika ini adalah koneksi pertama, sebuah pesan akan ditampilkan kepada klien dengan permintaan untuk memverifikasi secara manual sidik jari:

The authenticity of host 'example.com (123.45.67.89)' can't be established.
ECDSA key fingerprint is SHA256:7Q4nIqjuo/lSXWFkt9RaJYVHrT6LUAc6KWrdQ4/DDeA.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Pada tahap ini, kita semua biasanya mengklik Ya tanpa ragu-ragu dan sidik jari kunci disimpan ke file ~/.ssh/known_hosts. Sekarang, jika kunci pada server berubah, klien akan ditampilkan pesan tentang kemungkinan serangan MiTM. Diasumsikan bahwa untuk pertama kalinya, klien melakukan pemeriksaan kunci sendiri dan memastikan keasliannya.

Pendekatan ini cukup berisiko, karena jika penyerang berhasil merebut momen koneksi pertama, ia akan dapat menyelipkan kuncinya dan mencegat koneksi. Dalam kasus c HTTPS, kami memiliki pihak ketiga yang mengkonfirmasi kunci server dengan sertifikat. Jika pendekatan yang sama seperti di SSH digunakan di web, kami akan terus tersiksa oleh pesan verifikasi kunci dan serangan MiTM ada di mana-mana, karena tidak ada yang akan memeriksa kunci, tetapi hanya akan selalu setuju.

Kami menyimpan cetak kunci dalam DNS. Apa itu entri SSHFP


Bagaimana mengetahui bahwa kunci SSH yang diusulkan oleh server benar-benar nyata dan ini bukan serangan MiTM? Memang, untuk masuk ke server dan memverifikasi kunci, Anda harus terlebih dahulu memasukkan kata sandi. Tetapi kemudian penyerang akan dapat langsung meretas server dan mengganti semua data di dalamnya, sedemikian rupa sehingga kita tidak akan melihat tangkapannya. Oleh karena itu, kami memerlukan cara untuk memverifikasi keaslian kunci SEBELUM koneksi yang sebenarnya.

Untuk waktu yang lama, satu-satunya cara untuk memeriksa kunci SSH server sebelum menghubungkan adalah dengan menggunakan saluran yang berbeda, misalnya, minta administrator server untuk memberikan sidik jari kunci server. Ini tidak nyaman, jadi lebih mudah untuk mengabaikan masalah dan selalu setuju tanpa ragu-ragu.


SSHFP memungkinkan otentikasi kunci server sebelum menghubungkan melalui DNS

SSHFP- jenis catatan DNS untuk menyimpan kunci SSH. Sidik jari dari kunci SSH ditempatkan di server DNS seperti catatan TXT dan ditandatangani dengan kunci DNSSEC. Artinya, saat pertama kali Anda terhubung ke server menggunakan nama host, klien akan dapat mengetahui sidik jari kunci server melalui DNS terlebih dahulu, dan jika cocok dengan server yang diusulkan, kemudian hubungkan tanpa peringatan .

Konfigurasikan DNSSEC


Untuk menggunakan SSHFP, Anda memerlukan nama domain dengan DNSSEC yang dikonfigurasi. Ada banyak layanan DNS publik yang menawarkan panel kontrol DNS segera dengan fungsi DNSSEC. Layanan tersebut yang paling populer adalah CloudFlare. Pertimbangkan konfigurasi menggunakan contohnya. Untuk langkah-langkah berikut, domain harus didelegasikan ke server Cloudflare NS.

▍Langkah 1 - buat kunci


Buka panel DNS -> Aktifkan DNSSEC.

Pada titik ini, kunci akan dibuat untuk menandatangani zona domain Anda. Anda akan diperlihatkan kunci publik. Mereka perlu ditambahkan di sisi pendaftar domain.

▍Langkah 2 - menambahkan kunci publik ke registrar


Selanjutnya, Anda perlu membuat catatan DS yang berisi kunci publik dari pendaftar domain.
Bergantung pada pendaftar Anda, antarmuka menambahkan kunci DNSSEC mungkin terlihat berbeda. Penting untuk tidak membingungkan nilai-nilai, karena mereka dapat dinamai secara berbeda dan berbeda dari nama yang diperlihatkan di CloudFlare.

Contoh di bawah ini menunjukkan bagaimana nilai yang diperlihatkan dalam panel CloudFlare terkait dengan nilai-nilai di panel kontrol domain dari registrasi Uniregistry.



▍Langkah 3 - periksa catatan DS yang ditambahkan


Setelah menambahkan catatan-DS di sisi pendaftar, Anda dapat memeriksa pengaturan yang benar. Di sisi CloudFlare, penandatanganan catatan DNS akan diaktifkan hanya ketika verifikasi kebenaran menambahkan catatan DS di sisi pendaftar disahkan.


Menunggu penambahan catatan DS

Setelah beberapa menit atau jam, jika catatan ditambahkan dengan benar, Anda akan melihat pesan seperti itu. Ini berarti respons DNS sekarang ditandatangani menggunakan DNSSEC.



▍Langkah 4 - verifikasi operasi DNSSEC


Sekarang Anda dapat menguji operasi DNSSEC di domain kami menggunakan layanan online seperti dnssec-analyzer.verisignlabs.com . Semua tanda centang harus berwarna hijau.


Hasil Validasi DNSSEC

Menambahkan Entri SSHFP


Kami akan menghasilkan catatan SSHFP di server. Dalam contoh kami, kami mengelola server dengan alamat myserver.com . Untuk nama domain ini, kami sebelumnya mengkonfigurasi DNSSEC.

Di server, jalankan perintah:

#   SSHFP   SSH-
sudo ssh-keygen -r myserver.com

myserver.com IN SSHFP 1 1 057ecce168ace29d5a0099e3b63df2850e4c8e20
myserver.com IN SSHFP 1 2 52cd6099a304b9b8f57f2cd914e96a1b7477eb2f88c98c602
myserver.com IN SSHFP 2 1 42d677482e4450ee515d3aac94d96302a99bd4ec
myserver.com IN SSHFP 2 2 edda5fa445dc0da570c772a6df0d4012037e1a102840d29c4
...

Sidik jari akan dihasilkan untuk semua kunci dari folder / etc / ssh / . Anda dapat secara selektif menghasilkan sidik jari untuk tombol tertentu dengan menentukan jalur file.

Sekarang semua catatan ini perlu ditambahkan di panel DNS, dalam kasus kami Cloudflare.


Menambahkan catatan SSHFP ke panel Cloudflare

Jadi, Anda perlu menambahkan semua kunci yang diperoleh pada langkah sebelumnya. Sekarang Anda dapat memverifikasi bahwa kunci ditambahkan:

dig SSHFP myserver.com

Dalam jawaban Anda harus melihat semua kunci ditambahkan. Mungkin perlu waktu untuk menandatangani entri baru, sehingga kunci dalam respons mungkin tidak segera muncul. Ini biasanya tidak memakan waktu lebih lama dari 10-15 menit.

Terhubung ke server


Agar klien SSH memverifikasi validitas kunci melalui DNS, Anda perlu menambahkan aktifkan ini di pengaturan. Konfigurasi klien terletak di folder beranda pengguna. Tambahkan satu baris di sana.

#  
vi ~/.ssh/config

VerifyHostKeyDNS yes

Sekarang Anda dapat terhubung ke server. Untuk kemurnian percobaan, Anda dapat menghapus garis dengan sidik jari dari ~ / .ssh / known_hosts . Untuk kejelasan, Anda bisa menambahkan opsi -v

#   
ssh -v root@myserver.com


# DNS  ,  SSHFP 
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
.....
DNS lookup error: data does not exist

# DNS  ,   
#    DNSSEC
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
....
debug1: found 8 insecure fingerprints in DNS
debug1: matching host key fingerprint found in DNS


# DNS  ,    DNSSEC
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
....
debug1: found 8 secure fingerprints in DNS
debug1: matching host key fingerprint found in DNS
debug1: ssh_rsa_verify: signature correct

Jika semuanya dikonfigurasi dengan benar, maka saat pertama kali Anda terhubung ke server, Anda tidak akan diminta untuk memverifikasi secara manual sidik jari kunci. Ini juga memerlukan resolver sistem DNS untuk mendukung validasi DNSSEC.

Penting untuk diingat bahwa SSHFP hanya akan berfungsi ketika terhubung ke server dengan nama domain dan tidak akan berfungsi ketika terhubung dengan IP atau domain lain yang tidak memiliki catatan SSHFP.


All Articles