Como construir uma arquitetura segura para aplicações WEB?

Michelle Mesquita
4 min readSep 16, 2021

--

Hoje em dia, cada vez mais, vemos as aplicações migrando do ambiente Desktop para a WEB. Isso se deve ao fato da maior portabilidade que um sistema WEB pode trazer, fazendo com que qualquer um possa acessar de qualquer lugar, com qualquer dispositivo ou sistema operacional. Dessa maneira, saímos de um ambiente mais controlado para um ambiente que pode estar exposto à Internet.

Além disso, com a implementação de metodologias ágeis, na qual engloba uma maior eficiência nas entregas de um software, com releases semanais ou quinzenais, fazem com que o desenvolver deixe a segurança como último nível. No entanto, caso ela fosse considerada na primeira etapa do Ciclo de Vida do software (SDLC), os gastos e o tempo para desenvolver uma aplicação seriam menores e por isso, devemos pensar na construção de uma arquitetura segura.

Então, o que é uma arquitetura segura? É uma arquitetura desenvolvida como forma de mitigar qualquer tipo de ameaça para uma aplicação.

Assim, temos que ter alguns princípios em mente:

  • Não confie em input
  • Habilite o menor acesso de privilégio possível
  • Torne a segurança simples para os desenvolvedores, mas eficaz
  • Habilite log e monitoramento
  • Proteja dados sensíveis (Security by Obscurity)
  • Security by default

Para criarmos um design dessa arquitetura, usamos a Modelagem de Ameaça (Threat Modeling) → processo para identificar, analisar e mitigar uma ameaça.

Aqui, podemos ver as fases do Threat Modeling:

Na qual na fase definição de segurança, devemos levar em consideração os pontos de entrada de um atacante. Como também, entender o caminho do dado que está sendo trafegado.

Então, podemos fazer um questionário levantando alguns pontos, como por exemplo: Como a aplicação lida com os dados?Ela previne acessos indevidos? Qual usuário pode ter acesso?Qual o objetivo dessa aplicação?Ela acessa dados sensíveis?Usa serviços de terceiros?

Assim, podemos identificar os possíveis cenários e as tecnologias utilizadas.

Quando pensamos no design da aplicação, devemos desenhar um diagrama de alto nível, considerando alguns pontos:

  • Precisamos entender como que a aplicação funciona de ponta a ponta
  • Os componentes utilizados
  • Os serviços que estão integrados
  • As tecnologias existentes na aplicação (linguagem de programação, sistema operacional, servidor WEB, banco de dados)
  • Tipos de comunicação: APIs, portas dos serviços e protocolo
  • Além de adicionar no desenho: Autenticação e Autorização

Por último, temos dois modelos muito conhecidos para identificar uma ameaça: STRIDE e DREAD.

STRIDE → Modelo se baseia no ataque.

DREAD → Modelo que calcula o risco de cada ameaça.

Onde: Risco = Probabilidade x Potencial Dano .

Os dois modelos possuem essas peculiaridades, onde o STRIDE é o modelo mais utilizado pelo mercado atualmente.

Depois de identificarmos as possíveis ameaças, devemos dizer aos desenvolvedores como tratar (mitigar) esses pontos vulneráveis.

Após eles tratarem esses pontos, podemos validar a aplicação e observar se foram mesmo tratados.

Uma ótima ferramenta para esse tipo de análise é o Iriusrisk .

Então, para criarmos uma arquitetura segura, devemos pensar numa validação correta dos inputs, configuração segura do servidor, firewall implementado, tipo de criptografia para os dados e o hardening do Sistema Operacional.

Além disso, devemos lembrar que todo esse processo deve ser feito no início do ciclo do software (secure shift left) para que ele consiga se tornar o mais seguro possível e sem maiores custos no futuro, como vimos no gráfico acima :)

--

--

Michelle Mesquita
Michelle Mesquita

Written by Michelle Mesquita

DevSecOps & AppSec Engineer & Developer girl 👩‍💻

No responses yet