Protezione delle telecamere IP accessibili a distanza che non supportano HTTPS

15

Ho installato alcune telecamere IP sulla mia rete domestica, che è protetta da WPA2. Queste telecamere sono configurate per essere accessibili da Internet attraverso l'indirizzo DDNS del mio router e il numero di porta.

Quindi, ad esempio, dal mio PC in ufficio posso andare al link per vedere la cam # 1 dopo aver inserito il mio nome utente e la password.

Queste telecamere sono Foscams FI8910W e non supportano HTTPS. A proposito, il mio router è un Asus RT-N56U.

Suppongo che le mie credenziali che uso per accedere alle telecamere vengano inviate in chiaro e non crittografate, il che è pericoloso.

Quali sono le mie opzioni per risolvere questo problema e rendere più sicuro il mio accesso?

Ho letto da qualche parte che un "reverse proxy" è una possibile soluzione, ma non sono sicuro di come funzionerebbe ...

    
posta unknownprotocol 28.04.2014 - 07:57
fonte

2 risposte

11

Immagino che il tuo router non sia abbastanza intelligente da configurare da solo un proxy inverso crittografato.

Convenzioni utilizzate di seguito

Controlli iniziali

Sulla rete locale puoi vedere la webcam a http://192.168.0.123:456 ? Grande. Non riesci a connetterti alla webcam dal mondo esterno (cioè http://1.2.3.4:456 è disattivato dal firewall)? Grande. Se non riconfigurare la tua webcam e le regole di port forwarding / firewall sul tuo router.

Quindi, installa un server web su un computer sulla rete locale attivo ogni volta che desideri connetterti alla tua webcam. Assumerò linux / unix e darò istruzioni per nginx.

Come test iniziale, configura un proxy inverso senza crittografia. Installa l'ultima versione di nginx, modifica il file di configurazione ( /etc/nginx/conf.d/default.conf ) e aggiungi righe simili a:

server {
  listen 8080;
  location / {
      proxy_pass http://192.168.0.123:456; 
  } # replace with your webcam's local IP address and port.
}

Ora riavvia nginx ( sudo /etc/init.d/nginx restart ) e prova a connetterti al proxy ( http://192.168.0.101:8080 ) e dovrebbe funzionare come se fosse andato a http://192.168.0.123:456 . Se hai problemi, controlla di nuovo tutto o consulta la documentazione di nginx .

Come ottenere un certificato TLS / SSL

Ora è necessario aggiungere un certificato SSL e la chiave privata associata. Puoi crearne uno firmato da un'autorità di certificazione (ad es. Da startssl.com gratuitamente) o generarne uno che sia autofirmato (e che inizialmente non sarà considerato attendibile dai browser web). La configurazione di un certificato firmato dalla CA sarà più complicata per una rete domestica in cui dovrai ottenere un nome di dominio (che puoi dimostrare alla CA che possiedi), impostare il DNS dinamico su quel nome di dominio, ecc. stai provando ad iniziare con Dynamic DNS - link è un ottimo punto di partenza).

Per generare un certificato autofirmato, usa prima openssl per creare una chiave privata (in questo caso una chiave privata RSA 4096 bit):

# openssl genrsa -out private.key 4096

Se sei curioso, puoi visualizzare i contenuti con openssl rsa -in private.key -text -noout . Successivamente è necessario generare un certificato basato su quella chiave privata, che può essere fatto con:

# openssl req -new -x509 -key private.key -out yourcert.crt -days 3650

Il 3650 dice che scadrà tra 3650 giorni (~ 10 anni). Openssl ti chiederà ulteriori dettagli, sentiti libero di lasciarli vuoti o di mettere qualsiasi informazione lì dentro. (Puoi visualizzare il contenuto del tuo certificato con openssl x509 -in yourcert.crt -text -noout ).

Ora metti la tua chiave privata e il certificato in un posto sicuro (ad es. in /etc/ssl/private/private.key e /etc/ssl/certs/yourcert.crt ), limita le loro autorizzazioni (assicurati che sia di proprietà di root e nessun altro abbia permessi di lettura / scrittura).

Attiva SSL in Reverse Proxy

Quindi modifica il file di configurazione del tuo server nginx per abilitare SSL come segue:

server {
   listen 443; # doesn't have to be port 443 - could be any port (say 8080) if you 
               # connect via https://192.168.0.101:8080 .  But on port 443
               # you can just use https://192.168.0.101
   ssl on;
   ssl_certificate  /etc/ssl/certs/yourcert.crt;
   ssl_certificate_key  /etc/ssl/private/private.key;
   # certificate and private key where you just placed them

   ssl_session_timeout  5m;    
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   # reasonable SSL configuration, disable some known weak ciphers.

   location / {
     proxy_pass http://192.168.0.123:456;
     proxy_redirect http://192.168.0.123:456/ $scheme://$host:$server_port/;
 # If your webcam (or other proxied application) ever gives URLs in the HTTP headers
 # (e.g., in a 302 or 304 HTTP redirect),
 # the proxy_redirect line changes the URL in the HTTP header field
 # from http://192.168.0.123:456/some/path to https://192.168.0.1:8080/some/path
   }
}

Riavvia nginx e ora dovresti riuscire a connetterti alla tua webcam sulla tua rete locale a https://192.168.0.101 (riceverai avvertimenti sul fatto che il certificato non è attendibile poiché è un certificato autofirmato).

Imposta il port forwarding nel tuo router

Il passaggio finale è configurare il router per eseguire il port forwarding. Questo è quando ti connetti a https://1.2.3.4 (porta 443) dal mondo esterno, impostalo su port-forward su 192.168.0.101 (porta 443). È possibile impostare il DNS dinamico in modo che, se l'indirizzo IP di casa cambia, punti ancora nel posto giusto. Alcuni ISP bloccano la porta 80 e 443, quindi potrebbe essere necessario cambiarla con un'altra porta.

Fai attenzione a come ti connetti. Ho notato che molti programmi di telecamere IP non controllano i certificati per la fiducia (dato che spesso sono autofirmati), quindi un utente malintenzionato potrebbe eseguire un attacco MitM inserendo un certificato autofirmato diverso. È meglio se aggiungi il tuo certificato autofirmato come affidabile nei tuoi browser e rifiutalo se cambia.

    
risposta data 28.04.2014 - 10:43
fonte
3

Il tuo router inoltra semplicemente i pacchetti, a prescindere dal protocollo che sta dietro, impone la sicurezza. In effetti, come hai detto, puoi essere un proxy inverso che ascolta su una connessione HTTPS e inoltra tutto a una connessione HTTP. Questo può essere fatto facilmente usando mod_proxy di Apache

.

In alternativa, potrebbe sembrare un po 'eccessivo, ma un buon modo sarebbe quello di configurare una VPN a cui connettersi. Questo può essere fatto facilmente (e gratuitamente) con OpenVPN . Terminerai in modo sicuro un tunnel sulla tua rete locale e potrai accedere a tutte le risorse interne. Questo potrebbe darti più flessibilità in futuro; puoi accedere all'intera rete.

In ogni caso, gli intercettatori non vedranno nulla, dal momento che vieni incanalato in una connessione crittografata e autenticata.

    
risposta data 28.04.2014 - 08:46
fonte

Leggi altre domande sui tag