Come impedire agli utenti di condividere certificati in OpenVPN?


8

Ho un server OpenVPN che utilizza certificati e autenticazione LDAP.

Il problema è che un utente potrebbe condividere il suo certificato e altri utenti LDAP validi potrebbero utilizzare questo certificato.

Domanda

Come posso assicurarmi che il certificato di Bob possa essere utilizzato solo con l'utente LDAP "bob"?

Risposte:


9

Secondo questo post , common_namenon può essere simulato dall'utente.

Aggiungi questo a 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 contiene

#!/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

Aggiornare

Questo è per OpenVPN 2.1.4. In 2.2.0 hanno aggiunto molte nuove variabili che puoi vedere env >> /tmp/env, dove una di queste nuove variabili è l'impronta digitale dei certificati / numero di serie.


4

Esistono molte opzioni, poiché OpenVPN è un progetto open source e ha la capacità di scrivere il proprio hook di autenticazione, ci sono molte persone che hanno fatto molte cose diverse per fornire diversi livelli di autenticazione.

Non ho provato la maggior parte di questi appena li ho visti menzionati nei documenti / blog / maillists. Alcuni di questi potrebbero richiedere patch o la versione non gratuita.

Un metodo principale sarà rendere la parte privata della coppia di chiavi proibitivamente difficile da estrarre / copiare.

Se la protezione della chiave è proibitiva in termini di costi, non è supportata sulle piattaforme client o non è possibile per qualche altro motivo, rimangono alcune opzioni.

  • Richiede frequenti rinnovi del certificato, quindi un certificato copiato non può essere utilizzato a lungo.
  • Imposta un sacco di registrazione sul tuo server, per controllare le anomalie. Se normalmente Bob accede solo da casa sua, e poi un giorno, inizia ad accedere da Acme Inc., potrebbe essere necessario indagare.

  • Configurare l'autenticazione a più fattori. Il tuo certificato conta come "qualcosa che hai". Quindi dovresti cercare alternative nel "qualcosa che sei" o "qualcosa che conosci". Ciò include metriche biologiche o password / passphrase.

  • Come ho già detto, OpenVPN offre un'autenticazione molto flessibile. Questo utilizza l' auth-user-pass-verifyopzione. Questa opzione passa il nome utente e la password forniti a uno script / programma esterno che prenderà la decisione di autenticazione in base a ciò che si desidera.

Posso usare il auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-envper ottenere il nome utente dell'utente. Sai se posso anche ottenere l'ID dal certificato che l'utente sta usando? In tal caso, posso scrivere uno script Perl che controlla un file yaml con ID certificati noti.
Sandra,

1
Sfortunatamente non conosco un metodo per ottenere l'id / soggetto / dettagli dal certificato usato, ma ciò non significa che non sia possibile.
Zoredache,

Trovato la soluzione e pubblicato.
Sandra,

1

Non sono un professionista della sicurezza, sono severo riguardo alla sicurezza. La tua domanda raggiunge esattamente il nocciolo della sicurezza IT: la fiducia. A mio avviso, non si dovrebbe mai presumere che ci si possa fidare di Bob. Certo, Bob potrebbe essere un ragazzo davvero gentile e affidabile. Ha lavorato nella tua azienda per oltre 20 anni. Tuttavia, la persona "Bob" è del tutto irrilevante nella tua infrastruttura IT.

Bob utilizza "relè" arbitrari che consentono l'accesso. I relè possono essere qualsiasi cosa: password, certificato, token hardware, scansione dell'iride, DNA. Sono chiavi che consentono l'accesso al tuo sistema. Se la tua domanda riguarda la verifica dell'identità della persona che sta usando una chiave, probabilmente l'unica risposta onesta è che dovrai trovarti nella stessa stanza. In tutti gli altri casi, penso che non devi assicurarti che Bob è davvero Bob e che attualmente non è tenuto in pugno mentre ottiene il suo accesso. Pertanto, nel piano di progettazione dell'infrastruttura IT la cosa logica non è fare riferimento a "Bob": un'entità ha ottenuto l'accesso al tuo sito.

Perché puoi davvero sapere che "un'entità" ha ottenuto l'accesso con una chiave che hai passato in passato, probabilmente la prospettiva corretta è quella di limitare il numero di porte che la chiave può aprire. Più chiavi si passano, meno porte si aprono.

OpenVPN ha anche un'opzione per consentire solo una connessione simultanea per chiave. Quindi se Alice accede con la chiave di Bob mentre Bob è già dentro, ad Alice viene negato l'accesso. Sfortunatamente questo significa anche che Bob non può accedere quando Alice ha effettuato l'accesso con la chiave di Bob. Quindi dovresti configurare il tuo sistema per informarti di tentativi di accesso simultanei da più IP di origine. E dare il via a entrambi quando si verifica una violazione, quindi Bob dovrà chiamare aiuto.

Il punto è: non assicurarti di cose di cui non puoi essere sicuro e tienilo a mente durante la progettazione del tuo piano di sicurezza. Supponiamo che ci sia sempre una persona più intelligente là fuori, molto avanti a te, che non vede l'ora di dimostrarti che ti sbagli ... solo "per il lulz". :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.