Seguridad en 'NET - PowerPoint PPT Presentation

1 / 68
About This Presentation
Title:

Seguridad en 'NET

Description:

Despliegue seguro de aplicaciones. Seguridad de tipos y verificaci n de c digo ... Despliegue seguro. Problemas con DLL y COM. DLL Hell ... – PowerPoint PPT presentation

Number of Views:128
Avg rating:3.0/5.0
Slides: 69
Provided by: sean165
Category:
Tags: net | seguridad | seguro

less

Transcript and Presenter's Notes

Title: Seguridad en 'NET


1
Seguridad en .NET
  • David Carmona
  • Premier Support for Developers
  • Microsoft Ibérica

2
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

3
Seguridad en .NET
  • Servicios criptográficos
  • Cifrado
  • Firma digital
  • Aplicación en el despliegue seguro
  • No más DLL Hell
  • Seguridad de tipos y verificación
  • Permite la ejecución de código poco fiable con
    garantías

4
Seguridad en .NET
  • Seguridad basada en la identidad del código
  • Disminución de los permisos del usuario en código
    poco fiable
  • Seguridad basada en roles
  • Sistema genérico de usuarios
  • Almacenamiento aislado
  • Acceso a disco estanco y controlado

5
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

6
Servicios criptográficosClases
  • Localizadas en System.Security.Cryptography
  • Algunas clases exponiendo funcionalidad Windows
  • Wrapper de Crypto API
  • Otras implementadas en IL
  • Permiten ser usadas como Streams
  • Interfaz ICryptoTransform
  • Clase CryptoStream

7
Servicios criptográficosHash
  • Algoritmos que calculan un valor unívoco a partir
    de un conjunto de bytes.

Datosoriginales
Algoritmo
HASH
8
Servicios criptográficosHash
  • El más sencillo Checksum
  • El más utilizado SHA1
  • Utilizado por defecto en .NET
  • Hash de 160 bits
  • Implementados en .NET
  • SHA1, SHA256, SHA384, SHA512
  • MD5
  • Con clave HMACSHA1, MACTripleDES

9
Servicios criptográficosAlgoritmos simétricos (I)
  • Cifrado de datos con clave única

Datosoriginales
Algoritmo
Datoscifrados
Clave
10
Servicios criptográficos Algoritmos simétricos
(II)
  • El más famoso Enigma

11
Servicios criptográficos Algoritmos simétricos
(II)
U
K
C
Q
X
S
N
Y
U
Q
12
Servicios criptográficos Algoritmos simétricos
(III)
  • El más sencillo XOR
  • El más utilizado DES
  • Longitud de clave 56 bits
  • Enigma 19.683 posibilidades
  • DES 72.057.594.037.927.936 posibilidades
  • Implementados en .NET
  • DES (56), TripleDES (112 - 168), RC2 (40 - 128),
    Rijndael (128 - 256)

13
Servicios criptográficosAlgoritmos asimétricos
(I)
  • Cifrado de datos con clave pública y privada

Clave Privada
Datosoriginales
Datoscifrados
Clave Pública
14
Servicios criptográficosAlgoritmos asimétricos
(II)
  • El más utilizado RSA
  • Clave desde 384 hasta 16384 bits
  • Utilizado internamente en .NET con 1024 bits de
    clave
  • Eje de toda la criptografía
  • Multitud de aplicaciones

15
Servicios criptográficosAlgoritmos asimétricos
(III)
  • Aplicaciones
  • Comunicación segura

Cliente
Servidor
Dato
Clave privada
Clave pública
Datocifrado
Dato
16
Servicios criptográficosAlgoritmos asimétricos
(IV)
  • Aplicaciones
  • Firma de datos

Cliente
Servidor
Clave pública
Hash
Clave privada
Firma
0111001001 1110011100 0011101011 1000111010
Hash
17
Servicios criptográficosAlgoritmos asimétricos
(V)
  • Aplicaciones
  • Certificados

CA
Usuario1
Clave privada
Firma
Nombre Email Teléfono Clave pública
Nombre Email Teléfono Clave pública Firma
HASH
18
Servicios criptográficosAlgoritmos asimétricos
(VI)
  • Aplicaciones
  • Certificados

Usuario2
Usuario1
CA Nombre Email Teléfono Clave pública
Nombre Email Teléfono Clave pública Firma
Firma
Hash
Hash
19
Servicios criptográficosAlgoritmos asimétricos
(VI)
  • Aplicaciones
  • SSL

