Pular para o conteúdo
12 min de leitura

O que é um pentest: por que testar sua aplicação como um atacante faria

Compartilhar

Por Lucas Andrade ·

Pentest é uma avaliação autorizada que simula um atacante para achar e provar vulnerabilidades exploráveis. Entenda o processo, as fases e por que fazer.

Neste artigo

Existe uma distância enorme entre uma aplicação que "passou nos testes" e uma aplicação que "resistiu a alguém tentando quebrá-la de propósito". A suíte de testes que você escreve mede se o software faz o que você esperava que ele fizesse: dado um input previsto, um output previsto. Ela é otimista por construção, porque quem a escreveu foi a mesma pessoa que imaginou os caminhos felizes. Um atacante não tem esse compromisso. Ele não segue o fluxo que você desenhou na tela do Figma; ele manda um site_id que não é dele no corpo de um POST, troca um id numérico na URL para ver o pedido do vizinho, injeta um caractere de aspas onde você esperava um nome, e observa o que a aplicação faz quando é maltratada. "Passar nos testes" prova ausência dos bugs que você previu. "Resistir a um atacante" é outra afirmação, muito mais forte, e é exatamente isso que um teste de intrusão — o pentest — se propõe a verificar. Este texto é sobre o conceito e o processo, escrito para quem desenvolve, não sobre uma ferramenta específica nem sobre "proteger seu site" no sentido genérico do marketing.

O que é, de fato, um pentest

Um teste de intrusão é uma avaliação de segurança autorizada na qual profissionais simulam o comportamento de um adversário real para encontrar e, principalmente, provar vulnerabilidades exploráveis num sistema. A palavra que carrega o peso aqui é "provar". Um relatório que diz "essa rota parece vulnerável a IDOR" tem valor limitado; um relatório que diz "com o token da conta A, executando este pedido, consegui ler e alterar os dados da conta B, e aqui está a evidência" é acionável, priorizável e inegável. O pentest existe para transformar hipóteses de risco em fatos demonstrados, dentro de um recorte combinado.

Duas condições são inseparáveis da definição. A primeira é a autorização por escrito: sem um documento que delimita o que pode ser testado, quando, por quem e até onde, não existe pentest — existe invasão, que é crime. A mesma sequência de ações técnicas é um serviço profissional legítimo quando há autorização e escopo, e é um delito quando não há. A segunda condição é o escopo somado às regras de engajamento (RoE, de rules of engagement). O escopo enumera os alvos: quais domínios, quais faixas de IP, quais aplicações, quais ambientes. As regras de engajamento definem o comportamento aceitável dentro desse escopo: há janela de horário combinada, existe veto explícito a qualquer ação destrutiva, define-se se ataques de negação de serviço estão proibidos (quase sempre estão), como se tratam dados sensíveis eventualmente acessados, e qual o canal de contato para interromper tudo se algo sair do previsto. Um engajamento sério começa por esses papéis, nunca pela ferramenta.

Scanner, pentest manual e red team não são a mesma coisa

Confundir esses três termos leva a comprar a coisa errada e a ter uma falsa sensação de segurança. Um scanner de vulnerabilidades é uma ferramenta automatizada que varre a superfície conhecida em busca de assinaturas de problemas catalogados: versões desatualizadas, cabeçalhos ausentes, configurações padrão perigosas, CVEs conhecidos. É rápido, barato, repetível e deve rodar continuamente no seu pipeline — mas é raso e produz falsos positivos e, pior, falsos negativos. Um scanner encontra a fechadura quebrada que está no catálogo dele; ele não entende a lógica de negócio da sua aplicação e não sabe que aquele endpoint deveria checar a propriedade do recurso antes de responder. Falhas de autorização, que são hoje a classe mais crítica em APIs, passam quase invisíveis a um scanner porque não têm assinatura: é a ausência de uma verificação, não a presença de um padrão.

Um pentest manual é conduzido por uma pessoa que raciocina sobre o sistema. Ela usa ferramentas automatizadas como apoio, mas a inteligência está no operador: ele modela como a aplicação funciona, forma hipóteses de abuso e as testa uma a uma. É o pentest manual que encaixa dois "meio-bugs" numa cadeia que vira um comprometimento real, que percebe que a correção de um IDOR num endpoint deixou o endpoint irmão aberto, que entende que aquele campo aceito no corpo do POST sobrescreve uma decisão de autorização. Profundidade é o diferencial. O objetivo é cobertura da superfície acordada e a prova concreta de cada achado.

