Desenvolvedores: como lidar com alguns desafios de segurança durante o desenvolvimento de software
Published: 2022-08-26 17:23:13

Você já se deparou com desafios de segurança durante o seu processo de desenvolvimento e não sabia como lidar com eles? É sobre este tema que abordaremos a seguir:

É cada vez mais comum as pessoas optarem por não saírem de casa e realizarem  transações bancárias, compras, pedirem comida e muitas outras tarefas através de aplicações online. Para essas atividades, as pessoas criam um “login” com senha única, confirmam sua autenticidade por meio de um captcha e, então, passam a ter uma sensação quase que permanente de conforto e “segurança”.

Entretanto, percebemos que muitas vezes essas medidas não são o suficiente para proteger os usuários das possíveis vulnerabilidades de um software. Além disso, identificamos que são os desenvolvedores que se encontram na linha de frente da defesa contra possíveis ameaças, uma vez que são eles os responsáveis por escreverem o código das aplicações.

É inegável que a segurança no desenvolvimento de software é crucial em todas as partes e processos de criação e manutenção de uma aplicação. A evolução dos sistemas exige que a segurança cibernética conte cada vez mais com a ajuda de desenvolvedores para resolver os problemas mais urgentes do setor.  Mas será que os desenvolvedores conhecem os desafios de segurança durante o desenvolvimento de software?

Pensando disso, preparamos uma revisão de alguns dos principais desafios, bem como algumas dicas para os desenvolvedores, a fim de facilitar a resolução desses problemas.

**7 Desafios de segurança durante o desenvolvimento de software**
**Identificar vulnerabilidades no próprio código**
Cada linguagem de programação e frameworks têm suas próprias vulnerabilidades específicas, que podem afetar a segurança da aplicação como um todo.

Exemplos: ataques SQL injection e XSS.  

Os ataques de SQL injection permitem que um invasor leia ou modifique um banco de dados enviando código SQL por meio de um mecanismo de entrada de usuário não filtrado. Por outro lado, um ataque XSS permite que os invasores executem scripts nos navegadores dos usuários, os redirecionando para sites maliciosos ou roubando informações por meio de cookies.

Nas esteiras de desenvolvimento, é muito comum ocorrer uma integração de diferentes códigos, através dos commits. Durante essa fase, uma boa prática é a de realizar um Code-Review para verificar se o código está bem escrito, seguindo os padrões de mercado e, também, se o código é eficiente, escalável e seguro.

Portanto, é importante estar atento aos riscos das vulnerabilidades específicas que a linguagem de programação apresenta, pois o desconhecimento sobre segurança pode resultar na inclusão de recursos exploráveis ​​sem saber.

Manter a empresa e sua equipe cientes dos problemas específicos da linguagem de programação utilizada, reduz os riscos de segurança em seu desenvolvimento de suas aplicações.

**Reconhecer vulnerabilidades em pacotes de terceiros**
Outro problema entre as equipes, são as vulnerabilidades de pacotes de terceiros. Normalmente, durante a construção de suas aplicações, as equipes de desenvolvimento instalam diversos pacotes externos com diferentes finalidades, mas nem todos estão seguros ou são atualizados frequentemente.

Dependendo da estrutura da sua empresa, pode caber à sua equipe ou à equipe de segurança, corrigir quaisquer vulnerabilidades encontradas nesses pacotes.

Tentar gerenciar isso manualmente pode se tornar uma tarefa interminável, dependendo do tamanho da aplicação. Imagine o trabalho de comparar manualmente os boletins de segurança mais recentes, com as dependências em seu código.

Existem muitos serviços que se concentram na verificação das dependências da base de código, encontrando vulnerabilidades e exposições de segurança comuns (CVEs), tornando possível automatizar esta etapa , proporcionando ao desenvolvedor mais tempo para reparar os demais problemas de segurança, se concentrando na qualidade do código.

**Perceber os riscos de usar componentes de código aberto**
A maioria das aplicações utilizam componentes de código aberto, sejam elas bibliotecas, estruturas ou fragmentos de código individuais. Por serem pré-construídos, esses componentes podem auxiliar na redução do tempo de desenvolvimento, mas também costumam introduzir vulnerabilidades à aplicação.

Parte dos componentes de código aberto são usados na forma de “black box”, ou seja, os desenvolvedores conhecem a funcionalidade do código, mas não necessariamente sabem como funciona exatamente sua lógica.

Outros problemas podem surgir se os desenvolvedores não souberem de onde seus componentes são baixados ou validarem constantemente, seus números de versão.Isso pode elevar o potencial de insegurança da aplicação, devido a um possível código inseguro de origem open source e, também, às inconsistências na correção e aplicação de controle de versões.

Nesse sentido, o uso de ferramentas de análise de composição de software (SCA – Software Composition Analysis) fornece uma visão completa da cadeia de suprimentos de software. Essas ferramentas fazem isso analisando o código-fonte aberto, componentes de aplicativos de terceiros e binários, ajudando a localizar e rastrear componentes vulneráveis.

