A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Controle de Acessos na Plataforma .NET

Apresentações semelhantes


Apresentação em tema: "Controle de Acessos na Plataforma .NET"— Transcrição da apresentação:

1 Controle de Acessos na Plataforma .NET
Notas para a disciplina de “Segurança Informática” Pedro Félix Instituto Superior de Engenharia de Lisboa

2 Terminologia Sujeito – quem realiza o acessoactivo que realiza o acesso Objecto – entidade acedida Operação – tipo do acesso O monitor de referências concede (“grant”) ou recusa (“deny”) o acesso Monitor de Referências Sujeito Objecto Pedido de acesso Controlo de acessos na plataforma .NET

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 Trusted Computing Base (TCB) – entidade omnisciente e omnipresente responsável por implementar o modelo de segurança Controlo de acessos na plataforma .NET

4 Requisitos para a plataforma .NET
Sistema de segurança para código móvel parcialmente confiável autorizações fine-grained extensível configurável baseado em componentes e não em processos Modelo onde a autorização depende da identidade do código - Code Acess Security (CAS) Type safety Definição das fronteiras dum assembly Verificação reinterpret_cast é proibído – código C++ (managed) não é verificável Controlo de acessos na plataforma .NET

5 Controlo de acessos na plataforma .NET
Modelo Autenticação - Em tempo de carregamento, o CLR recolhe provas (evidence) sobre a proveniência do assembly: local de carregamento, autoria, ... Esta evidência fica associada ao Assembly Autorização - O CLR utiliza a evidência para determinar o conjunto de permissões do assembly Permissão: possibilidade de realizar uma acção A relação entre evidências e conjuntos de permissões é estabelecida pela política de segurança Enforcement - As permissões são explicitamente exigidas pelos objectos (tipicamente em bibliotecas seguras) SecurityManager Código Assembly Evidence PermissionSet PolicyLevel PolicyLevel PolicyLevel Controlo de acessos na plataforma .NET

6 Diagrama Sujeito Objecto Acesso Autenticação Autorização CLR CLR
Método Método demands pertence a IPermission Autenticação Autorização contém CLR CLR Assembly Evidence PermissionSet Política CodeGroup IMembershipCondition PermissionSet Controlo de acessos na plataforma .NET

7 Controlo de acessos na plataforma .NET
Questões O que é a identidade do código? Como é implementada a relação entre identidades e permissões? Como é implementado o controlo aos acessos? Controlo de acessos na plataforma .NET

8 Autenticação e autorização
Em tempo de carregamento, o CLR recolhe informação sobre cada assembly. Esta informação é designada de evidence. Ainda em tempo de carregamento, o CLR usa informação de configuração (Policy Levels) para transformar a evidence dum assembly num conjunto de permissões. Este conjunto de permissões fica associado a todos os tipos do assembly Em tempo de execução, os métodos acedídos verificam se os chamadores possuem as permissões necessárias Controlo de acessos na plataforma .NET

9 Controlo de acessos na plataforma .NET
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 Controlo de acessos na plataforma .NET

10 Controlo de acessos na plataforma .NET
Evidence O tipo Evidence é um contentor de evidence Contém dois sub-conjntos Evidence fornecida pelo host Evidence fornecida pelo assembly Propriedade Evidence do tipo Assembly Propriedade Evidence do tipo AppDomain Controlo de acessos na plataforma .NET

11 Evidence fornecida pelo host
Um host é Troço de código unmanaged que lança o CLR Troço de código managed que lança outro troço de código managed Unmanaged Host Fornece informação (evidence) ao CLR, tal como a directoria de execução Este informação fica associada ao AppDomain Managed Host public static Assembly Load(AssemblyName, Evidence); public static ObjectHandle CreateInstance(string, string, bool, BindingFlags, Binder, object[], CultureInfo, object[], Evidence); public static AppDomain CreateDomain(string, Evidence, AppDomainSetup) Independentemente do tipo de host, o CLR fornece evidence por omissão Controlo de acessos na plataforma .NET

12 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) Controlo de acessos na plataforma .NET

13 Evidence fornecida pelo Assembly
Informação contida no próprio assembly Exemplo: certificação por uma entidade externa Processo de criação e associação: Criar um objecto para representar a evidence Serializar o objecto usando o formatador binário Compilar o código do assembly para módulos Criar o assembly, usando a ferramenta al, incluindo o objecto evidence serializado (/evidence:<filename>) Controlo de acessos na plataforma .NET

