Firewall Piercing mini-HOWTO
Fran�ois-Ren� Rideau,
[email protected]
v0.3b, 27 novembre 1998
Direttive per l'utilizzo del protocollo ppp usando telnet per operare
in modo trasparente attraverso un firewall Internet. Traduzione a
cura di Stefano di Sandro <
[email protected]>, ultima revisione 24
Gennaio 2000.
1. Varie
1.1. LIBERATORIA
LEGGI QUESTA SEZIONE: � IMPORTANTE !!!
Qui di seguito declino tutte le responsabilit� per queste
informazioni. Qualunque sia il modo in cui il loro utilizzo possa
ritorcersi contro di voi, non � colpa mia. Se non siete in grado di
comprendere i rischi cui vi accingete a sottoporvi facendo ci� che qui
� scritto, non fatelo. Se userete queste informazioni e ci�
permetter� a balordi teppisti di penetrare le difese dei computer
della vostra azienda compromettendo voi, il vostro impiego e i
miliardi della vostra azienda, beh sono problemi vostri. Non venite a
piangere da me.
1.2. Copyright
Copyright � 1998 by Fran�ois-Ren� Rideau.
This document is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
Questo documento � da considerarsi software libero; ne � possibile la
redistribuzione e/o la modifica nei termini della GNU General Public
License cos� come pubblicata dalla Free Software Foundation, sia nella
versione 2 che (a vostra scelta) in una qualunque versione successiva.
1.3. Ringraziamenti
Sebbene abbia riscritto quasi tutto tranne la liberatoria, sono in
debito con Barak Pearlmutter <mailto:
[email protected]> per il suo Term-
Firewall mini-HOWTO: penso che vi fosse la necessit� di un mini-HOWTO
sul "firewall piercing", e nonostante qualche difetto, il suo mini-
HOWTO si � rivelato un modello e un incoraggiamento.
2. Introduzione
2.1. Premessa
Dal momento che amministratori di sistema e semplici utenti hanno
diversi diritti e doveri, pu� accadere che un utente si trovi protetto
dietro un firewall, che � in grado di attraversare, ma in maniera
complicata. Questo mini-HOWTO spiega un metodo generale e versatile
per utilizzare gli strumenti di Internet, senza che apparentemente si
debba attraversare alcun firewall, facendo uso di un emulatore IP
all'interno di una sessione telnet.
Tutto � liberamente inspirato al Term-Firewall mini_HOWTO di Barak
Pearlmutter <mailto:
[email protected]>, che si affidava sia all'antico e
abbandonato Term (a suo tempo un grande programma), che ai dettagli di
una implementazione di telnet non proprio standard, fatta di codice
obsoleto e non portabile.
2.2. Problemi di sicurezza
Se l'amministratore del vostro sistema ha predisposto un firewall, �
naturale che possa aver avuto le sue buone ragioni, cos� come �
probabile che voi abbiate sottoscritto l'accordo di non aggirarlo.
D'altro canto, l'eventuale possibilit� di utilizzare telnet verso
l'esterno (che � un requisito affinch� quanto ci accingiamo a spiegare
funzioni) significa che vi � stato concesso di connettervi con sistemi
remoti e, se potete effettuare il login su alcuni di questi sistemi,
significa che qualcuno ve l'ha a sua volta permesso.
Quindi l'utilizzo dei varchi "legali" in un firewall diventa
estremamente conveniente per permettere a qualunque programma remoto
di comunicare con la nostra macchina utilizzando i normali protocolli.
Nel caso opposto avremmo bisogno di programmi speciali o modificati (e
ricompilati) facenti uso di proxy dai compiti particolari, le cui
configurazioni possono essere opera di amministratori sprovveduti o
incompetenti. Oppure potremmo dover installare un certo numero di
convertitori per poter accedere a ciascuno dei normali servizi (come
la posta elettronica) attraverso le strade consentite dal firewall
(come il web).
Inoltre l'uso di un emulatore IP che operi a livello utente come
SLiRP, pu� essere anche utile per prevenire attacchi dall'esterno in
grado di perforare il firewall nuovamente in senso inverso, a meno che
non siate voi a permetterlo esplicitamente (oppure che l'attacco sia
condotto in modo abile e astuto o che l'intruso abbia acquisito i
privilegi di root o, infine, che sia in grado di spiarvi sull'host
remoto).
Sia come sia, il metodo qui presente dovrebbe essere relativamente
sicuro. Tutto dipende dalle particolari circostanze nelle quali vi
troverete quando lo metterete all'opera e io non posso darvi alcuna
garanzia. Molti sono gli aspetti intrinsecamente insicuri in una
qualunque connessione internet e non dipendono esclusivamente dall'uso
di questo metodo; non assumete a priori di essere al sicuro a meno che
non ne abbiate delle valide ragioni e cercate di criptare sempre
l'informazione.
Per concludere: non usate questo metodologia se non sapete cosa state
facendo. � meglio che rileggiate la liberatoria.
2.3. Altri requisiti
Si d� per scontato che sappiate cosa state facendo; che sappiate
impostare una connessione di rete; che possediate un account di shell
su entrambi i lati del firewall; che possiate usare telnet (o ssh, o
equivalenti) da un account all'altro; che possiate far girare un
emulatore IP su entrambi i lati della connessione; che possediate
programmi in grado di lavorare su un'emulazione IP. Si noti come
qualunque programma possa usare la connnessione, in questo caso � il
pppd l'emulatore locale che colloquia con il kernel di Linux; altri
emulatori, come Term, necessitano di essere ricompilati e collegati a
speciali librerie.
Parlando di emulatori IP, il demone pppd si trova in qualunque buona
distribuzione di Linux o sito ftp; e lo stesso vale per SLiRP. Se
l'account sulla shell remota vi consente di eseguire programmi
soltanto a livello utente, SliRP � la soluzione da adottare per la
connessione.
2.4. Scaricare il software
La maggior parte del software descritto sar� disponibile nella vostra
distribuzione o enventualmente tra i contrib; tranne gli ultimi due
tutti si possono trovare come pacchetti rpm. Nel caso vogliate
recuperare l'ultima versione dei sorgenti o degli eseguibili (dopo
tutto non � detto che su entrambi i lati della connessione si trovi un
sistema Linux) utilizzate gli indirizzi elencati di seguito:
� SLiRP si trova a <
http://blitzen.canberra.edu.au/slirp> oppure
<
ftp://www.ibc.wustl.edu/pub/slirp_bin/>.
� zsh la trovate presso <
http://www.peak.org/zsh/>.
� ppp � scaricabile da <
ftp://cs.anu.edu.au/pub/software/ppp/>.
� fwprc e cotty sono invece a
<
http://www.tunes.org/~fare/files/fwprc/>.
3. Capire il problema
Capire un problema � la prima met� del percorso che porta alla sua
soluzione.
3.1. Dare un nome alle cose
Se volete che questo medoto funzioni, � obbligatorio che abbiate
un'idea di come funziona, cos�, nell'eventualit� che qualcosa vada
storto, saprete dove andare a mettere le mani.
D'ora in avanti avranno aggettivo "locale" sia la macchina che inizia
la connessione, sia i programmi e i file che si trovano in essa;
dunque, tutto quello che si trova dall'altra parte sar� "remoto".
3.2. Il problema
Il nostro fine � collegare l'ingresso e l'uscita di un emulatore IP
locale rispettivamente all'uscita e all'ingresso di un emulatore IP
remoto. I canali di comunicazione con i quali gli emulatori
interagiscono sono device diretti (come nel caso usuale del pppd) o il
"tty corrente". Questo ovviamente non si verifica con una sessione
telnet. In quest'ultimo caso la situazione � complicata perch�,
quando lanciate l'emulatore locale da riga comando, il "tty corrente"
� collegato all'utente non a una sessione remota. Inoltre quando
apriamo una nuova sessione, sia essa locale o remota, su un nuovo
terminale, dobbiamo sincronizzare l'avvio e la connessione di entrambi
gli emulatori IP altrimenti la spazzatura prodotta in uscita da una
delle due sessioni rappresenter� un comando per l'altra sessione con
il risultato di produrre altra spazzatura.
3.3. Difficolt� aggiuntive
Per ottenenere la massima facilit� d'uso, l'emulatore IP locale deve
fornire un IP al kernel per le operazioni di rete, per tale ragione si
usa il pppd. Comunque, il pppd � limitato abbastanza da accettare
dati attraverso una sola voce all'interno della directory /dev o
attraverso il terminale corrente (tty); una coppia di pipe sarebbe
stata molto pi� naturale. Tutto funziona correttamente per quanto
riguarda il pppd remoto, visto che quest'ultimo pu� usare il tty della
sessione telnet; ma per il pppd locale � un problema perch� non � in
grado di lanciare la sessione telnet per effettuare la connessione e
quindi dovremo provvedere ad aggiungergli attorno uno strato di
software.
Telnet si comporta quasi corretamente con una coppia di pipe, solo che
si ostiner� sempre a effettuare il controllo di I/O (ioctl) sul tty
corrente, con il quale interagisce; usare telnet senza un tty � causa
inoltre di corse critiche che faranno fallire la connessione su
macchine "lente" (fwrpc 0.1 funziona perfettamente su un P/MMX 233,
una volta su sei su un 6x86-P200+ e mai su un 486DX2/66).
[Nota: se trovo quel bischero (probabilmente qualcuno del MULTICS,
sebbene debba esserci stata gente UNIX stupida abbastanza da copiare
l'idea) che ha inventato il principio dei dispositivi "tty" in base al
quale si legge e si scrive dallo "stesso" pseudo-file, invece di poter
disporre di una pulita coppia di pipe, lo strangolo!]
4. La soluzione
4.1. Il principio
Il programma per il firewall-piercing, fwprc, far� uso di un "proxy
tty", cotty, che apre due dispositivi pseudo-tty, invoca alcuni
comandi su ciascuno di questi slave e, senza pi� smettere, copia ogni
carattere che viene battuto, nel tty che serve da ingresso per l'altro
comando. Un comando sar� la connessione telnet al sito remoto e
l'altro sar� il locale demone pppd. Il pppd pu� quindi aprire e
controllare la sessione telnet con il pi� classico degli script di
chat.
4.2. fwprc
Ho realizzato un script auto-documentato per "forare" i firewall,
fwprc, disponibile al mio sito
<
http://www.tunes.org/~fare/files/fwprc/>, insieme a cotty (che �
necessario nelle versioni fwprc 0.2 e successive). Al momento di
scrivere queste parole, le versioni pi� recenti sono fwprc 0.3a e
cotty 0.3a.
Il nome "fwprc" � volutamente illeggibile e impronunciabile, al fine
di confondere il paranoico amministratore di sistema che probabilmente
� la causa del firewall che vi rompe le scatole (naturalmente, possono
esistere anche firewall opportuni, e talvolta indispensabili; la
sicurezza � tutta una questione di corretta configurazione). Se
dovete pronunciare questa parola ad alta voce, fate in modo di dirla
nel peggior modo possibile.
SFIDA! SFIDA! Mandatemi un file audio in formato .au con la
registrazione digitale della vostra pronuncia di "fwprc". La peggiore
vincer� un aggiornamento gratuito e il suo nome nella pagina della
versione 1.0 di fwprc.
Ho verificato il programma con svariate impostazioni configurandolo
attraverso dei file di risorse. Ma naturalmente, per la legge di
Murphy, a voi non funzioner�. Ritenetevi liberi di contribuire ai
miglioramenti che potranno rendere la vita pi� facile alle persone che
faranno le cose dopo di voi.
4.3. .fwprcrc
fwprc pu� essere personalizato attraverso il file .fwprcrc che deve
essere disponibile su entrambi i lati della connessione. � anche
possibile predisporre configurazioni diverse da usare alternativamente
(per esempio, io lo faccio), ed � lasciato come esercizio al lettore.
Per cominciare, copiate la sezione appropriata di fwprc (la penultima)
nel file .fwprcrc all'interno della vostra home directory. Poi
rimpiazzate i valori delle variabili con quelli adatti alla vostra
configurazione. Infine copiate il tutto anche sull'altro host e
provate.
Il metodo di base prevede di usare il pppd localmente e slirp sulla
macchina remota. Per modificarlo potreste ridefinire la appropriata
funzione all'interno del vostro .fwprcrc con una linea del tipo:
remote_IP_emu () { remote_pppd }
Ricordate che SLiRP � pi� sicuro di pppd, ed � pi� facile accedervi,
dal momento che non richiede privilegi di root sull'host remoto.
Un'altra caratteristica di sicurezza consiste nel fatto che scarter�
tutti i pacchetti che non provengono direttamente dalla macchina a
esso connessa (tale caratteristica diventa un difetto se tentate di
sfruttare questo metodo per realizzare il routing di una sottorete
usando il mascheramento dell'IP). Le funzionalit� di base di SLiRP
sono piuttosto affidabili anche se l'ho trovato privo delle aggiunte
promesse (quali la controllabilit� a tempo di esecuzione), ma, dal
momento che � un software libero, siete anche voi liberi di mettere le
mani nel codice sorgente in modo da implementare tutte le funzionalit�
di cui possiate avere bisogno.
5. Piercing al contrario
5.1. Giustificazioni
Talvolta, solo da un lato del firewall � possibile lanciare una
sessione telnet; ci� nonostante alcune forme di comunicazione restano
possibili (tipicamante usando la posta elettronica). Forare il
firewall � ancora possibile, escogitando un qualunque modo di
innescare una connessione telnet dalla parte "giusta" del firewall
verso l'altra.
fwprc include il codice per scatenare tali connessioni a partire da un
messaggio di posta elettronica autenticato con PGP; tutto ci� di cui
abbisognate � aggiungere fwprc come filtro per procmail(1) ai messaggi
che fanno uso di tale protocollo, (le istruzioni sono incluse in
fwprc). Notate comunque che per lanciare pppd con i privilegi
appropriati dovrete creare da soli un "suid wrapper" per diventare
root. Istruzioni incluse in fwprc.
La sola autenticazione di questa sorta di "scintilla" non significa
aver predisposto una connessione sicura. Diventa davvero opportuno,
in questo caso, fare uso di una Secure Shell (anche sopra telnet) per
rendere sicuro il collegamento. E infine osservate attentamente ci�
che accade tra l'innesco della connessione telnet e la ssh che ha
luogo su tale connessione. Qualunque contributo in questa direzione �
ben accetto.
5.2. Ricevere il messaggio di innesco
Se un firewall vi circonda, il vostro messaggio potrebbe trovarsi in
un server centrale che non consente il fitraggio con procmail o alcuna
connessione telnet. Niente paura! Potete usare fetchmail(1) da
eseguire in modalit� "demone" per recuperare e trasferire la posta al
vostro sistema linux che opera da clien, e/o aggiungere un job al
servizio cron per automatizzare il recupero della posta ogni 1-5
minuti. Fetchmail inoltrer� la posta verso l'indirizzo locale usando
sendmail(8) che, a sua volta, deve essere configurato per usare
procmail(1) per il recapito. Se eseguite fetchmail(1) in background
come demone, questi impedir� qualunque altra esecuzione di fetchmail:
come nel caso dell'apertura di un fwprc. Naturalmente potreste far
girare fetchmail come falso utente. Recuperi troppo frequenti possono
non essere opportuni nei confronti del server, cos� come recuperi
troppo sporadici possono obbligare a pesanti attese affinch� il
messaggio venga letto e la connessione inversa stabilita. Io uso una
frequenza di recupero di due minuti.
6. Note Finali
6.1. Altre impostazioni
Ci sono altri tipi di firewall, come quelli che non consentono le
connessioni telnet. Dal momento che un continuo flusso di pacchetti
attraversa un firewall e trasporta informazioni fuori e dentro di
esso, � sempre possibile perforarlo; al solo prezzo di "usare il
punteruolo pi� in alto o pi� in basso".
In un caso estremamente semplice, potreste semplicemente lanciare ssh
su un pty, e lavorare con il pppd nel tty slave. cotty 0.3a dovrebbe
essere in grado di farlo, ma ancora nessuno ha modificato fwprc per
effettuare il login. Potrebbe essere un buon esercizio per stanotte.
Potreste voler applicare quanto visto con un firewall ostile, solo per
costrure una ``VPN'' sicura (Virtual Private Network). Leggete VPN
mini-HOWTO a proposito di questo.
Se dovete passare attraverso una linea a 7-bit, probabilmente userete
SLIP al posto di PPP. Io non ho mai provato: le linee sono quasi tutte
8 bit al giorno d'oggi, ma non dovrebbe essere complicato.
Ora, se l'unica strada attraverso il firewall � un proxy WWW (di
solito � il minimo per una rete connessa a internet) potreste scrivere
un demone che registra il traffico di dati in ingresso e in uscita, e
farlo girare durante le connessione HTTP, ottenendo una sorta di
telnet-su-HTTP con il quale eseguire fwrpc. Potrebbe rivelarsi una
soluzione lenta e non molto efficace ma sufficiente da permettervi di
usare fetchmail(1), suck(1) e altri programmi non interattivi.
Se volete prestazioni maggiori o se le uniche cose che passano
inalterate attraverso il firewall sono cosucce di basso livello
(richieste DNS, pacchetti ICMP, ecc.) allora il gioco si fa duro dal
momento che dovrete mettere le mani sul primitivo stack IP usando (per
esempio) i Fox project's packet-protocol functors. Otterrete una
forma diretta di IP-su-HTTP, IP-su-DNS, IP-su-ICMP, o affini. Questi
ultimi non richiedono soltanto un complesso protocollo, ma anche
un'interfaccia al nucleo del sistema operativo ed entrambi sono
costosi da implementare.
Ancora una cosa, se usate un demone HTTP per il Firewall-piercing, non
dimenticate di fare in modo che serva pagine fasulle, in questo modo
ingannerete i sospettosi amministratori dei firewall "avversari".
6.2. Manutenzione dell'HOWTO
Ho sentito il bisogno di scriverlo, ma non ho tutto il tempo da
dedicargli, ecco perch� questo HOWTO � cos� scarno. E cos� rester�, a
meno che non riceva abbastanza commenti che mi permettano di
individuare le sezioni che devono essere migliorate. I commenti sono
benvenuti. L'aiuto � benvenuto. Il mantenimento del mini-HOWTO �
benvenuto.
A ogni modo, le sezioni che avete letto hanno messo in evidenza
diversi problemi le soluzioni dei quali richiedono solo che qualcuno
(voi?) vi dedichi un po' di tempo (oppure denaro, pagando altri che lo
facciano in sua vece), sedendosi e scrivendole: nulla di davvero
complicato, sebbene i dettagli possano apparire pesanti e difficili.
Non esitate a contribuire con altri problemi e possibilmente con
altrettante soluzioni, a questo mini-HOWTO.
6.3. Copia extra della IMPORTANTE LIBERATORIA --- CREDETEMI!!!
Di seguito declino ogni responsabilit� per questa metodolo�
gia. Il fatto che possa ritorcersi contro di voi in un
qualunque modo � un problema che non mi riguarda. Se non
riuscite a comprendere i rischi inerenti il suo utilizzo,
non utilizzatelo. Se, usando questa metodologia, permet�
terete a balordi vandali di penetrare nei computer della
vostra azienda compromettendo voi, il vostro lavoro e i mil�
iardi della stessa, non venite a piangere da me.