Sorveglianza NSA: una guida per rimanere al sicuro

traduzione a cura di googletranslate da un articolo su The guardian scritto dal crittologo
Bruce Schneier

Ora che abbiamo abbastanza dettagli su come la NSA intercetta di nascosto su Internet, comprese le rivelazioni odierne del deliberato indebolimento dei sistemi crittografici della NSA, possiamo finalmente iniziare a capire come proteggerci.

Nelle ultime due settimane, ho lavorato con il Guardian alle storie della NSA e ho letto centinaia di documenti NSA top secret forniti dal denunciatore Edward Snowden. Non facevo parte della storia di oggi – era in corso ben prima di presentarmi – ma tutto ciò che ho letto conferma ciò che il Guardian sta riportando.

A questo punto, sento di poter dare qualche consiglio per proteggermi da un simile avversario.

Il modo principale in cui la NSA intercetta di nascosto sulle comunicazioni Internet è nella rete. È qui che le loro capacità si adattano meglio. Hanno investito in enormi programmi per raccogliere e analizzare automaticamente il traffico di rete. Tutto ciò che richiede loro di attaccare i singoli computer endpoint è significativamente più costoso e rischioso per loro, e lo faranno con cautela e con parsimonia.

Sfruttando i suoi accordi segreti con le compagnie di telecomunicazione – tutti gli Stati Uniti e il Regno Unito, e molti altri “partner” in tutto il mondo – l’NSA ottiene l’accesso ai tronchi delle comunicazioni che spostano il traffico Internet. Nei casi in cui non ha quel tipo di accesso amichevole, fa del suo meglio per monitorare segretamente i canali di comunicazione: toccando i cavi sottomarini, intercettando le comunicazioni via satellite e così via.

Si tratta di un’enorme quantità di dati e l’NSA ha capacità equivalenti enormi per passare rapidamente a tutto, alla ricerca di traffico interessante. “Interessante” può essere definito in molti modi: dalla fonte, dalla destinazione, dal contenuto, dagli individui coinvolti e così via. Questi dati sono incanalati nel vasto sistema NSA per analisi future.

La NSA raccoglie molti più metadati sul traffico internet: chi sta parlando con chi, quando, quanto, e con quale modalità di comunicazione. I metadati sono molto più facili da archiviare e analizzare rispetto ai contenuti. Può essere estremamente personale per l’individuo ed è un’intelligenza enormemente preziosa.

La Direzione Sistemi Intelligence è responsabile della raccolta dei dati e le risorse che dedica a questo sono sconcertanti. Leggo il rapporto sullo stato dopo il rapporto sullo stato di questi programmi, discutendo le capacità, i dettagli operativi, gli aggiornamenti pianificati e così via. Ogni singolo problema – recuperare i segnali elettronici dalla fibra, stare al passo con i flussi di terabyte, filtrare le cose interessanti – ha un gruppo dedicato a risolverli. La sua portata è globale.

La NSA attacca anche i dispositivi di rete direttamente : router, switch, firewall, ecc. La maggior parte di questi dispositivi ha funzionalità di sorveglianza già integrate ; il trucco sta nel surrettiziamente accenderli. Questa è una via d’attacco particolarmente fruttuosa; i router vengono aggiornati meno frequentemente, tendono a non installare software di sicurezza su di essi e vengono generalmente ignorati come vulnerabilità.

L’NSA dedica inoltre notevoli risorse per attaccare i computer degli endpoint. Questo tipo di cose è fatto dal suo gruppo TAO – Tailored Access Operations . TAO ha un menu di exploit che può servire contro il tuo computer, che tu stia utilizzando Windows, Mac OS, Linux, iOS o qualcos’altro, e una varietà di trucchi per metterli sul tuo computer. Il tuo software anti-virus non li rileverà e avresti problemi a trovarli anche se sapessi dove cercare. Si tratta di strumenti di hacker progettati dagli hacker con un budget sostanzialmente illimitato. Quello che ho tolto dalla lettura dei documenti di Snowden è che se l’NSA vuole entrare nel tuo computer.