**Proteger e gerenciar dados confidenciais – DataOps**
Conhecer as práticas de segurança em torno do gerenciamento de dados e dos DataOps também tem sido uma exigência crescente do mercado em relação ao desenvolvedor.

É importante destacar que o gerenciamento de dados confidenciais vai além da segurança de dados. Com isso, é necessário capturar a linhagem de dados para mostrar por quem, quando, onde e como os dados foram alterados. Processos manuais não podem resolver este problema. Tudo isso deve acontecer por meio de plataformas seguras de integração e gerenciamento de dados.

DataSecOps é uma abordagem para automatizar a privacidade e a segurança de dados, integrando privacidade, segurança e governança em fluxos de trabalho automatizados que são executados juntamente com operações de desenvolvimento, implantação e análise de dados.

Portanto, centralizar o gerenciamento de identidades, definir permissões baseadas em funções e mascarar dados confidenciais em ambientes de desenvolvimento, são práticas importantes de segurança e privacidade de dados que um desenvolvedor precisa ter em mente durante o desenvolvimento, ainda mais agora, com a implantação da LGPD (Lei Geral de Proteção de Dados).

**Defender a importância do ‘Desenvolvimento Seguro’ para a Empresa**
No dia a dia de um desenvolvedor, uma das maiores dificuldades enfrentadas é a de conciliar o desenvolvimento seguro com os prazos curtos e inflexíveis, muitas vezes impostos por product owners, gerentes de projetos ou outros tipos de stakeholders da empresa.

Desse modo, se mostra necessário defender a importância de AppSec, ou seja, a segurança no desenvolvimento, evidenciando os riscos do desenvolvimento de aplicações inseguras para as demais instâncias da empresa. Encontrar e corrigir vulnerabilidades durante o desenvolvimento e teste é mais eficiente e menos caro do que fazê-lo no final do processo, quando um aplicativo já está em produção.

Um conceito que vem se popularizando no mundo dev é o de “Shift-Left”, que significa tornar a segurança parte do desenvolvimento de um software desde a fase de concepção e design, passando por todo o processo de desenvolvimento até a produção.

Gastar algumas horas a mais no desenvolvimento, priorizando a segurança, pode poupar muito tempo e gastos futuros, quando colocamos na balança as  consequências de uma vulnerabilidade explorada por um agente mal-intencionado.

**Incentivar um planejamento de AppSec no seu Desenvolvimento**
Ao decorrer dos tópicos elencados, ficou nítida a importância do planejamento e cultura organizacional de AppSec (desenvolvimento seguro) para todo o time de desenvolvedores de uma empresa.

As atividades relacionadas à segurança geralmente são realizadas apenas como parte da etapa de teste, no final do SDLC (Software Development Life Cycle), gerando retrabalho ao desenvolvedor e custos para o negócio. Imagina construir um código inteiro para descobrir só no final que ele tem uma falha básica de segurança?

Além disso, é muito comum equipes de desenvolvedores deixarem a proteção da aplicação exclusivamente com o time de segurança. Entretanto, a única maneira de aumentar a segurança é permitir que eles também  sejam autossuficientes em termos de proteção das aplicações.

Esse tipo de planejamento não se trata apenas de adicionar um monte de ferramentas.  É crucial também entender quais ferramentas são de fato necessárias, além de incentivar a cultura de AppSec, durante todo o processo.

Se você é líder do seu time, comece criando diretrizes claras sobre quem é responsável por cada tarefa de segurança.

Faça uma modelagem de ameaças durante o planejamento de sua aplicação, isto é, antes mesmo de iniciar a codificação. 

- Construa uma prática de treinamento de segurança e programas de educação sobre o tema;
- Como parte do seu plano, inclua procedimentos com rastreabilidade do progresso de identificação e resolução das vulnerabilidades encontradas, utilizando, como exemplo, playbooks ou manuais para a padronização das etapas a serem seguidas dependendo do cenário identificado.

Seguindo estas etapas, você garante que os problemas não sejam negligenciados e ainda simplifica futuras correções.

A chave é sincronizar a segurança em todo o processo de desenvolvimento e planejamento.

**Importância da cultura de segurança no desenvolvimento**
À medida que a tecnologia avança, as pessoas se tornam cada vez mais dependentes de aplicações para realizar as tarefas diárias. Essa confiança resulta em uma consciência crescente da segurança e, portanto, na crescente demanda dos clientes por produtos que forneçam serviços seguros e confiáveis.

Revise a lista, considere quais dos itens são mais aplicáveis à sua organização e, em seguida, comece a fazer ajustes necessários para melhorar a sua cultura de segurança.

Além disso, converse com os desenvolvedores da sua equipe e pratique a empatia, entendendo as suas principais dificuldades. Você provavelmente encontrará desenvolvedores realmente talentosos, que conheçam segurança e possam ser preparados para atuarem como Security Champions.

O objetivo de obter ajuda interna dos desenvolvedores é alavancá-los como multiplicadores de força para essa mudança cultural. Ao adotar algumas dessas práticas, você pode reduzir futuras vulnerabilidades em seu software. Com isso, você pode ficar tranquilo sabendo que você e seus clientes estão mais seguros.

Link para o post original: https://bit.ly/3CwqHq0