Revisão de código seguro
Se o código não foi revisado em busca de falhas de segurança, a probabilidade de que a aplicação tenha problemas é praticamente de 100%. Esta é uma mensagem contundente nas primeiras páginas do guia de revisão de código da OWASP. Uma organização que não submete o código que usa e desenvolve à revisão é irresponsável com seus ativos e os de seus clientes ou usuários. Os problemas de segurança em seus produtos podem ser explorados por cibercriminosos, levando a violações de dados ou interrupção das operações e consequentes multas e perda de clientes e reputação. Para ajudar a prevenir tudo isso, é prudente alinhar o desenvolvimento de software desde o início com uma revisão de código seguro.
O que é revisão de código seguro?
A revisão de código seguro é a análise do código-fonte de uma aplicação para identificar falhas ou vulnerabilidades de segurança. Estas aparecem no ciclo de vida de desenvolvimento de software (SDLC) e devem ser fechadas ou corrigidas para fortalecer a segurança do código. A revisão de código seguro pode ocorrer em qualquer ponto do SDLC, mas dentro da cultura DevSecOps, é mais valioso utilizá-la desde os estágios iniciais. Este é um procedimento que pode ser realizado de forma manual ou automática.
Revisão de código vs. revisão de código seguro
É crucial distinguir entre uma revisão de código padrão e uma revisão de código seguro.
Característica | Revisão de código | Revisão de código seguro |
Propósito principal | Melhorar a qualidade geral, a manutenibilidade, o estilo e a correção funcional do código. | Identificar e mitigar vulnerabilidades de segurança e garantir conformidade com padrões de segurança. |
Foco principal | Legibilidade, aderência a guias de estilo, padrões de design e detecção de bugs. | Validação de entrada, falhas de autenticação/autorização, vazamento de dados, erros de lógica de negócios e problemas de configuração. |
Principais participantes | Desenvolvedores, membros da equipe de QA. | Desenvolvedores, especialistas em segurança e equipes de segurança especializadas. |
A revisão de código seguro garante que a segurança seja tratada como uma característica essencial da qualidade do código, prevenindo a introdução de fraquezas que poderiam comprometer dados ou funcionalidades.
Como funciona a revisão de código seguro?
A abordagem mais robusta para a revisão de código seguro é uma combinação de revisões manuais e automatizadas para aproveitar suas capacidades particulares. A revisão automatizada (como SAST) proporciona velocidade e amplitude, enquanto a revisão manual oferece profundidade e precisão.
A revisão de código seguro manual é realizada com grande atenção aos detalhes. Um ou mais analistas de segurança analisam o código, entendendo o que estão avaliando, levando em consideração seu uso e contexto, as intenções dos desenvolvedores e a lógica de negócio.
Por outro lado, a revisão de código seguro automatizada é um processo em que mais código é examinado em menos tempo, mas no qual os fatores acima não são considerados. As ferramentas trabalham com um conjunto pré-definido de regras, estão restritas a certos tipos de vulnerabilidades e sofrem, algumas mais do que outras, do defeito de relatar falsos positivos (ou seja, afirmar que algo é uma vulnerabilidade quando não é).
As ferramentas automatizadas de revisão de código seguro, com sua avaliação rápida e inicial, atuam como um assistente para o revisor humano, facilitando que os analistas de segurança se concentrem em identificar vulnerabilidades mais complexas e críticas para o negócio.
Entre os métodos mais comumente utilizados na revisão de código seguro automatizada estão teste de segurança estático de aplicações (SAST) e análise de composição de software (SCA; entenda como um difere do outro neste post do blog).
Característica | Revisão automatizada | Revisão manual |
Método principal | Emparelhamento de padrões automatizado de alta velocidade. | Análise estratégica conduzida por humanos. |
Contexto/Intenção | Limitada à estrutura do código; carece de contexto de execução ou de negócio. | Compreensão profunda da arquitetura da aplicação, contexto e intenção empresarial. |
Valor chave | Amplitude: Captura precoce de falhas sintáticas comuns de grande volume (p. ex., SQLi, XSS). | Profundidade: Identificação de falhas complexas na lógica de negócio, erros de estado e antipadrões de segurança arquitetônica. |
Aplicação | Escaneamento pré-revisão (pré-commit/PR) para feedback rápido no IDE/pipeline de CI. | Triage de achados automatizados e análises profundos em componentes críticos (p. ex., lógica de autorização). |
Como conduzir uma revisão de código seguro?
Uma revisão de código seguro profissional segue um processo metódico para maximizar seu impacto:
1. Planejamento e definição do escopo
O processo começa definindo o escopo. Dado que a revisão de código seguro consome tempo, é essencial priorizar a revisão com base no risco. Isso envolve:
Definir objetivos claros: Que tipos de vulnerabilidades estamos tentando detectar (p. ex., conformidade com PCI DSS ou falhas em um novo recurso de autenticação)?
Coletar contexto: Compreender a arquitetura, os requisitos de negócio e a funcionalidade da aplicação; reunir modelos de ameaças e achados de segurança anteriores.
Priorizar o código: Concentrar a atenção em ativos críticos e funções de alto risco como módulos de autenticação, processamento de pagamentos, controles de acesso e novas funcionalidades.
2. Execução com suporte de ferramentas
A revisão humana é apoiada pela tecnologia para aumentar a eficiência:
Escaneamento pré-revisão: Executar ferramentas automatizadas (SAST/SCA) primeiro para detectar rapidamente problemas de segurança conhecidos na base de código e em componentes de terceiros.
Triage: Usar as descobertas automatizadas para filtrar falsos positivos e orientar a investigação manual mais profunda para rotas de código específicas e de alto risco.
Técnicas de análise manual: O revisor usa técnicas como o rastreamento de rotas de código (seguindo as rotas de execução) e o mapeamento de limites de confiança (analisando pontos de controle de segurança) para aplicar sua experiência na área.
3. Aprofundamento e validação de checklists
O núcleo da revisão de código seguro envolve uma revisão detalhada, linha por linha, com foco em áreas que requerem compreensão contextual e de lógica de negócio. Durante esta fase, o revisor especialista aproveita checklists de segurança padronizados (frequentemente baseados em OWASP, CWE ou políticas internas) para garantir um exame sistemático de categorias-chave como validação de entradas, autenticação e controle de acesso.
4. Relatório, remediação e verificação
Os achados são documentadas com detalhes precisos, incluindo:
Descrição da vulnerabilidade: Uma explicação clara da falha e seu mapeamento de segurança.
Explorabilidade e impacto: Uma avaliação do nível de risco (usando uma estrutura de trabalho padronizada) para auxiliar na priorização.
Localização precisa: Nome do arquivo e número da linha, confirmados por validação humana.
Prova de conceito detalhada: Fornecer uma demonstração passo a passo de como a vulnerabilidade pode ser explorada para facilitar a compreensão do desenvolvedor.
Orientações para remediação: Sugestões de código seguro específicas para os desenvolvedores.
Após a remediação, uma revisão de acompanhamento (reescaneamento/reteste) deve ser realizada para verificar que a correção eliminou com sucesso a vulnerabilidade e não introduziu novas falhas.
A vantagem humana: o que os especialistas buscam
Os especialistas em segurança que aplicam as melhores práticas de revisão de código seguro, também considerando a perspectiva dos atores de ameaça, podem avaliar o código para reconhecer os problemas de segurança que mais contribuem para a exposição ao risco do alvo de avaliação. Por exemplo, em nosso último relatório anual State of Attacks, compartilhamos que 71% da totalidade da exposição ao risco nos sistemas avaliados foi reportada pelo método manual.
A revisão de código seguro realizada por especialistas se destaca por encontrar problemas que as ferramentas automatizadas não conseguem identificar por estarem cegas à lógica de negócio. A revisão foca em áreas críticas como as seguintes:
Fluxos de lógica de negócio
O revisor analisa os processos únicos da aplicação para procurar:
Integridade do fluxo de trabalho: Oportunidades para burlar transições de estado, passos ou validação em processos de múltiplas etapas.
Condições de corrida: Vulnerabilidades baseadas em tempo em operações concorrentes nas quais múltiplos usuários interagem com o mesmo recurso.
Limites de recursos: Garantir que limites de taxa e cotas de recursos sejam implementados para evitar negação de serviço ou exaustão de recursos.
Autorização e controle de acesso
O revisor verifica a correção e a completude da execução de segurança:
Execução do lado do servidor: Verificar que todos os controles de acesso sejam aplicados no servidor, não apenas no lado do cliente.
Padrões à prova de falhas: Garantir que seja utilizada uma política de negação por padrão para o acesso.
Prevenção de IDOR: Verificar referências diretas inseguras a objetos (IDOR) onde um usuário pode manipular um parâmetro (p. ex., um ID) para acessar os dados de outro usuário ou recursos não autorizados.
Validação de entradas e codificação de saídas
Embora o SAST possa encontrar padrões básicos de injeção, o especialista garante a correção contextual:
Validação do lado do servidor: Todas as entradas de usuários e fontes externas são validadas independentemente das verificações do lado do cliente.
Validação por listas de permitidos: Usar listas de permitidos (aceitando apenas entradas conhecidas como boas) em vez de listas de bloqueio (rejeitando entradas conhecidas como ruins) para maior robustez.
Codificação apropriada ao contexto: Garantir que os dados sejam devidamente codificados (HTML, JavaScript, URL, SQL) antes de sua saída para prevenir ataques de injeção como XSS ou injeção SQL.
Criptografia e gerenciamento de segredos
Algoritmos fortes e gestão de chaves: Verificar o uso de algoritmos modernos e testados (p. ex., AES-256, RSA-2048+) e a geração, armazenamento e rotação de chaves seguras.
Segredos codificados: Identificar onde um desenvolvedor cometeu o erro de deixar informações confidenciais (p. ex., chaves de API, tokens, credenciais) dentro do código, incluindo arquivos de configuração.
Ferramentas de revisão de código seguro
Para a implementação automatizada da revisão de código seguro, existem ferramentas correspondentes que identificam rapidamente vulnerabilidades de segurança conhecidas.
As ferramentas SAST são programas que escaneiam automaticamente o código-fonte ou o código objeto de aplicações —enquanto não estão sendo executadas— para detectar vulnerabilidades que correspondem às armazenadas em bancos de dados.
As ferramentas SCA são programas que escaneiam automaticamente aplicações para inventariar seus componentes de software de terceiros e suas dependências e identificar vulnerabilidades nelas que coincidam com aquelas registradas em bancos de dados.
Revisão de código seguro vs. teste de segurança de aplicações
O teste de segurança de aplicações (AST) é um conceito mais amplo do que a revisão de código seguro. Na verdade, este último é parte do anterior. AST, além de SAST e SCA, envolve métodos de avaliação como teste de segurança dinâmico de aplicações (DAST), pentesting como serviço (PTaaS) e engenharia reversa. Enquanto a revisão de código seguro pode ser aplicada em qualquer estágio do desenvolvimento de software, DAST e PTaaS, por exemplo, geralmente são empregadas quando a aplicação pode ser executada para avaliar seu comportamento através de vetores de ataque.
A revisão de código seguro é um elemento fundamental que, quando combinado com DAST (que verifica erros de execução e configuração) e PTaaS, garante uma abordagem abrangente e de defesa em profundidade para a segurança.
Quando você deve implementar a revisão de código seguro?
A revisão de código seguro faz parte de uma abordagem preventiva, que deve ser tratada primeiro, em vez de uma abordagem reativa. Aplicar esse método assim que as primeiras linhas de código forem escritas torna possível identificar e remediar vulnerabilidades antes de entrar em produção. Manter-se um passo à frente dos hackers maliciosos e bloquear no código qualquer possível entrada para usos indevidos, até mesmo pequenas travessuras, é, sem dúvida, uma estratégia muito eficaz para reduzir a probabilidade de catástrofes causadas por ciberataques.
Uma estratégia holística envolve duas principais estratégias de tempo:
Revisão contínua: Implementar ferramentas automatizadas em ambientes de desenvolvimento integrado (IDEs) e durante pull requests é a maneira mais impactante de "deslocar a segurança para a esquerda". Isso permite que os desenvolvedores recebam feedback quase em tempo real e solucionem problemas quando estão mais frescos em sua mente.
Revisão direcionada: Reservar uma revisão exaustiva de código manual para pontos estratégicos no SDLC:
Início de projeto: Avaliação de segurança abrangente de uma base de código nova ou herdada (legacy).
Lançamentos importantes: Antes de lançamentos significativos de versões para garantir que as alterações em grande escala sejam seguras.
Mudanças de arquitetura: Quando ocorrem alterações fundamentais de design ou tecnologia.
Ciclos de conformidade: Revisões estendidas periódicas para requisitos regulatórios (PCI DSS, HIPAA, etc.).
Por que a revisão de código seguro é importante?
Uma equipe de desenvolvimento de sucesso, comprometida com a segurança de seus produtos, sempre tem a revisão de código seguro como um pilar. Qualquer organização que desenvolva software deve tê-la entre suas práticas constantes, desde os estágios iniciais do SDLC, prestando atenção às pequenas mudanças que os membros de sua equipe fazem gradualmente no código.
A segurança em geral e as fraquezas comuns em software e sua exploração geralmente não são ensinadas aos desenvolvedores em suas academias e locais de trabalho. E mesmo os desenvolvedores mais experientes, devido a fatores como desgaste ou descuido, podem cometer erros de codificação e acabar gerando vulnerabilidades como as listadas no OWASP Top 10 e no CWE Top 25. Por razões como essas, o código-fonte geralmente deve permanecer sob revisão por especialistas em segurança.
Detecção de vulnerabilidades no código-fonte e componentes
A revisão de código seguro identifica a ausência de práticas de codificação segura, a falta de controles de segurança apropriados e violação de padrões de conformidade, como PCI DSS e HIPAA. Os provedores de revisão de código seguro podem encontrar, por exemplo, validação ausente ou errônea de entradas (verificação de que elas atendem a características específicas) provenientes de diferentes fontes que interagem com a aplicação (p. ex., usuários, arquivos, fluxos de dados). Eles podem descobrir que um desenvolvedor cometeu o erro de deixar informações confidenciais (p. ex., tokens, credenciais) dentro do código, tendo se esquecido de removê-las após colocá-las lá sem uma justificativa razoável. Eles podem ver que as informações que precisam ser armazenadas e transferidas não passam por algoritmos de criptografia adequados. Da mesma forma, eles podem encontrar que os processos de autenticação de usuários são bastante fracos, exigindo, por exemplo, senhas curtas com pouca variedade em seus caracteres. E que os controles de autorização são pobres e acabam concedendo acesso desnecessário a qualquer usuário sem solicitar permissão.
Uma questão importante frequentemente descoberta na revisão de código seguro, usando ferramentas SCA, são vulnerabilidades dentro de componentes de software de terceiros e de código aberto. O desenvolvimento de aplicações hoje depende fortemente de componentes de software de código aberto, que são importados de várias fontes e servem como suporte para o que se pretende construir, o que muitas vezes acaba tendo pouca originalidade. A dependência também existe entre alguns componentes. Então, ao usar um deles, por exemplo, o desenvolvedor pode não estar ciente da relação deste com os outros. Cibercriminosos têm entre seus alvos desejados essas dependências para procurar vulnerabilidades a serem exploradas.
Aplicação de melhores práticas de codificação
Os especialistas e as ferramentas responsáveis por uma revisão de código seguro serão encarregados de verificar se os desenvolvedores do software em avaliação têm empregado práticas de codificação segura. Embora tenhamos dois posts de blog que tratam de forma mais extensa sobre práticas de codificação segura (ou seja, "Go over and practice secure coding" e "Secure coding in five steps?"), que convidamos você a ler, aqui estão algumas dessas práticas que devem ser sempre um ponto de referência para o desenvolvimento e revisão de código.
Especificamente, assegure-se de que seu software atenda a objetivos como os seguintes:
Validar entradas de fontes não confiáveis e aceitar apenas aquelas que cumpram características específicas.
Verificar a identidade dos usuários ou entidades que buscam acesso a recursos privados e, em operações críticas, solicitar autenticação multifator.
Exigir aos usuários que criem senhas suficientemente complexas.
Restringir o acesso a recursos específicos de alto valor a apenas alguns usuários autorizados.
Conceder acesso aos usuários, por padrão, apenas aos recursos necessários para realizar certas tarefas.
Estabelecer tempos limite de inatividade de sessão relativamente curtos.
Usar algoritmos de criptografia bem conhecidos, testados e atualizados para informações sensíveis em trânsito e em repouso.
Não possuir dados sensíveis, como comentários, dentro de seu código.
Não revelar informações valiosas a atacantes em mensagens de erro resultantes de atividades inválidas.
Todos os seus componentes, elaborados por terceiros, devem ser atualizados para suas versões mais recentes.
Para mais informações sobre práticas de codificação segura, você também pode verificar as recomendações da OWASP para desenvolvedores em seu guia de revisão de código.
Outros benefícios da revisão de código seguro
Eficiência de custos
A revisão de código seguro permite que o número de erros ou vulnerabilidades encontrados nas etapas finais do SDLC, através de procedimentos como pentesting, seja menor. Portanto, o tempo que os desenvolvedores precisam gastar em processos de remediação nessas etapas também pode ser reduzido. Corrigir um grande número de vulnerabilidades pouco antes de ir para a produção torna-se uma dor de cabeça para os desenvolvedores.
Tenha sempre em mente que é mais fácil e menos caro fazer correções de código no ambiente de desenvolvimento do que em produção. Com uma revisão de código seguro contínua, você está mais próximo da causa do problema e pode corrigi-lo imediatamente, evitando qualquer acúmulo.
Fomentar uma cultura de segurança
Graças a uma revisão de código seguro inicial, os desenvolvedores podem começar a assumir um compromisso não apenas de remediar os problemas de segurança identificados em seus produtos, mas também de melhorar seus resultados a dia após dia. Isso pode ser um processo em cadeia. Certos grupos de desenvolvedores, com a ajuda das equipes de segurança e seus testes ou revisões, podem transmitir conhecimentos, inspirar outros a melhorar suas práticas e produtividade e fazer a transição para uma mentalidade em que todos na organização são responsáveis pela segurança.
O ciclo de feedback ajuda os desenvolvedores a aprender com os padrões e práticas que levaram ao erro, aprimorando suas habilidades e contribuindo para um código de alta qualidade. Aqueles erros de segurança que frequentemente dão origem a vulnerabilidades podem se tornar menos frequentes com o tempo.
Conformidade e reputação
As organizações que decidem implementar revisão de código seguro em seus processos de desenvolvimento de software reconhecem a responsabilidade de cumprir padrões estabelecidos em suas indústrias. Elas buscam oferecer produtos e serviços que garantam segurança para suas operações, dados e outros recursos, principalmente os de seus clientes ou usuários. Esse sucesso gera confiança e reflete compromisso e qualidade, afetando positivamente sua competitividade e reputação.
Como escolher sua equipe de revisão de código seguro?
Embora uma equipe de desenvolvedores possa fazer suas próprias revisões de código, como quando um desenvolvedor pede a um colega para revisar seu código para evitar erros lógicos ou estilísticos, é recomendável que, em questões de segurança, especialistas na área sejam envolvidos. Engenheiros de segurança, revisores de código e pentesters se especializam na identificação de vulnerabilidades. Eles trazem uma perspectiva mais ampla e uma mentalidade de modelagem de ameaças para detectar falhas sutis e estruturais de segurança que um desenvolvedor pode negligenciar. Além disso, revisões por um agente externo podem garantir que todas as falhas sejam relatadas enquanto mantêm uma visão imparcial.
Os principais elementos de revisão de código seguro dentro de uma boa equipe de cibersegurança devem ser um grupo amplamente certificado de especialistas em segurança e ferramentas automatizadas que apresentem baixas taxas de falsos positivos e negativos. Suas avaliações devem ser capazes de ser realizadas em uma ampla gama de linguagens de programação, baseadas em múltiplos padrões de segurança internacionais, e relatar descobertas em um único painel que prioriza, incentiva e facilita a remediação.
Revisão de código seguro da Fluid Attacks
Na Fluid Attacks, oferecemos nossa revisão de código seguro como uma revisão abrangente e precisa do código-fonte do seu software, combinando procedimentos manuais (por nossos pentesters certificados) e automáticos baseados em métodos como SAST e SCA. Com a gente, você pode aplicar a revisão de código seguro desde os estágios mais iniciais do seu SDLC de forma contínua. Você pode resolver suas questões de segurança prontamente (priorizando aquelas que representam a maior exposição ao risco) em favor da produtividade de sua equipe de desenvolvimento e da segurança de seus produtos.
Nossa revisão de código seguro suporta muitas linguagens de programação, incluindo C, C#, C++, HTML, Java, JavaScript, PHP, Python, Ruby e Swift. Temos entre nossos requisitos de revisão aqueles presentes em mais de 60 padrões de segurança internacionais, incluindo CERT, CVE, CWE, HIPAA, NIST, OWASP e PCI DSS. E nos ajustamos a requisitos específicos para sua aplicação e lógica de negócio, todos constantemente revisados e atualizados.
Integramos nosso CI Gate em seus pipelines para quebrar o build quando há violações de políticas e vulnerabilidades abertas. E relatamos tudo a você em nossa plataforma, onde você pode entender e analisar minuciosamente suas questões de segurança, além de receber recomendações e gerenciar processos de remediação. Além disso, seus desenvolvedores podem contar com nossas extensões de IDE para reconhecimento mais rápido das linhas de código afetadas e sugestões de remediação baseadas em GenAI. Tudo isso faz parte do nosso Hacking Contínuo, que também integra métodos de testes de segurança como DAST, CSPM, PTaaS e engenharia reversa.
Não hesite em nos contatar se desejar mais informações sobre nossa revisão de código seguro e outras soluções de AppSec. Clique aqui para experimentar nosso plano Essential de Hacking Contínuo grátis por 21 dias.







