16.Controlo de Acesso em AVE

Propaganda
Notas sobre
Controlo de Acessos nas
Plataformas .NET e Java
Notas para a UC de “Segurança Informática”
Inverno de 12/13
Pedro Félix (pedrofelix em cc.isel.ipl.pt)
José Simão (jsimao em cc.isel.ipl.pt)
Instituto Superior de Engenharia de Lisboa
Agenda
• Problemas dos modelos de controlo de acesso clássicos
• Modelo CAS nas plataformas .NET <= 3.5 e >= 4.0
• Permissões
• Exigência declarativa e imperativa
• Controlo de acessos na plataforma Java
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
2
Terminologia
•
•
•
•
Sujeito – quem faz o acesso activo que realiza o acesso
Objecto – entidade acedida
Operação – tipo do acesso
O monitor de referências concede (“grant”) ou recusa (“deny”) o
acesso
Sujeito
Pedro Félix, 2008
José Simão, 2012
Pedido de
acesso
Monitor de
Referências
Controlo de acessos na plataforma .NET
Objecto
3
Modelos baseados na identidade do utilizador
• Modelo de segurança clássico – as decisões de autorização são
baseadas na identidade do utilizador (Windows NT e Unix)
• Os sistemas baseados em componentes tem requisitos de
segurança diferentes
– uma aplicação é constituída por componentes de diferentes origens e
diferentes graus de confiança
• Modelo antigo
– Full trust (privilégios do utilizador) ou No trust
– Decisão em tempo de carregamento (certificados ou confiança explícita)
– Na prática, não é possível distinguir entre código local e código móvel todas as linhas de código tem os mesmos privilégios
• Os ambientes de execução virtuais possibilitam a criação de modelos
de segurança diferentes dos do sistema operativo
– O ambiente de execução funciona como reference monitor – entidade
omnipresente responsável por implementar o modelo de segurança
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
4
Diagrama (.Net ≤ 3.5)
Sujeito
Objecto
Acesso
Método
Método
demands
pertence a
Autenticação
Autorização
IPermission
contém
Assembly
CLR
CLR
Evidence
PermissionSet
Política
CodeGroup
IMembershipCondition
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
PermissionSet
5
Diagrama ( >= .Net 4.0)
Sujeito
Método
Objecto
Acesso
Método
demands
pertence a
IPermission
Autorização
Assembly
CLR
contém
PermissionSet
Sandbox
PermissionSet
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
6
Criação de “sandboxes”
• A forma correcta de criação de sandboxes é através da criação de
novos AppDomain
• Desde a versão 2.0 da plataforma .NET possui métodos que facilitam
esta tarefa
public static AppDomain CreateDomain (
string friendlyName,
// nome do AppDomain
Evidence securityInfo, // evidence associado ao AppDomain
AppDomainSetup info, // parametrização do AppDomain
PermissionSet grantSet, // permissões dos assemblies carregados no AppDomain criado
params StrongName[] fullTrustAssemblies // assemblies “full-trust”
)
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
7
Evidence
• Evidence é um conjunto de informação sobre um assembly ou
AppDomain
• A evidence não depende do utilizador
• A evidence é fornecida por
– CLR
– Hosts
– Assemblies
• Exemplos:
–
–
–
–
–
Nome (Strong Name)
Localização
Publisher
Valor de hash
Evidence contida dentro do assembly
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
8
Classes pré-definidas
• ApplicationDirectory
– Directoria de execução da aplicação
• Hash
– Valor de hash do assembly
• Publisher
– Informação sobre o criador do assembly, no caso deste conter um
certificado
• Site
– Informação sobre a localização original do assembly
• StrongName
– Nome do assembly
• Url
– Localização original do assembly
• Zone
– Classificação da localização original do assembly (Internet, Intranet,
MyComputer, Trusted, Untrusted, NoZone)
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
9
Permissões
• Permissão – capacidade para realizar uma acção (sobre um recurso)
• As permissões são associadas a código (via assemblies)
• As operações cujo acesso é controlado exigem (demand) que o
chamador possua as permissões adequadas
• Existem três tipos de permissões
– Code Access Permissions
– Identity Permissions
– Outras
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
10
Interface IPermission
• Descreve um conjunto de operações associadas ao mesmo tipo de
recurso
• Exemplos
– FileIOPermission
– UIPermission
• Fornece interface com operações de conjuntos
–
–
–
–
IPermission Copy()
IPermission Intersect(IPermission)
IPermission Union(IPermission)
Bool IsSubsetOf(IPermission)
• Método para o controlo de acesso
– void Demand() – verifica se os chamadores tem permissão para realizar
a operação
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
11
Exemplo
IPermission perm1 = new FileIOPermission(FileIOPermissionAccess.Read,
@"c:\teste.txt");
IPermission perm2 = new FileIOPermission(FileIOPermissionAccess.Write,
@"c:\teste.txt");
IPermission perm3 = new FileIOPermission(FileIOPermissionAccess.Write,
@"c:\teste2.txt");
IPermission perm4 = new FileIOPermission(FileIOPermissionAccess.AllAccess,
@"c:\teste.txt");
IPermission all = new FileIOPermission(PermissionState.Unrestricted);
IPermission none = new FileIOPermission(PermissionState.None);
Console.WriteLine(perm1.Union(perm2));
Console.WriteLine(perm2.Union(perm3));
Console.WriteLine(perm1.Intersect(perm4));
Console.WriteLine(perm1.Union(all));
Console.WriteLine(perm1.Intersect(all));
Console.WriteLine(perm1.Union(none));
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
12
Interface IStackWalk
•
•
•
A exigência de algumas permissões implica verificar se todos os
chamadores no call stack possuem a permissão – stack walk
A interface IStackWalk define um conjunto de métodos associados a esta
operação
Exigência da permissão
– void Demand()
•
Modificadores do percurso – quando presentes numa stack frame, alteram o
comportamento do percurso
– void Assert() – Garante a existência da permissão, terminando o percurso no
stack
•
Para a utilização do método Assert sobre uma permissão é necessário:
– Possuir a permissão essa permissão
– Possuir a permissão SecurityPermission com SecurityPermissionFlag.Assert
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
13
Percurso no stack
Raíz
Thread
PermissionSet
método
assembly
PermissionSet
método
assembly
PermissionSet
método
assembly
PermissionSet
método
assembly
PermissionSet
método
assembly
PermissionSet
Stack Walk
método
Demand
IStackWalk
Recurso
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
14
Modificadores do percurso no stack
Raíz
método
método
Assert
método
método
método
Demand
método
Recurso
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
15
Classe CodeAccessPermission
• A classe abstracta CodeAccessPermission implementa as
interfaces IPermission e IStackWalk
• Fornece implementações para os métodos de IStackWalk
• Não fornece implementações para os métodos de IPermission (à
excepção de Demand). Estes devem ser implementados pela
classes derivadas
• Serve de base para todas as classes de permissões cuja exigência
implica um percurso no stack
• Existem permissões que não derivam de CodeAccessPermission (ex.
PrincipalPermission)
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
16
CodeAccessPermission: classes derivadas
•
Associadas a recursos
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
•
System.Data.Common.DBDataPermission
System.Data.OracleClient.OraclePermission
System.Drawing.Printing.PrintingPermission
System.Messaging.MessageQueuePermission
System.Net.DnsPermission
System.Net.SocketPermission
System.Net.WebPermission
System.Security.Permissions.EnvironmentPermission
System.Security.Permissions.FileDialogPermission
System.Security.Permissions.FileIOPermission
System.Security.Permissions.IsolatedStoragePermission
System.Security.Permissions.ReflectionPermission
System.Security.Permissions.RegistryPermission
System.Security.Permissions.ResourcePermissionBase
System.Security.Permissions.SecurityPermission
System.Security.Permissions.UIPermission
System.Web.AspNetHostingPermission
Associadas a componentes da identidade do código
–
–
–
–
–
System.Security.Permissions.PublisherIdentityPermission
System.Security.Permissions.SiteIdentityPermission
System.Security.Permissions.StrongNameIdentityPermission
System.Security.Permissions.UrlIdentityPermission
System.Security.Permissions.ZoneIdentityPermission
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
17
Outras permissões
• Nem todas as permissões implicam percurso no stack – não derivam
de CodeAccessPermission
• Exemplo: permissão PrincipalPermission
– Verifica a identidade do utilizador currente
– Verifica os roles do utilizador currente
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
18
Diagrama
IStackWalk
Demand
Assert
Deny
PermitOnly
implementa
PermissionSet
addPermission
getPermission
Intersect
IsSubsetOf
Union
Pedro Félix, 2008
José Simão, 2012
IPermission
Demand
Intersect
IsSubsetOf
Union
implementa
IUnrestrictedPermission
implementa
CodeAcessPermission
estende
implementa
XxxxPermission
Controlo de acessos na plataforma .NET
implementa
implementa
YyyyPermission
19
Exigência declarativa
• Utilização de atributos
[FileIOPermission(SecurityAction.Demand, Read = “c:\\MyPath”)]
void AMethod(){
// se chegou aqui, então existem as permissões necessárias
// realizar o trabalho
}
• Vantagens
–
–
–
–
Existem exigências que só podem ser expressas na forma declarativa
Facilita a análise estática
Podem ser aplicadas a todo um tipo
São realizadas no início do método
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
20
Exigência Imperativa
• Exigência da permissão no código do método
void AMethod(){
FileIOPermission perm = new
FileIOPermission(FileIOPermissionAcess.Read,
“c:\\MyPath”);
perm.Demand();
// se chegou aqui, então existem as permissões necessárias
// realizar o trabalho
}
• Vantagens
– Possibilita lógica mais complexa na determinação da permissão a
exigir. Ex.: exigência dependente do valor dos parâmetros
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
21
Permissões User-Identity
Thread
IPrincipal
Identity
IsInRole
GenericPrincipal
IIdentity
AuthenticationType
IsAuthenticated
Name
GenericIdentity
WindowsPrincipal
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
WindowsIdentity
22
Exigência declarativa
• Definir um Custom Attribute derivado de
CodeAccessSecurityAttribute
– Implementar construtor público .ctor(SecurityAction action)
– Implementar método IPermission CreatePermission()
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
23
Controlo de acessos na plataforma Java
• Permissões
– As permissões são tipicadas e estendem da classe abstracta
java.security.Permission
– Alguns exemplos
• java.security.SecurityPermission
• Java.net.SocketPermission
• java.lang.reflect.ReflectPermission
– Cada permissão é composta por um alvo (target) e, opcionalmente, uma
lista de acções
• Permission perm =
new java.io.FilePermission("/tmp/abc", "read");
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
24
Controlo de acessos na plataforma Java
• Políticas
– Existem duas evidências sobre a class que contribuem para o conjunto
de permissões: signer e codebase
– Cada JVM pode usar múltiplos ficheiros de políticas
• ${java.home}/lib/security/java.policy
• java -Djava.security.manager
-Djava.security.policy=mypolicy.txt MyClass
grant signedBy “New Company”, codeBase “file:/C:/somepath/api/” {
permission java.net.SocketPermission
"www.amazon.com:80", "connect, resolve";
}
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
25
Controlo de acessos na plataforma Java
• Verificação das políticas (enforcement)
– Permissões exigidas para executar alguns serviços da plataforma
– Exemplo: a class java.net.Socket verifica a permissão connect
chamando o método checkConnect({host}, {port}) do
SecurityManager instalado
– O percurso no stack é interrompido se for encontrado um chamador que
tenha a permissão e use o método AccessController.doPrivileged
para realizar a chamada
Pedro Félix, 2008
José Simão, 2012
Controlo de acessos na plataforma .NET
26
Download