Il 0% ha trovato utile questo documento (0 voti)
11 visualizzazioni10 pagine

Motivazioni: Connessioni Crittografate Autenticazione Forte

Caricato da

apomari
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
11 visualizzazioni10 pagine

Motivazioni: Connessioni Crittografate Autenticazione Forte

Caricato da

apomari
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 10

Motivazioni

• Protocollo per il login remoto sicuro e altri servizi di rete


sicuri su un canale insicuro
• Nato per rimpiazzare i comandi Berkeley r* (rsh, rlogin, rcp)
con le rispettive versioni sicure (ssh, slogin, scp)
• Fornisce:
– Una infrastruttura per connessioni crittografate
– Autenticazione forte tra host e host e tra utente e host
– Possibilità di creare un canale di comunicazione sicuro attraverso il
quale veicolare qualsiasi connessione TCP/IP
• Risolve alcuni noti problemi di sicurezza dei protocolli
TCP/IP come:
– L'IP spoofing (falsificazione dell'indirizzo IP del mittente)
Fabio Petagna matr. 56/01051 [email protected] – Il DNS spoofing (falsificazione delle informazioni contenute nel DNS)
– Routing spoofing (falsificazione delle rotte intraprese dai pacchetti e
Vittorio Fuccella matr. 56/00981 [email protected] instradamento su percorsi diversi)
1 2

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

Protocolli SSH: testo cifrato


con algoritmi a chiave Aggiungi la chiave al DB DISCONNETTI!
3 4
simmetrica

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

• Un noto attacco: IP Spoofing


Conosco questo host? Azioni per un tipico attacco IP SPOOFING da parte di un hacker (H):
1. Scegliere l’host target(B)
NO SI 2. Scoprire l’indirizzo IP di un host fidato(A)
3. Disabilitare A (con TCP SYN flooding)
Mi fido? 4. Utilizzare l’indirizzo IP di B per ottenere una shell su B
SI PROSEGUI! cercando di indovinare i Seqence Number
NO - N.B.: H potrebbe catturare i pacchetti in uscita da B
DISCONNETTI! Aggiungo la chiave pubblica in falsificando la rotta di ritorno (ROUTING SPOOFING)
5 6
$HOME/.ssh/known_hosts e PROSEGUI! 5. Aggiungere il proprio indirizzo in /etc/hosts.equiv su B

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

• SOLUZIONE: SSH aggiunge un controllo sull’host più rigoroso:


Autenticazione rhosts + chiave pubblica: Il
protocollo
1. A crea una connessione SSH con B
¾ il client invia un pacchetto firmato con la chiave privata del proprio host HTTP è in
chiaro!! 2. B crea una connessione HTTP con C e invia
¾ Il server verifica la firma con la chiave pubblica dell’host del client ad A i dati cifrati con SSH
7 8

Credits e Versioni Licenze d’uso


