Ciao ragazzi oggi voglio affrontare un discorso che purtroppo affligge il nostro caro amico pinguino. La sicurezza. Linux nel corso degli anni è diventato sempre + una cipollarende l'idea cioè uno serie di strati e di programmi che ormai dopo 10 anni ruotano attorno a questo magnifico kernel. Il problema purtroppo è che le origini di linux si portano dietro le problematiche du un*x che per 20 anni gli adm di mezzo mondo hanno dovuto combattere. Uno dei principali ha come termine tecnico "buffer overflow" l'altro fondamentale i permessi che un utente in questo caso il famigerato # superuser root possiede.
Queste due cose apparentemente innocue sono invece devastanti.
Analizziamo la prima buffer overflow. Uno si chiede ma che vordì?ehe no tranquilli non vi ho detto una parolaccia ma vuol dire in poche parole far eseguire dei comandi ad un determinato punto di stack della memoria di un programma. Bene e qui direte voi e allora? Eh cari ragazzi purtroppo questo vuole dire che parliamo localmente adesso in teoria io se fossi davanti al vostro pc avrei la possibilità di avere una shell root non conoscendo la password semplicemente facendo eseguire da un programma che ha questi famigerati permessi suid root una serie di comandi in un determinato punto in cui il programma va in segmentation fault. Sto andando troppo sul tecnico tento di ritornare su binari + comprensibili
Passiamo al secondo problema fondamentale i permessi dello user root. Qua il problema è grosso e meriterebbe un thread solo x lui ma andando terra terra il discorso è come io posso usare questo utente x modificare tutto lo può usare un eventuale intruso e qui sarebbero dolori visto che può fare tutto. Può cancellare i logs. Può nascondere directory. Può lanciare moduli che nascondono le connessioni. Root è molto pericoloso ragazzi molto.
Ora io sono solito dividere in tre fascie di utilizzo le persone. La prima l'utente con modem 56k che ogni tanto si collega ad internet. La seconda l'utente che ha una connessione on line 24 su 24. La terza Le reti o LAN connesse 24 ore su 24. Ogni fascia ovviamente necessita di accorgimenti diversi.
Partiamo dalla prima utente che si connette ogni tanto.
Le sue priorità quando installa una distribuzione linux sono le seguenti:
a seconda di dove ha reperito la distribuzione ha diversi compiti da eeguire. Mi spiego se io compro una rivista state sicuri che le distribuzioni che trovate saranno si le ultime ma spesso non aggiornate cmq alla data in cui la comprate. Si tratta sempre dei pacchetti iniziali che escono al cambio di versione di ogni distribuzione. Quindi se avete reperito questo linux la prima cosa da fare è connettersi al sito della propria distribuzione e controllare dai link della homepage le pagine errata o security in cui vengono aggiornati e linkati in modo facile da reperire i pacchetti patchati.
Diverso è invece se il reperimento avviene attraverso scaricamento dal sito della distribuzione perchè lì avremo già una cartella current da cui scaricare i pacchetti che saranno gli ultimi e quindi aggiornati.
Una volta patchati i pacchetti bisogna chiedersi cosa ci voglio fare col mio linux? Io credo che la maggior parte di voi non gli e ne importa un bel fico secco di far girare un web server un ftp server oppure men che meno un server di posta piuttosto che un server di news. Solo che almeno io parlo fino a pochi mesi fa quando tu installavi una distribuzione linux veniva utilizzato un kernel precompilato con tutto il possibile immaginabile anche nelle scelte workstation gnome o kde invece che server.
Questo porta ad avere una serie di demoni che girano in backgrounds di cui magari non si ha nemmeno la consapevolezza. Quindo il secondo passo è proprio quello di mettere le mani sui programmi che devono essere lanciati al boot. Qui io trovo la slackware di derivazione BSD di una semplicità sconvolgente. Basta commentare tutto il file inetd.conf nella cartella /etc ed andare a commentare in /rc.d sempre in /etc i demoni che non devono partire che non sono inseriti in inetd.conf. Un esempio classico è sendmail (server di posta) oppure ssh (secure shell).
Già x un utente di questo tipo abbiamo risolto almeno i problemi dei pacchetti aggiornati e dei demoni che devono partire.
Passiamo all'utente on line 24/24. X questo utente valgono le stesse regole fino a qui espresse ma qui possiamo avere invece la necessità di far girare qualche demone. Non so un server ftp ad esempio. Ecco che allora il commento al demone non vale + xchè in questo caso lo dobbiamo far girare. Qui la regola è informarsi sulle versioni dei demoni attualmente in distribuzione. Recarsi in questo sito http://www.packetstorm.securify.com e cercare se il demone posseduto ha qualche exploit del genere remote root. Se si dovessero trovare eseguire quello che viene detto x la patch oppure scegliere un demone alternativo con assenza di remote root exploit. X ftp mi viene in mente proftpd al posto del buggoso wu-ftpd. Quindi la necessità x questi utenti è quello di far girare demoni con assenza di buchi conosciuti e stare sempre all'erta x eventuali patch di aggiornamento. Questo utente può anche avere la necessità di eseguire altri comandi come quello di far passare attraverso il demone tcpd wrapper tutte le connessioni in entrata sui propri demoni. Ecco che allora si andranno a mettere un ALL: ALL in /etc/host.deny e Ip autorizzati in /etc/host.allow. Questo perlmeno è già un primo filtro non efficace al 100% certo ma è un primo filtro. Con questo abbiamo selezionato gli ip che i nostri demoni sono autorizzati a far passare. Un altro filtro a questo punto è rappresentato da un firewall software che in linux è nativo insieme al kernel. Fino al kernel 2.2 la sua interfaccia è un prg che si chiama ipchains dal kernel 2.4 cambia interfaccia e passiamo al prg iptables. Questi due programmi servono principalmente a monitorare droppare a far passare un pacchetto Ip che sia tcp udp o icmp sulla nostra macchina. Utile x loggare le connessioni indesiderate utile a tenere lontane connessioni indesiderate. Questo tipo di firewall soffre solo di un problema il flooding. Questa brutta parola significa inondare di pacchetti la nostra macchina di pacchetti quasi sempre icmp x far scendere la banda disponibile fino alla sconnessione. In questo caso un firewall non serve a nulla ma fortunatamente non succede spesso.
Andando avanti arriviamo al punto cruciale quello di mettere le briglie a questo root e degradarlo a utente semplice. Come si fa vi chiderete. Un cinese di cui adesso non ricordo il nome ha inventato una patch bellissima. Si chiama lids linux intrusion detect system. Cosa fa questo lids una volta applicata la patch al kernel andiamo in ricompilazione e ci accorgiamo di avere un settaggio in + lids appunto. Nativamente a questo punto andremo a confinare l'utente root a determinate possibilità di comandi e non + tutto. Mi spiego se io voglio cancellare i log basta che sia root e lo faccio. Con lids neanche root può cancellare i logs ma solo in un terminale senza lids (free lids) da cui poter eseguire i soliti comandi di root. Senza andare sul tecnico x informazioni cercate sempre su packetstorm lids.
L'utente LAN non lo affronto adesso xchè mi sono dilungato troppo. Ma lì avremo anche altre problematiche.
Scusate la mia lungaggine di thread e mi scuso se ho annoiato le persone che conoscono già queste cose.
Ciao
[Modificato da kiko il 22-06-2001 alle 21:27]