Um red team tem outro objetivo ainda. Não busca enumerar todas as vulnerabilidades de uma aplicação; busca atingir um objetivo específico — "exfiltrar a base de clientes", "obter acesso de administrador ao ambiente de produção" — emulando um adversário determinado e, crucialmente, com furtividade. O red team testa não só a tecnologia, mas as pessoas e os processos: a resposta a incidentes detecta o ataque? O SOC gera alerta? Quanto tempo o adversário fica dentro sem ser notado? Um pentest é barulhento de propósito, porque quer maximizar cobertura no tempo contratado; um red team é silencioso de propósito, porque parte da avaliação é justamente descobrir se a organização percebe que está sendo atacada. Confundir os dois leva a pedir um exercício de furtividade quando o que a equipe precisava era um mapa de vulnerabilidades — ou o contrário.

Quanto o testador sabe: preto, cinza e branco

A quantidade de informação entregue ao testador antes do engajamento define a "caixa". No caixa-preta, o testador começa do zero, com pouco mais do que um nome de domínio, exatamente como um atacante externo sem informação privilegiada. É o cenário mais realista quanto ao ponto de partida do adversário oportunista, mas é o menos eficiente: uma fração enorme do tempo contratado é gasta em reconhecimento e descoberta, e áreas inteiras do sistema podem nunca ser alcançadas dentro da janela. No caixa-branca, o testador recebe tudo — código-fonte, credenciais, diagramas de arquitetura, documentação de API. A profundidade é máxima e o custo por vulnerabilidade encontrada é mínimo, porque nenhum minuto é desperdiçado adivinhando o que já poderia ser lido. O caixa-cinza é o meio-termo mais comum e, na maioria dos casos, o mais custo-eficiente: o testador recebe credenciais de usuários de papéis diferentes e alguma documentação, mas não necessariamente o código. Isso permite ir direto ao que importa — testar autorização entre papéis, abusar de fluxos autenticados, comparar o que cada persona consegue fazer — sem gastar o orçamento inteiro na porta de entrada. A escolha da caixa é uma decisão de custo-benefício sobre onde você quer que o tempo do testador seja gasto, e vale ser explícita no contrato.

As fases de um engajamento

Embora cada metodologia tenha seu vocabulário, um pentest bem conduzido percorre etapas reconhecíveis. Tudo começa no reconhecimento e mapeamento da superfície de ataque: o testador levanta subdomínios, endpoints, tecnologias, parâmetros, formulários, cabeçalhos e qualquer ponto onde dados atravessam uma fronteira de confiança. Essa etapa produz o inventário do que existe para ser atacado — e frequentemente já revela problemas, como um ambiente de homologação exposto ou um endpoint interno que vazou para a internet.

Segue-se a enumeração, um aprofundamento do reconhecimento: para cada ponto identificado, o testador cataloga versões, usuários válidos, comportamentos diferenciados, mensagens de erro que revelam estrutura interna. É aqui que se separa o que é ruído do que é uma pista. A partir dela vem a exploração, a fase que dá nome à disciplina: o testador tenta efetivamente abusar das fraquezas mapeadas para obter algo que não deveria — acesso, dados, execução. Não basta que a falha exista em teoria; a exploração busca a prova de conceito que demonstra o impacto real.

Quando a exploração dá acesso, entra a pós-exploração, que responde à pergunta "e daí?". Ter um pé dentro raramente é o fim; o interessante é o que se alcança a partir dali. Aqui o testador avalia escalonamento de privilégio — sair de um usuário comum para administrador — e movimento lateral — usar o acesso obtido num ponto para alcançar outros sistemas ou tenants. Um IDOR que expõe um registro é um problema; o mesmo IDOR que, encadeado, permite assumir a conta de um administrador de outra organização é um incidente crítico, e é a pós-exploração que revela essa diferença de magnitude.

A última fase é a que entrega valor de verdade: o relatório. O entregável real de um pentest não é o acesso obtido, é o documento. Para cada achado, um bom relatório traz a descrição clara do problema, a severidade calibrada — normalmente com uma pontuação CVSS que padroniza a conversa sobre gravidade —, a evidência ou prova de conceito que permite ao time reproduzir o resultado, e a remediação concreta que fecha a falha. Sem reprodutibilidade e sem caminho de correção, o achado não vira trabalho de engenharia; vira ansiedade. É por isso que a qualidade do relatório, e não a sofisticação do exploit, é o que distingue um bom pentest de um caro.

O que um pentest de aplicação web procura

