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

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

Controle de Acessos na Plataforma.NET Notas para a disciplina de Segurança Informática Pedro Félix

Apresentações semelhantes


Apresentação em tema: "Controle de Acessos na Plataforma.NET Notas para a disciplina de Segurança Informática Pedro Félix"— 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 P. Félix, 20062Controlo de acessos na plataforma.NET 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 SujeitoObjecto Pedido de acesso Monitor de Referências

3 P. Félix, 20063Controlo de acessos na plataforma.NET 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

4 P. Félix, 20064Controlo de acessos na plataforma.NET 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

5 P. Félix, 20065Controlo 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) AssemblyEvidencePermissionSet PolicyLevel Código SecurityManager PolicyLevel

6 P. Félix, 20066Controlo de acessos na plataforma.NET Diagrama Assembly Método PermissionSet IPermission Método SujeitoObjecto Evidence CLR Acesso pertence a contém demands CodeGroup IMembershipConditionPermissionSet AutenticaçãoAutorização Política

7 P. Félix, 20067Controlo 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?

8 P. Félix, 20068Controlo de acessos na plataforma.NET 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

9 P. Félix, 20069Controlo 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

10 P. Félix, 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

11 P. Félix, Controlo de acessos na plataforma.NET 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

12 P. Félix, Controlo de acessos na plataforma.NET 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)

13 P. Félix, Controlo de acessos na plataforma.NET 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: 1.Criar um objecto para representar a evidence 2.Serializar o objecto usando o formatador binário 3.Compilar o código do assembly para módulos 4.Criar o assembly, usando a ferramenta al, incluindo o objecto evidence serializado (/evidence: )

14 P. Félix, Controlo de acessos na plataforma.NET Diagrama Evidence ICollection Site Publisher IEvidenceFactory AppDomainAssembly ApplicationDirectory Zone StrongNameHash Url Certificate

15 P. Félix, 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

16 P. Félix, Controlo de acessos na plataforma.NET 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

17 P. Félix, Controlo de acessos na plataforma.NET 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

18 P. Félix, 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));

19 P. Félix, 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

20 P. Félix, Controlo de acessos na plataforma.NET Percurso no stack método assembly método PermissionSet Recurso RaízPermissionSetThread IStackWalk Demand Stack Walk

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

22 P. Félix, Controlo de acessos na plataforma.NET 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)

23 P. Félix, Controlo de acessos na plataforma.NET 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

24 P. Félix, 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

25 P. Félix, 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

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

27 P. Félix, Controlo de acessos na plataforma.NET 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

28 P. Félix, 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

29 P. Félix, Controlo de acessos na plataforma.NET 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 –Resolvido em tempo de determinação de permissões dum assembly RequestRefuse –Conjunto permissões que o assembly não pode ter –Resolvido em tempo de determinação de permissões dum assembly

30 P. Félix, Controlo de acessos na plataforma.NET Acções de segurança: resumo Enumerado SecurityAction AcçãoFaseAlvosImperativa LinkDemandCompilação JITClasse, métodoNão InheritanceDemandCarregamentoClasse, métodoNão DemandExecuçãoClasse, métodoSim AssertExecuçãoClasse, métodoSim DenyExecuçãoClasse, métodoSim PermitOnlyExecuçãoClasse, métodoSim RequestMinimumGrantAssemblyNão RequestOptionalGrantAssemblyNão RequestRefuseGrantAssemblyNão

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

32 P. Félix, 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

33 P. Félix, 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

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

35 P. Félix, 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)

36 P. Félix, Controlo de acessos na plataforma.NET Esquema PolicyLevel SecurityClassesSecurityClass name description NamedPermissionSetsPermissionSet class name IPermission class properties CodeGroup IMemberShipCondition class PermissionSet name Class properties FullTrustAssemblies IMemberShipCondition n n n n 1 n

37 P. Félix, Controlo de acessos na plataforma.NET Permissões User-Identity IPrincipal Identity IsInRole ThreadIIdentity AuthenticationType IsAuthenticated Name GenericPrincipal WindowsPrincipal GenericIdentity WindowsIdentity

38 P. Félix, Controlo de acessos na plataforma.NET 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

39 P. Félix, Controlo de acessos na plataforma.NET 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


Carregar ppt "Controle de Acessos na Plataforma.NET Notas para a disciplina de Segurança Informática Pedro Félix"

Apresentações semelhantes


Anúncios Google