Pular para o conteúdo
12 min de leitura

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

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.

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