Usuario2
Servidor
Clave Privada
Clave DES
Nombre Email Teléfono Clave pública Firma
Clave DES
Clave DES
Clave DES cifrada
Clave Pública
20
Servicios criptográficosAlgoritmos asimétricos
(VII)
  • Clases auxiliares
  • DSACryptoServiceProvider
  • Unión hash algoritmo asimétrico
  • AsymmetricSignatureFormatter
  • X509Certificate
  • SignedXML

21
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

22
Despliegue seguroProblemas con DLL y COM
  • DLL Hell
  • Aplicaciones compiladas con una DLL no funcionan
    con DLLs nuevas
  • Aplicaciones de terceros sobrescriben nuestras
    DLLs
  • COM
  • Mecanismo sencillo de versionado
  • No se utiliza
  • No es fiable

23
Despliegue seguroTipos de assemblies
  • Weak name
  • Única información presente en el assembly Nombre
    y versión (sólo informativa)
  • Cargados desde el directorio de la aplicación
  • Strong name
  • Información presente en el assembly Nombre,
    versión, cultura y token público
  • Cargados desde el directorio de la aplicación o
    la GAC
  • El strong name debe ser idéntico en la referencia
    y en el assembly (si no hay políticas que
    apliquen)

24
Despliegue seguroFirma de código
  • Los assemblies con strong name siempre están
    firmados
  • La firma es comprobada al instalar o al cargar
  • El hash de la clave pública se utiliza como token
    público del strong name
  • Garantiza que sólo el poseedor de la clave
    privada pueda modificar un assembly

25
Despliegue seguroFirma de código (II)
Clave Privada
Clave Pública
HASH
PE Header
CLR Header
Strong Name Signature
Signature
Manifiesto
Versión
Public key
Metadata
IL 00111001010100010101111100001011010001110000111
0101010100010101010100010101011110000101001
StrongNameLib.dll
26
Despliegue seguroVerificación de firma
HASH
PE Header
PE Header
CLR Header
Signature
Strong Name Signature
Manifiesto
AssemblyRef
Manifiesto
StrongNameLib.dll
Versión
Versión
Signature
Public key
Public key token
Public key
Metadata
Metadata
IL 00111001010100010101111100001011010001110000111
0101010100010101010100010101011110000101001
IL 00111001010100010101111100001011010001110000111
0101010100010
StrongNameLib.dll
StrongName.exe
27
Despliegue seguroFirma de código con certificado
  • Además del strong name, los assemblies pueden
    estar certificados
  • Firma digital sobre el fichero
  • Permite identificar al creador del assembly
  • Puede recuperarse en tiempo de ejecución
  • Clase X509Certificate
  • Puede establecerse seguridad de código y enlazado
    sobre el certificado

28
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

29
Seguridad de tiposCódigo Type-Safe y verificación
  • Un código es type-safe si
  • Accede a posiciones de memoria válidas
  • Accede sólo a miembros expuestos de las clases
  • Utiliza referencias verdaderas
  • Proceso de verificación
  • Examina el código IL y los metadatos
  • Efectuado durante el JIT
  • Si el código no es verificable se lanza una
    excepción

30
Seguridad de tiposAplicaciones de código
type-safe
  • Garantiza la seguridad en los tipos
  • Evita el acceso a posiciones de memoria no
    válidas (GPFs)
  • Añade un nivel de aislamiento a los procesos del
    sistema operativo
  • Sólo si restringimos también llamadas a
    unmanaged.
  • Permite la aparición de los Application Domains

31
Seguridad de tiposApplications Domains
  • Proceso virtual dentro de un proceso físico del
    sistema

Proceso Nativo 2
Proceso Nativo 1
Application Domain 3
Application Domain 1
Application Domain 2
32
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

33
Seguridad de códigoSeguridad en Windows
  • Autenticación de usuarios
  • Logon interactivo
  • Autenticación en red
  • Control de acceso basado en objetos
  • Permite limitar los recursos al usuario
    autenticado
  • Limitación con aplicaciones no confiadas por el
    usuario
  • Mecanismo Todo - Nada

34
Seguridad de códigoSolución .NET
  • Desarrollada sobre la seguridad Windows
  • Nunca podremos tener mayores privilegios
  • Centrada en el código, no en el usuario
  • Identificación del código por evidencias
  • Permite distintos niveles de seguridad
  • Muy granular
  • Conjunto estándar de permisos ampliable
  • Fácil de administrar
  • Distintos niveles de administración

35
Seguridad de códigoEvidencias
  • Identifica características del código
  • Normalmente quién y dónde
  • Recuperadas por el CLR en runtime para la
    asignación de permisos

