# Exploit (segurança de computadores)

Um exploit (em português explorar, significando "usar algo para sua própria vantagem") é um software ou código malicioso que explora uma falha ou vulnerabilidade relacionada ao software ou hardware de um computador, um exploit também pode afetar outros eletrônicos como roteadores, celulares e etc. (normalmente é utilizado para afetar eletrônicos "computadorizados"). A execução bem sucedida de um exploit costuma resultar no ganho de acesso ao sistema alvo, na escalação de privilégio ou em negação de serviço. Tal resultado depende do propósito para o qual o código foi desenvolvido.
Exploits podem ter muitos outros propósitos além dos exemplos citados acima. Eles geralmente são elaborados por hackers para demonstrar a existência e o impacto de uma vulnerabilidade, a fim reportar a vulnerabilidade ao proprietário para que essa falha seja corrigida. Exploits também podem ser desenvolvidos por crackers (cyber criminosos), a fim de ganhar acesso não autorizado a sistemas ou causar prejuízos.
Até meados dos anos 1990, acreditava-se que os exploits exploravam exclusivamente problemas em aplicações e serviços para plataformas Unix $^[$. A partir do final da década, especialistas demonstraram a capacidade de explorar vulnerabilidades em plataformas de uso massivo, por exemplo, sistemas operacionais Win32 (Windows 9x, NT, 2000 e XP). Como exemplo tem-se o CodeRed, o MyDoom, o Sasser em 2004 e o Zotob em 2005.

## Classificação

Há vários métodos de se classificar um exploit. O mais comum é através de como o exploit se comunica com o sistema vulnerável.
Um exploit remoto funciona sobre uma rede e explora a vulnerabilidade de segurança sem qualquer acesso prévio ao sistema vulnerável.
Um exploit local requer acesso prévio ao sistema vulnerável e normalmente aumenta os privilégios da pessoa que executa o exploit além daqueles concedidos pelo administrador do sistema.
Também existem exploits contra aplicações que funcionam como (cliente) e requerem conexão com um servidor, normalmente consistindo de servidores modificados que ao serem acessados enviam um exploit para a aplicação (cliente). Uma forma comum de exploit contra aplicativos cliente são exploits para navegadores.
Exploits contra aplicações do cliente também podem requerer alguma interação com o usuário e assim pode ser usado em combinação com o outras formas de ataque, como a engenharia social.
Outra classificação é pela ação contra o sistema vulnerável. Acesso não autorizado a dados, execução de código arbitrário e negação de serviço são exemplos. Muitos exploits são projetados para fornecer acesso de nível de super-usuário para um sistema de computador. Entretanto, também é possível usar vários, primeiro para ganhar acesso de baixo nível, depois para escalar privilégios repetidamente até alcançar o nível de root. Normalmente um único exploit pode apenas tomar vantagem de uma vulnerabilidade de software específica. Geralmente, quando um exploit é publicado, a vulnerabilidade é corrigida através de um patch (remendo) e o exploit torna-se obsoleto até novas versões do software tornarem-se disponíveis. Esta é a razão do por quê alguns hackers chapéu preto não publicam seus exploits, optando por mantê-los privados para si mesmos ou para outros hackers. Tais exploits são classificados como exploits do 0day e obter acesso a tais exploits é o desejo primário de atacadores não qualificados, geralmente script kiddies com apelidos.

### Tipos

Exploits são comumente classificados usando os seguintes critérios:
* O tipo de vulnerabilidade que exploram (veja vulnerabilidades para uma lista)
* Se precisam ser executados na mesma máquina que o programa que tem a vulnerabilidade (local) ou pode ser executado em uma máquina para atacar um programa em execução em outra máquina (remoto).
* O resultado da execução do exploit (EoP, DoS, spoofing, etc)

### Pivotante

Pivotante (do inglês pivoting) refere-se a um método usado por testadores de penetração que utilizam o sistema comprometido para atacar outros sistemas na mesma rede para evitar restrições, como configurações de firewall, que poderiam proibir acesso direto a todas as máquinas. Por exemplo, se um atacante compromete um servidor web em uma rede corporativa, o atacante pode então usar o servidor web comprometido para atacar outros sistemas na rede. Esses tipos de ataques frequentemente são chamados de ataques multi-camadas. Pivotante também é conhecido como salto de ilha (island hopping).
Pivotantes podem ainda ser distinguidos em pivotante de proxy e pivotante de VPN:
* Pivotante de proxy geralmente descreve a prática de canalizar tráfego através de um alvo comprometido usando uma carga de proxy na máquina e executando ataques do computador. Este tipo de pivotante é restrito a certas portas TCP e UDP que são suportadas pelo proxy.
* Pivotante VPN permite ao atacante criar um túnel criptografado de camada 2 na máquina comprometida para rotear qualquer tráfego de rede através daquela máquina alvo, por exemplo, para executar uma varredura de vulnerabilidade na rede interna através de uma máquina comprometida, dando efetivamente ao atacante acesso completo a rede como se eles estivessem atrás do firewall.
Normalmente, as aplicações de proxy ou VPN permitem pivotante de serem executados no computador alvo como o payload de um exploit.