L’NSA si occupa di tutti i dati crittografati che incontra di più sovvertendo la crittografia sottostante piuttosto che facendo leva su eventuali scoperte matematiche segrete. Innanzitutto, c’è un sacco di cattiva crittografia là fuori. Se trova una connessione Internet protetta da MS-CHAP, ad esempio, è facile interrompere e recuperare la chiave. Sfrutta le password utente scelte male, utilizzando lo stesso dizionario che gli hacker utilizzano nel mondo non classificato.

Come è stato rivelato oggi , la NSA lavora anche con i venditori di prodotti di sicurezza per garantire che i prodotti di crittografia commerciale siano infranti in modi segreti che solo loro conoscono. Sappiamo che questo è successo storicamente: CryptoAG e Lotus Notes sono gli esempi più pubblici, e ci sono prove di una porta di servizio in Windows . Alcune persone mi hanno raccontato alcune storie recenti sulle loro esperienze e ho intenzione di scrivere presto su di loro. Fondamentalmente, l’NSA chiede alle aziende di cambiare sottilmente i loro prodotti in modi non rilevabili: rendendo il generatore di numeri casuali meno casuale, perdendo la chiave in qualche modo, aggiungendo un esponente comune a un protocollo di scambio a chiave pubblica, e così via. Se viene scoperta la porta sul retro, viene spiegata come un errore. E come ora sappiamo, la NSA ha avuto enorme successo da questo programma.

TAO si infiltra anche nei computer per recuperare le chiavi a lungo termine. Quindi se stai usando una VPN che usa un complesso segreto condiviso per proteggere i tuoi dati e la NSA decide che se ne importa, potrebbe provare a rubare quel segreto. Questo tipo di cose viene fatto solo contro obiettivi di alto valore.

Come si comunica in modo sicuro contro un simile avversario? Snowden lo ha detto in una sessione di domande e risposte online subito dopo aver reso pubblico il suo primo documento: “La crittografia funziona. I potenti sistemi crittografici correttamente implementati sono una delle poche cose su cui potete fare affidamento.”

Credo che questo sia vero , nonostante le rivelazioni odierne e le allettanti accenni di ” capacità pseudoanalitiche innovative ” fatte da James Clapper, il direttore dell’intelligence nazionale in un altro documento top-secret. Queste capacità implicano deliberatamente un indebolimento della crittografia.

La frase successiva di Snowden è altrettanto importante: “Sfortunatamente, la sicurezza degli endpoint è così terribilmente debole che la NSA può spesso trovare dei modi per aggirarla.”

Endpoint indica il software che stai utilizzando, il computer su cui lo stai utilizzando e la rete locale in cui lo stai utilizzando. Se l’NSA può modificare l’algoritmo di crittografia o rilasciare un Trojan sul computer, tutta la crittografia in il mondo non ha importanza. Se si vuole rimanere al sicuro contro la NSA, è necessario fare del proprio meglio per garantire che la crittografia possa operare senza impedimenti.

Con tutto questo in mente, ho cinque consigli:

1) Nascondere nella rete . Implementa servizi nascosti. Usa Tor per anonimizzare te stesso. Sì, l’NSA si rivolge agli utenti di Tor, ma è lavoro per loro. Meno sei ovvio, più sei sicuro.

2) Cripta le tue comunicazioni . Utilizza TLS. Usa IPsec. Anche in questo caso, mentre è vero che l’NSA prende di mira le connessioni criptate – e potrebbe avere exploit espliciti contro questi protocolli – tu sei molto più protetto che se comunichi in chiaro.

3) Supponiamo che mentre il tuo computer può essere compromesso, ci vorrebbe lavoro e rischi da parte dell’NSA – quindi probabilmente non lo è . Se hai qualcosa di veramente importante, usa un traferro. Da quando ho iniziato a lavorare con i documenti Snowden, ho acquistato un nuovo computer che non è mai stato collegato a Internet. Se voglio trasferire un file, crittografo il file sul computer sicuro e lo passo sul mio computer internet, usando una chiavetta USB. Per decifrare qualcosa, inverto il processo. Questo potrebbe non essere a prova di proiettile, ma è abbastanza buono.

4) Diffidare del software di crittografia commerciale, in particolare dai grandi fornitori . La mia ipotesi è che la maggior parte dei prodotti di crittografia di grandi aziende statunitensi abbia backdoor amichevoli della NSA, e anche molti stranieri lo fanno. È prudente presumere che anche i prodotti stranieri abbiano backdoor installate all’estero. Il software closed-source è più facile per la NSA di backdoor rispetto al software open-source. I sistemi che si affidano a segreti segreti sono vulnerabili alla NSA, attraverso mezzi legali o più clandestini.

5) Prova a utilizzare la crittografia del dominio pubblico che deve essere compatibile con altre implementazioni . Ad esempio, è più difficile per NSA TLS backdoor rispetto a BitLocker, perché TLS di qualsiasi fornitore deve essere compatibile con TLS di tutti gli altri fornitori, mentre BitLocker deve essere compatibile solo con se stesso, dando all’NSA molta più libertà di apportare modifiche. E poiché BitLocker è proprietario, è molto meno probabile che tali modifiche vengano scoperte. Preferisci crittografia simmetrica su crittografia a chiave pubblica. Preferire sistemi convenzionali basati su log discreti su sistemi a curva ellittica; questi ultimi hanno delle costanti che l’NSA influenza quando possono.

Da quando ho iniziato a lavorare con i documenti di Snowden, ho utilizzato GPG , Silent Circle , Tails , OTR , TrueCrypt , BleachBit e alcune altre cose di cui non ho intenzione di scrivere. C’è una funzione di crittografia non documentata nel mio programma Password Safe dalla riga di comando); Ho usato anche quello.

Capisco che la maggior parte di questo è impossibile per il tipico utente di Internet. Anche io non uso tutti questi strumenti per quasi tutto ciò su cui sto lavorando. E io sono ancora principalmente su Windows, sfortunatamente. Linux sarebbe più sicuro.

La NSA ha trasformato il tessuto di Internet in una vasta piattaforma di sorveglianza, ma non sono magici. Sono limitati dalle stesse realtà economiche di tutti noi, e la nostra migliore difesa è rendere la sorveglianza di noi il più costosa possibile.

Fidati della matematica. La crittografia è tua amica. Usalo bene e fai del tuo meglio per assicurarti che nulla possa comprometterlo. È così che puoi rimanere sicuro anche di fronte alla NSA.

Openvpn 2.4

AEAD (GCM)

Openvpn 2.4 è l’ultima versione del software per tunnel criptati.
Con la nuova versione molte sono le novita’:

  • IP e porta mobile
  • Negoziazione della cifratura del canale dati
  • Supporto per la crittografia del canale dati con AEAD (GCM)
  • Scambio di chiavi ECDH
  • Connette ai clients DNS Dualstack round-robin
  • Supporto per la fornitura di server DNS IPv6
  • redirect-gateway ipv6
  • Compressione e supporto LZ4
  • Http proxy password all’interno del file di configurazione
  • Token di autenticazione
  • Client di gestione portachiavi per Mac OS X.
  • Supporto per piattaforma Android
  • Supporto piattaforma AIX
  • Controllo della crittografia del canale

E’ da un po che aspetto Openvpn 2.4 .
Le precedenti versioni non supportavano propriamente il concetto di Perfect Forward Secrecy.

Il cifrario di default era AES-256-CBC in modalita’ CBC appunto.
Infatti GCM fornisce sia criptografia che controllo di integrita’, mentre CBC solo criptografia.

Per questo in modalita’ GCMnon vedrai mai crittografare due volte con lo stesso hash della stessa chiave e questo protegge dai replay attacks.

Gli sviluppatori hanno sempre preferito la retrocompatibilita’ con quante piu’ applicazioni client possibile, spesso di vecchia generazione, a discapito della sicurezza.

Openvpn 2.4 è un software che utilizzo tantissimo e il supporto per protocolli di crittografia avanzati di tipo ellittico per la crittografia è, finalmente, default.

Configurazione

 

Configureremo un sistema debian stretch con Openvpn 2.4 e openssl-1.0.2j.

E’ mia intenzione fornire il livello di sicurezza piu alto possibile per i dati in transito, per gli utenti e per il server stesso, iniziamo.

Innanzitutto configuriamo il forwarding sulla nostra vpnbox con qualche comando iptables e qualche modifica a etc/sysctl.conf, il file dove è possibile apportare modiche al kernel, al tcp/ip stack, alla virtual memory e quant’altro, senza riavviare la nostra vpnbox, on the fly.

Grazie ad iptables utilizzeremo il NAT che permettera’ ai clients della vpn di collegarsi alla rete pubblica.


-P FORWARD DROP
-A FORWARD -s 10.1.0.0/24 -i tun0 -o eth0 -j ACCEPT
-A FORWARD -d 10.1.0.0/24 -i eth0 -o tun0 -j ACCEPT
# nat/masquerade
-t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
# in etc/sysctl.conf abilitiamo il forwarding per i clients
net.ipv4.ip_forward = 1

Adesso impostiamo la porta di asolto, il protocollo, l’interfaccia di rete utilizzata, nel nostro caso tun0 e l’ip che l’interfaccia virtuale della nostra vpn utilizzera’.


port 4343
proto udp
dev tun0
server 10.1.0.0 255.255.255.0

Per il numero di porta ho scelto un valore diverso dal default 1192.

TCP o UDP ?

Tcpreset.net ai suoi clienti offre entrambi i protocolli.

A proposito di questo argomento il protocollo UDP resta quello consigliabile in termini di velovita’ proprio perchè piu’ semplice del TCP.

Il protocollo TCP garantisce la consegna dei dati implementando meccanismi di controllo e di rinvio dei dati stessi, operazione che richiede il suo tempo.

L’UDP, al contrario, invia i dati in rete e poi se ne disinteressa.

Per questo motivo è molto usato nello streaming di audio e video dove è necessaria molta velocita’ e anche nella risoluzione dei nomi di dominio con il DNS.

La direttiva Server definisce quale numerazione e classe di ip la nostra vpn utilizzera’ per sè e i clients.

La vpnbox avra’ ip 10.1.0.1 sulla sua interfaccia di rete, mentre un pool di 254 indirizzi ip sara’ a disposizione dei clients che la utilizzeranno.

Routing

Inoltre dovremmo dire ad Openvpn 2.4 il routing che avranno i clients.
Utilizzando la classe di ip privati dai quali i clients provengono, impostiamo il routing:


# Routing
client-config-dir /etc/openvpn/ccd/client1
route 192.168.1.0 255.255.255.0
# nel file etc/openvpn/ccd/client1 con iroute definiamo che classe di ip client1 fa parte.
iroute 192.168.1.0 255.255.255.0

Poi impostiamo altri parametri che riguardano vari aspetti della connessione e sono dei buoni defaults.


keepalive 10 120
compress lz4
max-clients 60
tun-mtu 1500
persist-key
persist-tun

Vi consiglio di consultare il manuale disponibile sul sito ufficiale di Openvpn per i dettagli ;).

Certificati SSL con criptografia efemerale a curve ellittiche

 

Adesso creeremo i certificati necessari alla nostra VPN.
Il modo piu’ facile per impostare una CA è scaricare il pacchetto easyrsa v3.0.5.

$ git clone https://github.com/OpenVPN/easy-rsa.git easy-rsa/.

E’ mia intenzione utilizzare EC (curve ellittiche) per i certificati SSL di questo server invece di RSA.

Utilizzero’ il massimo in quanto a sicurezza che la criptografia a curve ellittiche ha da offrire con Openvpn 2.4.
Edita il file vars in questo modo:


set_var EASYRSA "$PWD"
set_var EASYRSA_OPENSSL "/usr/local/openssl/bin/openssl"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN org
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "California"
set_var EASYRSA_REQ_CITY "San Francisco"
set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL "me@example.net"
set_var EASYRSA_REQ_OU "My Organizational Unit"
# Cetificati a curve ellittiche (y)
set_var EASYRSA_ALGO ec
# definiamo quali curve ellittiche usare
set_var EASYRSA_CURVE brainpoolP512r1
# Scadenza certificati della CA
set_var EASYRSA_CA_EXPIRE 365
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_CRL_DAYS 365
# Cryptographic digest to use.
set_var EASYRSA_DIGEST "sha512"

Inizializiamo la PKI.


./easyrsa init-pki

Creiamo la CA.


./easyrsa build-ca

Generiamo una richiesta di certificato ed una chiave privata per il server.

./easyrsa gen-req server somename nopass

Firma il certificato

./easyrsa sign-req somename

Creiamo il certificato per gli utenti.

./easyrsa gen-req client1

Firmiamolo,

./easyrsa sign-req client1

Sul server adesso andiamo a specificare il path per certificati e chiave privata:


