Controle de Acessos na Plataforma .NET

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Um pouco mais de cardinalidade e Relacionamentos
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Paulo Marques Hernâni Pedroso
Vitor Santos Microsoft Corporation
Segurança na .NET Framework
Novos serviços da ASP.Net 2.0
Capítulo 1 Introdução.
Exemplo dos Internamentos
Orientação a Objetos: Encapsulamento e Classificação
Unreliable Failure Detectors for Reliable Distributed Systems
Linguagens de programação
Área de Desenvolvimento de Sistemas
ENGENHARIA DE CONHECIMENTO: PRINCÍPIOS E MÉTODOS
TIPOS DE TESTES APLICÁVEIS E NÃO APLICÁVEIS AO PROJETO
Paulo J. Azevedo Departamento de Informática Universidade do Minho
Geração de Código.
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
CRIANDO OBJETOS EM JAVA
Análise de Sistemas Análise e Projeto Prof. Jeime Nunes Site:
Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira
JAVA: Conceitos Iniciais
ES – 2º Apresentação Teórica. Rename Method O nome de um método não revela o seu propósito.Motivação Métodos devem ser chamados de uma forma que comuniquem.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Rodrigo Cristiano Silva
Programação Orientada a Objetos com Java
Interface Básica para um Servidor Universal
Política de Clark e Wilson Notas para a disciplina de Segurança Informática Pedro Félix Instituto.
Autenticação em Aplicações Web Notas para a disciplina de Segurança Informática Pedro Félix Instituto.
Arquitecturas de extensão do servidor HTTP CGI | ISAPI : ASP, ASP.NET Programação na Internet Secção de Programação ISEL-DEETC-LEIC Luis Falcão -
UML – Diagrama de Classes
Linguagem Técnica de Programação VI Prof.: Luiz Gustavo Jordão Soares.
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
PADRÃO TISS aplicaTISS Oficinas TISS
Padrão de Conteúdo e Estrutura
Referências: Booch, G. et al. The Unified Modeling Language User Guide
XIV Jornada de Cursos .NET com C# Antônio Júnior Bruno Inojosa.
Arquitecturas de extensão do servidor HTTP CGI | ISAPI : ASP, ASP.NET
Professor: Márcio Amador
Orientação a Objetos Parte I
Programação Orientada à Objetos
TMV Gestão de Redes e de Sistemas Distribuídos ???? Sumário  Arquitectura de Gestão SNMP  Arquitectura de Gestão OSI/TMN  Novas Arquitecturas.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada à Objetos
Elementos de um Sistema de Agentes Móveis Agentes e Places Comportamento de Agentes Comunicação Padronização OMG/MASIF.
Introdução às Java Threads
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Classes Abstratas e Interface
Projeto de Banco de Dados Prof.Ms.Rodrigo Luiz Comitante Leão.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Fevereiro de 2014 IDL.
Construtores e Destrutores
Bruno Inojosa MCP .NET Framework
Modificadores Programação II.
Gestão de Redes e Sistemas Distribuídos Teresa Maria Vazão Fevereiro 2003 IST/INESC Contactos:IST/Tagus-Park Tel:
Modelação Aula T15 Modelação Conceptual de Sistemas Revisão do Comportamento OCL – Object Constraint Language José Borbinha.
Daniel Paulo Login e Usuário Login – é um objeto que tem a finalidade de acessar a instância do SQL Usuário – Associado ao login.
Projeto de Banco de Dados
Módulo II Capítulo 1: Orientação a Objetos
Banco de Dados I Aula 4 - Projeto Conceitual de Banco de Dados
Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013.
Fundamentos de Engenharia de SW Diagramas da UML Usados no Projeto de Software.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Controle de Acessos na Plataforma .NET Notas para a disciplina de “Segurança Informática” Pedro Félix (pedrofelix@cc.isel.ipl.pt) Instituto Superior de Engenharia de Lisboa

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Permissões User-Identity Thread IPrincipal IIdentity Identity IsInRole AuthenticationType IsAuthenticated Name GenericPrincipal GenericIdentity WindowsIdentity WindowsPrincipal 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 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 Controlo de acessos na plataforma .NET