In this article
Auditoria de segurança de código: conceitos básicos
No desenvolvimento de software moderno, a análise de segurança de código é essencial para adotar a abordagem de que prevenir é melhor do que remediar. A auditoria de segurança de código melhora a qualidade do código e, por isso, é uma boa prática de DevSecOps para qualquer organização.
O que é auditoria de segurança de código?
A auditoria de segurança de código (também conhecida como auditoria de segurança de software ou auditoria de código de software) é o processo de analisar o código-fonte ou examinar um programa em tempo de execução para identificar vulnerabilidades de segurança, licenças em desacordo com as normas e outros problemas de programação. A principal vantagem da auditoria de segurança de código é identificar problemas antes do lançamento do software, evitando que qualquer usuário seja afetado. Ela é uma parte importante de DevSecOps e das práticas de codificação segura e costuma ser usada para verificar riscos de segurança cibernética, jurídicos e de conformidade.
Em geral, a responsabilidade por configurar uma ferramenta de auditoria de segurança de código é das equipes de DevOps e, se houver, de DevSecOps. Além disso, como a análise estática de código examina diretamente o código-fonte, é útil contar com pelo menos uma pessoa desenvolvedora para identificar possíveis vulnerabilidades.
Tipos de auditoria de segurança de código
Os dois tipos de auditoria mais comuns são a análise estática e a dinâmica de código.
A auditoria estática de código, também conhecida como análise estática de código ou simplesmente como varredura, examina os arquivos-fonte em busca de vulnerabilidades. Em outras palavras, é uma revisão automatizada de código que pode se concentrar em vários aspectos, como padrões e formatação do código ou vulnerabilidades.
O tipo de auditoria de segurança de código mais popular no setor é a análise estática voltada para vulnerabilidades no código. Esse será o foco principal deste artigo. Saiba mais sobre os diferentes tipos de auditoria de segurança.
Por que a auditoria de código é importante?
Deixar de fazer uma análise de segurança de código coloca você em risco. A varredura de código em busca de vulnerabilidades costuma ser considerada a função mais importante da análise estática, pois ajuda a prevenir ataques cibernéticos contra o software implantado a longo prazo. Com um pipeline confiável que verifica seu código-fonte, é possível encontrar vulnerabilidades, agir imediatamente e, assim, reduzir o período em que um ataque pode ocorrer.
Também é preciso considerar os riscos jurídicos e de conformidade, como veremos a seguir.
No contexto do código aberto, a análise estática de código — incluindo a análise estática de código aberto e a auditoria de código aberto — também é considerada uma prática recomendada.
O que verificar durante uma auditoria de segurança de código
A auditoria de segurança de código deve ser adaptada à base de código da sua equipe, mas há várias vulnerabilidades comuns que podem servir como ponto de partida:
Validação de entrada/injeção de SQL
Bibliotecas de terceiros
Credenciais embutidas no código
Criptografia fraca
Versão de SSL/TLS
Estouro de memória
Conformidade
Licenciamento
Verificações específicas do projeto
Vamos analisar cada um desses pontos em mais detalhes:
1. Validação de entrada/injeção de SQL
A injeção de SQL é uma das técnicas de ataque cibernético mais comuns. Ela usa uma consulta SQL para induzir seu aplicativo a executar uma transação SQL maliciosa. Uma abordagem comum é inserir código SQL em um campo de entrada de uma página web, o que pode, por exemplo, permitir que invasores acessem dados não autorizados ou os excluam. A análise estática de código ajuda a prevenir esses ataques ao identificar pontos em que pode haver injeção de SQL.
2. Bibliotecas de terceiros
As bibliotecas de terceiros são fundamentais no desenvolvimento de software moderno. As pessoas desenvolvedoras podem reutilizar código criado e testado por outras pessoas, aumentando a eficiência da equipe e permitindo que ela se concentre mais nos principais objetivos do negócio.
A desvantagem das bibliotecas de terceiros é que elas podem conter vulnerabilidades. No entanto, é possível reduzir esses riscos usando a análise de código-fonte para verificar todas as bibliotecas diariamente.
3. Credenciais embutidas no código
Em geral, é estritamente proibido incluir chaves de API e senhas diretamente no código-fonte. No entanto, ao testar localmente um novo recurso ou uma integração, às vezes as pessoas se esquecem de remover essas credenciais.
Se, por acaso, um valor embutido no código passar despercebido durante a revisão — talvez em uma solicitação de merge ou pull request muito grande —, uma ferramenta de análise estática de código deve encontrá-lo e alertar você.
4. Criptografia fraca
Alguns algoritmos criptográficos não são seguros e devem ser evitados em aplicações seguras, mesmo que tenham sido amplamente usados em aplicações mais antigas. Um exemplo é o algoritmo de hash MD5, que deve ser evitado. Dependendo da aplicação, é possível usar o SHA-256, que é mais seguro.
5. Versão de SSL/TLS
A criptografia SSL/TLS, cuja versão mais recente é a TLS 1.3, é essencial para a segurança na internet. Por exemplo, se sua base de código executa um servidor HTTP com uma versão obsoleta de TLS/SSL — ou, pior ainda, se um código legado executa um servidor web em uma rede não privada sem TLS/SSL —, a análise estática de código pode detectar o problema e alertar você.
6. Estouro de memória
O estouro de memória ocorre quando um buffer ultrapassa o limite definido e pode sobrescrever a próxima posição de memória. Esse problema é mais comum em linguagens como C e C++, que permitem manipular a memória com mais facilidade.
Com uma análise de segurança de código adequada, muitas vezes é possível detectar estouros de memória no código-fonte e, assim, evitar comportamentos perigosos durante a execução. Para quem desenvolve sistemas embarcados, industriais ou de alta velocidade, isso é indispensável.
7. Conformidade
Alguns setores exigem conformidade com padrões como a ISO. Por exemplo, as normas ISO 270001 e ISO 26262 estabelecem requisitos específicos que precisam ser cumpridos para que um software seja certificado. A análise estática de código também pode ajudar a verificar a conformidade com outros padrões, como SOC, para o gerenciamento de dados de clientes, e PCI, para aplicações do setor de pagamentos. Com ela, você pode verificar se o código atual está em conformidade e garantir que todo código novo também esteja.
8. Licenciamento
A maioria dos projetos de software modernos depende de bibliotecas externas. A reutilização de código é uma grande vantagem para quem desenvolve software. A maioria das bibliotecas externas — como módulos e frameworks — inclui informações sobre licenciamento (MIT, GPL, BSD e outras licenças).
Algumas licenças são totalmente gratuitas, inclusive para uso comercial, enquanto outras exigem pagamento. Ao analisar suas dependências, a análise estática de código pode confirmar se você está cumprindo os termos das licenças de suas bibliotecas externas. Isso reduz o risco de medidas judiciais contra sua organização.
9. Outros aspectos
As auditorias de segurança de código podem verificar muitos outros aspectos, incluindo a conformidade com padrões de código e a formatação. Uma ferramenta de auditoria de segurança pode automatizar parte da revisão de código, uma boa prática para a revisão segura de código. O mais importante é que sua auditoria de segurança de código procure os tipos de vulnerabilidade que podem causar o maior impacto à sua organização e que têm mais chances de estar presentes.
Por exemplo, se você trabalha em uma base de código em C para um sistema embarcado sem conexão com banco de dados, a injeção de SQL é uma preocupação menor. Nesse caso, verificar se há estouros de memória é fundamental.
Quais ferramentas podem ser usadas para fazer uma auditoria de segurança de código?
Há várias ferramentas de teste disponíveis para auditorias de segurança de código, incluindo:
Teste de segurança de aplicações estático (SAST): analisa o código-fonte para encontrar problemas.
Teste dinâmico de segurança de aplicações (DAST: executa seu aplicativo e avalia a segurança da aplicação usando técnicas como testes de invasão.
Análise de composição de software (SCA): procura vulnerabilidades em dependências diretas e indiretas de código aberto.
Comece a participar de desafios de Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.
Varreduras e relatórios automatizados
Incorporar varreduras de código aos seus pipelines de CI/CD (como GitHub Actions, GitLab ou Jenkins) é uma prática recomendada. A maioria das ferramentas modernas de CI/CD permite executar varreduras automaticamente, o que é muito mais eficiente do que fazê-las manualmente. As varreduras automatizadas economizam tempo e esforço, são executadas quando necessário e evitam problemas causados por erros humanos.
Dependendo do seu contexto, fazer uma varredura a cada pull request ou merge request é uma maneira eficaz de prevenir vulnerabilidades na sua base de código. Também é recomendável configurar uma tarefa cron para executar a análise a cada 24 horas, já que novas vulnerabilidades são adicionadas constantemente ao banco de dados remoto.
Quanto mais rápido sua equipe receber um alerta sobre um problema na base de código, mais rápido poderá corrigi-lo e evitar outras ameaças. Para responder rapidamente às vulnerabilidades encontradas no código-fonte, é importante configurar alertas para quando problemas forem identificados. É fácil integrar um mecanismo de alerta ao seu CI/CD. Essas notificações podem ser simples, como um e-mail informando que o pipeline de análise estática falhou.
Como escolher uma ferramenta de auditoria de segurança de código
Ao escolher uma ferramenta de análise estática ou um software de auditoria de segurança, há alguns critérios a considerar:
Linguagem de programação: escolha uma ferramenta compatível com a linguagem de programação usada na sua base de código. Algumas ferramentas de análise estática funcionam com várias linguagens, permitindo usar uma única ferramenta em todas as suas bases de código.
Recursos principais: um critério essencial para escolher a ferramenta certa é verificar se ela aborda os riscos relevantes para sua organização e sua base de código. Dependendo do seu setor e dos seus requisitos, talvez você não precise de uma ferramenta que verifique a conformidade com a ISO. Ou talvez o estouro de memória não seja relevante para sua configuração e linguagem de programação.
Integração com CI/CD: a maioria das ferramentas pode ser facilmente integrada ao CI/CD, o que é importante para automatizar o processo de varredura.
Integração com IDE: ferramentas integradas à IDE facilitam a execução de varreduras diretamente no ambiente de desenvolvimento, com apenas um clique. Você pode até configurá-las para fazer varreduras antes de um commit.
Como começar a fazer auditorias de segurança de código
A análise de código-fonte é uma parte importante das práticas de programação segura e, junto com as auditorias de cibersegurança, deve ser parte integrante de qualquer programa de gerenciamento de riscos cibernéticos.
Compatível com várias linguagens de programação modernas, como JavaScript, Go e outras, o Snyk Code encontra vulnerabilidades diretamente no seu código. O Snyk Open Source analisa e detecta vulnerabilidades automaticamente nas dependências dos seus projetos.
Prepare-se para o próximo Log4j. Proteja sua base de código e previna ameaças à segurança com as ferramentas da Snyk, desenvolvidas para quem programa. Inscreva-se gratuitamente ou agende uma demonstração. Experimente nossa ferramenta gratuita de verificação de código online e veja como o Snyk Code analisa seu código em busca de problemas de segurança e qualidade.