Segurança em Sistemas Distribuídos

Introdução

lá vai o tempo em que era necessário comprar um supercomputador para realizar tarefas mais complexas. Hoje em dia tudo faz mais sentido quando a mesma tarefa é processada em paralelo por vários computadores, ou quando os mesmos periféricos são acedidos por vários terminais em simultâneo. Daí o conceito de Sistema Distribuído.

O que é um Sistema Distribuído—Definição

Sistema Distribuído é um conjunto de computadores independentes, interligados através de uma rede de computadores, que se apresenta ao utilizador como um sistema único e consistente. Por exemplo, uma tarefa qualquer a executar, se for feita por um conjunto de computadores a computação é distribuída por todos e não apenas por um, não sendo necessária sobrecarga de processamento.

Uma tarefa qualquer, se divisível em várias sub-tarefas pode ser realizada em paralelo.

Vantagens / Desvantagens

A grande vantagem dos Sistemas Distribuídos é poder, com computadores baratos e de baixo processamento, formar um supercomputador que normalmente sairia muito caro. O compartilhamento de recursos (impressoras, dados, CDs, etc.), a transparência, concorrência (acesso da várias máquina a uma só), tolerância a falhas (confiabilidade—se falhar um computador numa rede de vários é mais fácil recuperar da falha do que se fosse apenas num computador), escalabilidade (facilmente podem ser adicionados computadores à rede), aumento da capacidade de computação, aumento da segurança / estabilidade global, factor económico (é melhor ter vários computadores medianos / fracos que um forte) e capacidade de processamento. São estas as principais vantagens.

Procedimentos Remotos

Os procedimentos remotos tiveram origem nos anos 80, surgindo da necessidade de haver uma metodologia de programação distribuída. A primeira foi o RPC (Remote Call Procedure), numa altura em que a linguagem dominante era o C. Como a linguagem C era procedimental e permitia chamar uma função em qualquer parte do código, pensou-se em desenvolver uma técnica que facilitasse o desenvolvimento de aplicações para Sistemas Distribuídos mantendo a ideia de chamar funções de máquinas exteriores da mesma maneira como se fosse na própria. Logicamente que tinha de haver algo que fosse totalmente transparente para o programador e que fizesse a conversão dos dados recebidos / enviados para o cliente e para o servidor, isto é, as stub routines. Para melhor perceber este procedimento, pode olhar para o seguinte esquema:

Sistemas Distribuídos: RPC com stub routines

Como se pode observar, os stubs encarregam-se daquilo a que se chama marshalling, ou seja, converter os dados para o formato intermédio para enviar do cliente para o servidor ou do servidor para o cliente, e voltar a convertê-los do formato intermédio no local de destino (unmarshalling).  Alguns exemplos de implementações de RPC são: Sun RPC (para plataformas UNIX / Linux), Java RMI (RPC para Java), DCOM (RPC para Windows), SOAP (utilizado por serviços da web) e CORBA (padrão RPC independente da plataforma).

Política de Segurança

Uma rede de computadores, por natureza, tem várias ameaças. Num sistema informático o principal objectivo é proteger a informação, ou seja, controlar a capacidade de aceder, alterar ou executar um ficheiro, um registo, uma base de dados, etc. Mas o principal objectivo de um sistema distribuído é a partilha de informação, logo isto conduz a um dilema porque também é necessário facilitar o acesso à mesma.  A solução passa por definir uma política de segurança, na qual se deve ter sempre em conta vários factores como é o caso do custo, valor da informação, o que se pretende proteger, que mecanismos de protecção podem ser utilizados e claro, fazer uma avaliação das possíveis ameaças e formas de ataque. Esta política teve origem nos sistemas militares, em que o principal problema era a divulgação de informação não autorizada. Para além do controlo do acesso à informação também é necessário garantir a sua integridade. É necessário ter em consideração as várias ameaças a definir na política de segurança. Entre elas destacam-se o acesso e divulgação não autorizado de informação, modificação ilegítima da informação, operações não autorizados sob recursos do sistema, bloqueio de acesso legítimo à informação e vandalismo.

Quanto aos possíveis ataques, destacam-se: a personificação (quando alguém se faz passar por nós), execução de operações que contornam os mecanismos de segurança, introdução de código malicioso ou prejudicial (exemplo: vírus) nos sistemas informáticos, criação ou utilização de canais para comunicações ilegítimas (fuga de informação), escuta de mensagens e adulteração de mensagens (modificação, inserção, repetição de mensagens antigas…).

Tipos de Políticas de Segurança

Destacam-se três tipos de políticas de segurança. A primeira é a chamada de isolamento dos agentes. Caracteriza-se por limitar a interacção do agente à sua máquina virtual (como se fosse uma sessão num sistema operativo). Implica a identificação de cada agente, isto é, necessita de autenticar-se (por exemplo a validação recorrendo ao par login/password). Cada agente possui um ID, isto é, um identificador que o representa cada vez que tentar aceder a um recurso do sistema. Esta política tem várias vantagens: implica a impossibilidade de contornar os mecanismos de controlo de segurança e de criar ou utilizar canais de comunicação encobertos ou ilegítimos. Também possui diversas desvantagens, algumas delas já mencionadas: infiltração de código malicioso, escuta de terminais de monitores (através da radiação electromagnética dos terminais é possível ver o que uma pessoa faz no seu posto de trabalho), e o ataque às palavras-passe dos utilizadores (em que a maioria são baseadas em dicionários: séries de televisão, filmes, próprio nome, família, matrícula do carro, …).

