Motivazioni: Connessioni Crittografate Autenticazione Forte
Motivazioni: Connessioni Crittografate Autenticazione Forte
Motivazioni Motivazioni
Connessioni crittografate Autenticazione forte
Protocolli classici di UNIX
WOW!! Esempio di verifica dell’identità del server: chiave+certificati
testo in chiaro,
vulnerabili ad attacchi di Mantengo un DB con le Host Key: ne ho una
sniffing RSH chiavi pubbliche degli coppia per ogni
host conosciuti algoritmo a chiave
Rlogin /etc/ssh/known_hosts, pubblica che supporto
$HOME/.ssh/known_hosts
RCP
SSH
Verifico host conosciuto
Slogin OR
Verifico certificato
SCP
Sigh! VERO FALSO
Motivazioni Motivazioni
Autenticazione forte
Autenticazione client -> server
Esempio di verifica dell’identità del server: chiave
• PROBLEMA: Metodo classico di autenticazione rhosts di UNIX
Mantengo un DB con le Host Key: ne ho una
chiavi pubbliche degli coppia per ogni
vulnerabile ad attacchi di spoofing
host conosciuti algoritmo a chiave
/etc/ssh/known_hosts, Autenticazione RHOSTS:
pubblica che supporto
$HOME/.ssh/known_hosts I files /etc/hosts.equiv e $HOME/.ssh/known_hosts Contengono
IP o nomi host dei client ammessi al login senza password
1
Motivazioni Motivazioni
Autenticazione client -> server TCP port forwarding
• Un’altro attacco: DNS Spoofing • Una qualsiasi connessione TCP può essere resa sicura:
Server
Web
SSH
Azioni per un tipico attacco DNS SPOOFING da parte di un hacker (H): Browser
1. Scegliere l’host target(B) Server
2. Scoprire il nome host di un host fidato(A) HTTP
3. Falsificare il DNS di B facendo in modo il nome host di A venga
risolto con l’indirizzo IP di H Internet Rete sicura
4. Stabilire una connessione con B, fingendosi A
Caratteristiche Caratteristiche
Protocollo estendibile Politiche Locali
11 12
2
Architettura Transport Layer Protocol
CONNECTION LAYER Esegue
Tre componenti maggiori:
¾Autenticazione del server
USER AUTHENTICATION LAYER
Divide la connessione
¾Scambio di chiavi
in canali logici ¾Cifratura
CONNECTION LAYER TRANSPORT LAYER ¾Protezione dell’integrità
¾Calcolo di un unico session_id,
USER AUTHENTICATION LAYER Autentica l’utente- TCP/IP utilizzato dai protocolli di livello
client al server superiore
TRANSPORT LAYER
•Progettato per essere utilizzato su un livello di trasporto affidabile
fornisce autenticazione
host, confidenzialità, •Autenticazione dell’utente non implementata a questo livello, bensì al
TCP/IP integrità e compressione protocollo al livello più alto
•Progettato per essere semplice e flessibile: sono necessari in media solo 2
13 (max 3) round trip per una operazione 14
“SSH-protoversion-softwareversion-comments”
SSH_MSG_KEXINIT
17 18
3
Transport Layer Protocol Transport Layer Protocol
Obiettivo:
ottenere valori Scambio di Chiavi (DH-sha1) Scambio di Chiavi (DH-sha1)
HeK
• Valori prodotti dallo scambio delle chiavi: H e K
p = 21024 – 2960 – 1 + 264 * 2894 + 129093
Genera x g = 2 Genera y sha1(K • H • “A” • session_id) IV client to server
1<x<q q = (p – 1) / 2 1<y<q
sha1(K • H • “B” • session_id) IV server to client
e = gx mod p
sha1(K • H • “C” • session_id) Chiave di cifr. client to server
H, K
K = ey mod p; f = gy mod p sha1(K • H • “D” • session_id) Chiave di cifr. server to client
H = sha1(VC • VS • IC • IS • KS • e • f • K)
sha1(K • H • “E” • session_id) Chiave di integr. client to server
sha1(K • H • “F” • session_id) Chiave di integr. server to client
KS( Public Host Key)
f = gy mod p
s = sig(H) • Se la chiave risulta troppo corta si applica la seguente
VC = C version string procedura: K1 = sha1(K • H • X • session_id) (X is e.g. "A")
Verifica KS(opzionale) certificati o DB locale VS = S version string K2 = sha1(K • H • K1)
K = fx mod p IC =KEXINIT di C K3 = sha1(K • H • K1 • K2)
...
H = sha1(VC • VS • IC • IS • KS • e • f • K) IS = KEXINIT di S
KS =Server Public Host key = K1 • K2 • K3 •...
Verifica della firma s su H 19 Key 20
21 22
4
Transport Layer Protocol Transport Layer Protocol
Cifratura
Algoritmi a chiave pubblica
• Sono correntemente supportati i seguenti cifrari
3des-cbc REQUIRED three-key 3DES in CBC mode
blowfish-cbc RECOMMENDED Blowfish in CBC mode • Il protocollo è stato progettato per operare con quasi tutti i
twofish256-cbc OPTIONAL Twofish in CBC mode,
with 256-bit key formati di chiave, codifiche ed algoritmi
twofish-cbc OPTIONAL alias for "twofish256-cbc" (this
historical reasons) • Sono supportati i seguenti formati di chiavi pubbliche e di
twofish192-cbc
twofish128-cbc
OPTIONAL
RECOMMENDED
Twofish with 192-bit key
Twofish with 128-bit key
certificati
aes256-cbc OPTIONAL AES (Rijndael) in CBC mode, ssh-dss REQUIRED sign Simple DSS
with 256-bit key ssh-rsa RECOMMENDED sign Simple RSA
aes192-cbc OPTIONAL AES with 192-bit key x509v3-sign-rsa RECOMMENDED sign X.509 certificates (RSA key)
aes128-cbc RECOMMENDED AES with 128-bit key x509v3-sign-dss RECOMMENDED sign X.509 certificates (DSS key)
serpent256-cbc OPTIONAL Serpent in CBC mode, with spki-sign-rsa OPTIONAL sign SPKI certificates (RSA key)
256-bit key spki-sign-dss OPTIONAL sign SPKI certificates (DSS key)
serpent192-cbc OPTIONAL Serpent with 192-bit key pgp-sign-rsa OPTIONAL sign OpenPGP certificates (RSA key)
serpent128-cbc OPTIONAL Serpent with 128-bit key pgp-sign-dss OPTIONAL sign OpenPGP certificates (DSS key)
arcfour OPTIONAL the ARCFOUR stream cipher
idea-cbc OPTIONAL IDEA in CBC mode
cast128-cbc OPTIONAL CAST-128 in CBC mode
none OPTIONAL no encryption; NOT RECOMMENDED 25 26
Verifica:
Chiave conosciuta
Certificati
byte SSH_MSG_USERAUTH_SUCCESS “Auth can
continue” è una SSH_MSG_USERAUTH_PK_OK
byte SSH_MSG_USERAUTH_FAILURE
string auth can continue lista di metodi
boolean partial success = TRUE che possono Campi del pacchetto SSH_MSG_USERAUTH_REQUEST
proseguire string signature
Successo byte SSH_MSG_USERAUTH_FAILURE
produttivamente
parziale: string auth can continue signature = firma digitale del session_id seguito
boolean partial success = FALSE il dialogo
altri passi dai campi precedenti
dell’autenticazi
richiesti DISCONNECT
one 29 30
SSH_MSG_USERAUTH_SUCCESS
5
Authentication Protocol Authentication Protocol
Autenticazione Host Based
Autenticazione con Password • Questo tipo di autenticazione è opzionale (è simile a Rhosts di UNIX)
• Tutte le implementazioni dovrebbero supportare questo metodo • Si basa su nome host, sulla host key del client e sul nome utente
dato che non è obbligatorio il possesso di una chiave pubblica
byte SSH_MSG_USERAUTH_REQUEST
string user name
byte SSH_MSG_USERAUTH_REQUEST firma digitale del string service
string user name session_id seguito dai string "hostbased"
string service string public key algorithm for host key
campi precedenti
string "password" string public host key and certificates
boolean FALSE string client host name
string plaintext password (1) string client user name on the remote host
string signature
Verifica password
Controlli:
Chiave conosciuta o certificati
SSH_MSG_USERAUTH_SUCCESS (2)
Verifica della firma
Matching nome host – chiave
NOTE Matching nome utente sul client
(1) E’ compito del livello sottostante fare in modo che – nome utente sul server
la password non viaggi in chiaro
(2) Il server può richiedere che la password venga
SSH_MSG_USERAUTH_SUCCESS
cambiata
31 32
Authentication Protocol
Considerazioni sulla sicurezza Connection Protocol
• Si assume il protocollo di trasporto sicuro abbia già
– Autenticato la macchina server CONNECTION LAYER Fornisce:
– Stabilito un canale di comunicazione cifrato
–Sessioni interattive di login;
– Computato un identificatore di sessione USER AUTHENTICATION LAYER
–Esecuzione remota di
• Il server può andare in uno stato di sleep dopo ripetute
comandi;
autenticazioni fallite TRANSPORT LAYER
–Inoltro di connessioni
• Se il livello di trasporto non utilizza il MAC, non deve essere TCP/IP;
possibile cambiare la password per evitare attacchi del tipo TCP/IP
–Inoltro di connessioni X11
denial of service
• La politica locale decide quali metodi accettare per ogni utente
• I messaggi di debug possono essere disabilitati per evitare che Divide la connessione in canali logici; tutti questi canali sono
forniscano troppe informazioni sull’host multiplexati in un singolo tunnel cifrato
33 34
byte SSH_MSG_CHANNEL_OPEN_CONFIRMATION
• I canali sono identificati da numeri(ad entrambe le parti), ... Seguono altri campi
6
Connection Protocol Connection Protocol
Sessioni Interattive Sessioni Interattive: X11
byte SSH_MSG_CHANNEL_OPEN
string "session" byte SSH_MSG_CHANNEL_OPEN
Channel uint32 sender channel
Channel string "session"
uint32 sender channel
uint32 initial window size Open
Open uint32 maximum packet size
uint32 initial window size
uint32 maximum packet size
7
Installazione: preliminari Installazione di Zlib
• È possibile effettuare il download dal sito • Libreria di compressione dati Open Source e Patent free
www.openssh.com • Sito http://www.freesoftware.com/pub/infozip/zlib/
• Sono disponibili due formati: RPM e TGZ • Passi per l’installazione:
• Per il formato RPM si ha bisogno dei seguenti file: – Formato RPM
– openssh-versione.rpm
rpm -ivh zlib-versione.rpm
– openssh-clients- versione.rpm
– openssh-server- versione.rpm – Formato TGZ
• Per il formato TGZ si ha bisogno del seguente file:
– openssh-versione.tar.gz tar zxvf zlib-versione.tar.gz
cd zlib-versione
• Sono inoltre necessari per l’installazione i seguenti ./configure
pacchetti make
– Zlib su -c "make install"
– OpenSSL
43 44
• $HOME/.ssh/authorized_keys
Lista le chiavi pubbliche RSA SSH1 degli utenti autorizzati ad effettuare il
Trying 127.0.0.1... login
Connected to localhost.
Escape character is '^]'
SSH-1.99-OpenSSH_2.3.)p1 47 48
8
File Interessati File Interessati
• /etc/ssh/sshd_config
• $HOME/.ssh/authorized_keys2 File di configurazione per l'utente usato dal server SSH
Lista le chiavi pubbliche RSA/DSA SSH2 degli utenti autorizzati
ad effettuare il login • /etc/ssh/ssh_host_key,
/etc/ssh/ssh_host_dsa_key,
/etc/ssh/ssh_host_rsa_key
• /etc/ssh/ssh_known_hosts, Contengono la parte privata delle chiavi SSH1 RSA, SSH2
/etc/ssh_known_hosts2 DSA e SSH2 RSA del server rispettivamente
Lista delle host key per gli host conosciuti dal server. Il primo
contiene chiavi pubbliche RSA SSH1 mentre il secondo anche • /etc/ssh/ssh_host_key.pub,
chiavi pubbliche DSA SSH2 /etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Contengono la parte pubblica delle chiavi SSH1, SSH2 DSA e
• /etc/ssh/ssh_config SSH2 RSA del server rispettivamente
File di configurazione di default per i client 49 50
9
/e tc/ssh /ssh _con fig /e tc/ssh /ssh _con fig
• Principali direttive:
• Principali direttive:
– Cipher {idea|des|3des|blowfish|arcfour|tss|none}
– Host <modelli> Permette di indicare il tipo di cifratura preferita, se ammissibile
anche per il servente. La cifratura predefinita è ‘idea’; in
Permette di definire uno o più modelli (attraverso l’uso dei alternativa viene usata ‘3des’. Con ‘none’ si intende di non volere
caratteri jolly ‘*’ e ‘?’) riferiti a nomi di host, a cui sono riferite le alcun tipo di cifratura
direttive successive, fino alla prossima direttiva ‘Host’
– Compression {yes|no}
– IdentityFile <file>
Se attivato, permette di utilizzare una comunicazione di dati
Permette di indicare il file contenente la chiave privata dell’utente, compressa. Il valore predefinito è ‘no’
in alternativa a quello standard
– StrictHostKeyChecking {yes|no}
– User <utente>
Se attivato, fa in modo le chiavi pubbliche dei serventi contattati
Permette di indicare l’utente da utilizzare nella connessione non possano essere aggiunte automaticamente nell’elenco
remota. Ciò è particolarmente utile nella configurazione personale e che la connessione a nodi sconosciuti o irriconoscibili
personalizzata, in cui si potrebbe specificare l’utente giusto per venga impedita. Il valore predefinito è ‘no’
ogni nodo presso cui si ha accesso
55 56
NON
User Name Host name Comando telnet HostC
permette
connessi
oni SSH
•$ ssh -l tizio linux.brot.dg tar czf-/home/tizio>backup.tar.gz
Directory
User Name, Host e file remoto da copiare destinazione hostA> telnet localhost 1111
locale 59 60
10