15 práticas recomendadas para a segurança de aplicativos
Daniel Berman
8 de outubro de 2020
0 minutos de leituraO mundo do desenvolvimento de aplicativos vivencia um crescimento sem precedentes desde 2010. E, como existem milhões de aplicativos móveis e para web, eles se tornaram um parte essencial da nossa vida diária. Paralelamente, houve um aumento no desenvolvimento da internet das coisas (IoT), que proporcionou a automação de processos manuais.
No entanto, esses desenvolvimentos positivos também deram origem a inúmeros problemas, em especial relacionados à segurança. Mesmo acreditando que seus aplicativos são seguros o suficiente, a maioria dos desenvolvedores e das empresas continua inserindo códigos vulneráveis em versões de produção.
Mais aplicativos, mais problemas [de segurança]
Entre os desafios mais comuns da segurança de aplicativos, estão:
Programadores amadores: com o aumento de demanda por aplicativos, a falta de desenvolvedores qualificados deu origem a um alto número de programadores amadores por trás de aplicativos móveis. No geral, as equipes de desenvolvimento também não possuem o conhecimento necessário para resolver os problemas de segurança que surgem.
Uso ineficaz das ferramentas: os desenvolvedores muitas vezes não conseguem usar com eficiência as ferramentas de teste na qual investiram. E muitos acreditam que essas ferramentas reduzem a velocidade do processo de desenvolvimento.
Vetor de ataque de aplicativos para web: os aplicativos para a web são o principal vetor de ataque em vazamentos de dados. As grandes empresas devem estar cientes da presença de APIs nos seus aplicativos e dos riscos associados. Muitas violações de API afetam as empresas que não têm conhecimento sobre a presença dessas interfaces em suas soluções.
Ausência de uma abordagem DevSecOps: a maioria das organizações não segue as práticas recomendadas de segurança no desenvolvimento de aplicativos para proteger o software. Elas frequentemente deixam de implementar um processo de DevSecOps (a abordagem de "segurança desde o início”), que é crucial para garantir que todo problema relacionado à segurança seja processado e resolvido o quanto antes.
Vulnerabilidades de código aberto: o software de código aberto contém um alto número de vulnerabilidades e é uma fonte de risco. Estima-se que 96% dos aplicativos de mercado de grandes empresas usem software e bibliotecas de código aberto.
Ao seguir a lista abaixo, você pode evitar essas armadilhas e atingir um nível mais alto de segurança para seus aplicativos.
Em relação às práticas recomendadas de segurança no desenvolvimento de aplicativos e aplicativos para web, as semelhanças entre os processos de desenvolvimento de software para web, dispositivos móveis e desktop permitem que as práticas recomendadas sejam aplicadas a todas as frentes.
Ferramenta gratuita de verificação de código
Proteja seu código antes da próxima entrega.
Lista de 15 práticas recomendadas em segurança de aplicativos
1. Adote uma abordagem de DevSecOps
DevSecOps, ou a abordagem de segurança desde o início, visa a detectar lacunas de segurança desde o primeiro dia para evitar problemas e resolvê-los rapidamente caso surjam de fato. O DevSecOps permite que as equipes de desenvolvimento identifiquem problemas de segurança em todos os estágios da cadeia de suprimentos de software, do design à implementação.
2. Implemente um processo de gerenciamento seguro do SDLC
O processo de gerenciamento do ciclo de vida do desenvolvimento de software seguro (SSDLC) define o ciclo de vida do produto da perspectiva da segurança. Esse processo garante que os produtos em seu ciclo de vida sejam:
Desenvolvidos e administrados por funcionários com treinamento em segurança
Criados em um ambiente seguro seguindo práticas recomendadas
Entregues com segurança aos clientes
O SSDLC se aplica a todo o processo de desenvolvimento de um produto desde o conceito e passa por todas as atividades de desenvolvimento até que seja lançado com segurança no mercado como um produto maduro, além de oferecer acompanhamento até o fim do ciclo de vida.
3. Lide com as vulnerabilidades do código aberto
Ainda que as ferramentas de código aberto ofereçam muitas vantagens, incluindo o custo-benefício, elas também expõem a empresa a vulnerabilidades relevantes. Ao usar software de código aberto, é crucial fazer o monitoramento contínuo, lançar atualizações regulares e efetuar a rápida correção das vulnerabilidades.
4. Automatize tarefas simples de segurança
É virtualmente impossível mitigar o número incontável de vulnerabilidades existentes usando uma abordagem manual, o que faz da automação um processo crítico. Todas as tarefas simples devem ser automatizadas para que as equipes possam se concentrar em esforços mais desafiadores.
5. Conheça seus próprios recursos
A visibilidade é o primeiro passo para se obter insights sobre o estado de segurança de uma organização, pois não é possível proteger o que não está identificado. É essencial saber com precisão quais recursos compõem os aplicativos e infraestrutura de produção de softwares.
6. Avaliação de risco
Faça uma avaliação de risco colocando-se no lugar do invasor e pense em todos os aspectos relacionados à segurança:
Crie uma lista de todos os recursos que precisam de proteção.
Identifique as ameaças e descubra como isolá-las e contê-las.
Identifique vetores de ataque que deixam seu aplicativo em risco de ser comprometido.
Implemente todas as medidas de segurança adequadas para detectar e impedir ataques.
Determine se é necessário usar ferramentas diferentes ou adicionais.
7. Treinamento em segurança para desenvolvedores
Como os desenvolvedores também são responsáveis por enviar o código para a produção, é fundamental que eles sejam treinados pela equipe de segurança. Esse treinamento deve ser adaptado para a função e as necessidades de segurança específicas dos desenvolvedores.
8. Gerencie os contêineres corretamente
Em primeiro lugar, suas imagens de contêiner devem ser assinadas com uma ferramenta de assinatura digital (por exemplo, Docker Content Trust). Também é importante executar verificações adicionais de vulnerabilidades de código aberto para proteger o uso do contêiner durante todo o pipeline de integração.
9. Limite o acesso dos usuários aos dados
Restringir ainda mais o acesso aos seus dados é uma das melhores maneiras de reforçar a segurança:
Determine quem de fato precisa acessar cada recurso específico.
Crie regras de acesso.
Mantenha os privilégios de acesso atualizados removendo credenciais ativas assim que o acesso aos dados não é mais necessário.
10. Instale atualizações e patches regularmente
A instalação de atualizações e patches é uma das maneiras mais efetivas de manter o software protegido. Por que tentar resolver problemas por conta própria se a solução já existe? No entanto, é importante planejar cada atualização, já que isso requer o design correto da arquitetura para evitar problemas de compatibilidade de API ao migrar para as novas versões.
11. Garanta acesso aos dados de log
Ter acesso aos dados de log das suas operações diárias na nuvem é crucial para qualquer plano de resposta a incidentes. O acúmulo e a interpretação desses dados no período anterior a um incidente terão um impacto direto na segurança e também poderão ser relevantes para investigações posteriores. Sem esse conhecimento, você pode ficar de mãos atadas se ocorrer um incidente de segurança.
12. Criptografe seus dados
No que diz respeito às práticas recomendadas de segurança de aplicativos, a criptografia de dados em repouso e em trânsito é primordial. A criptografia básica deve incluir, entre outros, o uso de um SSL com certificado atual. É inaceitável que dados confidenciais de usuários, como IDs e senhas, sejam armazenados em texto simples, o que pode levar a ataques de man-in-the-middle (MITM). Confirme se você está usando os algoritmos de criptografia mais robustos.
13. Faça testes de intrusão
Os testes automatizados conseguem capturar a maioria dos problemas de segurança antes de um lançamento, mas é possível que ainda existam lacunas despercebidas. Para minimizar esse risco, é recomendável empregar um profissional com experiência em testes de intrusão para testar o aplicativo. Esse tipo de hacker ético tenta violar o aplicativo para detectar vulnerabilidades e encontrar possíveis vetores de ataque com o objetivo de proteger o sistema contra um ataque real. É importante que o profissional seja um especialista externo sem envolvimento com o projeto.
14. Garanta a correta validação de entradas
Todos os dados de entrada precisam estar corretos do ponto de vista semântico e sintático. Os dados devem ser validados em relação ao tamanho, ou seja, devem conter o número esperado de dígitos e caracteres, ocupar o espaço esperado etc. Ainda que o uso de listas de permissões seja recomendado, nem sempre é possível implementar esse método de validação.
15. Procure fazer correções permanentes
Ao analisar listas de CVE, é fácil perceber que alguns tipos de vulnerabilidades acabam reaparecendo de tempos em tempos (por exemplo, scripts entre sites [XSS], injeção de SQL, estouro do buffer). Assim, determinar a causa raiz quando uma nova vulnerabilidade aparece – em vez de fazer uma correção parcial – é o segredo para erradicá-la de forma permanente.
Conclusão
Mesmo diante das inúmeras opiniões e perspectivas entre especialistas do setor sobre as práticas recomendadas para segurança de aplicativos, a maioria concorda que alguns pontos são críticos, como vimos aqui, e devem ser incluídos em toda lista de verificação.
No entanto, sempre é importante fortalecer a segurança e fazer o possível para minimizar o número de erros nos seus aplicativos, tornando-os mais difíceis de explorar.
Perguntas frequentes sobre segurança de aplicativos
O que é a segurança de aplicativos?
A segurança de aplicativos é o processo de identificar e mitigar vulnerabilidades em aplicativos e é uma atividade acompanhada por procedimentos que visam a fortalecer a postura de segurança dos aplicativos.
Que ferramentas de teste de segurança de aplicativos são recomendadas?
Não há ferramenta ou protocolo de teste capaz de mitigar todos os possíveis riscos de segurança. As equipes devem aplicar uma combinação de ferramentas, incluindo ferramentas de testes estáticos (SAST), testes interativos (IAST), testes dinâmicos (DAST) e ferramentas de teste de análise de composição do software (SCA).
Quais são as principais abordagens para testes de segurança de aplicativos?
Uma das principais maneiras de detectar vulnerabilidades no código-fonte de um produto é pelo uso de ferramentas de testes estáticos de segurança (SAST). Ao contrário das ferramentas de SAST, as ferramentas de testes dinâmicos de segurança de aplicativos (DAST) detectam vulnerabilidades tentando explorar ativamente um aplicativo em runtime.
Proteja seus aplicativos com nossa ferramenta para desenvolvedores
Recomendações eficientes e acionáveis em segurança de aplicativos para IDEs, repositórios, contêineres e pipelines.