Você está na página 1de 12

Mdulo 7

Segurana

Lio 2
Sandbox

Verso 1.0 - Jan/2008


JEDITM

Autor Necessidades para os Exerccios


Aldwin Lee Sistemas Operacionais Suportados
NetBeans IDE 5.5 para os seguintes sistemas operacionais:
Cheryl Lorica
Microsoft Windows XP Profissional SP2 ou superior
Mac OS X 10.4.5 ou superior
Red Hat Fedora Core 3
Equipe Solaris 10 Operating System (SPARC e x86/x64 Platform Edition)
Rommel Feria NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas:
Microsoft Windows 2000 Profissional SP4
John Paul Petines Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e
x86/x64 Platform Edition)
Vrias outras distribuies Linux

Configurao Mnima de Hardware


Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel
Sistema Operacional Processador Memria HD Livre
Microsoft Windows 500 MHz Intel Pentium III 512 MB 850 MB
workstation ou equivalente
Linux 500 MHz Intel Pentium III 512 MB 450 MB
workstation ou equivalente
Solaris OS (SPARC) UltraSPARC II 450 MHz 512 MB 450 MB
Solaris OS (x86/x64 AMD Opteron 100 Srie 1.8 GHz 512 MB 450 MB
Platform Edition)
Mac OS X PowerPC G4 512 MB 450 MB

Configurao Recomendada de Hardware

Sistema Operacional Processador Memria HD Livre


Microsoft Windows 1.4 GHz Intel Pentium III 1 GB 1 GB
workstation ou equivalente
Linux 1.4 GHz Intel Pentium III 1 GB 850 MB
workstation ou equivalente
Solaris OS (SPARC) UltraSPARC IIIi 1 GHz 1 GB 850 MB
Solaris OS (x86/x64 AMD Opteron 100 Series 1.8 GHz 1 GB 850 MB
Platform Edition)
Mac OS X PowerPC G5 1 GB 850 MB

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).

Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html

Segurana 2
JEDITM

Colaboradores que auxiliaram no processo de traduo e reviso


Acio Jnior Denis Mitsuo Nakasaki Luiz Fernandes de Oliveira Junior
Alexandre Mori Emanoel Tadeu da Silva Freitas Maria Carolina Ferreira da Silva
Alexis da Rocha Silva Guilherme da Silveira Elias Massimiliano Giroldi
Angelo de Oliveira Leandro Souza de Jesus Paulo Oliveira Sampaio Reis
Bruno da Silva Bonfim Lucas Vincius Bibiano Thom Ronie Dotzlaw

Auxiliadores especiais

Reviso Geral do texto para os seguintes Pases:


Brasil Tiago Flach e Vincius G. Ribeiro (Especialista em Segurana)
Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro

Coordenao do DFJUG

Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias


Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social
Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso,
disponibilizao dos materiais e insero de novos mdulos
Rodrigo Nunes - Coordenador responsvel pela parte multimdia
Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)

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

3. Componentes Principais de uma Sandbox


Trs componentes da Sandbox funcionam juntos para assegurar a segurana Java quando o
cdigo carregado. O gerenciador de segurana refora os limites de uma Sandbox e restringe as
aes que so vlidas.

3.1. Carregador de Classes

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.

3.2. Verificador de Bytecodes

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

3.3. Gerenciador de Segurana

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

Para applets e plug-ins Java, o gerenciador de segurana carregado automaticamente. Para


reforar: aplicaes Java no tem um gerenciador de segurana instalado por padro, enquanto
Applets Java possuem um gerenciador de segurana muito estrito para proteger recursos locais.

Segurana 6
JEDITM

4. Elementos da Sandbox Java


Em termos de administrao de segurana, Java possui os seguintes elementos:

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

4.2. Code Sources

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.

5.2. Arquivos de Poltica de Segurana

A administrao da Sandbox Java feita listando-se vrias permisses no arquivo de poltica de


segurana Java. A JVM pode manipular mltiplos arquivos de poltica de segurana em vrias
localizaes. Apesar disso, por padro, usa dois arquivos de poltica de segurana especficos. O
arquivo de poltica de segurana global java.policy, encontrado em $JREHOME/lib/security/,
usado por todas as instncias de uma JVM no sistema. considerado um arquivo de poltica de
segurana global porque compartilhado por todas as instncias da JVM a partir deste JRE
particular.
Em adio ao arquivo de poltica de segurana global, um usurio especfico chamado .java.policy
tambm pode ser encontrado no diretrio do usurio. As permisses definidas neste arquivo mais
aquelas no arquivo de poltica de segurana global definem as permisses dadas para um
programa.
Arquivos de poltica de segurana so apenas arquivos de texto simples. Ferramentas como
policytool podem ser usadas para administr-los. Estes arquivos de poltica de segurana tambm
so usados com a JAAS (Java Authentication and Authorization System) e, devido s nuances de
sintaxe, recomendado edit-los manualmente.
Na maioria dos casos, o cdigo carregado advm de uma nica localizao. H tambm casos
onde existem mltiplas Code Sources para uma simples localizao, tal como, utilizar a RMI. Para
casos como esse, as permisses dando acesso a um recurso em particular sempre a interseo
de permisses e de todas as permisses concedidas em todos os codebases.
Permisses concedidas para uma nica Code Source so concedidas como a unio de todas as
permisses dos arquivos de poltica usados pela JVM para todas as Code Sources relacionadas,
bem como os assinantes, enquanto que para uma aplicao remota as permisses so
determinadas pela interseo de todas as permisses em todas as Code Sources ativas.