Outro tipo de política é o chamado controlo de acessos e foca-se na limitação da capacidade de interacção. Existe uma matriz de direitos de acesso que dá autorização ou não a um agente quando este pretende efectuar uma operação. Também existem as ACLs (Access Control Lists), que em português corrente significa lista de controlo de acessos. Estas são armazenadas junto de cada objecto e controlam o acesso de agentes a objectos do sistema. Há também as capacidades de cada agente perante os objectos do sistema, mas estas capacidades são guardadas junto de cada agente. Depois é importante realçar a importância de dois mecanismos: autenticação (validação da identidade, uma falha na autenticação invalida a utilização da matriz de direitos de acesso) e autorização (operação que valida os direitos do agente sobre o objecto). Depois há uma espécie de Monitor de Controlo de Referência, que valida na altura de execução de uma operação se o agente tem o direito de a efectuar. Isto também obriga a que cada objecto seja alvo de uma identificação única e inequívoca. Os ataques a este tipo de política visam alterar o isolamento entre agentes, alterar a matriz de controlo de referência e eliminar o controlo efectuado pelo Monitor de Controlo e Referência.

O outro tipo de política é o controlo do nível de segurança da informação e parte do princípio que só se deve dar ao agente a informação que ele realmente precisa. A informação é classificada de acordo com o seu nível de confidencialidade. O controlo de acesso dos agentes é efectuado com base em duas regras: não podem ler informação classificada em níveis superiores ao seu, e não pode escrever informação classificada em níveis inferiores ao seu.

Criptografia

De forma de evitar a escuta e falsificação de mensagens surge a cifra de mensagens—Criptografia. Ou seja, é estabelecido um canal seguro onde passam os dados cifrados. Esta técnica tem um senão, pois não evita a reutilização de mensagens. Convém referir que apesar das mensagens estarem cifradas, existe uma pequena probabilidade de um atacante deduzir a chave, embora esta seja muito pequena. O tamanho da chave de cifra é fulcral, pois uma chave pequena é mais facilmente descoberta (através de “força bruta” por exemplo) que uma chave maior.

Existem dois tipos de criptografia: Criptografia Simétrica e Criptografia Assimétrica. Os algoritmos de cifra simétrica são normalmente mais rápidos que os de cifra assimétrica, a chave só deve ser conhecida pelos intervenientes legítimos e é usada tanto nas operações de cifra como nas de decifra. Um exemplo disso é o algoritmo DES (Data Encription Standard). Na criptografia assimétrica usam-se pares de chaves relacionadas: uma chave pública (do conhecimento de todos) e outra privada (do conhecimento de uma entidade). Desta forma elimina-se o problema da partilha de chaves. Para obter a privacidade dos dados cifra-se com a pública e decifra-se com a privada, para a autenticidade dos dados cifra-se com a privada e decifra-se com a pública. Um exemplo de um algoritmo que utiliza a criptografia assimétrica é o caso do Diffie-Helman, muito utilizado em cifra de comunicações em redes.

Autenticação, Autorização e Assinatura Digital

Para a autorização de operações dos agentes em Sistemas Distribuídos, é usado o mecanismo mais vulgar em sistemas multiprogramados, como é o caso do UNIX / Linux. Ou seja, cada grupo e cada utilizador tem um código que é atribuído quando o utilizador se autentica. Associados a esse código existem os direitos positivos ou negativos às categorias de dono, grupo e restantes utilizadores.  Um factor de extrema importância é saber a autoria de determinada informação. A isto dá-se o nome de assinatura digital e processa-se de forma a calcular uma determinada hash para a informação X associada ao agente A. Com isto pretende-se garantir que o remetente da informação foi XPTO (autenticidade) e que o conteúdo não foi adulterado (garantir a integridade).

Conclusão

Com este artigo pretendeu-se que o leitor ficasse a saber, por alto, o que é um Sistema Distribuído e quais as suas características, nomeadamente: as ameaças, vantagens, desvantagens, algumas técnicas usadas na comunicação de processos, entre outras. Convém referir que nenhum tema foi aprofundado pelo que se quiser saber mais sobre algum assunto terá que pesquisar na internet sobre o mesmo. Para facilitar a tarefa, a seguir estão várias hiperligações para sites que tratam do assunto.

Referências

  1. http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_distribu%C3%ADda
  2. http://pt.wikipedia.org/wiki/Criptografia
  3. http://www.infowester.com/criptografia.php
  4. http://pt.wikipedia.org/wiki/Chamada_de_procedimento_remoto
  5. http://www.faqs.org/rfcs/rfc1831.html