Directorio de Aplicación
URL
Hash criptográfico
Zona
Nombre de fichero
Strong Name
Directorio de red
Firma con certificado
Web site
Personalizable
36
Seguridad de códigoGrupos de código
  • Formado por
  • Condición de pertenencia al grupo
  • Conjunto de permisos nombrado
  • Si el código cumple la condición, toma los
    permisos asociados

Condición Publisher David Carmona
LowTrust
Security Permission Execute
Permission Set LowTrust
Environment Permission Read Variable OS
Grupo de código
37
Seguridad de códigoPolíticas
  • Conjunto de reglas que gobiernan los permisos
  • Organizadas jerárquicamente
  • Enterprise
  • Machine
  • User
  • Application
  • Permisos efectivos intersección de políticas

38
Seguridad de códigoGrupos de código (II)
  • Pertenencia a varios grupos
  • Unión de permisos
  • Ej. Aplicación http//vacaciones
  • P1 U P4 U P7

All code
P1
Zone Internet
Site freeware.com
Publisher David Carmona
Zone Local Intranet
P4
P5
P3
P2
Strong Name App1, v1,
Hash C2 FA 32 5B
Site CompanyWeb
Publisher My Company
P6
P7
P7
P8
Enterprise Policy
39
Seguridad de códigoGrupos de código (III)
  • Ej. Aplicación http//vacaciones
  • Enterprise policy P1 U P4 U P7
  • Machine Policy P1 U P2
  • User Policy P1 U P2
  • Efectivos (P1 U P4 U P7) n (P1 U P2) n (P1 U
    P2)

All code
All code
P1
P1
Zone Internet
Zone Intranet
Strong Name Vacac, v1,
Site vacaciones
P2
P3
P2
P3
Machine Policy
User Policy
40
Seguridad de códigoAtributos en grupos de código
  • Exclusive
  • El grupo actual establece los permisos finales de
    la política
  • LevelFinal
  • La política actual es la última en consultarse
  • Orden Enterprise, Machine, User

41
Seguridad de códigoPermisos
  • Protección de recursos y operaciones
  • SecurityPermission
  • SocketPermission
  • WebPermission
  • PrintingPermission
  • Acceso al interfaz de usuario
  • UIPermission
  • Protección de ficheros y directorios
  • FileIOPermission
  • FileDialogPermission

42
Seguridad de códigoPermisos (II)
  • Acceso al entorno, registro y metadatos
  • EnvironmentPermission
  • RegistryPermission
  • ReflectionPermission
  • DNSPermission
  • EventLogPermission
  • ServiceControllerPermission

43
Seguridad de códigoPermisos (III)
  • Protección de datos
  • DirectoryServicesPermission
  • IsolatedStorageFilePermission
  • OleDbPermission
  • SqlClientPermission
  • MessageQueuePermission
  • PerformanceCounterPermission
  • Autenticación
  • PrincipalPermission

44
Seguridad de códigoPermisos (IV)
  • Identidad
  • PublisherIdentityPermission
  • SiteIdentityPermission
  • StrongNameIdentityPermission
  • ZoneIdentityPermission
  • URLIdentityPermission
  • Permisos personalizables

45
Seguridad de códigoPermisos nombrados por defecto
Full Trust
Everything
Local
Internet
Execution
Nothing
Acceso sin límite a todos los recursos
Acceso sin límite excepto skip verification
DNSEnviroment USERNAME, TEMP Eventlog Instrumen
t FileDialog FileIO Read IsolatedStorage
Assembly By User Printing Default Reflection
ReflectionEmit Security Execution, Assertion,
RemotingConf UIPermission Web Connect
FileDialog Open IsolatedStorage Domain By User
(10240) Printing SafePrinting Security
Execution UIPermission SafeTopLevel,
OwnClipboard Web Connect (origin)
Sólo ejecución
Sin acceso
46
Seguridad de códigoGrupos de código por defecto
Grupo de código
My computer Zone
Local Intranet
Trusted zone
Internet, Restricted
Permission Set
Full trust
Local Intranet
Internet
Nothing
47
Seguridad de códigoComprobación de permisos
  • Demanda de permisos
  • Cada permiso tiene una clase en
    System.Security.Permissions
  • Método Demand Comprueba que todos los llamantes
    tienen el permiso actual
  • Para ello .NET mantiene una pila de permisos por
    cada flujo de ejecución

Assembly A1
G1
Assembly A2
G2
Assembly A3
G3
A4 demanda permiso P P.Demand()
Assembly A4
G4
48
Seguridad de códigoOperaciones con permisos
  • Denegación de permisos
  • Método Deny Deniega el permiso actual a todos
    los assemblies siguientes de la pila
  • PermitOnly Sólo otorga el permiso actual a los
    assemblies siguiente de la pila
  • Operaciones entre permisos
  • Union
  • Intersect
  • IsSubsetOf

