TCC-Amanda Basso Oliveira
TCC-Amanda Basso Oliveira
TCC-Amanda Basso Oliveira
DEPARTAMENTO DE COMPUTAÇÃO
ENGENHARIA DE COMPUTAÇÃO
São Carlos - SP
2022
Amanda Basso de Oliveira
São Carlos - SP
2022
Dedico este trabalho a todas as pessoas que, direta ou indiretamente, contribuíram para
mais essa fase de sucesso na minha vida.
Agradecimentos
Agradeço, primeiramente, aos meus pais, Carlos e Renilda, pelo apoio incondicional
ao longo de todas as jornadas de minha vida. Eles são os principais responsáveis pela
minha formação acadêmica.
Agradeço a todos os meus amigos, em especial às minhas amigas Ana, Laís, Mariane
e Rafaela. Vocês são uma fonte de inspiração e força contínuas.
Ao meu namorado, Gabriel, agradeço pela companhia e pelo incentivo. Obrigada
por tornar a jornada mais leve e agradável.
Também agradeço ao professor Dr. Hélio Crestana Guardia por ter me apresentado
ao tema, pela orientação e por todos os ensinamentos.
Por fim, agradeço a todos meus amigos de faculdade pelo suporte, convivência e
experiências compartilhadas. Eles agregaram enormemente à minha jornada como aluna
do curso de Bacharelado em Engenharia de Computação.
“Nada na vida deve ser temido, somente compreendido. Agora é hora de compreender
mais para temer menos.
(Marie Curie)
Resumo
Os dados são protagonistas da Quarta Revolução Industrial, uma vez que permitem que
o mundo digital se torne cada vez mais conectado e inteligente. Entre os diversos tipos
de dados, pode-se destacar os dados pessoais e sensíveis, que exigem maior cautela no
tratamento, devido às informações que podem revelar. Nesse contexto, urge considerar
os impactos negativos do roubo e do vazamento de dados por ciber-criminosos que, além
das implicações legais e jurídicas resultantes de leis como a Lei Geral de Proteção de
Dados Pessoais (LGPD), podem ser financeiramente e moralmente catastróficos a empresas,
governos e indivíduos.
Assim, este projeto visa criar uma proposta de arquitetura baseada em microsserviços que
lide com dados sensíveis, baseando-se nas necessidades do projeto Amive. Os resultados
obtidos incluem uma proposta de arquitetura que considera aspectos relacionados à
segurança, como gestão da identidade e do acesso e encriptação de dados, e à escalabilidade,
ao mesmo tempo que englobam questões de segurança a serem tratadas em trabalhos
futuros.
From the point of view of remote storage and access to sensitive data, the architecture of
the software can play a crucial role in the security of a system. Today, several applications
are developed following the architectural style known as Microservices-Based Architec-
ture(O’REILLY. . . , ). Its popularity is due, mainly, to its advantages, among which are the
autonomy of the entities that constitute the architecture, low coupling, and fault tolerance.
The model based on microservices allows different forms of implementation, given its high
flexibility, which can impact the security of the resulting system.
Thus, this project aims to create an architecture proposal based on microservices that
deals with sensitive data, based on the needs of the Amive project. The results obtained
include an architecture proposal that considers aspects related to security, such as identity
and access management and data encryption, and scalability, thus encompassing security
issues to be addressed in future works.
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Organização do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . 21
2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 23
2.1 Arquitetura baseada em Microsserviços . . . . . . . . . . . . . . . . . 23
2.1.1 Comunicação entre Microsserviços . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2 Virtualização e conteinerização . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.3 Bancos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Lei Geral de Proteção de Dados Pessoais . . . . . . . . . . . . . . . . 28
2.3 Como entender as ameaças à arquitetura . . . . . . . . . . . . . . . . 29
2.3.1 Avaliar o escopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 Identificar pontos vulneráveis . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3.3 Identificar contramedidas ou gerenciar riscos . . . . . . . . . . . . . . . . . 33
2.3.4 Avaliar o trabalho realizado . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4 Projeto Amive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3 FUNDAMENTOS DA PESQUISA . . . . . . . . . . . . . . . . . . . 37
3.1 Gestão da Identidade e do Acesso . . . . . . . . . . . . . . . . . . . . 37
3.1.1 Tipos de contas de usuário . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1.1 Administrador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1.2 Usuário comum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1.3 Serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.2 Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.3 Papéis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.4 Manutenção do ciclo de vida das contas de usuário . . . . . . . . . . . . . 38
3.1.5 Credenciais Temporárias . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1.6 Federação de Identidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1.6.1 Auth0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.6.1.1 Autenticação com o Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.6.2 OAuth 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.6.3 OpenID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.7 Gerenciamento de Segredos . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.8 Política de senhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.9 Autenticação Multifator . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.1.10 Ataques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.1.10.0.1 Adivinhação de senhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.1.10.0.2 Roubo de credenciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1.11 Melhores Práticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2 Proteção dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2.1 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.2 Dados em Repouso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.3 Dados em Trânsito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.2.4 Disponibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.2.5 Compliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2.6 Melhores Práticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3 Segurança da Arquitetura baseada em Microsserviços . . . . . . . . 50
3.3.1 Ciclo de vida do desenvolvimento de software seguro . . . . . . . . . . . . 50
3.3.2 Contêineres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.3.3 Segurança das camadas 3 e 4 . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3.3.1 Exposição de serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3.3.2 Segmentação de redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3.3.3 Segregação de serviços sensíveis . . . . . . . . . . . . . . . . . . . . . . . . 55
3.3.3.4 Gerenciamento do acesso remoto . . . . . . . . . . . . . . . . . . . . . . . . 55
3.3.4 Melhores Práticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1 Pontos de verificação . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Pontos de discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3 Diretrizes em compliance com a LGPD . . . . . . . . . . . . . . . . . 63
5.4 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
19
1 Introdução
viços que lide com dados sensíveis, baseando-se nas necessidades do projeto Amigo Virtual
Especializado (Amive)1 desenvolvido por pesquisadores da Universidade Federal de São
Carlos (UFSCar).
De forma resumida, o projeto Amive visa construir uma solução para identificação
automática de um possível perfil depressivo (PPD). Para tanto, pressupõe a construção de
um modelo multifatorial fundamentado na área da Saúde Mental.
A solução lidará com dados sensíveis fisiológicos, como frequência cardíaca e
informações referentes ao monitoramento de sono, além de dados sensíveis que armazenam
conteúdo de posts de Facebook dos usuários. Estes dados serão coletados e tratados pela
infraestrutura computacional para treinamento do modelo e, em seguida, para identificação
de PPDs.
Portanto, urge criar uma arquitetura de solução robusta da perspectiva da segurança
e da escalabilidade. Nesse sentido, utilizar o projeto Amive como cenário para este trabalho
agrega à pesquisa aqui apresentada, porque fornece o contexto para a proposta da solução e
o ambiente com pesquisadores multidisciplinares, e corrobora com os propósitos do projeto
Amive, concomitantemente.
1.1 Objetivos
Este trabalho tem o objetivo de propor uma arquitetura de aplicação baseada em
microsserviços que englobe melhores práticas de segurança. Para tanto, este projeto se
apoiará sobre três pilares fundamentais: a gestão da identidade e do acesso (IAM, da sigla
em inglês), a proteção dos dados levando em consideração aspectos legais como a LGPD e
a segurança da arquitetura.
O projeto Amive, previamente citado, será utilizado como embasamento e referência,
mas as boas práticas de segurança pesquisadas para este trabalho podem ser utilizadas
em diversas soluções.
1.2 Justificativa
O presente trabalho estuda as melhores práticas de segurança relacionadas tanto
ao tratamento de dados, sensíveis ou não, quanto ao desenvolvimento de arquitetura
baseada em microsserviços. O intuito é propor uma arquitetura de sistema baseada em
microsserviços com foco em segurança e escalabilidade, levando em consideração aspectos
apresentados ao longo dos capítulos 2 e 3.
1
<https://www.amive.ufscar.br/projeto>
1.3. Organização do trabalho 21
Conquanto exista extensa literatura sobre segurança de aplicações, que une pers-
pectivas da gestão da identidade e do acesso e da arquitetura da solução, ainda há
poucos estudos de casos que englobem a segurança destes pontos de vista com as questões
levantadas pela Lei Geral de Proteção de Dados.
A revisão bibliográfica contém, dentre outros, a publicação do National Institute
of Standards and Technology (NIST) intitulada "Security Strategies for Microservices-
based Application Systems"(CHANDRAMOULI, 2019), diretamente relacionada ao pilar
de segurança da arquitetura. Além disso, diversos outros materiais acerca da gestão da
identidade e do acesso (IAM, da sigla em inglês) foram encontrados, como documentação
online de IAM da Amazon Web Services (AWS)(IAM. . . , ). A Lei 13.709/2018, também
conhecida como LGPD, é referida múltiplas vezes na revisão bibliográfica para balizar o
tratamento de dados em contexto brasileiro.
2 Fundamentação Teórica
• Serviços confiáveis como bancos de dados e caches devem ser utilizados para gerenci-
amento de estado.
• Atomicidade: é necessário que a transação ocorra por completo ou que não ocorra.
Essa propriedade também é conhecida como "tudo ou nada".
• Durabilidade: uma vez que a transação ocorreu, o banco de dados não pode voltar
ao estado anterior.
Bancos de dados SQL são essenciais para soluções que precisam assegurar as propri-
edades ACID, por exemplo, em aplicações com alto número de transações interdependentes.
No entanto, eles apresentam limitações quando se trata de sistemas em constante mudança
ou crescimento.
Embora existam diversas técnicas para escalar bancos de dados relacionais, como
replicação controlador/agente, os bancos de dados não-relacionais, ou NoSQL, têm melhor
desempenho quando o volume de dados é muito grande e a aplicação precisa ser escalada
constantemente (WANG; YANG, 2017), embora não possuam a confiabilidade de bancos
de dados relacionais.
Além disso, processos de modelagem de dados iterativos e adaptativos funcionam
melhor com bancos de dados NoSQL, visto que mudar a estrutura não impactará nos ciclos
de desenvolvimento e é possível armazenar diferentes tipos de dados sem a necessidade de
planejar os tipos de dados armazenados com antecedência.
Nesse sentido, diz-se que bancos de dados NoSQL seguem as propriedades incluídas
no acrônimo BASE (do inglês, Basically Available, Soft state e Eventual consistency):
de compliance. Uma da leis mais relevantes no Brasil, nesse contexto, diz respeito ao
tratamento de dados e é conhecida como Lei Geral de Proteção de Dados Pessoais (LGPD):
por quatro perguntas que buscam ajudar os profissionais responsáveis pela segurança da
informação a realizar a modelagem de ameaças:
através da API do Facebook e, visto que o servidor terá acesso ao token da API do usuário,
a própria aplicação poderá coletar esses dados. O terceiro canal, por sua vez, é o ChatBot
que será desenvolvido para comunicação com o usuário e coleta de dados de sentimento
subjetivo. Os dados serão enviados para o servidor sempre que houver comunicação entre
o ChatBot e o usuário. Na versão final, o ChatBot também validará dados recebidos dos
modelos de classificação e os registrará, de forma a retroalimentar o modelo.
Além disso, também serão coletados dados psicométricos dos usuários a partir de 3
questionários. O primeiro deles busca coletar dados relativos a características demográficas,
como data de nascimento e forma de ingresso na UFSCar. O segundo, por sua vez, trata-se
do PHQ-9, um método utilizado por entrevistadores treinados em estudos populacionais
para identificação de PPD e que contém questões relacionadas ao interesse em realizar
atividades, ao apetite, à concentração, entre outras. O último questionário é o WHODAS
2.0, que engloba questões sobre cuidado pessoal, relação com pessoas, atividades de vida
diária e outras perguntas relacionadas.
A Figura 7 mostra o diagrama alto-nível para a aplicação Amive. Os dados coletados
através dos canais mencionados serão processados por módulos de classificação que buscarão
identificar PPDs.
3 Fundamentos da pesquisa
3.1.1.1 Administrador
Trata-se da conta de usuário comum. Seus privilégios variam desde “apenas leitura”
até os privilégios de administrador. É importante garantir que cada usuário tenha uma conta
individual com as permissões estritamente necessárias (princípio do mínimo privilégio).
38 Capítulo 3. Fundamentos da pesquisa
3.1.1.3 Serviços
Aplicações ou acesso por linha de comando podem utilizar contas de serviços para
conseguir acesso aos recursos desejados. Isso é possível por meio de uma identificação de
chave e uma chave secreta para adquirir acesso.
3.1.2 Grupos
Atribuir permissões individualmente a cada conta de usuário dentro de um sistema
pode ser factível até certo ponto. Em grande escala, torna-se cada vez mais complexo
gerenciar as permissões para as contas de forma individual e manual. Por esta razão, é
possível agrupar as contas e atribuir as mesmas permissões a estes grupos.
No contexto do projeto Amive, por exemplo, pode-se destacar dois grupos triviais,
como usuário comum e profissional da saúde. Contas de usuário que fazem parte do mesmo
grupo possuem o mesmo conjunto de permissões, que devem seguir o Princípio do Mínimo
Privilégio.
É possível - e essencial - criar grupos mais granulares de forma a garantir que
cada usuário tenha apenas o menor conjunto de permissões necessárias para realizar suas
funções dentro do sistema. Dessa forma, o sistema torna-se mais robusto contra escalação
de privilégios.
3.1.3 Papéis
Enquanto grupos permitem agrupar usuários, papéis, por sua vez, agrupam permis-
sões. É possível atribuir um conjunto de permissões, ou um papel, a uma conta isoladamente
ou mesmo a um grupo de contas.
Papéis diminuem a complexidade de atribuir permissões a contas de usuários
individuais e a grupos. Em larga escala, é essencial utilizar papéis, com diversos níveis de
permissão e granulares o suficiente de modo a atender ao Princípio do Mínimo Privilégio,
para atribuição de permissões.
Além disso, é fundamental garantir que o processo de criação de novos usuários seja
administrado. É uma prática comum, por exemplo, criação de vários usuários logo após a
release do sistema, visto que as contas de acesso estão sendo criadas pela primeira vez.
Esse será o caso do projeto Amive, que cadastrará 300 usuários para coleta de informações
sensíveis para treino do modelo.
No entanto, se uma conta de usuário for criada meses após o cadastro inicial de
usuários, é importante entender se aquela conta é válida ou se se trata de um possível
ciber-criminoso que ganhou acesso à permissão de criação de contas e está deixando uma
porta de acesso não documentada (backdoor, em inglês).
3.1.6.1 Auth0
Além disso, o Auth0 permite que o Facebook atue como um provedor de identidade
social (IdP social) para aplicações nativas, sem a necessidade de redirecionamento via
navegador web. O processo (AUTH0. . . , a) funciona como descrito a seguir:
• Passo 2: A aplicação, então, usa o Token de acesso para fazer uma requisição de
Token de Acesso às informações da sessão do Facebook (Facebook Session Info Acess
Token, em inglês).
• Passo 4: Por fim, a aplicação pode usar o token de acesso às informações de sessão
do Facebook para autenticar com Auth0.
3.1.6.3 OpenID
com o tamanho delas e com os caracteres incluídos. Ressalta-se que a política de senhas
mencionada anteriormente aumenta drasticamente o tempo necessário para que a senha
seja descoberta, utilizando-se os recursos computacionais disponíveis atualmente.
Figura 8 – Tempo necessário para quebrar uma senha de acordo com tamanho e caracteres.
Fonte (THE. . . , ).
• Algo que se tem, como tokens, gerados por software ou por hardware.
3.1.10 Ataques
Os ataques mais comuns que dizem respeito a IAM envolvem adivinhação de senhas
de usuários e roubo de credenciais.
• Dados sensíveis: são dados pessoais que exigem maior atenção no tratamento.
Alguns exemplos de dados sensíveis: dados pessoais relacionados a crianças e adoles-
centes, dados que revelam origem racial ou étnica, questões genéticas, biométricas e
sobre a saúde de uma pessoa.
• Dados públicos: inclui tanto dados que não são pessoais e/ou sensíveis e dados
que os são, mas foram tornados públicos com consentimento do indivíduo.
3.2.4 Disponibilidade
A disponibilidade de dados também é uma questão importante a ser levada em
consideração ao arquitetar uma solução. Urge garantir que a aplicação esteja acessível para
os usuários e, para isso, faz-se necessário planejar a quantidade de requisições aos recursos
3.2. Proteção dos Dados 49
ao longo do tempo. Isso ocorre pois em determinadas épocas do ano pode haver maior
número de acessos à aplicação. Um exemplo típico é o acesso à plataformas de e-commerce
durante o período de festas no final do ano e, se os sistemas não estiverem preparados
para lidar com a demanda recrudescente, as perdas financeiras e de reputação podem ser
catastróficas.
Para casos de aumento de demanda, a arquitetura baseada em microsserviços se
mostra bastante versátil, uma vez que é possível escalar os microsserviços necessários
separadamente. Sobretudo para sistemas que usam soluções em nuvem, híbridas ou não, é
possível escalar tanto verticalmente - aumento de recursos, como memória RAM ou CPU
do hardware responsável pelas funcionalidades - quanto horizontalmente, por meio de
adição de máquinas.
Outra questão diretamente relacionada à disponibilidade dos serviços prestados
por uma aplicação são os ataques do tipo Denial of Service (DoS) ou Distributed Denial of
Service (DDoS). Neles, o objetivo é cortar acesso dos usuários ao sistema ou aos serviços
oferecidos por ele.
3.2.5 Compliance
Existem diversas políticas de compliance que devem ser seguidas, dependendo do
escopo da aplicação, do tipo de dados que ela manipula, do país ou estado em que atua,
entre outros fatores.
No Brasil, talvez a mais conhecida das políticas que devem ser seguidas por
aplicações que manipulam dados é a LGPD, abordada previamente. No entanto, diversas
outras políticas e leis podem ser aplicadas e é de suma importância que o desenvolvimento
da aplicação seja alinhado a elas.
• Governança:
– Estratégia e métricas: visa criar um plano efetivo para realização dos objetivos
relacionados à segurança da aplicação.
18
<https://owasp.org/www-project-samm/>
3.3. Segurança da Arquitetura baseada em Microsserviços 51
• Projeto:
• Implementação:
• Verificação:
• Operações:
3.3.2 Contêineres
Como foi mencionado na seção 2.1.2, contêineres permitem empacotar aplicações
configuradas para executar em qualquer tecnologia, desde que apoiada por contêineres.
Isso é possível através do uso de imagens de contêiner, que podem ser armazenadas tanto
localmente quanto em repositórios.
As imagens podem ser fornecidas por terceiros e armazenadas em repositórios de
imagens de contêineres, como o Docker Hub. Normalmente, essas imagens são construídas
sobre a imagem de um sistema operacional e modificadas por meio de instruções de
instalação e de configuração em um arquivo como o Dockerfile.
O uso de imagens públicas armazenadas em repositórios pode representar um risco
de segurança. Isso ocorre porque, além da possibilidade de haver malwares ou backdoors
nessas imagens, elas podem conter vulnerabilidades críticas. Uma pesquisa de 2020 realizada
pela Prevasio19 (PREVASIO. . . , ), empresa que oferece uma ferramenta de gerenciamento
da postura de segurança na nuvem (CSPM, da sigla em inglês), descobriu que 51% de cerca
de 4 milhões de imagens públicas armazenadas no Docker Hub continham vulnerabilidades
críticas.
Além disso, 6 mil contêineres continham mineradores de criptomoedas e backdoors
o que, embora não signifique necessariamente que as imagens estão comprometidas, pode
indicar que atividades maliciosas estão em curso. Por último, a análise de contêineres
maliciosos mostrou imagens que, em tempo de execução, poderiam fazer download de
fontes de mineração de criptomoedas através de scripts.
Assim, imagens de contêineres devem ser constantemente avaliadas de acordo com
as melhores práticas de segurança. Isso inclui garantir que o software instalado com a
imagem está atualizado e que terá acesso a atualizações futuras, além de executar a imagem
de contêiner como um usuário com os mínimos privilégios necessários.
Uma ferramenta interessante é a Docker Bench for Security 20 . Trata-se de um script
que busca por melhores práticas de segurança em torno da implantação de contêineres
Docker em produção. Outro ponto a ser levado em consideração é que muitos dados de log
são perdidos quando o contêiner para de executar. Para isso, podem ser usados plugins,
oferecidos pelo Docker por exemplo, que realizam a função de coletar logs.
19
<https://www.prevasio.io/>
20
<https://hub.docker.com/r/docker/docker-bench-security>
3.3. Segurança da Arquitetura baseada em Microsserviços 53
exposição do banco de dados. Um banco de dados não deve jamais ser acessível diretamente
pela internet e alguma camada deve ser implementada para buscar seus recursos, como
uma API.
Uma rápida busca no Shodan com o filtro “port:3306”, que é a porta comumente
utilizada para acesso aos servidores de bancos de dados MySQL, retornou mais de 4
milhões de resultados. A Figura 11 ilustra os resultados da busca.
podem se comunicar livremente. Para comunicação entre as partes, são estabelecidas regras
mais rígidas e, normalmente apenas alguns serviços são permitidos.
A segmentação de redes reduz superfície de ataque de sistemas comprometidos,
uma vez que a parte ameaçada está logicamente isolada das outras. Além disso, pode
ser usada para criar uma camada extra de isolamento para sistemas sensíveis, já que
acrescenta um ponto de estrangulamento (chokepoint, em inglês). Por último, também
melhora a performance da rede, já que separa tráfegos não relacionados em segmentos
diversos da rede. O processo de segmentar uma rede em partes menores é conhecido como
subnetting e as redes menores derivadas do processo são chamadas de subnets.
Subnets públicas permitem acesso vindo da internet, desde que exista um endereço
de IP público. Subnets privadas, por outro lado, não são acessíveis pela internet, visto que
não fornecem serviços a usuários e seus serviços devem ser acessados exclusivamente por
serviços internos. Caso haja a necessidade de permitir tráfego no sentido estrito subnet
privada para a internet, é possível utilizar gateways Network Address Translation (gateways
NAT).
Para serviços muito sensíveis, como banco de dados, pode-se utilizar servidores
jumpers ou bastiões para criar mais uma camada de isolamento. Servidores jumper são
tratados como a porta única de entrada para um grupo de servidores dentro de uma zona
de segurança e podem funcionar como uma ponte entre duas redes confiáveis, como duas
subnets.
Bastiões, por sua vez, ficam fora da zona de segurança da rede da aplicação. O
objetivo dos bastiões é de prover acesso a uma rede privada a partir de redes externas,
como a própria internet. Em ambas as técnicas, contudo, o servidor que funciona como
porta de entrada é tratado como um ponto de auditoria para acessar as subnets.
O acesso remoto a serviços pode ser realizado através de dois protocolos: Re-
mote Desktop Protocol (RDP) no caso do Windows e Secure Shell (SSH), para sistemas
operacionais baseados em Linux.
Visto que eles permitem o gerenciamento remoto de sistemas, pode-se dizer que
eles deixam um possível agente malicioso a um roubo ou adivinhação de credenciais de
distância dos serviços. Por essa razão, eles devem ser utilizados somente se estritamente
necessário.
56 Capítulo 3. Fundamentos da pesquisa
13. Segmentar a rede privada interna, separando os serviços que não comunicam-se entre
si ou que apresentam níveis diferentes de sensibilidade.
14. Não permitir que os serviços sejam desnecessariamente acessíveis por redes externas.
15. Filtrar os serviços que devem ter acesso aos recursos de outro serviço através do uso
de IPs.
16. Desativar acesso remoto a serviços caso não seja estritamente necessário.
Com base nos conceitos estudados e apresentados ao longo dos capítulos anteriores,
foi formulada uma arquitetura de sistema baseada em microsserviços que atendesse às
necessidades do projeto Amive. A proposta, fundamentada sob um modelo constituído
em camadas, foi ilustrada levando-se em consideração o modelo C4 para visualização de
arquitetura de software.
A Figura 12 ilustra o diagrama de contexto do modelo C4 para o projeto Amive.
5 Conclusão
• Adoção de uma fila de mensagens designada para prover os dados aos consumidores
inscritos em eventos de seu interesse, que pode ser tanto do tipo message broker
quanto publish-subscribe.
referidos acima foram escolhidos. Eles são essenciais para fundamentar o restante do
desenvolvimento e devem ser seguidos.
Os outros pontos discutidos nas seções de “Melhores práticas” do capítulo 3 podem
e devem ser incluídos no refinamento da arquitetura para o projeto Amive em trabalhos
futuros. Alguns exemplos de pesquisas que podem derivar deste trabalho serão citados na
seção 5.4.
• Ressaltar que dados não previstos podem ser coletados, desde que fornecidos com o
consentimento do usuário.
• Proposta de arquitetura mais minuciosa para o projeto Amive, a nível dos diagramas
de componentes e de código do modelo C4.
Referências
AWAD, M. et al. Password security: Password behavior analysis at a small university. 5th
International Conference on Electronic Devices, Systems, and Applications (ICEDSA),
2016. Citado na página 43.
BENCHMARKS, C. Cis password policy guide. Center for Internet Security, 2021.
Citado na página 42.
DOCKER – Use containers to Build, Share and Run your applications. <https:
//www.docker.com/resources/what-container/>. Último acesso em: 28/03/2022. Citado
3 vezes nas páginas 13, 26 e 27.