Segurança na.net Framework Vitor Santos.NET Group Microsoft Corporation
Agenda A Plataforma.NET A segurança na.net Sumário Console.WriteLine( Duracao: {0}m, 40 + ( -15 + new Random(). Next(15)) )
Agenda A plataforma.net A segurança na.net Sumário
O que é o.net Ponto de vista da industria Software that connects people, information and devices
O que é o.net Ponto de vista académico UM MODELO DE COMPONENTES PARA A INTERNET Multi-linguagem, com uma abordagem fiável e segura para construir aplicações distibuídas na Internet Disponibiliza a capacidade de integrar multiplos dispositivos Ambiente de desenvolvimento multilinguagem que se mantêm fácil de usar e programar Contruído com base nos protocolos e ferramentas (XML, WSDL, SOAP, HTTP)
Por dentro do.net Framework VB C++ C# J# Python Web Services User Interface Data and XML Base Framework Common Language Runtime (CLR) Operating System Common Language Runtime Suporte Suportemúltiplas linguagens linguagens Sistema Sistemaúnico de de tipos tipos Deployment Deployment simplificado simplificado Code Code Access Access Security Security Secure, integrated class libraries Unifica Unificaos osmodelos modelosde de programação programaçãoentre entrelinguagens Permite Permitea integração integraçãoentre entre linguagens linguagens Preparado Preparadopara paraser ser extensivel extensivel Desenhado Desenhadopara paraferramentas
Common Language Runtime Desenvolvimento public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=environment.getenvironmentvariable("username"); f=new FileStream( C:\\test.txt",FileMode.Create); w=new StreamWriter(f); public static void Main(String[] args ) w.writeline(usr); { String usr; FileStream f; StreamWriter w; w.close(); try { } catch (Exception usr=environment.getenvironmentvariable("username"); e){ Console.WriteLine("Exception:"+e.ToString()); f=new FileStream( C:\\test.txt",FileMode.Create); } w=new StreamWriter(f); } w.writeline(usr); w.close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } Código Compilador C# J# VB Cobol Assembly CIL Metadata Resources
Common Language Runtime Desenvolvimento public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=environment.getenvironmentvariable("username"); f=new FileStream( C:\\test.txt",FileMode.Create); w=new StreamWriter(f); public static void Main(String[] args ) w.writeline(usr); { String usr; FileStream f; StreamWriter w; w.close(); try { } catch (Exception usr=environment.getenvironmentvariable("username"); e){ Console.WriteLine("Exception:"+e.ToString()); f=new FileStream( C:\\test.txt",FileMode.Create); } w=new StreamWriter(f); Assembly } w.writeline(usr); w.close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } Código Compilador Install Assembly C# J# VB Cobol Setup CIL Copy Metadata Browser Resources Distribuição Global Assembly Cache (GAC) Application Directory Download Cache
Common Language Runtime Distribuição Desenvolvimento Install Assembly Setup Copy Browser Execução IL to Native Compiler Native.exe + GC table Class Loader Code Manager Security Assembly Global on Target Policy Assembly Machine Cache (GAC) <?xml version="1.0" encoding="utf-8"?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissio ns and forms the root of the code group tree."> <IMembershipCondition clas s="allmembershipcondition" version="1"/> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="FullTrust" Application Directory Assembly Loader Download Cache Garbage Collection Exception Manager Thread Support Debug Engine COM Interop
One Runtime For Many Languages CLR é um open standard ECMA, ISO, W3 Consortium Qualquer linguagem pode usar os serviços da CLR Qualquer linguagem pode usar classes escritas em qq outra linguagem (consumir) Qualquer linguagem pode herdar de classes escritas em qq outra linguagem (herança)
The.NET Framework Namespaces System System.Data System.Xml System.Web Globalization Diagnostics Configuration Collections Resources Reflection Net IO Threading Text ServiceProcess Security Design ADO SQLTypes SQL XPath XSLT Runtime InteropServices Remoting Serialization Serialization Configuration SessionState Caching Security Services Description Discovery Protocols UI HtmlControls WebControls System.Drawing Imaging Drawing2D Text Printing System.WinForms Design ComponentModel
Agenda A plataforma.net A segurança na.net Sumário
Segurança Code Access e Evidence Based Segurança Role Based Boas práticas
Code Access Security Visão Geral Controlo Identidade Utilizador Recursos Controlo Identidade CódigoC Código
Code Access Security Visão Geral O código também ter identidade De acordo com as provas de identidade são atribuídas permissões Só código com confiança suficiente pode aceder a recursos protegidos do sistema O código precisa de ter as permissões necessárias para aceder aos recursos Os recursos validam a sua lógica usando permissões
Segurança em.net Principais conceitos Provas (Evidence) Dados sobre o código Strong name, site, zona, assinatura Authenticode Permissões (Permissions) Autorizações específicas Definem o nível de acesso a um recurso Política (Policy) Determinam o que o código pode fazer Concedem permissões às assemblies
Code Access Security Permissões Permissões são definidas para controlar o acesso granular aos recursos do sistema Tipicamente, os construtores das permissões definem o nível de permissão Podem ser imperativas ou declarativas FileIOPermission fp = new FileIOPermission( FileIOPermissionAccess.AllAccess, @ C:\myapp ); [ FileIOPermission( SecurityAction.Demand, Write=@ C:\temp ) ]
Code Access Security Permissões FileIO FileDialog IsolatedStorage Environment Registry UI Printing Reflection Security Socket Web DNS OleDb SQLClient MessageQueue EventLog DirectoryServices extensível Execution, Assertion, Skip Verification, Unmanaged code, Control evidence, Control policy, Control principal, Control threads
Code Access Security Permissões As permissões são garantidas pelo Security Manager do Common Language Runtime Tem permissão? MYCOMPONENT (LOCALMACHINE).... Stream filestream = FileStream.Open( cod_mb.xml cod_mb.xml );.... Chama.NET FRAMEWORK public FileStream (string name) { FileIOPermission fp = new FileIOPermission(name) fp.demand().... }
Code Access Security Excepções de segurança Sempre que o código tentar efectuar alguma operação para a qual não tenha privilégios é gerada uma excepção do tipo SecurityException Excepção Tem permissão? MYCOMPONENT (LOCALMACHINE).... Stream filestream = FileStream.Open( cod_mb.xml cod_mb.xml );.... Chama.NET FRAMEWORK public FileStream (string name) { FileIOPermission fp = new FileIOPermission(name) fp.demand().... }
Code Access Security stack walk Tem permissão? Tem permissão? NOTMYAPP (outra app).... mycomponent.readsetting(key);... Chama Excepção MYCOMPONENT (com privilégios).... Stream filestream = FileStream.Open( cod_mb.xml cod_mb.xml );.... Chama FRAMEWORK public FileStream (string name) { FileIOPermission fp = new FileIOPermission(name) fp.demand().... }
Code Access Security Percorrer o stack Todos os componentes no call stack têm permissões associadas As permissões são armazenadas na stack frame de cada chamada Um pedido de acesso de um recurso resulta na verificação por parte do CLR de todas as frames no stack
Code Access Security Permission Sets É um grupo ou colecção de permissões Permite manipular um grupo de permissões com uma só chamada a uma função
Evidence Based Security Desenvolvimento public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=environment.getenvironmentvariable("username"); f=new FileStream( C:\\test.txt",FileMode.Create); w=new StreamWriter(f); public static void Main(String[] args ) w.writeline(usr); { String usr; FileStream f; StreamWriter w; w.close(); try { } catch (Exception usr=environment.getenvironmentvariable("username"); e){ Console.WriteLine("Exception:"+e.ToString()); f=new FileStream( C:\\test.txt",FileMode.Create); } w=new StreamWriter(f); } w.writeline(usr); w.close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } Código Compilador C# J# VB Cobol Assembly CIL Metadata Resources
Evidence Based Security Desenvolvimento public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=environment.getenvironmentvariable("username"); f=new FileStream( C:\\test.txt",FileMode.Create); w=new StreamWriter(f); public static void Main(String[] args ) w.writeline(usr); { String usr; FileStream f; StreamWriter w; w.close(); try { } catch (Exception usr=environment.getenvironmentvariable("username"); e){ Console.WriteLine("Exception:"+e.ToString()); f=new FileStream( C:\\test.txt",FileMode.Create); } w=new StreamWriter(f); Assembly } w.writeline(usr); w.close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } Código Compilador Install Assembly C# J# VB Cobol Setup CIL Copy Metadata Browser Resources Distribuição Global Assembly Cache (GAC) Application Directory Download Cache
Evidence Based Security Distribuição Desenvolvimento Install Assembly Setup Copy Browser Execução Compilador IL para Nativo Native.exe + GC table Class Loader Code Manager Security Assembly Global na máquina Policy Assembly destino Cache (GAC) <?xml version="1.0" encoding="utf-8"?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissio ns and forms the root of the code group tree."> <IMembershipCondition clas s="allmembershipcondition" version="1"/> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="FullTrust" Directoria aplicação Provas <?xml version="1.0" encoding="utf-8"?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissio ns and forms the root of the code group tree."> <IMembershipCondition clas s="allmembershipcondition" version="1"/> <CodeGroup class="unioncodegroup" version="1" PermissionSetName="FullTrust" Assembly Loader Download Cache Garbage Collection Exception Manager Thread Support Debug Engine COM Interop
Evidence Based Security Code Groups (determinam a policy) Um Code Group tem 2 atributos Condição Membership Um PermissionSet associado As provas da Assembly são comparadas com cada condíção do Code Group Se a condição se verificar, o PermissionSet é adicionado à lista actual, e são verificados outros Code Groups abaixo deste nó Se não se verificar, não são verificados os CodeGroups abaixo deste
Policy Levels A tree of code groups is a policy level The permissions granted by a policy level for a given set of evidence are determined by evaluating the root code group of the tree All Code P Publisher: Microsoft P Zone: Internet P Zone: Local Intranet P Site: XYZ.COM P Name: MS.Office P Name: MS.Money P Publisher: Corp. Admin P Site: localweb P
Sample Policy Level Example: MS.Money on Local Intranet Member of four groups (highlighted) Granted permissions = P1 P2 P7 P4 All Code P1 Publisher: Microsoft P2 Zone: Internet P3 Zone: Local Intranet P4 Site: XYZ.COM P5 Name: MS.Office P6 Name: MS.Money P7 Publisher: Corp. Admin P8 Site: localweb P9
Hierarchical Policy Levels CLR supports multiple, ordered policy levels for administration Enterprise: common policy throughout an org. Machine: policy for all users of given machine User: policy specific to logged in user Enterprise policy Machine1 policy Machine2 policy User A User B User C User D Effective policy is the intersection of all levels
Evidence Based Security Permissões concedidas As permissões são o resultado da intersecção Todas as policies concordam antes de conceder um privilégio Só a intersecção é que é concedida enterprise enterprise machine machine user user appdomain appdomain
Evidence Based Security Alterar as políticas default Os administradores podem ajustar as políticas actuais, assim como criar novas utilizando novos code groups.net Framework Configuration Tool (MMC) Caspol.exe (linha de comando) As políticas podem ser definidas ao nível da aplicação, utilizador, máquina e empresa.
Segurança Code Access e Evidence Based Segurança Role Based Boas práticas
Role-Based Security Principais conceitos Centrada na identidade do utilizador e funções ( roles ) Fornece um modelo de programação unificado para todos os tipos de autenticação Basic, Digest, NTLM, Kerberos, Microsoft Passport, Forms/Custom, Certificados Cliente
Role-Based Security Identidade IIdentity interface que define a identidade. Esta interface é genérica, e pode ser utilizada / extendida A autenticação é responsabilidade de quem implementa esta interface Implementações existentes na.net Framework GenericIdentity implementação genérica WindowsIdentity implementação que integra com a segurança do Windows
Role-Based Security Funções (Roles) IPrincipal interface que associa funções ( roles ) à identidade. Esta interface é genérica, e pode ser utilizada / extendida Implementações existentes na.net Framework GenericPrincipal implementação genérica WindowsPrincipal implementação que integra com a segurança do Windows
Segurança Code Access e Evidence Based Segurança Role Based Boas práticas
Boas Prácticas Segurança na.net Framework Não ignorar a segurança!!!! Não correr tudo como Administrator / FullTrust porque senão não funciona!!! Provavelmente existe uma razão de segurança para esse comportamento!!! Pensar na segurança desde o início
Agenda A plataforma.net Segurança na.net Sumário
.NET em suma A plataforma de desenvolvimento de software da Microsoft para a próxima década Baseada em standards, para múltiplas linguagens e múlplipos dispositivos Baseada na ideia dos Web Services
Segurança.NET em suma O código também tem identidade Os níveis de acesso do código são concedidos mediante provas As políticas determinam que privilégios atribuir de acordo com as provas apresentadas Particularmente útil para código móvel Existem mecanismos para implementar segurança de acordo com a função do utilizador. Nós só vimos a ponta do iceberg!
Para mais informação Site MSDN Portugal http://www.microsoft.com/portugal/msdn Site MSDN Internacional http://msdn.microsoft.com/ http://msdn.microsoft.com/net/ Newsgroups news://msnews.microsoft.com/microsoft.public.pt. dotnet.net Security http://msdn.microsoft.com/net/security Livro.NET Framework Security, ISBN:0-672-32184-x
Almoçar!!!