Escolar Documentos
Profissional Documentos
Cultura Documentos
Segurana
Lio 2
Sandbox
Requerimentos de Software
NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition
Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando
a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar,
e executar aplicaes escritas em linguagem Java. Sun Java System Application Server
Platform Edition 9.
Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para
sua plataforma em http://java.sun.com/j2se/1.5.0/download.html
Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode
ser obtida diretamente da Apple's Developer Connection, no endereo: http://
developer.apple.com/java ( necessrio registrar o download da JDK).
Segurana 2
JEDITM
Auxiliadores especiais
Coordenao do DFJUG
Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM
Rommel Feria Criador da Iniciativa JEDITM
Segurana 3
JEDITM
1. Objetivos
Sempre que discutida a segurana Java, normalmente ela focada no modelo de Sandbox
(caixa de areia). Este modelo permite ao usurio final configurar restries e permisses para um
programa.
Tradicionalmente, executamos segurana nos computadores baseados em um sistema de
confiana. Antes de executar um sistema, deveramos ter a confiana no cdigo-fonte deste. Uma
vez que a aplicao tenha passados por esta checagem, possui mandato no sistema em que est
sendo executada. Se por qualquer motivo o programa possui uma inteno maliciosa, poder
destruir o sistema sem problemas, visto que no existem restries ao programa. Expondo isto de
forma simples, para proteger o computador devemos restringir o que fazer em primeiro lugar.
Ao final desta lio, o estudante ser capaz de:
Identificar o modelo de segurana padro empregado Sandbox
Conhecer os componentes da Sandbox
Realizar as configuraes dos componentes da Sandbox
Definir os domnios de proteo de sua aplicao
Aplicar a poltica de segurana, por intermdio das permisses
Entender como as classes podem ser assinadas (certificao digital)
Segurana 4
JEDITM
2. Modelo Sandbox
O modelo Sandbox torna fcil proteger o computador de programas carregados a partir de fontes
no confiveis. Em lugar de obter a confiana no recurso, a segurana alcanada permitindo que
qualquer programa seja executado entretanto, restringindo suas aes que poderia danificar seu
computador. A vantagem que invs de restringir ou checar qualquer coisa que entra em seu
computador, a Sandbox permite que qualquer programa seja executado e previne que este
realizar qualquer ao que poderia danificar o sistema.
O modelo de segurana Java gira ao redor desta idia de uma Sandbox. Gira ao redor da idia de
que quando permitido que um programa seja executado no computador, deveramos ser
capazes de fornecer um ambiente onde o programa pode fazer o que foi projetado para fazer e ao
mesmo tempo permite a habilidade de restringir acesso aos recursos que ele no deveria acessar.
H diferentes tamanhos de Sandbox tipicamente configuradas para um programa Java. Estes so:
Mnima Onde um programa tem acesso CPU, possui sua prpria memria, bem como
acesso para dispositivos de interface humana (isto , Monitor, Teclado, Mouse)
Padro Similar a mnima, exceto que tambm fornece acesso ao servidor WEB da qual
o programa Java foi carregado
Restrita Similar a padro, exceto que tambm fornece acesso para certos, mas no
todos, recursos do sistema operacional
Aberta Esta permite ao programa acessar qualquer recurso do sistema anfitrio
O modelo de segurana Java envolve todo aspecto de sua arquitetura. Para ser capaz de
assegurar que este est corretamente no lugar em que necessitamos olhar para diferentes partes
da arquitetura, bem como entender como estas tecnologias funcionam juntas.
Os seguintes componentes so os fundamentos do Modelo de Segurana Java:
Caractersticas de segurana construdas na JVM (Mquina virtual Java)
A arquitetura do carregador de classes
O verificador de arquivos de classe
O gerenciador de segurana e a API Java
Uma fora chave do modelo da Sandbox Java sua customizao. Da lista acima, o carregador de
classes e o gerenciador de segurana so completamente customizveis. Para definir sua prpria
segurana, voc define sua prpria implementao ou subclasses de java.lang.SecurityManager.
Com sua implementao do gerenciador de segurana, voc define seus prprios mtodos para
controlar o acesso a um determinado recurso - como escrever em um arquivo, por exemplo.
Adicionalmente, recomendado criar um gerenciador de segurana quando criamos um
carregador para instanciar classes a partir de recursos no confiveis.
Segurana 5
JEDITM
Em Java, o carregador de classes carrega os bytecodes a partir das classes compiladas, fora
limites de espaos de nome. Isto controla partes da JVM que o cdigo pode acessar.
Classes carregadas a partir do sistema de arquivos local tem seu prprio nome de espao.
Adicionalmente, um nome de espao para cada fonte de rede tambm definido. Isto assegura e
protege a JVM do conflito provocado por classes com o mesmo nome.
Uma vez que o carregador de classes carregou uma classe, chama o verificador de bytecodes. A
tarefa principal deste conferir o cdigo para ver se o mesmo est de acordo com a especificao
da linguagem de programao Java e procurar por quaisquer das seguintes violaes:
Regras da linguagem de Programao Java
Restries de nome de espao
Estouros de pilha (overflows e underflows)
Converso ilegal de tipos de dados
O verificador de bytecodes pode provar o seguinte:
O arquivo de classe tem o formato correto
Classes finais no possuem subclasses e mtodos finais no esto realizando polimorfismo
por override
Cada classe possui uma nica superclasse
No existe converso ilegal de atributos para tipos primitivos
No existe converso ilegal em objetos
O propsito do gerenciador de segurana determinar quais operaes uma classe tem permisso
para executar. De forma simples, o gerenciador de segurana responsvel por determinar a
maioria dos parmetros de uma Sandbox Java. Se um sistema em Java tenta escrever em um
arquivo ou conectar-se a um recurso de rede, primeiro deve obter permisso do gerenciador de
segurana. Alm disso, quando um aplicativo deseja modificar o estado dos servios, o
gerenciador de segurana controla tais operaes se as julgar perigosas.
Por padro, um gerenciador de segurana no usado quando um programa est sendo
executado. Para habilitar uma aplicao Java a us-lo, deve ser especificado:
D java.security.manager
Segurana 6
JEDITM
4.1. Permisses
Cada classe tem um conjunto de permisses que define o que est autorizada a executar. A
Sandbox Java ento definida com base nestas permisses. Quando uma ao executada por
uma classe, as permisses so checadas pela mquina virtual. Se determinada classe no deveria
ter a permisso para executar uma ao em particular, uma exceo lanada e a operao
bloqueada.
Classes do ncleo da API Java sempre possuem permisso para executar qualquer ao.
Quaisquer outras classes, mesmo que definidas na varivel classpath, devem ter permisso para
executar qualquer ao sensvel. Estas permisses so definidas em arquivos de poltica de
segurana que so administrados pelos usurios finais e so usados pela Sandbox para gerenciar
os arquivos de poltica de segurana.
Permisses empregadas pela mquina virtual so baseadas em um sistema de classes. Isto
significa que qualquer aplicao ou API pode definir suas prprias permisses e assegurar que os
usurios ou administradores possuem as permisses das APIs antes de executar. A prxima lista
descreve as permisses padres usadas pelo ncleo de classes Java:
java.io.FilePermission
Aes: ler, escrever, apagar e executar
java.net.SocketPermission
Aes: aceitar, escutar, conectar e resolver
java.util.PropertyPermission
Aes: ler e escrever
java.lang.RuntimePermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.awt.AWTPermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.net.NetPermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.security.SecurityPermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.io.SerializablePermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.lang.reflect.ReflectPermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
java.security.AllPermission
Aes: nenhuma, as classes tem ou no permisso para executar uma operao em
tempo execuo
Segurana 7
JEDITM
So localizaes que indicam de onde as classes sero carregadas. Pode incluir a URL das classes
bem como quem as assinou. importante notar que ambos so opcionais. A URL da classe pode
ser o um arquivo de URL do sistema ou da rede.
Pode-se associar permisses baseadas na URL a partir da qual foi carregada ou baseada somente
em quem a assinou. Tambm possvel assinalar permisses de uma combinao de URL e do
assinador. Esta URL dentro do cdigo fonte tambm conhecida como codebase.
Code Sources so uma combinao de codebase e assinante. O campo assinante deve coincidir
com o pseudnimo armazenado na chave keystore. Codebases podem ser quaisquer URL vlidas,
e como tais, usam barras "/" como separadores de nveis ou diretrios, mesmo que estejam no
sistema de arquivos local.
O final da URL tambm tem um impacto na definio. Existem quatro casos:
URL especifica um arquivo .jar Somente classes dentro daquele arquivo jar so parte do
codebase
URL termina com uma barra Somente arquivos .class no diretrio so parte do codebase.
Arquivos no esto inclusos
URL termina com um asterisco Todos os arquivos .jar e .class no diretrio pertencem ao
codebase
URL termina com um hfen Todos os arquivos .jar e .class pertencem ao diretrio e todos
os subdiretrios pertencem ao codebase
Note que a estrutura de um diretrio no afetada pelo nome do pacote. Por exemplo, para
carregar a classe up.jedi.Login, no necessrio adicionar o diretrio acima onde aparece. Por
exemplo, jedi.upd.edu.ph/, e no jedi.upd.edu.ph/up/jedi/.
Segurana 8
JEDITM
5. Domnios de Proteo
Um domnio de proteo uma associao de permisses com um Code Source em particular.
Domnios de proteo so o conceito bsico para uma Sandbox padro. Informam como o cdigo
carregado de um local em particular como por exemplo, www.sun.com tem a permisso de
escrever em um arquivo e possui o cdigo assinado por quem tem a permisso para iniciar os
trabalhos de impresso.
5.1. KeyStores
Classes Java podem ser assinadas atravs do uso de certificados digitais juntamente com a
ferramenta jarsigner. Deste modo, temos a possibilidade de conceder permisses para cdigo
assinado por uma determinada entidade.
O cdigo assinado pode ser manipulado atravs do uso de uma keystore. A keystore
basicamente onde armazenado os certificados, de chave pblica, que so usados para assinar o
cdigo utilizado. Antes de executar qualquer cdigo assinado, a chave pblica usada para
assin-la dever ser obtida e ento instalada na keystore do sistema. Alguns sistemas, como os
navegadores, aceitam certificados de chave pblica quando os arquivos so carregados pela
primeira vez, sendo ento assinados mas, usualmente, estes certificados devem ser
descarregados e instalados antes de se executar um aplicativo.
Keystores so administradas atravs do utilitrio keytool fornecido na distribuio padro Java.
Por padro, a keystore localizada em um arquivo chamado .keystore encontrada no diretrio
home do usurio. Quando um certificado de chave pblica instalado em uma keystore, o
administrador insere no certificado um nome ou um apelido que usado para uma futura
referncia. Este apelido usado na administrao dos vrios certificados e tambm o nome
usado no arquivo de poltica de segurana.
Segurana 9
JEDITM
Que se informa o nome do arquivo de poltica de segurana que se deseja editar. Este argumento
no define o carregamento do arquivo $HOME/.java.policy no diretrio do usurio; se este arquivo
no existir, por padro, nenhum arquivo carregado.
Segurana 10
JEDITM
policy.url.n = url
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
Segurana 11
JEDITM
Instituto CTS
Patrocinador do DFJUG.
Sun Microsystems
Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas.
DFJUG
Detentor dos direitos do JEDITM nos pases de lngua portuguesa.
Banco do Brasil
Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM.
Politec
Suporte e apoio financeiro e logstico a todo o processo.
Borland
Apoio internacional para que possamos alcanar os outros pases de lngua
portuguesa.
Instituto Gaudium/CNBB
Fornecimento da sua infra-estrutura de hardware de seus servidores para que os
milhares de alunos possam acessar o material do curso simultaneamente.
Segurana 12