ca /etc/openvpn/EasyRSA-3.0.3/pki/ca.crt
cert /etc/openvpn/EasyRSA-3.0.3/pki/issued/vpn.server.crt
key /etc/openvpn/EasyRSA-3.0.3/pki/private/vpn.server.key

Sempre sul server andiamo a definire tutti i parametri per una connessione che usa esclusivamente TLSv1.2 e cifrari AEAD(GCM) che garantiscono perfect forward secrecy.

Cifrari

Vediamo di quali cifrari Openvpn 2.4 dispone.

Abbiamo detto che vogliamo solo quelli che supportano crittografia a curve ellittiche e vogliamo solo i cifrari piu’ forti, 256bit possono bastare.

root@VPN:# openvpn --show-ciphers | grep 256-GCM
AES-256-GCM (256 bit key, 128 bit block, TLS client/server mode only)

Risulta che Openvpn 2.4 con i suddetti criteri dispone di AES-256-GCM che e’ il nuovo cifrario di default per Openvpn 2.4 e sostituisce Blowfish BF-CBC (64bit).

Aggiungiamolo al file di configurazione:

cipher AES-256-GCM

Piu’ cifrari utilizziamo piu’estesa sara’ la gamma di applicazioni clients che sara’ in grado di connettersi alla nostra vpnbox.
Se ques

to puo essere considerato un bene in realta’ ci costringe all’uso di protocolli insicuri e deboli, inoltre offre a qualche maleintenzionato una superfice maggiore da attaccare.


root@VPN ~ # openvpn --show-tls | grep 256-GCM
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-DHE-RSA-WITH-AES-256-GCM-SHA384

Vediamo che i cifrari adesso sono tre stando alle caratteristiche da noi ricercate. Con Openvpn 2.4 è stato ridotto il numero di cifrari di default in tls-cipher.

E’ molto facile che un uso incorretto dei cifrari provochi degli errori nella connessione e inoltre meno cifrari ci sono e minori saranno le possibilita’ di bersaglio durante un attacco .

Qualsiasi sia il cifrario da voi scelto, il client, nel suo file di configurazione, deve contenere i medesimi cifrari del server.
Aggiungiamo al file di configurazione i cifrari disopra mostrati,

tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384

ed anche,


ncp-ciphers AES-256-GCM
ecdh-curve brainpoolP512r1

Ncp-cipehrs è una nuova opzione in Openvpn2.4.
Sta ad indicare che è possibile negoziare il cifrario che cripta il data channel. Ma per noi non ci puo’ essere alcuna negoziazione, AES-256-GCM come unica opzione.

ecdh-curve stabilisce invece quale curva ellittica usare.

Noi useremo brainpoolP512r1 che è considerato safe dal sito safecurves.cr.yp.to.

Autenticazione

L’autenticazione al momento è gestita unicamente con il buon vecchio PAM.

E’ in fase di allestimento un sistema d’autenticazione 2FA con google-authenticator.

Sicurezza

 

Openvpn2.4 supporta i migliori algoritmi di sicurezza.
Ammenochè tu non abbia per qualche motivo specifico bisogno di ultilizzare SSLv3,TLSv1 o TLSv1.1, essi vanno disabilitati in quanto insicuri e va utilizzato solo il protocollo TLSv1.2 e lo facciamo con questa direttiva:


tls-version-min 1.2

Un altra novita’ per Openvpn2.4 è la direttiva tls-crypt che è un upgrade del precedente tls-auth.

Crittografando il canale di controllo viene criptato anche il certificato utilizzato nella connessione TLS.

Quindi è anche più difficile determinare che si tratta di una connessione vpn dopo un packet inspection.

In conclusione la nostra vpn sara’ in esecuzione con l’utente non privileggiato nobody.

Andiamo ad aggiungere al file di configurazione le seguenti direttive:


user nobody
group nogroup

Queste sono alcune delle direttive implementate sulla vpn da me offerta.

Per ulteriori approfondimenti vi invito a consultare il sito di riferimento vpn.tcpreset.net [WORK IN PROGRESS]

Qualora fosse vostra intenzione usufruire della vpn da me offerta, per qualsiasi chiarimento, consulenza, sia per utilizzo privato che businness, alla pagina contatti tutti i dettagli.