Considerações de segurança de montagem
Ao criar um assembly, você pode especificar um conjunto de permissões que o assembly requer para ser executado. Se certas permissões são concedidas ou não a uma assembleia é baseado em evidências.
Existem duas formas distintas de utilizar as provas:
As evidências de entrada são mescladas com as evidências coletadas pelo carregador para criar um conjunto final de evidências usadas para a resolução de políticas. Os métodos que usam essa semântica incluem Assembly.Load, Assembly.LoadFrom e Activator.CreateInstance.
As evidências de entrada são usadas inalteradas como o conjunto final de evidências usadas para a resolução de políticas. Os métodos que usam essa semântica incluem Assembly.Load(byte[]) e AppDomain.DefineDynamicAssembly().
Permissões opcionais podem ser concedidas pela diretiva de segurança definida no computador onde o assembly será executado. Se quiser que seu código manipule todas as possíveis exceções de segurança, siga um destes procedimentos:
Insira uma solicitação de permissão para todas as permissões que seu código deve ter e trate antecipadamente a falha de tempo de carregamento que ocorre se as permissões não forem concedidas.
Não use uma solicitação de permissão para obter permissões que seu código possa precisar, mas esteja preparado para lidar com exceções de segurança se as permissões não forem concedidas.
Nota
A segurança é uma área complexa, e você tem muitas opções para escolher. Para obter mais informações, consulte Principais conceitos de segurança.
No momento do carregamento, as evidências do assembly são usadas como entrada para a política de segurança. A diretiva de segurança é estabelecida pela empresa e pelo administrador do computador, bem como pelas configurações de diretiva do usuário, e determina o conjunto de permissões concedidas a todo o código gerenciado quando executado. A política de segurança pode ser estabelecida para o editor do assembly (se ele tiver uma assinatura gerada pela ferramenta de assinatura), para o site e a zona (que era um conceito do Internet Explorer) do qual o assembly foi baixado ou para o nome forte do assembly. Por exemplo, o administrador de um computador pode estabelecer uma diretiva de segurança que permite que todo o código baixado de um site e assinado por uma determinada empresa de software acesse um banco de dados em um computador, mas não concede acesso para gravar no disco do computador.
Montagens com nomes fortes e ferramentas de assinatura
Aviso
Não confie em nomes fortes para a segurança. Eles fornecem apenas uma identidade única.
Você pode assinar uma montagem de duas maneiras diferentes, mas complementares: com um nome forte ou usando SignTool.exe (Ferramenta de Assinatura). A assinatura de um assembly com um nome forte adiciona criptografia de chave pública ao arquivo que contém o manifesto do assembly. A assinatura de nome forte ajuda a verificar a exclusividade do nome, evitar falsificação de nomes e fornecer aos chamadores alguma identidade quando uma referência é resolvida.
Nenhum nível de confiança está associado a um nome forte, o que torna SignTool.exe (Sign Tool) importante. As duas ferramentas de assinatura exigem que um editor prove sua identidade a uma autoridade terceirizada e obtenha um certificado. Esse certificado é então incorporado ao seu arquivo e pode ser usado por um administrador para decidir se confia na autenticidade do código.
Você pode dar um nome forte e uma assinatura digital criada usando SignTool.exe (Ferramenta de Assinatura) para um assembly, ou você pode usar qualquer um sozinho. As duas ferramentas de assinatura podem assinar apenas um arquivo de cada vez; Para um assembly multifile, você assina o arquivo que contém o manifesto do assembly. Um nome forte é armazenado no arquivo que contém o manifesto do assembly, mas uma assinatura criada usando SignTool.exe (Sign Tool) é armazenada em um slot reservado no arquivo executável portátil (PE) que contém o manifesto do assembly. A assinatura de um assembly usando SignTool.exe (Ferramenta de Sinalização) pode ser usada (com ou sem um nome forte) quando você já tem uma hierarquia de confiança que depende de assinaturas geradas por SignTool.exe (Ferramenta de Assinatura) ou quando sua política usa apenas a parte da chave e não verifica uma cadeia de confiança.
Nota
Ao usar um nome forte e uma assinatura de ferramenta de assinatura em um assembly, o nome forte deve ser atribuído primeiro.
O common language runtime também executa uma verificação de hash; O manifesto do assembly contém uma lista de todos os arquivos que compõem o assembly, incluindo um hash de cada arquivo como ele existia quando o manifesto foi criado. À medida que cada arquivo é carregado, seu conteúdo é colocado em hash e comparado com o valor de hash armazenado no manifesto. Se os dois hashes não corresponderem, o assembly não será carregado.
Nomenclatura e assinatura fortes usando SignTool.exe (Sign Tool) garantem a integridade através de assinaturas digitais e certificados. Todas as tecnologias mencionadas, ou seja, verificação de hash, nomenclatura forte e assinatura usando SignTool.exe (Sign Tool), trabalham juntas para garantir que a montagem não tenha sido alterada de forma alguma.