it-swarm-id.com

Mengetuk Port apakah itu ide yang bagus?

Biasanya untuk server saya suka mengunci SSH dan layanan non-publik lainnya hanya dapat diakses oleh alamat IP tertentu. Namun ini tidak selalu praktis jika bisnis tidak memiliki alamat IP statis atau jika pengembang luar memerlukan akses.

Saya mendengar tentang Port Knocking beberapa waktu lalu dan akhirnya memiliki kesempatan untuk melihatnya sebagai solusi untuk masalah di atas. Sebagai akibatnya, saya memiliki banyak pertanyaan. Saya berharap orang-orang dapat membantu saya.

  • Adakah yang menyebarkannya dalam Bisnis/Organisasi mereka dan dapat menawarkan saran?
  • Apa Daemon ketukan terbaik untuk dijalankan di Linux?
  • Apa klien terbaik untuk Linux, Windows dan OSX?
  • Berapa panjang rekomendasi untuk urutan ketukan dan apakah yang terbaik untuk menggunakan TCP, UDP atau Keduanya?
  • Apa kerugian dan masalah terkait dengan menggunakannya?
  • Apakah hanya Keamanan Melalui Ketidakjelasan?
  • Apakah ada alternatif untuk pendekatan port knocking?
41
Mark Davidson

Meskipun saya belum menggunakannya, saya tahu banyak orang yang telah menggunakannya. Masing-masing dari mereka telah mencatat pengurangan yang signifikan dalam jumlah bandwidth yang dikonsumsi oleh hal-hal seperti serangan brute-force SSH sebagai hasilnya.

Namun, itu tidak berarti bahwa tidak ada kerugian. AFAIK, tidak ada implementasi port knocking berbasis kernel yang tersedia, yang bagi saya akan menjadi kunci nyata untuk adopsi. Port knocking daemon mengandalkan entri file log yang gagal (dan difilter/dilarang) dari sistem firewall. Semua baik-baik saja dan keren, tetapi apa yang terjadi jika sistem file menjadi penuh? Apa yang terjadi ketika daemon terbunuh karena beberapa proses pelarian memakan sistem RAM dan swap? Apa yang terjadi jika sesuatu yang lain dari kedua hal itu bergantung hanya pada dan berhenti bekerja? kemungkinan berakhir dengan server yang harus Anda akses secara fisik. Itu bisa berakhir menjadi lebih mahal daripada yang wajar, terutama jika Anda lebih dari beberapa puluh mil jauhnya dari server dan tidak memiliki siapa pun yang dapat Anda hubungi kesana dengan cepat.

Satu hal yang bisa saya katakan adalah itu bukan "keamanan melalui ketidakjelasan". Port knocking adalah bentuk otentikasi, dan seperti halnya sistem otentikasi apa pun dapat dibuat sesederhana atau serumit yang diinginkan. Sesuatu yang sederhana seperti "mengetuk port 10.000 + realPortNumber" dapat dilakukan, yang akan berarti istirahat sepele, atau port mengetuk itu sendiri dapat digunakan untuk mengirimkan beberapa bentuk otentikasi nyata (misalnya, 1 blok data disandikan AES diberi kunci yang diturunkan oleh beberapa metode lain). Akan tetapi, tidak mungkin menggunakan port knocking untuk mengirimkan sejumlah besar data, karena akan memakan waktu lebih lama secara signifikan daripada hanya mengirim satu paket, dan jika paket tersebut lebih dari TCP daripada setidaknya dapat diketahui apakah telah berhasil diterima atau mengalami beberapa bentuk kesalahan.

Namun, satu pertanyaan menarik yang muncul adalah bagaimana mengelola file log --- implementasi userland sebagian besar membutuhkan file log untuk menentukan apakah ketukan telah berhasil dikirim, dan apa yang terjadi jika log tersebut bocor? Data otentikasi menjadi dikenal, dan itu jelas bukan hal yang sangat baik.

Saya tidak bisa memberi tahu Anda apakah menggunakan port knocking atau tidak dalam pengaturan Anda. Saya belum, dan saya tidak 100% yakin bahwa saya akan pernah. Lebih masuk akal bagi saya untuk menggunakan sistem autentikasi yang kuat yang didasarkan pada kriptografi yang kuat (seperti infrastruktur PKI) daripada membuang port knocking. Juga, menambahkan satu titik kegagalan untuk mengakses infrastruktur kritis, bagi saya, sepertinya ide yang buruk, dan jauh lebih sulit untuk didukung dengan baik dengan segala jenis jaminan. Namun, sekali lagi, itu didasarkan pada gagasan perangkat lunak port-knocking yang tidak terintegrasi dengan firewall pada level kernel sistem operasi; jika itu pernah berubah, saya juga dapat mengubah perasaan saya tentang menggunakannya.

34
Michael Trausch

Port knocking bukan hanya kata sandi teks biasa - setidaknya ketika digunakan untuk melindungi layanan yang mendengarkan pada port TCP seperti SSH. Port knocking menyiratkan bahwa penemuan layanan dengan nmap tidak lagi mungkin karena penggunaan kebijakan default-drop firewall. SSHD juga memiliki kerentanan yang dapat dieksploitasi dari jarak jauh, dan ini tidak ada hubungannya dengan kata sandi yang lemah. Saya tidak ingin ada yang dapat menjalankan nmap dan melihat bahwa saya mendengarkan SSHD.

Juga, ada varian yang lebih kuat dari port knocking yang disebut "Single Packet Authorization", tetapi juga merupakan skema otentikasi yang sepenuhnya pasif sehingga mempertahankan manfaat port knocking tetapi memecahkan batasannya (serangan replay mudah, serangan DoS mudah, dll. .).

