Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Introdução
“Código móvel” é um código que tem sua fonte em um sistema remoto
possivelmente “não confiável” porém executado em um sistema local.
Esse conceito de “código móvel” tem recebido diversos nomes: agentes
móveis, downloadable code, conteúdo executável, cápsulas ativas, código remoto e
outros. Todos lidam com a execução local de código com fonte remota.[1]
A popularização das redes de computadores tornou a transferência de dados
uma atividade corriqueira, como códigos executáveis também se traduzem em dados,
as transferências deles também cresceu e cada vez mais tem sido feita de forma
automática. Muitas vezes é difícil identificar o que está executando em uma máquina.
Mais ainda, se for o caso de um código móvel que pode executar e deixando pouco ou
nenhum rastro. Por isso a questão de segurança é um aspecto fundamental a ser
observado com o intuito de evitar a execução de códigos maliciosos.
1
As máquinas compartilhadas tentam oferecer recursos aos seus usuários,
tentando não comprometer o seu próprio funcionamento ou os dados dos usuários.
Isso se consegue inicialmente criando mecanismos de identificação dos usuários e a
partir dai, determinando quotas de espaço em disco, quotas de processamento, quotas
de banda passante de dados, criando políticas de segurança e listas de controle de
acesso (ACL) a arquivos e dispositivos.
Normalmente quanto mais recursos se procura oferecer maiores as
dificuldades de manter o ambiente seguro. Então ambientes que visam segurança,
costumam limitar os recursos oferecidos.
Javascript
Trata-se de uma linguagem de script que é distribuída através de código fonte
embutido em páginas HTML, é interpretado pelo navegador Web do usuário.
Applet Java
Também tem a sua execução iniciada por uma página HTML porém é
distribuído em código intermediário que roda em uma máquina virtual Java disparada
pelo navegador com diversas limitações de segurança.
Flash
Também tem a sua execução iniciada por uma página HTML e também roda
em uma plataforma disparada pelo navegador.
Agentes móveis
“Em termos gerais, um agente pode ser definido como um software capaz de
executar uma tarefa complexa em nome de um usuário” - Markus Endler
Um agente é móvel se ele é capaz de se mover de máquina para máquina em
uma rede heterogênea.
Exemplos de frameworks para agentes móveis são o Ajanta e o Jade.
Alua
Plataforma para execução remota de scripts Lua. Oferece acesso remoto e
assíncrono a uma maquina virtual Lua [4].
2
Vírus
A forma mais conhecida de códigos móveis maliciosos. Dezenas de exemplos
de vírus que procuram se espalhar da forma mais autônoma possível pelo maior
número de máquinas, muitas vezes também procurando causar danos. Esses são
provavelmente o maior motivador da preocupação com segurança que nos aflige
atualmente.
3
Um exemplo desses danos é o ataque conhecido como DOS (denial of
service), onde se tenta sobrecarregar um sistema de pedidos que tem a única intenção
de sobrecarregar esse sistema de forma que comprometa o atendimento dos pedidos
que teoricamente são sérios. Os sistemas mencionados compreendem os software, os
computadores e a rede que oferecem o serviço. Ambientes distribuídos são propícios
a gerar sobrecarga pois bastam poucas pequenas solicitações de muitos para
sobrecarregar um único elemento do sistema.
2.2.3 Sandboxes
Uma sandbox é um ambiente de execução controlado. Nessa metodologia o
ambiente montado esconde funcionalidades potencialmente perigosas do sistema e até
outros sistemas.
2.2.4 Playgrounds
O playground é uma solução na linha dos sandboxes. Um playground é uma
máquina reservada para códigos móveis, com todos os recursos locais liberados
porem os recursos das outras máquinas que não fazem parte do playground ficam
inacessíveis ao código móvel [5].
4
2.2.7 Criptografia e assinatura de mensagens
Através de pares de chaves assimétricas é possível assinar e criptografar
mensagens. A assinatura garante que a mensagem realmente foi enviada pela entidade
que assinou. A criptografia garante que somente o destinatário conseguirá ler a
mensagem.
3.2 Ajanta
O Ajanta fornece um servidor de agentes e um servidor de nomes. Para
implementar uma aplicação que rode no servidor de agentes é preciso:
5
- Extender a classe AgentServer para adicionar funcionalidades específicas da
aplicação.
- Criar recursos, entre outras coisas, estendendo a interface Resource . Qualquer
serviço ou informação que deve ser acessível aos agentes pode ser transformado em
um recurso
- Extender a classe Agent com os métodos necessários para executar as tarefas do
Agente.
Os mecanismos de segurança do Ajanta se baseiam em mecanismos de
tipagem forte e em pares de chaves públicas e privadas.
Em quase todas as comunicações é utilizado o mecanismo de desafio e
resposta (challenge response) e assinaturas, sendo que a chave privada fica
armazenada no servidor de nomes.
Gerenciador de segurança
Além de garantir que não seja criado um novo class loader cria uma lista de
controle de acesso (ACL) para os arquivos locais e recursos da rede e garante que o
agente somente crie threads no grupo reservado para ele.
6
Interface RMI com proteção baseado em proxy
Assim como os recursos para cada agente que quer se disponibilizar para
chamadas remotas é necessário criar um proxy que controla o acesso.
Revelação seletiva
Permite que o programador do agente possa especificar que certos dados
somente sejam visíveis há determinado servidor de agentes pré-determinado.
Para isso é criada uma estrutura onde ficam armazenados os dados
criptografados com a chave pública dos servidores de agentes destino e as
identificações de servidor destino. Tudo isso vai assinado com a chave do agente,
permitindo que a qualquer momento seja verificada se houve alguma alteração.
7
O serviço de nomes é implementado por diversos controladores de domínio
(registries) que são responsáveis pelo espaço de nomes de um determinado domínio.
A proteção é implementada através de interfaces RMI autenticadas para o
acesso dos clientes e entre os controladores.
Uma descrição detalhada da instanciação e dos mecanismos de segurança do
Ajanta se encontra em [6].
3.3 JADE
Continuando na linha dos agentes móveis em Java pesquisei as soluções de
segurança do framework Jade. Esse framework não implementa questões de
segurança, porem foi desenvolvido um adicional chamado Jade-S que pode ser
plugado ao Jade. Assim o uso de segurança implica em algum processamento e
configuração adicional que a as aplicações podem ou não utilizar de acordo com suas
necessidades
3.3.1 JADE-S
O JADE-S 1.0 transforma a plataforma Jade em um ambiente multiusuário,
para isso, cria um ambiente onde é possível identificar os usuários e ajustar as suas
permissões. Ele identifica os usuários utilizando certificados emitidos por uma
autoridade certificadora (CA) central. Assim somente a CA possui um par de chaves
publica e privada. Além disso o JADE-S permite a utilização de SSL para a
comunicação [7].
A autoridade certificadora do JADE-S emite um certificado para cada usuário
que por sua vez para receber o certificado tem que informar seu nome e senha que
estão armazenados no CA.
A partir daí o usuário pode criar agentes que recebem também do CA,
certificados com o seu nome e o nome do usuário.
Os agentes também podem solicitar a emissão de certificados de delegação,
onde delegam privilégios para outros agentes normalmente por um tempo
determinado.
8
Com esses certificados os agentes se identificam e identificam em nome de
quem estão agindo. O JADE-S verifica as permissões do usuário em arquivos de
políticas. Esses arquivos determinam as políticas de acesso para diversos recursos
como sockets, gerenciadores de janela e até outros agentes.
Com esse modelo de políticas para os diversos recursos o JADE-S não utiliza
o modelo de sandbox .
A arquitetura do JADE-S conta com que o volume de assinaturas de
certificados (que é centralizado) seja muito menor que o de verificação de certificados
que é processado onde estiver o agente (distribuído).
Existem propostas para a versão 2.0 do JADE-S utilizando uma infraestrutura
de chave publica simples (SPKI), princípios de gerência de confiança e regras de
segurança para grupos [9].
A proposta da gerência de confiança é que cada recurso ou grupo de recurso
tenha um responsável com o seu par de chaves, que emite certificados autorizando o
acesso ao recurso. Assim existe um responsável por cada grupo de recursos.
9
ver se a chave publica checa a assinatura. Depois da mesma forma a cadeia de
delegações é checada.
4 Conclusões
A segurança de códigos móveis tem evoluindo seguindo diversas correntes.
Alguns têm tentado criar ferramentas ou melhorar os sistemas operacionais para
lidarem melhor com códigos móveis, em contraste aos que têm procurado tornar os
códigos móveis independente de sistema operacional e plataforma de hardware,
através de linguagens de programação e máquinas virtuais.
Há também correntes que preferem montar ambientes seguros, que escondem
diversas funcionalidades dos códigos móveis (sandbox) em contraste as que preferem
ter um controle de acesso onde podem aceitar ou rejeitar o acesso a algum recurso
sem “esconde-lo”.
Uns preferem centralizar algumas funções, outros distribuir.
Os últimos avanços são provavelmente devido ao aparecimento de novas
tendências como computação ubíqua e peer-to-peer. Os avanços tem sido em direção
a melhorar a escalabilidade das soluções distribuindo cada vez mais as suas funções
como é o caso da SPKI.
O paradigma de agentes móveis, hoje, provavelmente é o paradigma que mais
exercita questões de segurança para códigos móveis.
O que parece ser senso comum é que é necessário a utilização de chaves
simétricas para garantir o controle de acesso a recursos e a integridade dos dados e
códigos transmitidos.
5 Referências:
1. L. Brown. Mobile Code Security, AUUG96, Melbourne, September 1996.
2. http://bednorz.uni2.net/anyland/threadmaster/threadmaster.htm
3. Linux Programmer’s Manual, setrlimit(2)
4. ALua 3.0b, PUC-Rio, Abril de 2004, http://alua.inf.puc-rio.br/doc/alua.pdf
5. A.S. Tanenbaum: "Distributed Systems", Prentice-Hall International, 2002
10
6. N. Karnik and A. Tripathi. Security in the Ajanta Mobile Agent System.
Software - Practice and Experience 31(4), 2001. pp. 301-329.
7. G. Vitaglione. JADE TUTORIAL - Security Administrator Guide, 19-
September-2002. JADE 2.61
8. JADE Board. JADE TUTORIAL - Security Administrator Guide, 28-February
-2005. JADE 3.3
9. N. Lhuillier, M. Tomaiuolo, G. Vitaglione . SECURITY IN MULTI-AGENT
SYSTEMS: JADE-S GOES DISTRIBUTED - September 2003, TILAB "EXP
in search of innovation" Journal.
10. M. Humphrey, M. Tompson. Security Implications of Typical Grid
Computing Usage Scenarios – October 2000
11. http://www.webopedia.com/TERM/N/nonrepudiation.html
11