original in en Georges Tarbouriech
en to en Lorne Bailey
en to it Toni Tiveron
Georges è un utlizzatore di Unix di vecchia data, sia che si tratta
di versioni commerciali o free. Si interessa della sicurezza e vuole
ringraziare la comunità free per il grandioso lavoro che ha svolto
nel software in questo settore.
SSH, la shell sicura, un prodotto
commerciale eccezionale. Tuttavia vi è una ampia scelta di
implementazioni, sia di client che di server, di tipo gratuito.
Queste implementazioni esistono sia per Unix (sia esso commerciale o
no) sia per altri sistemi operativi.
La più nota implementazione si può trovare presso il sito http://www.openssh.org. In questo
sito potrete trovare alternative per sistemi Unix, Windows, Mac,...
Per alcuni prodotti, come per esempio Windows, esistono solo soluzioni
alternative per i client.
In questo articolo vi presenterò alcuni esempi su come si possa
sfruttare ssh per creare un tunnel di dati da e verso altri
applicativi. VPN (Virtual Private Network - Rete Privata Virtuale) si
basa su ssh, ma in maniera assai diversa, molto più complessa del
caso che non andremo ad affrontare qui. Un'altra soluzione
sofisticata è quella di ricorrere a VTun.
Secondo quando appena detto, consideriamo questa forma di tunnel come
un semplice e lineare modo per inviare dati crittati su di una rete
eterogenea in modo da preveneri lo snoop dei dati scambiati tra i due
terminali. Tuttavia ricordate che ssh semplicimente cripta i dati,
non rederà di certo la vostra rete sicura...
Siete stati avvertiti!
SSH è un sostituto di telnet, rsh, rlogin, come già vi era stato
spiegato in un precedente articolo. Sebbene si
siano, recentemente, trovati alcuni problemi di sicurezza in ssh,
essa rimane un ottimo e sicuro strumento per la crittazione dei dati.
A proposito del succitato problema di sicurezza inerente le password:
vi raccomando caldamente di ricorrere all'autentificazione per mezzo
delle passphrases e del sistema RSA! L'utilizzo di ssh non vi vieta
di ricorrere anche all'usto di altri strumenti di sicurezza, come per
esempio, tcpwrapper.
È abbastanza semplice fare uno snoop dei dati che transitano in una
rete con strumento come tcpdump o snoop. Potete fare una prova con
due macchine che si scambiano dati, per esempio, mentre è attiva una
sessione di telnet. Da una terza macchina che utilizzi Linux come
Sistema Operativo, eseguite, per esempio, tcpdump (ovviamente da un
utente con i privilegi di root) e date un'occhiata a quel che capita.
Potrete leggere tutti i dati!!!! (Nota dell'editore: i tre computer
devono obbligatoriamenti essere collegati per mezzo di un HUB, non di
uno switch).
Noterete che quello che compare a video è troppo veloce per esser
letto, ma nessuno vi vieta di ridirezionarel l'output su un file, che
potrete tranquillamente leggere con calma mente vi bevete un caffè.
Se questo è vero per i dati, a maggior ragione lo è per le password:
ed ecco che il gioco è fatto, ovvero come si possa trovare una porta
spalancata per i cracker. Consegnerete loro così la chiave della
porta di casa vostra, che in questo caso è il vostro account.
Immaginatevi cosa accadrebbe se il tipo di traffico sulla vostra rete è strettamente
riservato.... se voi foste l'amministratore di sistema, temo che il
vostro capo a breve di chiederà di trovarvi un nuovo lavoro in un'
altra compagnina!!!
Similmente i comandi remoti, come rsh, rcp, rlogin, sono altrettanto
pericolosi, in quanto anche questo tipo di dati non è crittato. Se
ssh è una valida alternativa a rsh e rlogin, esso ha con se anche un
altro strumento: scp, ovvero una valida alternativa a rcp. Con questo
voglio dirvi che non vi serviranno più comandi remoti o telnet se
ricorrete ad ssh, o almeno, non dovresti utilizzarli.
Come installare ssh, generare le chiavi pubbliche e private... non
rientra nello scopo di questo articolo. Troverete tutto quello che vi
serve all'interno dell'archivo di ssh che scaricherete, o potrete
leggerne la documentazione relativa all'argomento su the Linux Documentation Project (in
inglese) e Italian Linux
Documentation Project (in italiano).
Dato che l'utilizzo di un computer oggigiorno verte essenzialmente
nel trasferimento di dati, sia in un senso che nell'altro, ssh
dovrebbe essere uno strumento obbligatorio... bhe in ogni caso spetta
a voi la scelta. Tuttavia ssh può servire a ben altro che non
semplicemente sostituire telnet o la suite di comandi remoti.
Può essere utilizzata per crittare i dati trasferiti da applicazioni
esterne, ed ovviamente, tra sistemi operativi diversi. Può anche
comprimere i dati. È spesso usata in associazione a protocolli come
pop, ftp, http... sia per comprimere che per crittare dati. È altresì
molto utile se siete degli amministratori di sistema, per esempio,
per collegarvi da casa al lavoro e viceversa.
Trattandosi di un applicativo client/server, ssh ovviamente per poter
lavorare necessita di una macchina su giri il server ed una su cui
giri il client (spero che abbiate notato quanto sia arguto!).
Se vi chiedete come mai io abbia sottolineato un aspetto così banale
ora ve ne darò una esauriente risposta!. Infatti, dato che qui si sta
parlando di software gratuito, molti sistemi operativi che non siano
unix, non posseggono una implementazione gratuita del server. Ed
eccoci al punto, cioè a volte non si è in grado di vedere le cose più
ovvie, e quindi si deve cercare una strada alternativa: la soluzione
è chiamata forwarding. Parleremo poi di questa soluzione. Questo vuol
dire che se utilizziamo sistemi operativi come Mac Os o Windows, non
potremmo avere dei server gratuiti, ma dovremmo arrangiarci con i
soli client gratuiti. Come fare questo non è, dopotutto, una cosa
così immediata ed ovvia. Proviamo ad affrontare alcuni esempi
concreti.
Se non conoscete che cosa sia VNC, vi state perdendo uno dei più
grandi strumenti mai creati. Potete darci un occhio qui per saperne di più.
Se visitate il sito web di VNC
(http://www.uk.research.att.com/vnc/docs.html) troverete la
docuemntazione inerente il problema che stiamo affrontando. Per
esempio, troverete come utilizzare VNC per mezzo di ssh, da un client
Windows verso un server Unix. Di conseguenza io non riscriverò il
grandioso lavoro fatto da Frank Stajano, dato che quest'ultimo è di
certo migliore del mio.
Diamo ora un'occhiata a come funziona il tutto.
Dapprima dobbiamo scegliere un client gratuito per Windows. Durante
questo esempio utilizzeremo Teraterm Pro con l'estensione ttssh. Lo
potrete trovare http://hp.vector.co.jp/authors/VA002416/teraterm.html.
Per dovere di cronaca noi utilizzeremo ttssf, che è la versione dell'
estensione permessa in Francia. (Le cose stanno, comunqe variando,
per quel che concerne le leggi sull'esportazione della crittografia.
Potete controllare lo stato inerente il vostro paese su questo sito: http://www2.epic.org/reports/crypto2000/countries.html.)
Ora supponiamo di aver avviato il server ssh su di una macchina Unix.
Supponiamo anche che nella stessa macchina noi si abbia attiva una
sessione VNC Server. Quando avremo questi due server funzionanti,
potremmo far collegare una macchina WindowsNT al server Unix per
messo di Ttssh.. Questo vuol direi che avremmo una
connessione crittata tra le due macchine. Tuttavia questo non vi
permette di attivare, dalla macchina NT, un client VNC con protocollo
crittografico. Per ottenere questa funzione dovremmo indicare a ssh
di inoltrare (ed è appunto per questo che ho scritto questo articolo!)
i dati sulla giusta porta.
La macchina Unix su cui gira VNCserver si chiamerà "bandit" ed è in
ascolto sulla porta 5901, in quanto si tratta del primo display, di
conseguenza il display X per questa macchina sarà 0. Nel caso di uso
diretto si dovrebbe utilizzare il seguente comando: "vncviever bandit:1".
Ovviamente questa soluzione funziona, ma non staremo trasmettendo
dati crittografati. Per mezzo della "shell" di NT (alcuni la chiamano
interfaccia DOS...), digitiamo il seguente comando: "/ssh-L5902:bandit:5901"
senza spazi. Questo serve a creare una porta locale, nella
fattispecie la 5902. Grazie a questo comando potremmo avere una
connessione crittografata sul protocollo VNC dalla nostra macchina NT.
Questo può esser fatto senza la necesstà di ricorrere alla linea di
comando, dato che, Ttssh ha una propria interfaccia grafica.
Permettemi di aggiungere che questa sintassi inerente Ttssh. Se lo
digitassimo da una macchina Unix dovremo scrivere:
"ssh -L 5902:bandit:5901 bandit".
Ovviamente questo era un esempio molto semplice: potrete fare cose
molto più complesse. Date un occhio alla documentazione presente sul
sito di VNC, in particolarmodo quella redatta da Frank Stajano.
MySQL è probabilmente uno dei DBMS
più utilizzati, specialmente in internet. So di essere monotono, ma
rendere MySQL sicuro va oltre lo scopo di questo articolo. Tuttavia
rendere il flusso di dati tra il server ed i client crittato
contribuisce a rendere le connessioni sicure. SSH ci permette di fare
ciò, proprio come abbiamo precedentemente fatto con VNC, insomma
inoltrare una porta.
Poniamo come caso una situazione Intranet. Il server MySQL gira su di
una macchina Linux, e la maggior parte dei client sono macchine
WindowsNT. Anche in questo caso ricorreremo all'uso di Ttssh come
client sulle macchine Windows.
La porta predefinita del server MySQL è la 3306. Noi inoltreremo i
dati sulla medesima porta.
Potrete scegliere se inoltrare in locale o in remoto.
Un inoltro locale apparirà all'incirca così:"/ssh-L3306:localhost:3306"
sulla macchina NT o "ssh -L 3306:localhost:3306" su una macchina Unix.
Se utilizzeremo come host "localhost" faremo passare i dati per mezzo
dell'interfaccia di loopback invece che per mezzo della scheda di
interfaccia esterna della macchina.
Un inoltro remoto assomiglierà a: "/ssh-R3306:bandit:3306" su una
macchina NT e "ssh -R 3306:bandit:3306" si di una Unix.
Questo riguarda, ovviamente, la sola connessione. Per accedere al DBM,
dovrete, ovviamente, configurare e l'hostname e lo username del
vostro server MySQL, che probabilmente, saranno diversi dallo
username della macchina in cui vi trovate. Verficate nelle pagine del
manuale di ssh (man ssh) sull'uso dell'opzione "-l".
Ovviamente questo funzionerà solo se avete un client MySQL sulla
vostra macchina WindowsNT.
Se non lo avete, dovrete ricorrere all'uso di un applicazione ODBC,
come Sybase. Avviate la vostra applicazione e configuratene l'ODBC
per collegarsi al vostro server MySQL. Ora potrete collegarvi al
localhost, non al server MySQL, per accedere la server MySQL. Il dati
che transitano tra il client ed il server ora sono crittografati.
Potete verficare, se volete, con snoop e tcpdump.
Questo è un esempio su rete locale (LAN). Se volete utilizzare questa
soluzione su una WAN, potrebbe essere un poco più complesso,
specialmente se dovete passare attraverso un firewall.
Questa potrebbe essere una soluzione per amministrare da casa, se
siete un amministratore di sistema, ma non potete pensare a ricorrere
ad un tale metodo se volete interfacciare un sito web con un DBM. In
questo caso dovrete cercare soluzioni più complesse, come una VPN.
Dopotutto questa è solo un suggerimento.
Attenzione, non crediate che questa soluzione sia sufficientemente
sicura per dati molto sensibili, come le carte di credito, per
trasferire i dati da e verso il DBM! E dopotutto, chi veramente può
affermare di avere un server così sicuro da poter effettuare questo
tipo di transizioni senza alcun rischio? Bhe io no di certo!.
Cosa vuole dire questa assurda affermazione dato che stiamo già
utilizzando un'emulazione terminale?
Facciamo un esempio. Poniamo di utilizzare una vecchia applicazione
Cobol su di un server Unix. I client, sono anche questa volta delle
macchine WindowNT. Per poter utilizzare questa applicazione, i client,
devono poter utilizzare un'emulazione terminale più evoluta di un
semplice vt100, vt220 o vt320. Ovvero gli accenti, le tabelle, e
tutti gli altri caratteri speciali non sarebbero visibili con queste
emulazioni. Forzare un'emulazione standard (vt100, vt200, ...) in
modalità 8 bit, non sarà sufficiente ad avere il tutto correttamente
funzionante. Anzi renderà il tutto semplicemente instabile.
Oltretutto, trattandosi di un prodotto alquanto datato, dovrete
ricorrere ad un'emulazione terminale piuttosto vecchia.
Dopo varie peripezie e tentativi per avere un'emulazione funzionante,
scopirete che l'emulazione "ibm3151" è quella che vi dà il miglior
risultato.
Dato che il software che andrete ad utilizzare è stato sviluppato
tempo addietro, di sicuro non avrà in sè alcun concetto di sicurezza.
La connessione, difatti, si basa essenzialmente sul protocollo telnet!
E come noto, i dati che si vanno a visualizzare sono alquanto
confidenziali... Che fare allora? Dobbiamo, per lo meno, trovre un
modo per crittare i dati. Ed ecco che ssh ci viene nuovamente in
aiuto.
In ogni caso, vi è più di una soluzione per ottenere il nostro
risultato...
Potete o ridirezionalre il telnet sulla porta 22 (ssh) o inoltrare la
porta dell'emulazione terminale. Purtroppo... temo che il server non
accetterà il reindirizzamento del telnet (la porta di questo servizio
è normalmente 23): dovrete esser root per poter effetture questo tipo
di operazioni (o almeno io mi auguro dobbiate esserlo!). Per quel che
rigurda l'applicazione terminale, puo' esser utilizzata da svariate persone
allo stesso tempo, ovviamente ricorrendo ad una porta diversa per
ogni connessione, mi spiego: 10 utenti, 10 porte.
La cosa si sta un attimo complicando vero??
Iniziamo premettendo che il server su gui gira l'applicativo deve
avere il servizio ssh attivo e funzionante, pronto a ricevere
connessioni sulla porta 22.
Da un client WinNT, collegatevi al server dell'applicativo per mezzo
di Ttssh o per mezzo dei comandi ad interfaccia testo. Semplicemente
stabilirete una connessione sicura tra il server ed il client per un
determinato utente. Dalle opzioni di Ttssh scegliere l'inoltro della
porta 50000 alla porta 23 remota (servizio telnet) sul server. Nella
riga di comando dovrebbe esser un qualcosa del tipo "ssh-L50000:servername:23".
Ora potrete istruire il vostro emulatore di terminale di collegarsi
alla porta 50000 invece della 23. Ora i dati che transiteranno
saranno in un canale sicuro, ovvero crittato. Potrete verificarlo per
mezzo di snoop e di tcpdump.
Ovviamente dovrete fare la stessa cosa in ogni postazione utente per
collegarvi all'applicativo, cambiando, ovviamente il numero della
porta. Per sempio potrete utilizzare le porte 50001, 50002, e così
via.
Ora qualcuno potrebbe chiedersi: perchè ricorrere a dei valori di
porta così elevati?. La risposta è: Moltissime ragioni!
Seriamente, la ragione principale è che si possono gesitre porte di
valore elevato senza aver bisogno di avere i privilegi di root.
Il secondo motivo è dato dal fatto che le porte su cui andremo ad
eseguire il forward non devono essere già in uso. Per esempio, se
utilizziamo Solaris, molte delle porte della fascia alta sono in uso,
in accordo ai servizi del sistema. Tuttavia iniziando ad utilizzare
la porta 50000, o superiore, il tutto dovrebbe funzionare. Con questo
voglio sottolineare il fatto che dovete controllare le porte che
andrete ad utilizzare per effettuare le connessioni.
Ovviamente, questo dovrebbe funzionare per tutti i sistemi operativi
in grado di utilizzare un client ssh.
Sui metodi di automatizzazione dei processi di configurazione sui
client, potete sbizzarrire la vostra fantasia. Ricordate però che non
potete chiedere ad un utente medio di effettuare tutte queste
operazioni prima di potersi collegare. Lascio questa parte come
esercizio per il lettore...
Questi pochi esempi ci danno un'idea delle possibilità d'uso di ssh. Potete
fare molto di più con molte applicazioni ed ssh. Dipende dalle vostre
necessità. Alla fine di tutto comunque la filosfia che sta alla base del è
l'inoltro dei pacchetti ad un'altra porta.
Tuttavia prestate attenzione quando ricorrete a situazioni più complesse. Per
esempio se inoltrate i dati per mezzo di una terza macchina, i dati che
transiteranno nel mezzo non satanno crittati.
Un'altro aspetto riguarda i client per Windows che ricorrono a Ttssh. L'inoltro
dei dati si basa sull'indirizzo IP, come fanno i comandi remoti, permettendo
quindi attacchi di tipo spoof. Ecco qui che ci si trova nella necessità di
dover ricorrere ad altri strumenti, come, per esempio, tcpwrapper.
Approfondendo lo studio della documentazione su ssh, imparerete molto. La
vostra immaginazione farà poi il resto.
La sicurezza dovrebbe essere un argomento che riguarda tutti, ma spesso non è
così! ssh è solo uno dei tanti strumenti che potete utilizzate ogni giorno. È
un ottimo strumento, specie se si considera il suo uso, ovvero uno strumento
per crittografare e comprimere i dati.
Dal canto suo ssh risulta esser alquanto inutile fintantochè non avrete
risolto i numerosi problemi di sicurezza che avete presenti sulla macchina o
sulla rete. Render sicura una rete o una macchina non è certo cosa semplice,
anzi! Spesso molti strumenti aiutano e sono molto validi, ma di certo non
fanno tutto il possibile o il necessario.
Vi sono alcune operazioni basilari ma essenziali per quello che riguarda la
sicurezza di una rete e di un sistema. Non dimenticate di disabilitare tutti
i servizi che non vi sono indispensabili, di controllare il bit di SUID, di
disabilitare i programmi "a rischio"... C'è moltissimo lavoro da fare e non
sarà mai abbastanza. Potretre installre tutte le correzioni di sicurezza che
volete su di un sistema, ma tutto ciò si dimostrerà perfettamente inutile se
lasciate una o più backdoor disponibili. Ovviamente qui si sta digredendo su
un altro argomento, ma è bene ricordare di non tralasciare le cose più ovvie.
Tornando ad ssh, potremmo dire che si tratta di uno strumento senza cui
sarebbe impossibile vivere, fintanto che lo si utilizza in maniera propria e
per le funzioni per cui è nata. Mi ripeto, ma utilizzatela con passphrases e
chiavi RSA, non con le semplici password. Controllare i permessi dei vari
file contenuti nella cartella .ssh e gli stessi permessi della cartella in
questione. Mi raccomando, utulizzare anche i wrapper!
Vi ricordo che è possibile fare un tunnel via ssh con la maggior parte dei
protocolli esistenti. Ciò può risultare utile al fine di ottenere delle
connessioni più sicure.
Esiste un altro utilizzo assai comune di ssh, di cui non abbiamo parlato:
l'inoltro di una sessione X. Dato che questo avrebbe implicto il fatto di
dover far girare X in più sistemi operativi, lo ho volutamente tralasciato.
Ma vertendo questo articolo sui tunnel di protocollo la cosa ci riguarda.
Specialmente se si considera che X non è un sistema molto sicuro, ssh può
migliorare lo stato delle cose.
Per un uso più sofisticato e complesso ssh non è sufficiente. Come avevo
detto precedentemente date un'occhiata alle VPN o a strumenti come VTun.
Questi probabilmente vi aiuteranno molto.
Come ultima cosa, ma no per questo meno importante, verificate lo stato d'uso
della crittografia nel vostro paese. Sarebbe alquanto seccante finire in
galera solo per avere utilizzato ssh ed essere trattato come un comune
criminale o una spia.
E con questo abbiamo finito!
Stiamo vivendo in tempi grandiosi.