• Data Fellows ha imposto i limiti di utilizzo per il
• 2 Versioni non compatibili tra loro software:
– SSH1
– SSH1 può essere utilizzato liberamente a patto che non
– SSH2 se ne ricavi guadagno
• Gestito da 2 società finlandesi: – SSH2 può essere utilizzato liberamente solo
– SSH Communications Security (http://www.ssh.org) privatamente o in ambito educational
ha sviluppato i protocolli SSH1 e SSH2 e mantiene le • Protocolli SSH1 e SSH2 pubblicati come Internet
distribuzioni principali di SSH Drafts
– Data Fellows (http://www.datafellows.com) ha
acquistato dalla prima la licenza di vendere e supportare • OpenSSH (http://www.openssh.com)
SSH – Open Source
– nato per far parte del sistema operativo OpenBSD
– utilizza solo algoritmi di crittografia senza restrizioni di
9
utilizzo 10

Caratteristiche Caratteristiche
Protocollo estendibile Politiche Locali

• Controllo dell’evoluzione del protocollo • Piena negoziazione degli algoritmi di crittografia,


– Internet Draft con scadenza semestrale integrità, scambio delle chiavi e compressione
• Per ogni categoria le politiche locali specificano un
• Insieme minimale di algoritmi supportato da
algoritmo preferito
tutte le implementazioni
• A seconda dell’utente e della sua locazione possono
• Algoritmi identificati con nomi riassuntivi essere richiesti differenti modalità di autenticazione
• Possibilità di definire algoritmi o addirittura autenticazioni multiple
personalizzati • E’ possibile limitare od estendere l’insieme delle
– Nomi tipo DNS. Esempio: ourcipher- operazioni consentite a determinati utenti
[email protected]

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

Transport Layer Protocol Transport Layer Protocol


Negoziazione algoritmi
stringa di versione
in formato US-ASCII
lunghezza max = 255 Spero che S Contiene:
caratteri usi questi 1) Lista di algoritmi supportati per ogni Spero che C usi
stessi categoria in ordine di preferenza questi stessi
CONNESSIONE TCP/IP algoritmi 2) Cookie: valore casuale utilizzato per algoritmi
lo scambio delle chiavi

“SSH-protoversion-softwareversion-comments”
SSH_MSG_KEXINIT

NEGOZIAZIONE ALGORITMI Tutti gli


algoritmi Qualche
preferiti algoritmo
coincidono non
SCAMBIO DELLE CHIAVI coincide
OK
AUTENTICAZIONE Prosegui
SERVER
In questa fase PORTA 22 Successivo algoritmo
CIFRATURA avviene anche compatibile nella
MAC (INTEGRITA’) l’autenticazione lient lista del Client erver
del server 15 (se non esiste disconnetti) 16
COMPRESSIONE

Transport Layer Protocol


Negoziazione Algoritmi Transport Layer Protocol
Scambio di Chiavi
Pacchetto SSH_MSG_KEXINIT
• Obiettivo: ottenere dei valori H e K, che verranno utilizzati
byte SSH_MSG_KEXINIT
byte[16] cookie (random bytes) per il calcolo delle chiavi
string kex_algorithms
string server_host_key_algorithms
• Il valore H è usato anche come identificatore di sessione
string encryption_algorithms_client_to_server • L’identificatore di sessione (session_id)
string encryption_algorithms_server_to_client
string mac_algorithms_client_to_server – È utilizzato nel calcolo delle chiavi
string mac_algorithms_server_to_client – Una volta computato non cambia, anche se le chiavi sono
string compression_algorithms_client_to_server
string compression_algorithms_server_to_client rinegoziate in seguito
string languages_client_to_server • DH-sha1 è l’unico algoritmo richiesto
string languages_server_to_client
boolean first_kex_packet_follows • La verifica dell’identità del server avviene in questa fase
uint32 0 (reserved for future extension)

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

Transport Layer Protocol Transport Layer Protocol


Formato dei pacchetti Compressione

• Se la compressione è stata negoziata, il campo payload


uint32 packet_length
byte padding_length
sarà compresso utilizzando l’algoritmo stabilito
byte[n1] payload; n1 = packet_length - padding_length - 1 • I campi packet_lenght e mac saranno computati in base al
byte[n2] random padding; n2 = padding_length campo payload compresso
byte[m] mac (message authentication code); m = mac_length
• La cifratura avviene dopo la compressione
• packet_length: lunghezza in byte del pacchetto, MAC escluso • L’algoritmo di compressione viene scelto
• padding_length: lunghezza in byte del padding indipendentemente per ogni direzione
• payload: contenuto utile del pacchetto • Sono correntemente definiti i seguenti metodi di
• padding: byte casuali
compressione:
– packet_length • padding_length • payload • padding multiplo di 8 o
della lunghezza del blocco del cifrario -none REQUIRED no compression
• mac: Massage Authentication Code –zlib OPTIONAL GNU ZLIB (LZ77) compression

21 22

Transport Layer Protocol Transport Layer Protocol


Integrità
Cifratura
Il compo mac è calcolato come segue
mac = MAC(key, sequence_number • pacchetto_non_cifrato)
– sequence_number: inizializzato a 0 e incrementato per ogni
pacchetto
• Sono soggetti a cifratura i campi: packet_length,
– pacchetto_non_cifrato: campi lunghezza, payload e padding padding_length, payload e padding
• L’algoritmo MAC viene scelto indipendentemente per • Tutti gli algoritmi utilizzano chiavi di lunghezza >
ogni direzione 128 bit
• Sono correntemente supportati i seguenti algoritmi MAC • L’algoritmo di cifratura viene scelto
hmac-sha1 REQUIRED HMAC-SHA1 (digest length = key length = 20) indipendentemente per ogni direzione
hmac-sha1-96 RECOMMENDED first 96 bits of HMAC-SHA1 (digest
length = 12, key length = 20)
hmac-md5 OPTIONAL HMAC-MD5 (digest length = key length = 16)
hmac-md5-96 OPTIONAL first 96 bits of HMAC-MD5 (digest
length = 12, key length = 16)
none OPTIONAL no MAC; NOT RECOMMENDED
23 24

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

Authentication Protocol Authentication Protocol


• Si assume che il protocollo sottostante fornisca protezione
CONNECTION LAYER dell’integrità e confidenzialità
• 3 metodi di autenticazione:
USER AUTHENTICATION LAYER – Chiave Pubblica
– Password
Posso andare in sleep
TRANSPORT LAYER – Host Based dopo un certo num di
Ho stabilito un
timeout ed un
• Il server guida l’autenticazione: autenticazioni fallite numero max di
tentativi
TCP/IP

Metodi di autenticazione consentiti


• Autentica l’utente-client al server
• All’avvio del protocollo, lo strato di trasporto gli fornisce
Scelgo il più
l’identificatore di sessione(Il valore H del primo pacchetto di conveniente tra quelli
scambio di chiavi) che supporto
27 28

Authentication Protocol Authentication Protocol


Schema generale Autenticazione a Chiave Pubblica
byte
string
SSH_MSG_USERAUTH_REQUEST
user name • Questo metodo deve essere supportato da ogni implementazione
string service name //servizio da avviare
successivamente all’ autenticazione • Autenticazione basata su algoritmi a chiave pubblica
string method name (US-ASCII)
The rest of the packet is method-specific
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service
string "publickey"
NO SI
Accetta Autenticazione ? string public key algorithm name
string public key blob
(puo’ contenere certificati)
FORSE

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

Connection Protocol Meccanismo dei canali: Schema generale


Meccanismo dei canali byte
string
SSH_MSG_CHANNEL_OPEN
channel type

• Tutte gli pseudo-terminali, connessioni inoltrate, ecc. sono uint32


uint32
sender channel
initial window size (in bytes)
canali uint32 maximum packet size (in bytes)
... channel type specific data follows

byte SSH_MSG_CHANNEL_OPEN_CONFIRMATION
• I canali sono identificati da numeri(ad entrambe le parti), ... Seguono altri campi

che possono essere differenti tra client e server Oppure


byte SSH_MSG_CHANNEL_OPEN_FAILURE
... Seguono altri campi

• I canali hanno un meccanismo di controllo del flusso byte SSH_MSG_CHANNEL_DATA NOTE:


uint32 recipient channel 1)Quando una delle parti non
Connessione cifrata string data vuole più utilizzare un canale
.
. dovrebbe inviare un EOF
Canali Logici . 2)Dopo un EOF il canale resta
byte SSH_MSG_CHANNEL_EOF aperto e possono essere
c1 TCP/IP Forward s1 uint32 recipient_channel spediti messaggi in direzione
opposta
c2 PTY s2 byte SSH_MSG_CHANNEL_CLOSE 3)Un canale è considerato
uint32 recipient_channel chiuso quando è stato sia
c3 X11 Forward s3 inviato che ricevuto un
byte SSH_MSG_CHANNEL_CLOSE messaggio di chiusura
35 36
uint32 recipient_channel

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