Segurana 9
JEDITM

5.2.1. A Ferramenta Policytool


um software grfico usado para gerenciar o arquivo java.policy. Possui um argumento na linha
de comando
file nomeDoArquivo

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.

5.2.2. Permisses alm dos Arquivos de Poltica de Segurana


A maioria das permisses dadas para um conjunto de cdigo vem dos arquivos de poltica de
segurana. Entretanto, algumas aplicaes tem garantia de permisso para o cdigo que elas
carregam, e os carregadores de classe padro Java concedem permisso adicional para classes
que elas carregam.
Classes carregadas a partir do sistema de arquivos tm permisso para ler arquivos no diretrio e
subdiretrios a partir dos quais elas foram carregadas. Classes carregadas a partir de um recurso
de rede atravs de HTTP tm, por padro, concesso para conectar-se de volta com o host de
onde elas foram carregadas; elas tambm tm permisso para aceitar conexes a partir daquele
host.

5.2.3. O arquivo java.policy


Por padro, usurios no tm acesso ao arquivo java.policy em seu diretrio home, o que significa
que o conjunto padro de permisses para todos os programas Java sendo executados na JVM,
so definidos no arquivo encontrado em $JREHOME/lib/security/java.policy.
Este o contedo do arquivo java.policy para Java 5:
keystore "${user.home}${/}.keystore";

// As extenses padres obtm as permisses por default


grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};

// Padro de permisses garantidas para todos os domnios


grant {
permission java.lang.RuntimePermission "stopThread";
permission java.net.SocketPermission "localhost:1024-", "listen";
permission java.util.PropertyPermission "java.version", "read";
permission java.util.PropertyPermission "java.vendor", "read";
permission java.util.PropertyPermission "java.vendor.url", "read";
permission java.util.PropertyPermission "java.class.version", "read";
permission java.util.PropertyPermission "os.name", "read";
permission java.util.PropertyPermission "os.version", "read";
permission java.util.PropertyPermission "os.arch", "read";
permission java.util.PropertyPermission "file.separator", "read";
permission java.util.PropertyPermission "path.separator", "read";
permission java.util.PropertyPermission "line.separator", "read";
permission java.util.PropertyPermission "java.specification.version",
"read";
permission java.util.PropertyPermission "java.specification.vendor",
"read";
permission java.util.PropertyPermission "java.specification.name", "read";
permission java.util.PropertyPermission "java.vm.specification.version",
"read";
permission java.util.PropertyPermission "java.vm.specification.vendor",
"read";
permission java.util.PropertyPermission "java.vm.specification.name",
"read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";

Segurana 10
JEDITM

permission java.util.PropertyPermission "java.vm.name", "read";


};

A primeira linha define keystores inclusas no arquivo $USER/.keystore, onde verifica os


certificados de entidades que possuem cdigo assinado. As prximas sees definem permisses
para certas propriedades Java.
Por padro, as classes tm permisso para chamar Thread.stop(), escutar uma porta no
privilegiada e umas poucas propriedades do sistema. importante notar que, enquanto a
aplicao tem a permisso para escutar as conexes de socket, no lhes permitida as aceitas,
por padro.

5.2.4. O arquivo java.security


Por padro, a Sandbox controlada por meio dos dados do arquivo java.security encontrado em
$JREHOME/lib/security/java.security/, que pode ser editado por administradores de sistema.

Para definir um novo arquivo de poltica de segurana, o definimos como:

policy.url.n = url

Onde n um nmero. Por exemplo, os arquivos de poltica padro so definidos como:

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

Outra entrada no arquivo java.security policy.expandProperties, permite substituies para


outras propriedades para o tornar mais portvel.
Tambm possvel aos usurios definir seu prprio arquivo de poltica de segurana por ocasio
da execuo de uma aplicao atravs de linha de comando. Para restringir este comportamento,
ajustamos a propriedade policy.AllowSystemProperty para false. Isso determina uma Sandbox
com permisses e propriedades padres que no podem ser modificadas pelos usurios finais.

Segurana 11
JEDITM

Parceiros que tornaram JEDITM possvel

Instituto CTS
Patrocinador do DFJUG.

Sun Microsystems
Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas.

Java Research and Development Center da Universidade das Filipinas


Criador da Iniciativa JEDITM.

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

Você também pode gostar