Skip to main content

Microsserviço 11

· 7 min read
Leandro Andrade
Leandro Andrade
Software Developer

No mundo moderno de desenvolvimento de software, é essencial possuir um conhecimento abrangente sobre segurança para que medidas protetivas sejam integradas desde o início do processo.

Ao adotar microsserviços, a superfície de ataque se expande devido ao aumento do fluxo de dados através das redes e à complexidade da infraestrutura. No entanto, os microsserviços oferecem vantagens como um escopo de acesso mais restrito e uma defesa em camadas, o que minimiza o impacto de um possível ataque.

Principais tópicos sobre segurança em arquitetura de microsserviços:

  • Princípios básicos de segurança;
  • As cinco funções da cibersegurança;
  • Fundamentos da segurança de aplicações;
  • Confiança implícita x confiança zero;
  • Estratégias de proteção de dados;
  • Métodos de autenticação e autorização.

Princípios básicos

A segurança do ambiente depende de seu elo mais fraco. O princípio de privilégio mínimo sugere que o acesso concedido deve ser o mais restrito possível, limitado ao necessário para a execução de uma função e apenas pelo tempo necessário.

O conceito de defesa em profundidade implica na implementação de múltiplas camadas de segurança. Ao distribuir funcionalidades em diferentes microsserviços e executá-los em segmentos de rede isolados, aplicamos este princípio efetivamente, limitando significativamente o impacto de um ataque.

info

Ao implementar medidas de proteção, podemos categorizar os controles em:

  • Controles de prevenção: como criptografia de dados e sistemas robustos de autenticação e autorização, impedem a ocorrência de ataques;
  • Controles de detecção: como firewalls de aplicação web (WAF), alertam sobre ataques em progresso ou já realizados;
  • Controles de resposta: como automação para reconstrução de sistemas e planos de comunicação eficazes, auxiliam na resposta a incidentes.

A automação desempenha um papel crucial na gestão de ambientes complexos, facilitando a recuperação rápida após incidentes, o que reforça a necessidade de incorporar práticas de segurança desde o início do desenvolvimento. A segurança não deve ser vista como um obstáculo que atrapalha o lançamento de um softwre nem deve ser tratada de forma isolada.

Cinco funções da cibersegurança

Antes de em investir esforço para proteger as aplicações, precisamos considerar quais são as ameaças que iremos enfrentar, ou mesmo determinar o que fazer caso um invasor consiga passar pelas defesas. Na arquitetura de microsserviços, dividimos a segurança em cinco funções essenciais:

  1. Identificar: threat modeling, realizar modelagem de ameaças para entender quem são os possíveis invasores e o que procuram;
  2. Proteger: garantir que os bens mais valiosos estejam protegidos; defesa em profundidade;
  3. Detectar: detectar incidentes pode ser mais complexo, já que temos mais redes para monitorar e mais máquinas para vigiar. Com mais fontes de informações, precisamos de ferramentas que permitam agregar todas essas informaçõesm em um ponto único de análise. Além disso, ferramentas de detecção de invasão podem ser executadas para identificar comportamento indevido;
  4. Responder: desenvolver uma estratégia eficaz para mitigar danos em caso de incidentes. Cultura de acusações e medo devem ser evitada já que lições não serão aprendidas, tampouco os fatores que levaram ao incidente serão revelados abertamente;
  5. Recuperar-se: restaurar a funcionalidade do sistema rapidamente após um ataque, com a ajuda de automação.

Fundamentos da segurança de aplicações

Entre os fundamentos de segurança para microsserviços, destacam-se:

  • Credenciais e segredos: Gerenciar adequadamente credenciais de sistema e de serviço, enfatizando a importância da rotatividade e revogação;
  • Patching: Manter sistemas atualizados pode ser desafiador; delegar essa responsabilidade a um provedor de nuvem pode ser benéfico;
  • Backups: Armazenar dados de maneira segura e isolada, com rotinas de restauração bem definidas.
  • Reconstrução: Capacidade de restaurar completamente um servidor de forma automatizada e confiável. Criar uma rotina de operação desse procedimento faz com que uma reconstrução seja quase isenta de ocorrências inesperadas;