byte SSH_MSG_CHANNEL_REQUEST byte SSH_MSG_CHANNEL_REQUEST


byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel uint32 recipient channel
string "env"
uint32 recipient_channel X11 string "x11-req"
string "pty-req" boolean want reply
boolean want reply Forward
boolean want_reply boolean single connection
string variable name string x11 authentication protocol
...Caratteristiche del terminale
string variable value Request string x11 authentication cookie
uint32 x11 screen number
Channel
byte SSH_MSG_CHANNEL_REQUEST
Request byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient_channel
uint32 recipient channel
string “shell" byte SSH_MSG_CHANNEL_OPEN
string "exec"
boolean want_reply string "x11"
boolean want reply X11 uint32 sender channel
...Caratteristiche del terminale
string command uint32 initial window size
Open uint32 maximum packet size
string originator address
37 uint32 originator port 38

Connection Protocol Connection Protocol


TCP/IP Port Forwarding Considerazioni sulla sicurezza
• permette di creare un canale di comunicazione sicuro
attraverso il quale veicolare qualsiasi connessione TCP • Si assume che questo protocollo giri al di sopra di un
protocollo di trasporto sicuro che ha già
byte SSH_MSG_GLOBAL_REQUEST
string "tcpip-forward" – Autenticato la macchina server
Global boolean want reply
Request string address to bind – Stabilito un canale di comunicazione cifrato
uint32 port number to bind
– Computato un identificatore di sessione
– Autenticato l’utente
byte SSH_MSG_CHANNEL_OPEN
string "forwarded-tcpip"
(*) L’host e la porta a cui il • Migliorata la sicurezza per connessioni al server X11
uint32 sender channel
server deve collegare il canale
uint32
uint32
initial window size
maximum packet size
• Il port forwarding può potenzialmente permettere ad un
Channel string
uint32
address that was connected
port that was connected
byte
string
SSH_MSG_CHANNEL_OPEN
"direct-tcpip"
intruso di scavalcare sistemi di sicurezza come i firewall;
Open string
uint32
originator IP address
originator port
uint32
uint32
sender channel
initial window size
tuttavia questo poteva già essere fatto in altri modi
uint32
string
maximum packet size
host to connect(*) • In quanto cifrato, il traffico non può essere esaminato da
uint32
string
port to connect(*)
originator IP address un firewall
uint32 originator port 39 40