14 Diagrama ICollection IEvidenceFactory Evidence AppDomain Assembly Site
Zone Url StrongName Hash Publisher ApplicationDirectory Certificate Controlo de acessos na plataforma .NET

15 Controlo de acessos na plataforma .NET
Permissões Permissão – capacidade para realizar uma acção 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 Controlo de acessos na plataforma .NET

16 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 Controlo de acessos na plataforma .NET

17 IUnrestrictedPermission e PermissionState
A interface IUnrestrictedPermission é implementada por todas as permissões que possuem um estado “não-restrito” (todas as operações sobre o tipo de recurso são possíveis) A interface possui a propriedade isUnrestriced, que retorna true se a permissão está no estado “não-restrito” Tipicamente, todas as permissões que implementam esta interface possum um construtor que recebe PermissionState (enumerado com os valores None e Unrestricted) Um PermissionSet construido com PermissionState.Unrestricted contém todas a permissões que implementam a interface IUnrestrictedPermission no estado PermissionState.Unrestricted Controlo de acessos na plataforma .NET

18 Controlo de acessos na plataforma .NET
Exemplo IPermission perm1 = new IPermission perm2 = new IPermission perm3 = new IPermission perm4 = new 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)); <IPermission class=“…" version="1" Read="c:\teste.txt" Write="c:\teste.txt"/> <IPermission class=“…" version="1" Write="c:\teste.txt;c:\teste2.txt"/> <IPermission class=“…" version="1" Read="c:\teste.txt"/> <IPermission class=“…" version="1“ Unrestricted="true"/> Controlo de acessos na plataforma .NET

19 Controlo de acessos na plataforma .NET
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 void Deny() - Recusa a permissão, terminando o percurso no stack void PermitOnly() – Apenas permite esta permissão 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 Controlo de acessos na plataforma .NET

20 Controlo de acessos na plataforma .NET
Percurso no stack Raíz Thread PermissionSet método assembly PermissionSet método método assembly PermissionSet Stack Walk método assembly PermissionSet método assembly PermissionSet método assembly PermissionSet método IStackWalk Demand Recurso Controlo de acessos na plataforma .NET

21 Modificadores do percurso no stack
Raíz método Deny método método Assert método método método Demand método Recurso Controlo de acessos na plataforma .NET

22 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) Controlo de acessos na plataforma .NET

23 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 Controlo de acessos na plataforma .NET

24 Controlo de acessos na plataforma .NET
Classe PermissionSet A classe PermissionSet representa um conjunto de permissões Implementa a interface IStackWalk – utilizada para exigir permissões e/ou alterar os percursos no stack Implementa semântica de conjunto – Intersect, Union, IsSubsetOf Controlo de acessos na plataforma .NET

25 Controlo de acessos na plataforma .NET
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 Controlo de acessos na plataforma .NET

26 Controlo de acessos na plataforma .NET
Diagrama IStackWalk IPermission Demand Assert Deny PermitOnly Demand Intersect IsSubsetOf Union IUnrestrictedPermission implementa implementa implementa PermissionSet CodeAcessPermission addPermission getPermission Intersect IsSubsetOf Union estende implementa implementa implementa XxxxPermission YyyyPermission Controlo de acessos na plataforma .NET

27 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ência 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 Controlo de acessos na plataforma .NET

28 Controlo de acessos na plataforma .NET
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 Controlo de acessos na plataforma .NET

29 Outras acções de segurança
Demand, Assert, Deny, PermitOnly LinkDemand Exige que o chamador tenha a permissão Controlo realizado em tempo de geração de código JIT InheritanceDemand Exige que classes derivadas tenham a permissão Controlo realizado em tempo de carregamento RequestMinumum Conjunto mínimo de permissões para o assembly se poder executar Resolvido em tempo de determinação de permissões dum assembly RequestOpcional Conjunto opcional de permissões que o assembly pode ter RequestRefuse Conjunto permissões que o assembly não pode ter Controlo de acessos na plataforma .NET