Confiança implícita x confiança zero

Usuários interagem com sistemas, e esses sistemas interagem com outros sistemas. Assim, precisamos estabelecer um nível de confiança dentro do nosso ambiente.

Na confiança implícita, consideramos que qualquer chamada a um serviço, feita de dentro do nosso perímetro, seja implicitamente confiável. Entretanto, a utilização desse modelo deve ser um decisão consciente, ou seja, todos entendem e estão cientes dos riscos caso uma invasão ocorra.

Na confiança zero, pressupomos que o ambiente já foi comprometido, tudo é hostil e todas as chamadas provenientes de outros microsserviços devem ser avaliadas. Assim, devemos adotar medida de precaução para garantir que ainda podemos operar de forma segura. Aqui não falamos de perímetro, mas podemos criar zonas de sensibilidade dos dados (pública, privada, sigilosa) e microsserviços operando nessas zonas.

Proteção de Dados

A transição de sistemas monolíticos para microsserviços resulta em uma maior frequência de movimentação de dados, tanto através de redes quanto em armazenamentos locais. A proteção eficaz desses dados depende dos protocolos de comunicação adotados. Por exemplo, ao usar HTTP, a segurança é reforçada através do HTTPS, que oferece proteção da visibilidade e manipulação dos dados, além de autenticação mútua.

Para a comunicação entre usuários e servidores, o HTTPS é fundamental, proporcionando diversos mecanismos de segurança. Em comunicações entre serviços, o mTLS (Mutual TLS) é frequentemente usado em ambientes de confiança zero, proporcionando autenticação mútua e sendo facilitado pelo uso de service mesh.

Em relação aos dados em repouso, a criptografia é essencial para garantir que os dados permaneçam inacessíveis em caso de violações, utilizando algoritmos bem estabelecidos e seguros.

É crucial ser seletivo quanto aos dados coletados dos usuários, armazenando apenas o estritamente necessário para a operação do negócio ou para cumprimento de exigências legais. Desta forma, minimiza-se o risco associado ao armazenamento de dados sensíveis, já que ninguém poderá roubar aquilo que não se armazena.

Autenticação e Autorização

Autenticação verifica a identidade de um usuário ou serviço, garantindo que são quem afirmam ser, enquanto autorização determina as ações que eles podem executar dentro do sistema.

Na autenticação de serviço a serviço, o mTLS não só protege os dados em trânsito como também possibilita a autenticação mútua entre cliente e servidor. Alternativamente, chaves de API podem ser usadas para que os servidores validem as requisições dos clientes.

Para usuários, a autenticação geralmente envolve um login com senha, frequentemente complementada por autenticação multifatorial, que solicita informações adicionais para confirmar a identidade do usuário.

Dada a multiplicidade de usuários e serviços em uma arquitetura de microsserviços, a facilidade de uso se torna uma prioridade. Implementar uma solução de SSO (Single Sign-On) através do padrão OpenID Connect, um complemento do OAuth 2.0, simplifica o acesso a vários serviços sem necessidade de múltiplos logins.

Além disso, um Gateway de SSO geralmente atua como um proxy, facilitando a gestão de autenticações e autorizações entre os serviços e o mundo externo.

Quanto às roles ou funções específicas de um usuário, estas são definidas por cada microsserviço e podem ser incluídas junto com outras informações em um token JWT. Esse token é dividido em três partes:

  • header: contém detalhes sobre o algoritmo de assinatura;
  • payload: armazena informações do usuário, incluindo claims que podem ser customizadas;
  • signature: assegura a integridade do token e confirma sua origem legítima.

Os tokens JWT podem ser gerados no momento da autenticação inicial do usuário ou em cada requisição via um gateway de SSO, facilitando a integração e uso desses tokens sem alterar os fluxos de autenticação existentes.

ferramentas

  • zed attack proxy (ZAP)