49
Seguridad de códigoImposición de permisos
  • Método Assert
  • Permite realizar operaciones no permitidas en los
    llamantes. Cuidado!
  • Escenarios
  • Cuando se utiliza un recurso de forma
    completamente controlada
  • Cuando se encapsula código no manejado

Assembly A1
G1
A2 llama a P.Assert()
Assembly A2
G2
As2
Assembly A3
G3
A4 demanda permiso P P.Demand()
Assembly A4
G4
50
Seguridad de códigoImplementación declarativa
  • Visibles con PermView.exe
  • Cada permiso tiene un atributo asociado
  • FileIOPermission FileIOPermissionAttribute
  • Afecta al objeto sobre el que se aplica
  • Assembly
  • Clase
  • Método
  • El constructor del atributo siempre toma una
    enumeración SecurityAction como parámetro
  • FileIOPermissionAttribute (SecurityAction action)
  • Los campos del atributo representan su
    configuración
  • FileIOPermissionAttribute.Read / Write / Append

51
Seguridad de códigoImplementación declarativa
(II)
  • SecurityAction permite realizar las mismas
    operaciones que la implementación imperativa
  • SecurityAction.Demand
  • SecurityAction.Deny
  • SecurityAction.Assert
  • SecurityAction.PermitOnly
  • Añade nuevas operaciones
  • LinkDemand El llamante debe soportar el permiso
    especificado
  • InheritanceDemand Las clases heredadas deben
    soportar el permiso especificado

52
Seguridad de códigoImplementación declarativa
(III)
  • Acciones sólo a nivel de assembly
  • SecurityAction.RequestMinimum Mínimo conjunto de
    permisos para que la aplicación funcione
  • SecurityAction.RequestOptional Conjunto de
    permisos opcionales para acceder a toda la
    funcionalidad
  • SecurityAction.RequestRefuse Permisos no
    requeridos por el assembly
  • PermissionSetAttribute
  • Permite demandar conjuntos nombrados de permisos

53
Seguridad de códigoBest practices
  • Identificar los permisos mínimos y opcionales de
    cada assembly
  • Facilita la administración
  • Mejora la seguridad
  • Tratar las excepciones SecurityException
  • Especialmente en los permisos opcionales
  • Probar la aplicación en el Permission Set donde
    se espera que funcionen
  • Minimizar los Asserts
  • Aislarlos en assemblies separados
  • Conocer el funcionamiento de los permisos en las
    clases que utilizamos

54
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

55
Seguridad basada en rolesAutenticación y
autorización
  • Autenticación
  • Proceso que verifica la identidad del usuario
  • Autorización
  • Proceso que determina si el usuario puede
    realizar una operación determinada
  • Autenticación .NET
  • Windows
  • Personalizable
  • Sólo en ASP.NET
  • Forms
  • Passport
  • Autorización .NET
  • Personalizable con demanda de permisos

56
Seguridad basada en rolesIdentities, principals
  • Identity
  • Encapsula información sobre un usuario
  • Principal
  • Representa el contexto de seguridad sobre el que
    corre la aplicación
  • Incluye
  • Usuario actual
  • Roles del usuario actual
  • Tres tipos
  • Windows
  • Generic
  • Custom

57
Seguridad basada en rolesWindows Principal
  • Seguridad integrada con Windows
  • Establecida a nivel de Application Domain
  • AppDomain.CurrentDomain.SetPrincipalPolicy
  • Cada hilo tiene su propio contexto Windows
  • Thread.CurrentPrincipal
  • Permite impersonación

58
Seguridad basada en rolesGeneric Principal,
Custom Principal
  • Permite implementar nuestro propio sistema de
    autenticación
  • Ej. Base de datos
  • Establecida a nivel de Application Domain
  • AppDomain.CurrentDomain.SetPrincipalPolicy
  • Get / set a nivel de hilo
  • Thread.CurrentPrincipal
  • Para establecer el CurrentPrincipal es necesario
    el permiso ControlPrincipal de SecurityPermission

