Titulo Estágio
Segurança de Aplicações Distribuídas em Ambientes Cloud
Área Tecnológica
Engenharia de Software
Local do Estágio
Departamento de Engenharia Informática da Universidade de Coimbra
Enquadramento
Tem-se vindo a assistir a um rápido aumento da utilização de serviços em ambientes cloud. Estes ambientes são caracterizados pela deslocação dos dados, do software e da computação para infraestruturas que permitem o acesso remoto através de redes de comunicação. O desenvolvimento da cloud deve-se em grande medida ao rápido progresso da funcionalidade e do desempenho das redes de dados e dos equipamentos servidores. No entanto, a segurança destas infraestruturas não tem acompanhado esse mesmo progresso, sendo que os utilizadores confiam os seus dados a sistemas que estão fora do controlo pessoal que muitas vezes oferecem fracas garantias ao nível da segurança e da confiabilidade.
Neste contexto, surge naturalmente o problema da confiança depositada no "cloud provider", isto é, na entidade que gere a infraestrutura onde as aplicações são executadas. Qualquer organização que desenhe uma aplicação para ser executada na cloud (por exemplo na Elastic Compute Cloud da Amazon) terá de aceitar as garantias dadas pelo fornecedor do serviço.
Este estágio irá abordar o desafio fundamental de tolerar falhas e intrusões em aplicações para a cloud. O fornecedor do serviço computacional, isto é, o "cloud provider", emprega tecnologias de virtualização para gerir e repartir o poder computacional ao longo do tempo em função das necessidades reais da aplicação. Apesar da existência de plataformas sólidas de virtualização, a tolerância a falhas maliciosas e intrusões é ainda um problema de investigação.
Uma das superfícies de ataque que se procura minimizar consiste no domínio de uma máquina física (na qual residem múltiplas máquinas virtuais) por parte de um cliente que tenha acesso a uma máquina virtual. Por outras palavras, existe a possibilidade de alguém com acesso a uma máquina virtual violar as restrições de integridade e confidencialidade, conseguindo assim aceder e controlar máquinas virtuais que não lhe pertencem.
A via escolhida neste estágio para minimizar o impacto deste tipo de ataque consiste em aceitar como inevitável a existência de intrusões mas tolerá-las por forma a garantir que o serviço funciona correctamente ainda que alguns componentes da aplicação estejam sob o controlo de um adversário.
Para este efeito, podem empregar-se protocolos de comunicação distribuída existentes na literatura tolerantes a falhas maliciosas. É, no entanto, necessário lidar com um pressuposto desses mesmos protocolos que não se verifica em ambientes virtualizados -- a independência das falhas. Dado que se assume que as falhas se podem propagar de uma máquina virtual para outra (na mesma máquina física) é possível a um adversário controlar um número indeterminado de máquinas virtuais a partir de apenas uma. Um dos focos do estágio será, consequentemente, implementar um protocolo de comunicação tolerante a falhas que lide correctamente com a propagação de falhas entre múltiplas máquinas virtuais que executem esse protocolo.
Objetivo
O objectivo principal do estágio será o desenho e a implementação de uma solução que permita a um conjunto de máquinas virtuais -- que agrupadamente formam uma aplicação cloud -- comunicar de forma fiável.
Assim pretende-se criar um ambiente de demonstração de conceitos que simule um ambiente cloud, bem como uma aplicação que execute sobre esse mesmo ambiente. Numa primeira versão pretende-se apenas avaliar as vulnerabilidades da solução base, ainda sem tolerância a falhas. Assim, na primeira fase, as diversas máquinas virtuais irão comunicar através de um protocolo que não garante robustez na presença de falhas ou intrusões.
Na fase seguinte, o objectivo é implementar um conjunto de primitivas, ao nível de cada máquina virtual, que permitam tornar o serviço desempenhado pelo conjunto de máquinas virtuais mais robusto. Para tal, irá fazer-se uso de funcionalidades implementadas em dispositivos "tamper-proof" para construir primitivas de comunicação fiável.
Finalmente, pretende-se avaliar o resultado obtido. Em particular, deverá ser possível demonstrar os conceitos propostos com a aplicação desenvolvida, com foco particular na demonstração de robustez. Deverá ainda ser possível medir o desempenho da solução implementada por forma a garantir que é eficiente e não introduz latências demasiado elevadas, uma vez que isto poderia inviabilizar a aplicação da solução em cenários reais.
Plano de Trabalhos - Semestre 1
- Estudo do estado da arte e levantamento de requisitos (mês 1).
A primeira fase consistirá em tomar contacto com tecnologias de virtualização e aplicações para a cloud, bem como a familiarização com os desafios de segurança e confiabilidade acima referidos. Isto resultará numa clara formulação dos objectivos a alcançar por parte do estagiário.
- Criação do ambiente cloud (meses 2 a 4).
Esta tarefa consiste na selecção e instalação de uma plataforma de virtualização que permitirá implementar a solução e avaliar o seu desempenho.
- Desenho da aplicação cloud que permitirá demonstrar o conceito (meses 2 a 4).
Nesta tarefa pretende-se desenhar uma aplicação de armazenamento de dados na cloud, que irá permitir posteriormente demonstrar os conceitos a implementar. Pretende-se ainda definir aqui o conjunto de funcionalidades necessárias por parte dos protocolos de comunicação fiável, assumindo intrusões correlacionadas em máquinas virtuais colocadas na mesma máquina física.
- Escrita do relatório intermédio (mês 5).
O estagiário deve apresentar as tarefas efectuadas durante o primeiro semestre e descrever o trabalho a realizar no segundo semestre, escrevendo para esse efeito um relatório intermédio e preparando uma apresentação pública para discussão.
Plano de Trabalhos - Semestre 2
- Implementação dos serviços de comunicação fiável (meses 6 e 7).
Nesta tarefa o estagiário irá implementar as primitivas que permitirão à aplicação de demonstração comunicar de forma fiável. Dado que a aplicação de demonstração (sendo uma aplicação para a cloud) consiste em múltiplas instâncias a executar em múltiplas máquinas virtuais, pretende-se que essas instâncias possam comunicar de forma segura ainda que se assuma a existência de intrusões na infraestrutura que levem ao controlo de algumas dessas máquinas virtuais.
- Suporte para comunicação fiável na aplicação de demonstração (meses 8 e 9).
Esta tarefa consiste na continuação do desenvolvimento da aplicação de demonstração, com vista a assegurar a comunicação fiável recorrendo aos serviços implementados na tarefa anterior. O objectivo principal é poder demonstrar o conceito, ambicionando-se também a obtenção de medidas de desempenho que permitam avaliar a solução proposta.
- Escrita do relatório final (mês 10).
O estagiário deve apresentar todo o trabalho levado a cabo no decorrer do estágio. Para tal, deverá escrever uma tese descrevendo o problema e a sua solução, bem como preparar a sua apresentação e discussão pública.
Condições
O trabalho irá ser realizado no Departamento de Engenharia Informática da Universidade de Coimbra e inserir-se-á no âmbito do projecto Carnegie Mellon | Portugal intitulado TRONE ("Trustworthy and Resilient Operations in a Network Environment"), sendo que poderá surgir a oportunidade de bolsa para estagiário com Licenciatura.
Observações
Dar-se-á preferência a alunos que tenham tido um bom desempenho às disciplinas no âmbito do trabalho proposto (nomeadamente Sistemas Distribuídos, Sistemas Operativos, Integração de Sistemas e Computação de Alto Desempenho).
Orientador
Raul Barbosa e Filipe Araújo
rbarbosa@dei.uc.pt 📩