30 Acções de segurança: resumo
Enumerado SecurityAction Acção Fase Alvos Imperativa LinkDemand Compilação JIT Classe, método Não InheritanceDemand Carregamento Demand Execução Sim Assert Deny PermitOnly RequestMinimum Grant Assembly RequestOptional RequestRefuse Controlo de acessos na plataforma .NET

31 Permissões dos assemblies
Processo de determinação das permissões dum assembly (permission grant) Entrada: Evidence Saída: PermissionSet Parametrização: PolicyLevel CLR Evidence PermissionSet PolicyLevel CodeGroup IMembershipCondition PermissionSet Controlo de acessos na plataforma .NET

32 Controlo de acessos na plataforma .NET
Policy Level Um nível da política (policy level) é constituído por Conjunto de assemblies de confiança (“full trust”) Conjunto de conjuntos de permissões (“named permission sets”) Grupo de código raíz (“root code group”) Assemblies de confiança (“full trust”) Conjunto de assemblies, referenciados pelos strong names, de assemblies em quem o nível da política deposita toda a confiança. Tipicamente são assemblies que contém tipos relacionados com a arquitectura de controlo de acessos Conjuntos de permissões Conjuntos de permissões (classes que implementam IPermission) aos quais é atribuído um nome Controlo de acessos na plataforma .NET

33 Controlo de acessos na plataforma .NET
Grupos de código Um grupo de código (“code group”) define Um conjunto de assemblies que pertençem ao grupo Um conjunto de permissões a atribuir aos assemblies do grupo Um conjunto de grupos de código filhos A definição dos assemblies que pertençem ao grupo é realizada através de implementação de IMembershipConditions public interface IMembershipCondition { bool Check( Evidence evidence ); } A atribuição das permissões aos assemblies do grupo é realizada através do nome do named permission set Controlo de acessos na plataforma .NET

34 IMembershipCondition
Diagrama PolicyLevel Named Permission Sets Trusted Assemblies Root CodeGroup Childs PermissionSet CodeGroup Assembly Permissões dos elementos do grupo Contém Condição de pertença IPermission IMembershipCondition Evidence Checks Controlo de acessos na plataforma .NET

35 Controlo de acessos na plataforma .NET
Policy Manager PolicyManager - Fornece métodos estáticos para acesso e manipulação da security policy bool IsGranted(IEvidence) PolicyLevel LoadPolicyLevelFromFile(string path, PolicyLevelType type) PolicyLevel LoadPolicyLevelFromString(string str, PolicyLevelType type) IEnumerator PolicyHierarchy() PermissionSet ResolvePolicy(Evidence) IEnumerator ResolvePolicyGroups(Evidence) void SavePolicy() void SavePolicyLevel(PolicyLevel) Controlo de acessos na plataforma .NET

36 Esquema PolicyLevel SecurityClasses SecurityClass NamedPermissionSets
1 n SecurityClasses SecurityClass description 1 class n NamedPermissionSets PermissionSet name class 1 class n CodeGroup PermissionSet IPermission properties name n Class 1 IMemberShipCondition properties 1 FullTrustAssemblies n IMemberShipCondition Controlo de acessos na plataforma .NET

37 Permissões User-Identity
Thread IPrincipal IIdentity Identity IsInRole AuthenticationType IsAuthenticated Name GenericPrincipal GenericIdentity WindowsIdentity WindowsPrincipal Controlo de acessos na plataforma .NET

38 Permissões proprietárias
Code Access Permissions Derivar de CodeAccessPermission Implementar os métodos de IPermission, excepto o Demand: Copy, Intersect, Union e IsSubsetOf Implementar os métodos de ISecurityEncodable: ToXml e FromXml Nota: a implementação do método Demand e dos métodos associados a IStackWalk é herdada de CodeAccessPermission Implementar construtores públicos .ctor() .ctor(PermissionState) Marcar a classe como Serializable Controlo de acessos na plataforma .NET

39 Exigência declarativa
Definir um Custom Attribute derivado de CodeAccessSecurityAttribute Implementar construtor público .ctor(SecurityAction action) Implementar método IPermission CreatePermission() Nota: a definição deste Custom Attribute não pode ser realizada na mesma classe onde é utilizado, dado que o atributo é instanciado em tempo de compilação Controlo de acessos na plataforma .NET


Carregar ppt "Controle de Acessos na Plataforma .NET"

Apresentações semelhantes


Anúncios Google