Considerazioni sulla sicurezza


• Algoritmi di crittografia e autenticazione ben
conosciuti e testati • Suite di protocolli gratuita
• Caratteristiche principali
• Chiavi di taglia sufficiente a garantire protezione a
– Progetto Open Source
lungo termine – Licenza Gratuita
• Algoritmi negoziati: in caso di rottura di uno di – Crittografia forte (3DES, Blowfish)
– X11 Forwarding (cifratura del traffico X11)
essi, è possibile utilizzarne altri senza modifiche al – Inoltro di porte (canali criptati per altri protocolli)
protocollo – Autenticazione Forte (Chiave Pubblica, One-Time Password e
Kerberos)
– Interoperabilità (Conformità con SSH 1.3, 1.5, e gli Standard del
protocollo 2.0)
– Supporto per client e server SFTP nei protocolli SSH1 e SSH2
41
– Compressione Dati 42

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

Installazione di OpenSSL Installazione OpenSSH


• Libreria Open Source che implementa:
– Secure Socket Layer (SSL)
• Con la versione TGZ:
– Transport Layer Security (TLS)
/usr/{bin,sbin,
– Libreria contenente algoritmi a crittografia forte tar zxvf openssh-versione.tar.gz man}
cd openssh-versione
Per i file
• Sito www.openssl.org ./configure --prefix=/usr binari
--sysconfdir=/etc/ssh
• Passi per l’installazione: make
– Formato RPM su -c "make install" /etc/ssh
ssh-keygen -b 1024 -f /etc/ssh/ssh_host_key –N File di
rpm -ivh openssl-versione.rpm Configurazione
• Con la versione RPM
– Formato TGZ
rpm -i openssh-1.2.2-1.i386.rpm
tar zxvf openssl-versione.tar.gz rpm -i openssh-server-1.2.2-1.i386.rpm
cd openssl-versione rpm -i openssh-clients-1.2.2-1.i386.rpm
./configure
make
su -c "make install"
45 46

Note all’installazione via TGZ File Interessati


• su -c "make host-key"
• $HOME/.ssh/known_hosts
consente di creare sia le chiavi host RSA sia quelle DSA
Registrano le chiavi pubbliche degli host in cui l'utente ha effettuato il login
• Cartella contrib: script init
Si deve copiare lo script di startup all'interno della cartella • $HOME/.ssh/identity, $HOME/.ssh/id_dsa
init.d la cui posizione varia a seconda della distribuzione di Contengono le chiavi private RSA SSH1 e DSA dell'utente rispettivamente
Linux
• $HOME/.ssh/identity.pub, $HOME/.ssh/id_dsa.pub
• Avviare il demone SSH: /usr/sbin/sshd Contengono le chiavi pubbliche RSA SSH1e DSA dell'utente rispettivamente

• telnet 127.0.0.1 porta 22. Se il demone é in • $HOME/.ssh/config


esecuzione si dovrebbe ottenere quanto segue: File di configurazione per l'utente usato dal client SSH

• $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

/e tc/ssh /ssh d _con fig /e tc/ssh /ssh d _con fig


• Principali direttive: • Principali direttive(continua):

– AllowHosts <modello>... – HostKey <file>


