LyX Copertina IPISA

Articoli


Sicurezza su un Home PC

La sicurezza di un PC, seppure predisposto con Linux a connessioni esterne, che viene destinato all'uso domestico, e quindi alle 3/4/5/6... ore di collegamento al giorno, di volta in volta con un IP dinamico non richiede generalmente particolare attenzione all'infuori di una saggia scelta delle password e della chiusura di qualche porta inutile; gli attacchi di crakker di cui leggiamo di tanto in tanto sono infatti spesso preceduti da un lungo studio della macchina che diventerebbe impossibile di fronte ad un IP dinamico.

L'idea di questo articolo nasce quindi non da una esigenza specifica, ma semplicemente dal fatto che essendo io un assiduo frequentatore di IRC (#roma) mi capita spesso di avere a che fare con i famosi nukatori (sarebbe forse più appropriato definirli lamer) ed ho cominciato a sentire l'esigenza di monitorare in tempo reale le connessioni che venivano inoltrate al mio PC.

Parlerò dunque inizialmente di come rimediare ad un bug recentemente scoperto (teardrop) del TCP/IP di Linux e successivamente vi mostrerò come con una semplicissima finestrella di dimensioni esigue sia possibile monitorare le connessioni al nostro pc, ed infine come per sommi capi si possono interpretare i segnali di connessione che riceviamo.

Teardrop e Land, due potenziali killer per Linux e Win95

Sono stati di recente scoperti due bug potentissimi delle implementazioni del TCP/IP di linux (teardrop) e di win95 (teardrop e land) che possono risultare assai poco simpatici specie per chi tramite IRC rende il proprio IP potenzialmente noto a tutti.

Solamente due parole sul land che è specifico più di windows che di Linux (ovvero Linux non è vulnerabile) per dire che qualora questo tipo di attacco fosse fatto ad una macchina win95 ne causerebbe l'immediato crash con unica soluzione il reset.
Purtroppo non mi risulta ci siano ancora patch per windows al momento della scrittura di questo articolo.

Differente è il discorso per il teardrop. Questo tipo di bug è stato fra gli altri riscontrato sia sulle macchine windows che sulle versioni di Linux con kernel precedente al recente 2.0.32.
Gli effetti sono, nel caso di Linux (a seconda del tipo di macchina), o un immediato reset del sistema (ovvero ci troviamo di fronte schermo nero e RAM test in progress..) oppure un blocco, mentre, nel caso di windows, un blocco del sistema simile a quello causato dal land. Per il teardrop tuttavia esistono patch sia per Linux che (miracolo a dirsi) per windows sia con il winsock1 che con il winsock2.
Affronto qui tuttavia esclusivamente il discorso relativo a Linux invitandovi qualora abbiate necessità di patchare anche win95 a contattarmi via email.

Per patchare linux affinché non sia vulnerabile a questo tipo di attacco si possono percorrere 2 strade, ovvero in primo luogo passare al kernel 2.0.32, altrimenti esiste una patch reperibile presso http://www.linux.org per le versioni precedenti del kernel.
Funzionano entrambe le soluzioni, in particolare ho applicato la patch con successo su kernel 2.0.29 e 2.0.31. Sebbene vi siano informazioni dettagliate al riguardo vi ricordo che la patch si applica copiandola in /usr/src/linux/net/ipv4 e da lì facendo 'patch -l < nomepatch' e successivamente spostandosi in /usr/src/linux occorre fare 'make zlilo' o 'make zImage' a seconda dei casi.

Monitorare le connessioni al nostro PC

Supporrò nel seguito che stiate lavorando in ambiente X Window.

Occorre innanzitutto procurarsi un pacchetto distribuito dalla debian e reperibile presso http://www.debian.org/packages.html che si chiama iplogger (io lo ho installato con successo su una Slackware e credo funzioni anche sulla RedHat) e che una volta decompresso mette a disposizione sia i sorgenti che i file precompilati.
I file in questione, che supporriò copiati in /usr/local/sbin , sono tcplog e icmplog.
Una volta installati i pacchetti dobbiamo fare in modo che vengano avviati e che i loro risultati siano leggibili; per far ciò andiamo ad editare lo script di avvio /etc/rc.d/rc.local come segue :

# echo ``/usr/sbin/icmplog&'' >> /etc/rc.d/rc.local
# echo ``/usr/sbin/tcplog &'' >> /etc/rc.d/rc.local

I messaggi prodotti da questi due logger vanno inseriti in /var/log/messages, ed è proprio dall'aggiornamento di questo file in tempo reale che monitoreremo le connessioni al nostro PC.

Basterà mettere in esecuzione, o tramite un menù, o lanciandola manualmente, la seguente riga di comando per avere una finestrella che si aggiorna in tempo reale :