No contexto de uma aplicação web ou API, o pentest se ancora em classes de vulnerabilidade bem estabelecidas, e o OWASP é a referência comum. A classe hoje mais crítica é a de falhas de controle de acesso: IDOR/BOLA, onde trocar um identificador dá acesso ao recurso de outro usuário; BFLA, onde uma função que deveria ser restrita a administradores é acessível a qualquer autenticado; e vazamento cross-tenant, onde a fronteira entre organizações não é respeitada e os dados de um cliente aparecem para outro. Essas falhas são invisíveis a scanners e devastadoras em produção, o que as torna prioridade de qualquer engajamento sério.

Além delas, o testador prova a resistência a injeção — SQL e comandos —, verificando que toda query é parametrizada e que nenhum input hostil coage o interpretador; a XSS, confirmando que conteúdo controlado pelo usuário é escapado no render e sanitizado na escrita, sem dangerouslySetInnerHTML cru; as falhas de autenticação e sessão — bypass de segundo fator, replay de tokens, reset de senha frágil, logout que não invalida a sessão do lado do servidor; SSRF, onde a aplicação pode ser induzida a fazer requisições a alvos internos; e erros de configuração — cabeçalhos de segurança ausentes, CORS permissivo demais, mensagens de erro 5xx que vazam detalhes internos do driver ou do banco. O testador ataca rota por rota, campo por campo, com uma tese em mente: input hostil nunca deve virar erro 500, nunca deve sofrer coerção de tipo, nunca deve ser ecoado sem escape e nunca deve cruzar a fronteira de um tenant.

Por que fazer, e com que frequência

A razão mais óbvia é encontrar antes que o adversário encontre. Toda vulnerabilidade existe independentemente de você tê-la achado; a única questão é quem chega primeiro. Há também razões que não são técnicas: compliance e exigências contratuais de clientes frequentemente demandam um relatório de pentest recente como condição de negócio, especialmente em setores regulados. Há a razão de validação: depois que a engenharia corrigiu um achado, um re-teste confirma que a correção fechou o problema de verdade, e não apenas mascarou o sintoma num endpoint enquanto deixou o irmão aberto. E há a economia do ciclo de vida: corrigir uma falha de autorização enquanto ela ainda está no código, apontada num relatório controlado, custa uma fração do que custa tratá-la depois de um vazamento — em dinheiro, em tempo de resposta a incidente e em reputação.

Sobre a frequência, não existe número mágico, mas existem gatilhos claros. Faz-se pentest antes de lançar algo novo ao público, quando há mudança grande de superfície de ataque — um novo módulo, uma nova integração, uma reescrita de autenticação — e periodicamente, porque o sistema muda, as dependências mudam e as técnicas de ataque evoluem. Um pentest anual num sistema que faz deploy toda semana cobre um retrato que já não existe há meses.

Os limites que honestidade exige reconhecer

Um pentest é um retrato no tempo, tirado sobre um escopo delimitado, dentro de uma janela finita. Ele não prova que o sistema é seguro; prova que, naquele recorte e naquele momento, aquelas classes de ataque foram tentadas e aqueles achados foram encontrados. O que estava fora do escopo não foi olhado. O que mudou no dia seguinte não foi coberto. Por isso o pentest não substitui um ciclo de desenvolvimento seguro: modelagem de ameaças na fase de design, testes de segurança automatizados no pipeline, revisão de código com olhar adversarial, dependências auditadas. O pentest é a validação externa e adversarial que fecha o ciclo, não o ciclo inteiro. Tratá-lo como a única linha de defesa — "passamos no pentest, estamos seguros até o ano que vem" — é justamente o tipo de otimismo que a disciplina existe para combater.

Ética e legalidade não são apêndices

Vale reforçar o que abre a definição, porque é o que separa o profissional do criminoso. Autorização por escrito é pré-requisito absoluto, não formalidade. Ações destrutivas em produção são vetadas: o testador prova que consegue apagar sem apagar, demonstra o acesso a dados sensíveis sem exfiltrá-los, encontra o caminho para a negação de serviço sem derrubar o serviço de um cliente real. Dados sensíveis eventualmente acessados durante o teste são tratados sob acordo estrito e nunca retidos além do necessário para a evidência. Essa disciplina ética não é o que limita o pentest — é o que o torna um instrumento de engenharia confiável em vez de um risco em si. Testar a própria aplicação como um atacante faria, dentro dessas regras, é uma das poucas formas honestas de saber se ela realmente resiste, ou se apenas passou nos testes que você mesmo escreveu.

Compartilhar

Compartilhar

Leituras relacionadas

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly