O Tal do DevOpspor: Harrisson Biaggio
securitydevsecopssegurançadesenvolvimento

O que é segurança em camadas e como implementá-la no desenvolvimento de software

7 min de leitura

A segurança da informação é uma preocupação crescente no mundo digital, com cada vez mais empresas e indivíduos dependendo de sistemas de software para armazenar, processar e transmitir dados confidenciais. Para proteger adequadamente esses sistemas, é fundamental adotar uma abordagem abrangente e em camadas, conhecida como "segurança em camadas".

Neste artigo, vou abordar o conceito de segurança em camadas e fornecer diretrizes práticas para sua implementação no desenvolvimento de software.

O que é Segurança em Camadas?

A segurança em camadas é uma estratégia que envolve a aplicação de várias medidas de proteção em diferentes níveis do sistema de software, criando uma defesa em profundidade. Essa abordagem dificulta a exploração bem-sucedida por atacantes, já que a violação de uma única camada de segurança não é suficiente para comprometer o sistema como um todo.

As camadas de segurança funcionam de forma complementar, proporcionando redundância e minimizando os pontos únicos de falha.

1. Camada de Rede

A camada de rede é a primeira camada de segurança no desenvolvimento de software. Ela é responsável por proteger o software contra ameaças de rede, como ataques de DDoS (Distributed Denial of Service) e invasões de rede. Isso inclui a implementação de firewalls, sistemas de detecção de intrusão e sistemas de prevenção de intrusão.

Firewalls

Os firewalls são usados para bloquear o tráfego de rede indesejado e limitar o acesso ao software. Eles podem ser configurados para bloquear o tráfego de entrada ou saída e limitar o tráfego a determinados protocolos e portas.

Sistemas de Detecção de Intrusão (IDS)

Os sistemas de detecção de intrusão são usados para detectar atividades suspeitas na rede. Eles podem alertar os administradores de sistema sobre atividades suspeitas, como tentativas de invasão de rede, e ajudar a identificar ameaças antes que elas sejam capazes de causar danos.

Sistemas de Prevenção de Intrusão (IPS)

Os sistemas de prevenção de intrusão são usados para bloquear atividades suspeitas na rede. Eles podem bloquear tentativas de invasão de rede e impedir que hackers explorem vulnerabilidades no software.

Ferramentas/Métodos: Firewall, IDS/IPS, VPN, SIEM, NAC.

2. Camada do Sistema

A camada do sistema é a segunda camada de segurança em um sistema de software. Ela é responsável por proteger o software contra ameaças ao sistema operacional e ao hardware. Isso inclui a implementação de políticas de segurança em sistemas operacionais e a implementação de protocolos de segurança em hardware.

Políticas de Segurança em Sistemas Operacionais

As políticas de segurança em sistemas operacionais podem incluir a configuração de contas de usuário e permissões de acesso para garantir que apenas usuários autorizados possam acessar o SO. Além disso, as políticas de segurança podem incluir a implementação de patches e atualizações de segurança para corrigir vulnerabilidades no sistema.

Protocolos de Segurança em Hardware

Os protocolos de segurança em hardware podem incluir a implementação de sensores de temperatura e umidade para garantir que o hardware esteja funcionando corretamente. Além disso, os protocolos de segurança podem incluir a implementação de tecnologias de criptografia para proteger os dados armazenados no hardware.

Ferramentas/Métodos: Antivirus, criptografia, patch de atualização, autenticação e autorização.

O que são Autenticação e Autorização?

Poderíamos escrever um artigo inteiro abordando esse tema, mas, resumidamente:

Autenticação é o processo de confirmar a identidade de um usuário, aplicação ou device (exemplo: verificar usuário e senha, token, CORS, biometria).

Autorização define quais ações ou recursos um usuário, aplicação ou device autenticado pode acessar (exemplo: permitir acesso somente à leitura de um arquivo). Isso pode ser feito de várias formas, vou citar três delas:

  • ACLs (Listas de Controle de Acesso)
  • RBAC (Controle de Acesso Baseado em Função)
  • PBAC (Controle de Acesso Baseado em Política)

Ambos garantem a segurança dos sistemas e protegem dados e recursos. Embora estejam relacionadas, autenticação e autorização têm propósitos distintos.

3. Camada de Aplicação

A camada de aplicação é responsável por proteger o software contra ameaças a aplicativos específicos. Isso inclui a implementação de autenticação de usuários e criptografia de dados.

Autenticação de Usuários

A autenticação de usuários é usada para garantir que apenas usuários autorizados possam acessar o software. Isso pode incluir o uso de senhas, autenticação de dois fatores e certificados digitais.

Criptografia de Dados

A criptografia de dados é usada para proteger os dados armazenados no software. Isso pode incluir:

  • Criptografia de dados em repouso: envolve a criptografia de dados armazenados em discos rígidos e outros dispositivos de armazenamento.
  • Criptografia de dados em trânsito: envolve a criptografia de dados durante a transmissão, como quando um usuário envia dados pela internet.

Scanners de Vulnerabilidades

Aqui é recomendado utilizar scanners de vulnerabilidades, como:

  • SAST (Static Application Security Testing)
  • DAST (Dynamic Application Security Testing)
  • PenTest

Ferramentas/Métodos: SonarQube, Trivy, WAF, criptografia, autenticação e autorização, CORS e code review.

4. Camada de Dados

A camada de dados é a quarta e última camada de segurança em um sistema de software. Ela é responsável por proteger os dados do software contra roubo de dados e perda de dados. Isso inclui a implementação de backups regulares de dados e o uso de tecnologias de criptografia de dados.

Backups Regulares

Os backups regulares de dados são usados para garantir que os dados do software estejam seguros em caso de perda ou corrupção de dados. Além disso, os backups podem ser usados para restaurar dados em caso de violação de segurança ou falha de hardware.

Não adianta nada fazer o backup sem testar seu restore, blz? 😅

Criptografia de Dados

A criptografia de dados é usada para proteger os dados do software contra ameaças de roubo de dados. Isso pode incluir a criptografia de dados armazenados em discos rígidos e outros dispositivos de armazenamento, bem como a criptografia de dados em trânsito. A criptografia de dados pode ser usada em conjunto com outras camadas de segurança para fornecer uma proteção mais abrangente.

Importante: Note que neste ponto não estamos apenas falando de banco de dados, deve ser considerado todo e qualquer armazenamento de dados (buckets, discos, logs e etc).

Para quem trabalha com cloud e banco relacional, o AWS RDS e o GCP Cloud SQL já criptografam seus dados em repouso por padrão. Para criptografar os dados em trânsito, basta utilizar SSL na conexão entre o banco de dados e aplicação.

Ferramentas/Métodos: Criptografia na comunicação (SSL/TLS), Criptografia em repouso, backups, limitar acesso remoto (acesso somente a rede interna e via app), implementar privilégios de usuário adequados, monitoramento e auditoria.

Perguntas Necessárias

Gostaria de deixar um ponto para reflexão e algumas perguntas que sempre me faço durante o processo de desenvolvimento de um software:

  • Minha aplicação gera logs sensíveis?
  • Minha aplicação precisa estar exposta para internet?
  • Minha aplicação tem uma comunicação segura com o banco de dados? E com as outras aplicações?
  • Minha aplicação valida todos inputs do usuário?
  • Tenho Rate limit instrumentado, seja na app ou na camada de rede?
  • Sou capaz de monitorar minha aplicação? com logs e trace?
  • Meu CORS está devidamente configurado?
  • Minha aplicação tem o mínimo de autenticação?
  • Tem alguma variável ou algo sensível fixado no código? foi commitado?
  • Minha aplicação escala horizontalmente?
  • Tenho backups recorrentes do banco de dados?
  • Tenho controle sobre instalação e possíveis vulnerabilidades de bibliotecas?

Nesse artigo não vou abordar a importância do OWASP, mas vou deixar o link para consultar as principais vulnerabilidades e como resolvê-las: OWASP Top Ten

Conclusão

Cada camada de segurança é projetada para proteger o software contra um tipo específico de ameaça. Ao implementar todas as camadas de segurança, nós podemos reduzir significativamente o risco de violações de segurança.

É importante que os desenvolvedores levem a segurança a sério durante todo o processo de desenvolvimento. Uma simples função ou a instalação de uma biblioteca maliciosa pode acarretar em uma série de problemas catastróficos!

Use as ferramentas citadas a seu favor e implemente medidas de segurança adequadas para proteger o seu software.

Compartilhar:

Quer receber mais conteúdo?

Inscreva-se para receber artigos sobre DevOps, IA e segurança direto no seu email.

Newsletter em breve

Contato