Hoje é o 256º dia do ano. Esses três dígitos podem não significar nada para muitas pessoas, mas para aqueles que trabalham em diferentes áreas da computação, representa a quantidade máxima de números que podem ser representados com 1 byte (de 0 a 255). Como essa unidade de medida é fundamental na computação, esse valor é usado para definir o Dia do Programador, que geralmente ocorre em 13 de setembro.
Desta vez, além de aproveitar a desculpa para reconhecer o trabalho de todas essas pessoas que diariamente criam soluções através de código que nos permitem aproveitar muitas das tecnologias que usamos todos os dias, queremos compartilhar algumas ferramentas para avaliar a segurança do código.
Conheça as vulnerabilidades: chave para o desenvolvimento seguro
Embora novas vulnerabilidades sejam descobertas e publicadas o tempo todo, no caso do desenvolvimento de aplicativos, as 10 vulnerabilidades mais comuns continuam sendo as mesmas desde os últimos 5 anos. Isso pode ser visto claramente no relatório publicado pelo OWASP se compararmos o ranking de vulnerabilidades de 2017 com o de 2013. Isso nos faz acreditar que muitos desenvolvedores estão cometendo os mesmos erros, seja porque eles não conhecem essas vulnerabilidades ou porque eles não tomam o devido trabalho para detectá-las.
Se você quiser que seu aplicativo seja seguro, comece conhecendo as vulnerabilidades que podem afetá-lo, ou pelo menos as mais comuns. Para isso, no site do OWASP, você encontrará não apenas informações detalhadas sobre cada vulnerabilidade, mas também um grande número de ferramentas e projetos que permitirão melhorar seu desenvolvimento com base em boas práticas.
Realize auditoria do código
Atualmente, há uma grande variedade de ferramentas de análise de código-fonte que podem ser usadas na Static Application Security Testing (SAST). As tecnologias SAST são projetadas para analisar o código-fonte com o objetivo de identificar vulnerabilidades antes de sua compilação.
As soluções SAST podem ser integradas diretamente no ambiente de desenvolvimento e usam técnicas de análise de código estático para alertar o desenvolvedor sobre todos os tipos de erros e vulnerabilidades que possam estar introduzindo no código. Esse feedback imediato é muito útil, especialmente quando comparado a uma identificação de vulnerabilidades de forma mais demorada no ciclo de desenvolvimento.
As principais vantagens dessa análise é que permite aos desenvolvedores monitorar seu código constantemente e identificar problemas de forma antecipada. Além disso, fornece informações detalhadas que contribuem para uma mitigação rápida e maior integridade do código.
Embora essas ferramentas sejam muito úteis ao identificar vulnerabilidades conhecidas, como SQL Injections ou Buffer Overflow, a verdade é que existem muitos outros tipos de vulnerabilidades que são mais difíceis de detectar automaticamente, como erros de configuração, problemas de autenticação ou erros na lógica do software. Além disso, ao não executar ou compilar o código, outro grande problema geralmente são os falsos positivos, que podem gerar distrações ou perdas de tempo em sua análise. Para evitá-los, é importante escolher as ferramentas certas, levando em conta a linguagem, o ambiente de desenvolvimento, o tipo de código que será analisado e as vulnerabilidades detectadas.
Se você quiser começar a usar essas ferramentas, recomendamos revisar a lista publicada pelo OWASP, que inclui seus próprios projetos e outras opções open source. Você também pode verificar a lista publicada na Wikipedia, organizada por linguagem e com algumas opções para auditar códigos compilados.
Inclua segurança nos testes
Todo o software deve ser testado antes de ser colocado em produção. Nesse estágio, além de verificar se o aplicativo tem o comportamento desejado e se não há erros inesperados, também é importante garantir que ele seja seguro e não tenha vulnerabilidades. Para isso, as ferramentas DAST (Dynamic Analysis Security) podem ser usadas. As ferramentas DAST, em vez de examinar o código-fonte, são executadas fora do aplicativo e iniciam solicitações maliciosas contra ele para descobrir vulnerabilidades, analisando as respostas recebidas.
Como o aplicativo em DAST é testado em tempo de execução, não é necessário ter o código-fonte para auditá-lo. Além disso, neste estágio, outros tipos de vulnerabilidades que não foram detectadas anteriormente com o SAST serão detectadas, como configurações incorretas, protocolos inseguros ou problemas lógicos. No entanto, ao contrário da análise estática que pode ser usada imediatamente, nesta análise é necessário customizar as regras contra esses possíveis cenários para realizar e adaptar a análise cobrindo todas as entradas possíveis, de acordo com a aplicação a ser analisada.
Existem inúmeras ferramentas de análise dinâmica que você pode usar, embora, infelizmente, a maioria delas sejam licenças pagas, devido à alta necessidade de manutenção exigida. De qualquer forma, se você quiser revisar uma lista completa, que inclui opções comerciais e de código aberto, recomendamos a lista do OWASP de Scanners de Vulnerabilidades.
Por último, sempre aplique as boas práticas de desenvolvimento seguro, considerando que nenhuma ferramenta automatizada poderá fazer isso por você. Lembre-se de sempre manter suas ferramentas atualizadas, tanto o IDE quanto os plug-ins e outros aplicativos adicionais que você gerencia, e elimina sempre os módulos e arquivos que não são usados. Não esqueça de registrar todos os eventos nos logs de segurança e evite mostrar as mensagens de erro assim como são geradas pelo sistema.
Lembre-se, a qualidade de um software também deve contemplar a segurança.