– DenyHosts <modello>... Permette di indicare il file contenente la chiave privata del nodo, in
alternativa a quello standard (‘/etc/ssh/ssh_host_key’)
– AllowUsers <modello>...
– DenyUsers <modello>... – LoginGraceTime <durata>
Permette di stabilire il tempo massimo concesso per completare la
procedura di accesso. Il valore predefinito è di 600 secondi, pari a
Permettono di definire uno o più modelli 10 minuti
(attraverso l’uso dei caratteri jolly ‘*’ e ‘?’)
riferiti a nomi di host e di utenti a cui si intende – PasswordAuthentication {yes|no}
Stabilisce se l’autenticazione attraverso la password è consentita
permettere o impedire l’accesso oppure no. Il valore predefinito è ‘yes’, cosa che permette questo
tipo di autenticazione
51 52

/e tc/ssh /ssh d _con fig: Esempio


/e tc/ssh /ssh d _con fig # This is ssh server systemwide configuration file.
Port 22
ListenAddress 0.0.0.0
• Principali direttive(continua): HostKey /etc/ssh/ssh_host_key
RandomSeed /etc/ssh/ssh_random_seed
ServerKeyBits 768
LoginGraceTime 600
– PermitRootLogin {yes|no|nopwd} KeyRegenerationInterval 3600
PermitRootLogin yes
Permette di abilitare o meno l’accesso da parte dell’utente ‘root’. Il IgnoreRhosts no
valore predefinito è ‘yes’. ‘nopwd’ esclude solo la forma di StrictModes yes
QuietMode no
autenticazione attraverso password X11Forwarding yes
X11DisplayOffset 10
FascistLogging no
– RSAAuthentication {yes|no} PrintMotd yes
KeepAlive yes
Permette di abilitare o meno l’autenticazione RSA SyslogFacility AUTH
RhostsAuthentication no
RhostsRSAAuthentication yes
RSAAuthentication yes
– StrictModes {yes|no} PasswordAuthentication yes
Se attivato, fa in modo che ‘sshd’ verifichi la proprietà dei file di PermitEmptyPasswords yes
UseLogin no
configurazione nelle directory personali degli utenti, rifiutando di # PidFile /var/run/sshd.pid
considerare i file appartenenti a utenti «sbagliati». Il valore predefinito è # AllowHosts *.our.com friend.other.com
# DenyHosts lowsecurity.theirs.com *.evil.org evil.org
‘yes’ 53 # Umask 022 54
# SilentDeny on

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

/e tc/ssh /ssh _con fig: Esempio Comandi Principali


ssh [<opzioni>] <host>[<comando>] ‘ssh’ è in grado di instaurare una
# Site-wide defaults for various options connessione per l’accesso presso un servente in cui sia in funzione il demone
# Host * ‘sshd’
# ForwardAgent yes
# ForwardX11 yes
Alcune opzioni
# RhostsAuthentication yes -l <utente> specifica il nominativo-utente remoto
# RhostsRSAAuthentication yes -i <file-di-identificazione> specifica il file con la chiave privata
# RSAAuthentication yes
# TISAuthentication no
diverso da quello di default
# PasswordAuthentication yes
# FallBackToRsh yes scp [<opzioni>][<utente>@]<host>:]<origine
# UseRsh no
file>...[[<utente>@]<host>:]<destinazione file>
# BatchMode no
# StrictHostKeyChecking no ‘scp’ usa ‘ssh’ per la copia di file tra elaboratori
# IdentityFile ~/.ssh/identity
# Port 22 Alcune opzioni:
# Cipher idea
# EscapeChar ~ -p Fa in modo che gli attributi originali dei file vengano rispettati il più possibile
nella copia
-r Copia ricorsiva delle directory
57 58

Esempi Esempio: Port Forwarding


Esempi: • Immaginiamo il seguente scenario:
•$ ssh -l tizio linux.brot.dg ls -l /tmp permette connessioni SSH

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

Comando:Copia della directory personale


dell’utente‘tizio’ nell’elaboratore remoto.
L’operazione genera il file ‘backup.tar.gz’
nella directory corrente dell’elaboratore
locale
hostA> ssh -L 1111:HostC:23 HostB

Porta locale Host e porta da Ricevente del


•$ scp [email protected]:/etc/profile .
libera raggiungere comando

Directory
User Name, Host e file remoto da copiare destinazione hostA> telnet localhost 1111
locale 59 60

10

Potrebbero piacerti anche