13
Michael Rash

Ini adalah fakta yang mudah diverifikasi bahwa semua layanan yang menghadapi internet memiliki kerentanan keamanan yang relatif sering - layanan seperti SSH, OpenSSL, dll. Serangan terhadap hal ini dicoba secara massal di internet, menargetkan sistem apa pun yang memiliki port terbuka yang sesuai.

Port knocking, dalam pikiranku, memiliki tujuan menjauhkan para penyerang acak ini dari internet, yang mencari kerentanan umum. Artinya, tidak seharusnya menjauhkan penyerang yang berdedikasi, atau membentuk bagian dari keamanan layanan yang sebenarnya. Manfaat mengetuk port seharusnya adalah, benar-benar, cukup sederhana sehingga tidak akan ada kemungkinan ada bug yang dapat dieksploitasi di dalamnya.

Penggunaan ini berarti port knocking bisa longgar, selama itu menahan mayoritas penyerang. Itu mungkin hanya keamanan dengan ketidakjelasan, tetapi cara yang lebih baik adalah menjadikannya sebagai bentuk lemah otentikasi "kata sandi".

Jadi layanan port knocking "terbaik" akan menjadi layanan yang tidak dapat dibayangkan membayangkan serangan terhadap apa pun, namun cukup sepele bagi pengguna sah mana pun untuk digunakan dari segala jenis mesin klien.

9
Nakedible

Port knocking bukanlah keamanan melalui ketidakjelasan. Ini adalah pertahanan yang mendalam. Ini seperti memarkir mobil Anda di sebelah mobil yang lebih dicuri - itu tidak akan banyak membantu untuk mencegah serangan yang ditargetkan, tetapi mungkin hanya mengirim oportunis melihat ke arah lain.

8
jl6

Sesuai komentar saya di tempat lain, walaupun ada banyak implementasi yang menggunakan segala macam trik khusus untuk merespons ketukan, itu dapat diimplementasikan murni menggunakan iptables pada sistem Linux. yaitu ini secara efektif merupakan implementasi port knocking berbasis kernel

Karena ketukan terlihat di jaringan, menggunakan urutan lebih dari 3 ketukan memberikan sedikit manfaat. Saya akan merekomendasikan menggunakan TCP - meskipun akan lebih lambat, Anda memiliki jaminan yang lebih baik bahwa ketukan dikirimkan.

Namun, meskipun ini bergantung pada program userspace, preferensi saya adalah untuk fail2ban karena tidak memerlukan langkah/perangkat lunak tambahan untuk terhubung, berjalan dengan andal, dan jika memang pernah gagal itu tidak akan mencegah saya mengakses server .

Itu mengejutkan saya bahwa ada begitu sedikit adopsi identifikasi terenkripsi - meskipun RFC1413 hanya menyebutkan ini pendekatan yang mungkin menggunakan protokol daripada mendefinisikan bagaimana seharusnya bekerja.

Tetapi tentu saja Anda harus memastikan bahwa Anda telah membatasi akses sebanyak mungkin secara independen dari ini (mis. Tidak ada login root, membatasi akses ke grup yang dinominasikan, jika praktis, memerlukan pasangan kunci). SSH dirancang untuk aman - dan secara historis ada relatif sedikit kerentanan dalam implementasi aliran utama. Alasan bahwa serangan berhasil biasanya karena kombinasi dari nama pengguna yang dapat ditebak, kata sandi sederhana dan serangan brute-force atau rekayasa sosial. Perhatikan bahwa saya tidak menganjurkan Anda menegakkan validasi frasa sandi yang kompleks (selain panjang minimum) atau bahwa Anda mengharuskan pengguna untuk terus mengubah kata sandi mereka, ada pendekatan yang lebih baik (mis. Dua faktor), tetapi sayangnya sangat sedikit implementasi.

7
symcbean

Saya belum menerapkan port knocking dalam beberapa tahun, namun, saya menduga bahwa prinsipnya belum berubah secara signifikan. Komentar lain mengandung banyak poin yang valid dan saya tidak akan mengulanginya di sini.

Salah satu aspek dari port knocking yang selalu saya terapkan sebagai hal biasa adalah mendasarkan urutan ketukan dari nilai pseudo-acak tetapi berulang, seperti tanggal dan waktu saat ini. Strategi ini tidak menghilangkan bahaya serangan replay secara keseluruhan, namun, itu membatasi paparan urutan ketukan tertentu. Jelas agar ini berhasil waktu yang disinkronkan, dalam contoh saya, sumber akan diperlukan untuk konsistensi.

4
Tok

Port Knocking hanyalah kata sandi teks biasa. Ini bisa dipaksakan, ditemukan, ditangkap dan diputar ulang seperti kata sandi teks biasa lainnya. Mengapa menemukan kembali login telnet?

Anda harus mempercayai sesuatu. Jadi mari kita asumsikan kepercayaan Anda tumpukan jaringan OS Anda dan Anda percaya sshd ketika berjalan dengan kompresi tertunda, pemisahan hak istimewa dan hanya memungkinkan beberapa bentuk otentikasi dua faktor yang masuk akal (misalnya, berbasis kunci).

Anda dapat menggunakan layanan "sederhana" seperti sshd yang memanggil authpf untuk melindungi layanan Anda yang lebih rumit dan rentan.

authpf memungkinkan Anda untuk memodifikasi aturan firewall Anda berdasarkan siapa yang berhasil mengotentikasi sshd, jadi hanya alamat IP yang berhasil masuk ke gateway ssh Anda yang diizinkan untuk terhubung ke kompilasi/compute/database farm Anda.

2
Alex Holst