59
Seguridad basada en rolesAutorización de
Principals
  • Programáticamente
  • If (MyPrincipal.IsInRole())
  • De forma imperativa con PrincipalPermission
  • p new PrincipalPermission(DOMAIN\\Usuario)p.
    Demand()
  • De forma declarativa con PrincipalPermissionAttrib
    ute
  • PrincipalPermissionAttribute(SecurityAction.Deman
    d, Name DOMAIN\\Usuario,
  • Válido para cualquier tipo de Principal
  • Sin necesidad de cambios

60
Agenda
  • Seguridad en .NET
  • Servicios criptográficos
  • Despliegue seguro de aplicaciones
  • Seguridad de tipos y verificación de código
  • Seguridad de código
  • Seguridad basada en roles
  • Almacenamiento aislado

61
Almacenamiento aisladoObjetivo
  • Almacenamiento de datos en disco
  • El assembly no necesita especificar un nombre de
    fichero
  • El assembly no necesita permisos de escritura en
    disco
  • Almacenado en un lugar conocido por el usuario
  • Roaming con el usuario
  • Establecimiento de cuotas

62
Almacenamiento aisladoTipos
  • Por ámbito
  • Usuario Assembly
  • Usuario Assembly Domain
  • Por roaming
  • Roaming habilitado
  • Roaming deshabilitado
  • Por operación
  • Lectura / escritura
  • Administración

63
Almacenamiento aisladoPermisos
  • IsolatedStorageFilePermission
  • Contiene campos que permiten establecer los tipos
    de almacenamientos aislados permitidos
  • Permite establecer una cuota
  • Por defecto
  • Permission Set InternetUsuario assembly
    dominioCuota 10240 bytesLectura / escritura
  • Permission Set LocalIntranetUsuario
    assemblySin cuotaLectura / Escritura
  • Permission Set EverythingSin límite de uso o
    cuota

64
Almacenamiento aisladoUtilización
  • Recuperar el almacenamiento deseado
  • IsolatedStorageFile.GetUserStoreForAssembly()
  • IsolatedStorageFile.GetUserStoreForDomain()
  • Crear ficheros
  • new IsolatedStorageFileStream(file.txt,
    FileMode.Create, store)
  • Abrir un fichero existente
  • new IsolatedStorageFileStream(file.txt,
    FileMode.Open, store)
  • Otras operaciones
  • Crear y borrar directorios
  • Obtener la cuota disponible
  • Enumerar ficheros y directorios

65
Más información
  • MSDN
  • Securing Applicationshttp//msdn.microsoft.com/li
    brary/en-us/cpguide/html/cpconsecuringyourapplicat
    ion.asp
  • System.Securityhttp//msdn.microsoft.com/library/
    en-us/cpref/html/frlrfsystemsecurity.asp
  • Ejemplo Public Keyhttp//msdn.microsoft.com/libra
    ry/en-us/cpsamples/html/public_key_cryptography_sa
    mple.asp
  • Libros
  • .NET Security Programminghttp//www.amazon.co.uk/
    exec/obidos/ASIN/0471222852/qid1019389011/sr1-5/
    refsr_1_0_5/202-9812972-3725429
  • .NET Framework Security  http//www.amazon.co.uk/
    exec/obidos/ASIN/067232184X/qid1019389011/sr1-6/
    refsr_1_0_6/202-9812972-3725429

66
Más información
  • Applied Microsoft .NET Framework
    Programminghttp//www.microsoft.com/mspress/books
    /5353.asp
  • Artículos
  • Secure Coding Guidelines for the .NET
    Frameworkhttp//msdn.microsoft.com/library/en-us/
    dnnetsec/html/seccodeguide.asp
  • An Overview of Security in the .NET Framework
    http//msdn.microsoft.com/library/en-us/dnnetsec/
    html/netframesecover.asp
  • .NET Framework Enterprise Security Policy
    Administration and Deploymenthttp//msdn.microsof
    t.com/library/en-us/dnnetsec/html/entsecpoladmin.a
    sp
  • Code Access Security and Distribution Features in
    .NET Enhance Client-Side Appshttp//msdn.microsof
    t.com/msdnmag/issues/02/06/rich/TOC.ASP

67
Más información
  • Security in .NET Enforce Code Access Rights with
    the Common Language Runtime http//msdn.microsoft
    .com/msdnmag/issues/01/02/cas/toc.asp
  • The Security Infrastructure of the CLR Provides
    Evidence, Policy, Permissions, and Enforcement
    Serviceshttp//msdn.microsoft.com/msdnmag/issues/
    02/09/SecurityinNET/TOC.ASP
  • Protect Private Data with the Cryptography
    Namespaces of the .NET Frameworkhttp//msdn.micro
    soft.com/msdnmag/issues/02/06/crypto/toc.asp
  • Unify the Role-Based Security Models for
    Enterprise and Application Domains with
    .NEThttp//msdn.microsoft.com/msdnmag/issues/02/0
    5/rolesec/toc.asp
  • Microsoft Official Curriculum
  • Securing and Deploying Microsoft .NET Assemblies
    (Prerelease)http//www.microsoft.com/traincert/sy
    llabi/2350AFINAL.ASP

68
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com