Bagaimana mencegah pengguna berbagi sertifikat di OpenVPN?

8

Saya memiliki server OpenVPN yang menggunakan sertifikat dan otentikasi LDAP.

Masalahnya adalah, satu pengguna dapat membagikan sertifikatnya dan pengguna LDAP lain yang valid dapat menggunakan sertifikat ini.

Pertanyaan

Bagaimana cara memastikan bahwa sertifikat Bob hanya dapat digunakan dengan pengguna "bob" LDAP?

Sandra
sumber

Jawaban:

9

Menurut posting ini , common_nametidak bisa dipalsukan oleh pengguna.

Tambahkan ini ke openvpn server.conf

script-security 2

# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env

/etc/openvpn/scripts/check_cn_on_connect.sh mengandung

#!/bin/bash

# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
   echo "$(date +%Y%m%d-%H%M%S) DENIED  username=$username cert=$common_name" >> /var/log/openvpn-access.log
   exit 1
fi

echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log

exit 0

Memperbarui

Ini untuk OpenVPN 2.1.4. Di 2.2.0 minta mereka menambahkan banyak variabel baru yang dapat Anda lihat env >> /tmp/env, di mana salah satu variabel baru ini adalah sidik jari / nomor seri sertifikat.

Sandra
sumber
4

Ada banyak pilihan, karena OpenVPN adalah proyek open source, dan memiliki kemampuan untuk menulis kait otentikasi Anda sendiri. Ada banyak orang yang telah melakukan banyak hal berbeda untuk memberikan tingkat otentikasi yang berbeda.

Saya belum mencoba sebagian besar dari ini hanya melihat mereka disebutkan dalam dokumen / blog / maillists. Beberapa di antaranya mungkin memerlukan tambalan atau versi yang tidak bebas.

Salah satu metode utama adalah membuat bagian pribadi dari pasangan kunci Anda sulit untuk diekstraksi / disalin.

Jika melindungi kunci mereka mahal, tidak didukung pada platform klien Anda atau tidak mungkin karena alasan lain, Anda hanya memiliki beberapa opsi.

  • Membutuhkan pembaruan sertifikat yang sering, sehingga sertifikat yang disalin tidak dapat digunakan dalam waktu lama.
  • Atur banyak logging di server Anda, untuk melihat anomali. Jika Bob biasanya hanya masuk dari rumahnya, dan kemudian suatu hari, ia mulai masuk dari Acme Inc. maka Anda mungkin perlu menyelidikinya.

  • Atur otentikasi multi-faktor. Sertifikat Anda dianggap sebagai 'sesuatu yang Anda miliki'. Jadi, Anda harus mencari alternatif di 'sesuatu Anda', atau 'sesuatu yang Anda tahu'. Ini termasuk bio metrik, atau kata sandi / pass-phrase.

  • Seperti yang saya sebutkan OpenVPN menyediakan otentikasi yang sangat fleksibel. Ini menggunakan auth-user-pass-verifyopsi. Opsi ini meneruskan nama pengguna dan kata sandi yang disediakan ke skrip / program eksternal yang akan membuat keputusan otentikasi berdasarkan apa pun yang Anda inginkan.
Sakit kepala
sumber
Saya dapat menggunakan auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-envuntuk mendapatkan nama pengguna. Apakah Anda tahu jika saya juga bisa mendapatkan ID dari sertifikat yang digunakan pengguna? Jika demikian, maka saya dapat menulis skrip Perl yang memeriksa file yaml dengan ID sertifikat yang dikenal.
Sandra
1
Sayangnya saya tidak tahu metode untuk mendapatkan id / subjek / detail dari sertifikat yang digunakan, tetapi itu tidak berarti bahwa itu tidak mungkin.
Zoredache
Menemukan solusinya dan mempostingnya.
Sandra
1

Saya bukan pro keamanan, saya ketat tentang keamanan. Pertanyaan Anda justru mencapai inti keamanan TI: kepercayaan. Seperti yang saya lihat, orang tidak boleh berasumsi bahwa Bob dapat dipercaya. Tentu, Bob mungkin pria yang sangat baik dan dapat dipercaya. Dia sudah bekerja di perusahaan Anda selama 20+ tahun. Namun, orang "Bob" sama sekali tidak relevan dalam infrastruktur TI Anda.

Bob menggunakan 'relay' sewenang-wenang yang mengizinkan akses. Relay dapat berupa apa saja: kata sandi, sertifikat, token perangkat keras, pemindaian iris, DNA. Itu adalah kunci yang memungkinkan akses ke sistem Anda. Jika pertanyaan Anda adalah tentang memverifikasi identitas orang yang menggunakan kunci, satu-satunya jawaban yang jujur ​​mungkin adalah Anda harus berada di ruangan yang sama. Dalam semua kasus lain, saya pikir Anda tidak harus meyakinkan diri sendiri bahwa Bob benar-benar Bob dan saat ini tidak ditahan di bawah todongan senjata sambil mendapatkan aksesnya. Jadi dalam rencana desain infrastruktur TI Anda hal yang logis adalah tidak merujuk pada "Bob": entitas memperoleh akses ke situs Anda.

Karena Anda hanya dapat benar-benar mengetahui bahwa 'suatu entitas' memperoleh akses dengan kunci yang Anda bagikan di masa lalu, perspektif yang tepat mungkin adalah membatasi jumlah pintu yang dapat dibuka oleh kunci tersebut. Semakin banyak kunci yang Anda bagikan semakin sedikit pintu yang dibuka.

OpenVPN juga memiliki opsi untuk mengizinkan hanya satu koneksi bersamaan per kunci. Kemudian jika Alice memang login dengan kunci Bob ketika Bob sudah di dalam, Alice ditolak aksesnya. Sayangnya ini juga berarti bahwa Bob tidak dapat login ketika Alice login dengan kunci Bob. Jadi, Anda harus mengonfigurasi sistem Anda untuk memberi tahu Anda tentang upaya masuk bersamaan dari beberapa IP sumber. Dan memulai keduanya ketika beberapa pelanggaran terjadi sehingga Bob harus memanggil bantuan.

Intinya adalah: jangan meyakinkan diri sendiri tentang hal-hal yang tidak bisa Anda yakini dan ingatlah ini ketika merancang rencana keamanan Anda. Anggaplah selalu ada orang yang lebih pintar di luar sana, jauh di depan Anda, yang tidak sabar untuk membuktikan Anda salah ... hanya 'untuk lulz.' :-)

drum
sumber