# color_xterm -geometry 80x10 -j -ls -sl 200 -bg black -fg red -T "The LoggeR" -e tail -f /var/log/messages

ovviamente tutte le flag sono suscettibili di variazione a seconda delle esigenze personali, l'unica accortezza da usare riguarda il file /var/log/messages.

Questo file viene installato di default come leggibile solo da root, e se si intende usare il logger da utente normale occorre eseguire preventivamente un chmod +r per farlo leggere a tutti gli utenti; naturalmente ciò non comporta rischio alcuno per l'HomePc che è l'argometo di questo articolo.

Adesso siamo pronti finalmente a monitorare le connessioni al nostro PC, vediamo dunque di interpretarle.

Interpretare i dati del nostro logger

Il formato di output dei dati sul file /var/log/messages risulta estremamente semplice da interpretare; ogniqualvolta verrà tentata una connessione ad una porta del nostro PC, tramite il tail -f verrà aggiornato anche il file messages che stiamo guardando con una informazione che riguarderà la porta a cui ci si tenta di collegare e l'host dal quale proviene la connessione. Vediamo innanzitutto una connessione telnet : (la mia macchina si chiama gabanaz1)

Nov 27 15:16:55 gabanaz1 tcplog: telnet connection attempt from pinco.pallino.com

questo significa che l'host pinco.pallino.com sta tentando una connessione alla porta telnet del nostro PC... vediamo un ftp:

Nov 27 15:20:01 gabanaz1 tcplog: ftp connection attempt from pinco.pallino.com

anche qui l'interpretazione non presenta difficoltà, così come non ne presentano gli altri servizi standard quali pop3 e simili; vediamo un ping:

Nov 27 15:22:01 gabanaz1 icmplog: ping from pico.pallino.com

Occorre naturalmente prestare attenzione alle connessioni che vanno al di fuori dello standard, così si avranno ad esempio quando si avvia un ftp una cosa di questo genere perché il sito ftp si sincera preventivamente di chi siamo tramite il nostro identd:

Nov 27 15:20:01 gabanaz1 tcplog: auth connection attempt from ftp.pallino.com

e spesso riscontreremo l'auth connection quando ci colleghiamo ad un server IRC; per quanto riguarda irc bisogna stare attenti a non maleinterpretare i messaggi che possono arrivarci relativamente a porte non destinate ad un particolare servizio, poiché quando ad esempio si effettua una dcc si utilizza una porta che non è standard e quindi a quello sono dovuti gli strani messaggi del tipo:

Nov 27 15:03:47 gabanaz1 tcplog: port 1025 connection attempt from pinco.pallino.com

Sempre in ambito irc tramite questo logger siamo in grado di individuare gli ip dei famosi nukatori che utilizzano l'altrettanto famoso OOB alla porta 139 convinti, poverelli, che noi come loro abbiamo bisogno delle finestrelle di windows, e non sapendo che a Linux questo tipo di errore non fa assolutamente nulla; in un caso di questo genere avremmo un output di questo genere :

Nov 27 15:30:27 gabanaz1 tcplog: netbios-ssn connection attempt from sono.sciocchino.it

dopodiché non ci rimane che fare in irc un /who *sono.sciocchino.com* per sapere chi è lo spiritosone di turno.

Un'ultima nota per ricordarvi che ogniqualvolta aprite un'applicazione o un terminale virtuale vi loggate al vostro sistema e quindi avrete una 'connection attempt from localhost'.

Nota per chi non utilizza X Window

Qualora non utilizziate X Window è comunque possibile monitorare i log al vostro sistema reindirizzando il tail -f ad un terminale virtuale, per es. /dev/tty8 cosicché switchando con ALT+F8 potete comunque vedere il file /var/log/messages; per far ciò occorre fare :

# echo "tail -f /var/log/messages >> /dev/tty8 &" >> /etc/rc.d/rc.local

Qualche consiglio aggiuntivo

I consigli si ispirano semplicemente al buon senso, così potrebbe essere utile chiudere dal file /etc/inetd.conf tutte le porte che non ci servono come echo, time, finger, discard, chargen, klogin, kshell, netstat... in sostanza io sul mio ho aperte esclusivamente ftp, telnet, mail(25 e 110) e null'altro, e vi consiglio di fare altrettanto; dopodiché ogniqualvolta ricevete un tentativo di connessione inatteso, cercate di capire cos'è e soprattutto per quelli telnet non da voi richiesti guardate il numero di processo e killateli immediatamente. E poi ovviamente tenetevi informati sui bug di Linux che sempre tempestivamente vengono coperti da sapienti programmatori.

di Paolo Dell'Unto


LyX Copertina IPISA