Title: mayo 2003
1Forum de Desarrolladores Corporativos SEGURIDAD
EN .NETDesarrollando aplicaciones seguras con
.NET FrameworkCatherine Heller
Patrocinado por
2Seguridad en .NETCatherine HellerSenior
ConsultantMicrosoft Developer Services
3Ideas clave...
- Seguridad debe plantearse desde el principio no
como un añadido - Evitar implementaciones de seguridad caseras
- Impersonar sólo cuando absolutamente necesario.
No hace falta impersonar para que fluya identidad.
4Agenda
- Conceptos de seguridad
- Desarrollo seguro
- Autenticación y autorización
- Comunicaciones seguras
- Code Access Security (CAS)
5Seguridad - Los pilares
- Autenticación - Quién
- Cliente autenticado gt Principal
- Autorización Qué puede hacer
- Restringir el acceso a recursos y/o operaciones
- Comunicaciones seguras
- Confidencialidad
- Integridad
- AuditorÃa
- No-repudio
6Arquitectura de seguridad
Autenticación Windows Forms, Passport, None
(Custom) Autorización Web Permissions, NTFS
Permissions, URL authz, File authz, Principal
permissions, .NET Roles
IIS Anonymous Basic Digest Integrated
Windows Certificate
Autenticación Windows, SQL Autorización Logins, Pe
rmissions, Roles
IIS/ASP.NET Servicios Web
IIS/ASP.NET Remoting
IIS/ASP.NET Aplicación Web
Clientes
SQL Server
Enterprise Services
Servidor de datos
Servidor Web
Autenticación RPC Autorización ES (COM)
Roles NTFS Permissions
RPC None Connect Call Packet Integrity Privacy
Comunicaciones seguras (SSL/IPSec)
7Seguridad y Remoting
- Remoting no tiene un modelo de seguridad propio
- Hereda el de IIS y ASP.NET (cuando hospedado en
IIS) - Remoting entre AppDomains en el mismo proceso
- Fluye el contexto de seguridad
- Remoting entre procesos/máquinas
- No fluye el contexto de seguridad
- La infraestructura es extensible y se puede
añadir - .NET Remoting Security Solution, Part 1
Microsoft.Samples.Security.SSPI Assembly - http//msdn.microsoft.com/library/en-us/dndotnet/h
tml/remsspi.asp - .NET Remoting Security Solution, Part 2
Microsoft.Samples.Runtime.Remoting.Security
Assembly - http//msdn.microsoft.com/library/en-us/dndotnet/h
tml/remsspi.asp
8Restringiendo el acceso
- Aplicación basada en Internet utilizando IIS
Acceso anónimo deshabilitado
Role Membership Demands
IIS
URL Authz
File Authz
Imperative Principal Permission Demands
Población de usuarios Internet
G
G
G
G
10,000 Usuarios
1,000 Usuarios
100 Usuarios
10 Usuarios
G
Gatekeeper
9Guardabarreras y portones
- El término guardabarreras (gatekeeper) se utiliza
para identificar la tecnologÃa responsable para
un determinado portón (gate) - Un portón representa un punto de control de
acceso, dentro de una aplicación
10Identidad Windows (SO)
- Principal entidad unÃvoca, cuya identidad ha
sido validada - Representado por un nombre y un SID (Security
Identifier) - Cuentas de usuario y máquinas
- Credenciales lo que un Principal utiliza para
demostrar su identidad - Qué tienes? smartcard, llave, certificado
- Qué sabes? PIN, contraseña
- Qué eres? información biométrica
- Token representa un Principal
- Todo proceso tiene un token
- Un thread puede tener su propio token
11Impersonación
Token primario
Pepe
Token de impersonación
Proceso.exe
12Identidades en .NET
- HttpContext.User
- IPrincipal asociado a la petición HTTP
- Identidad utilizada por ASP.NET para decisiones
de autorización - Thread.CurrentPrincipal
- IPrincipal asociado al thread lógico de .NET
- Utilizada por el CLR para PrincipalPermission
- WindowsIdentity.GetCurrent()
- WindowsIdentity asociada al thread de Win32
- Identidad utilizada por el SO a la hora de
acceder a recursos
13IPrincipal IIdentity
CustomPrincipal
CustomIdentity
14Agenda
- Conceptos de seguridad
- Desarrollo seguro
- Autenticación y autorización
- Comunicaciones seguras
- Code Access Security (CAS)
15Vulnerabilidades comunes
- STRIDE
- Spoofing (falsificación de identidad)
- Tampering
- Repudiability
- Information Disclosure
- Denial of Service
- Elevation of Privileges
- Designing for Securability
- http//msdn.microsoft.com/library/en-us/vsent7/ht
ml/vxconDesigningForSecurability.asp
16Analizar las amenazas
- Desglosar posibles amenazas
- Priorizar, en función de potencial de daños y el
coste de implementar las medidas apropiadas - Riesgo Criticidad / Esfuerzo
- Medidas implementadas depende de...
- Posibles amenazas, sus probabilidades y sus
consecuencias - Nivel de riesgo aceptable para la aplicación y
para los datos - El coste de implementar
Coste proporcional al valor de lo que se quiere
proteger
17Desarrollo seguroVulnerabilidades comunes
- Validación de los datos de entrada
- Autenticación y autorización
- Gestión de la configuración
- Datos sensibles
- Gestión de sesiones
- Manipulación de parámetros
- CriptografÃa
- Gestión de excepciones
- AuditorÃa y logging
18Validación de los datos de entrada
- Riesgo ataques producidos al enviar texto
malicioso - query strings
- campos de formularios
- cookies
- cabeceras HTTP
- Ataques comunes
- Buffer overruns
- Cross-site scripting attacks
- SQL Injection attacks
19SQL Injection
void DoQuery(string Id) SqlConnection sql
new SqlConnection( _at_"data
sourcelocalhost" "user
idsapasswordpassword") sql.Open()
sqlstring "SELECT saldo" "
FROM cuentas WHERE id'" Id "'"
SqlCommand cmd new SqlCommand(sqlstring, sql)
DoQuery("1001") gt SELECT saldo FROM cuentas
WHERE id '1001'
DoQuery("'1001' DROP TABLE cuentas --") gt
SELECT saldo FROM cuentas WHERE id '1001'
DROP TABLE cuentas ---
20Principio de mÃnimo privilegio
- Privilegios mÃnimos necesarios
- Otorgados al mÃnimo código necesario
- Durante el mÃnimo tiempo necesario
- Ejecutar procesos en cuentas con los privilegios
mÃnimos - No desarrollar como Administrador, o con una
cuenta miembro del grupo Administradores
21Seguridad multi-capa
Disponemos de seguridad, tenemos un cortafuego
Proteger la red
Proteger la máquina
Proteger la aplicación
Presentación
Lógica
Datos
22Desarrollo seguro - Referencias
- Writing Secure Code, 2nd Edition. Michael Howard,
David C. LeBlanc. Microsoft Press 2002 - Defend Your Code With Top Ten Security Tips Every
Developer Must Know - http//msdn.microsoft.com/msdnmag/issues/02/09/Se
curityTips/default.aspx - Developing Software in Visual Studio .NET with
Non-Administrative Privileges - http//msdn.microsoft.com/library/en-us/dv_vstech
art/html/tchDevelopingSoftwareInVisualStudioNETWit
hNon-AdministrativePrivileges.asp - Essential .NET Security. Keith Brown (en
preparación) - http//www.develop.com/kbrown/book/
23Configuración segura de contraseñas
- HOW TO Use the ASP.NET Utility to Encrypt
Credentials and Session State Connection Strings - http//support.microsoft.com/default.aspx?scidkb
EN-US329290 - FIX Stronger Credentials for processModel,
identity and sessionState - http//support.microsoft.com/default.aspx?scidKB
en-us329250
24Agenda
- Conceptos de seguridad
- Desarrollo seguro
- Autenticación y autorización
- Comunicaciones seguras
- Code Access Security (CAS)
25AuthN y AuthZ
- Autenticación (authN) - quién
- Autorización (authZ) qué
- Autorización muy dependiente de autenticación
- Cualquier polÃtica de autorización requiere
usuarios autenticados - El mecanismo de autenticación determina los
posibles mecanismos de autorización
26Diseñando AuthN y AuthZ
- Identificar los recursos a proteger
- Elegir una estrategia de autorización
- Elegir las identidades a utilizar para el acceso
a recursos - Considerar el flujo de identidad
- Elegir un mecanismo de autenticación
- Decidir mecanismo de flujo de identidad
271. Recursos a proteger
- Recursos expuestos a clientes
- Recursos del servidor Web (páginas, Servicios
Web, recursos estáticos) - Bases de datos
- Recursos de red (sistemas de archivos remotos,
AD) - Operaciones de aplicación
- Recursos utilizados por la aplicación
- Recursos del sistema Registro, EventLog
- Archivos de configuración
282. Estrategias de autorización
- Basada en roles
- Acceso a operaciones en función de rol
- Acceso a recursos con identidades fijas
- Basada en recursos (ACLs)
- Recursos protegidos con ACLs
- Acceso a recursos con la identidad del cliente
(impersonación)
29Modelos de acceso a recursos
Trusted Subsystem
Servidor Web o de Aplicación
Servidor de datos
Trusted Service Identity
A B C D E
Autorización basada en roles
SQL Server
La base de datos tiene una relación de confianza
con el servidor Web el Servidor Web autoriza
los usuarios
Trust Boundary
30Modelos de acceso a recursos
Impersonation/Delegation
Servidor Web o de Aplicación
Servidor de datos
A B C D E
SQL Server
Caller Impersonation/Delegation
31Estrategia de autorización Un patrón común
- Autenticar usuarios en el servidor Web
(front-end) - Mapear usuarios a roles
- Autorizar acceso a operaciones en base a roles
- Acceder a recursos con identidades fijas
- Identidad fija única
- Identidad fija por rol
32Modelos de acceso a recursos
Utilizando múltiples identidades fijas
Servidor Web o de Aplicación
Servidor de datos
Rol 1
Trusted Identity1
A B C D E
Rol 2
Trusted Identity2
SQL Server
Identity1 tiene permisos de lectura Identity2
tiene permisos de lectura/escritura
Role Mapping
Trust Boundary
333. Identidades a utilizar para el
acceso a recursos
- Original caller
- Requiere impersonación
- Puede requerir delegación
- Identidad del proceso
- Cuenta de un Servicio
- Usuario SQL
- EnterpriseServices
- Identidad de aplicación
344. Flujo de identidad - dónde?
- Determinar en qué capas se necesita la identidad
del cliente - AuditorÃa
- Autorizaciones basadas en usuario
355. Mecanismo de autenticación
- Depende de...
- Naturaleza de los clientes
- Navegador
- Cuentas Windows
- Necesidad de impersonación/delegación
- CaracterÃsticas de la infraestructura
- Firewalls
- Puertos disponibles
36Escenarios Internet
Suposición de base Usuarios no tienen cuentas
Windows ni certificados
Inicio
Aplicación Web interactiva?
Utilizar Passport o Autenticación Forms
SÃ
No Servicio Web
Utilizar GXA (Autenticación WS-Security)
37Escenarios Intranet/Extranet
Inicio
Usuarios tienen cuentas en Active Directory?
Utilizar Basic, Kerberos o Forms Custom Mapping
Se requiere Delegación?
SÃ
SÃ
Utilizar Autenticación Passport
No
SÃ
No
W2K en Clientes y Servidores?
Usuarios requieren Passport?
Aplicación Web interactiva?
No
Utilizar Basic, NTLM o certificados
SÃ
SÃ
No
No Servicio Web
Utilizar autenticación Forms
Utilizar Basic, Digest, NTLM, Kerberos
o certificados
Usuarios tienen certificados?
SÃ
Utilizar autenticación por certificados
No
Utilizar autenticación WS-Security
38Mecanismos de autenticaciónUna comparativa
39ASP.NET - Proceso de AuthN/AuthZ
Credenciales de usuario autenticado (o
IUSR_MACHINE)
4
ASP.NET (aspnet_wp.exe)
IIS (inetinfo.exe)
2
3
5
6
1
Autenticación
Autorización
Autenticación
Autorización
Petición HTTP
Permisos Web Permisos NTFS Restricciones IP
Anonymous Basic Digest Integrated Certificate
Windows Forms Passport None
FileAuthZ URL AuthZ Roles .NET
Servidor Web
7
Credenciales Proceso ASP.NET Original
Caller Identidad fija
Llamada local o remota
40Autorización en ASP.NETBasada en recursos
- FileAuthorization
- Para tipos de archivo mapeados a ASP.NET
- Requiere una identidad Windows
- Basado en ACLs y la identidad que llega a ASP.NET
de IIS (no requiere impersonación) - UrlAuthorization
- Puede aplicarse a nivel de máquina, sitio Web,
aplicación, subdirectorio y página - Elemento ltauthorizationgt en el web.config
- ltallowgt, ltdenygt
- users, roles, verbs
- No requiere una identidad Windows
41Forms AuthenticationRequisitos mÃnimos
- Habilitar acceso anónimo en IIS
- Especificar autenticación Forms y denegar el
acceso al usuario anónimo en el web.config - Crear una página para solicitar las credenciales
- Validar los credenciales
- Redirigir el usuario a la página solicitada
ltsystem.webgt ltauthentication mode"Forms" /gt
ltauthorizationgt ltdeny users"?" /gt
ltallow users""/gt lt/authorizationgt lt/system.w
ebgt
42Forms AuthenticationValidación de credenciales
- FormsAuthentication.Authenticate(user, pwd)
- Código a medida
- Validar contra BD de usuarios
- Validar contra ActiveDirectory
ltauthentication mode"Forms"gt ltformsgt
ltcredentials passwordFormat"SHA1"gt ltuser
name"MyTestUser"
password"B30B118E87515296326CAE..."/gt
lt/credentialsgt lt/formsgt lt/authenticationgt
43Forms AuthenticationAutorización basada en roles
- Para asociar roles al IPrincipal
- Al validar los credenciales, obtener los roles
- Guardar en el ticket de autenticación
- Evento Application_AuthenticateRequest
- Extraer la cookie
- Extraer el ticket del cookie y descifrar
- Extraer los grupos del ticket (UserData)
- Crear un GenericPrincipal y asociar los roles
- Asignar el GenericPrincipal al HttpContext.User
44Agenda
- Conceptos de seguridad
- Desarrollo seguro
- Autenticación y autorización
- Comunicaciones seguras
- Code Access Security (CAS)
45Comunicaciones seguras
- Comunicaciones seguras proporcionan
- Privacidad
- Cifrado de la información
- Integridad
- Message Authentication Codes (MAC), o hash
46Saber qué securizar
- Modelo de despliegue Web tÃpico
- Modelo de despliegue Web con comunicaciones
seguras
Servidor Web
Clientes
Servidor de datos
Servidor de Aplicaciones
Servidor Web
Clientes
Servidor de Aplicaciones
Servidor de datos
SSL (Privacidad/ Integridad)
IPSec o RPC (Privacidad/ Integridad)
IPSec o SSL (Privacidad/ Integridad)
47SSL
- Canal cifrado entre cliente y servidor
- El cliente utiliza el protocolo HTTPS
- El servidor escucha en el puerto 443 de TCP
- Escenarios que requieren SSL
- Autenticación Basic y Forms
- EnvÃo de datos sensibles
- Requisitos y/o aspectos de uso
- Requiere un certificado de servidor en el
Servidor Web - Puede funcionar a través de NAT
48IPSec
- Canal cifrado entre dos máquinas
- En función de la dirección IP, puerto y protocolo
de origen y destino - Transparente a nivel de aplicación
- Utilizar IPSec para
- Cifrar toda comunicación, confirmar integridad
y/o proporcionar autenticación entre dos máquinas - Restringir el acceso a máquinas determinadas
- Requisitos y/o aspectos de uso
- Requiere W2K o posterior en ambas máquinas
- No funciona a través de NAT
49RPC Encryption
- Mecanismo de transporte utilizado por DCOM
- Nivel de autenticación configurable
- Desde ninguna hasta cifrado completo de paquetes
50Agenda
- Conceptos de seguridad
- Desarrollo seguro
- Autenticación y autorización
- Comunicaciones seguras
- Code Access Security (CAS)
51Code Access Security (CAS)
- Modelo de seguridad proporcionado por el CLR
- Permite definir permisos en base a
caracterÃsticas del código - Grupos de código (code groups)
- Conjuntos de permisos (permission sets)
- Permisos (permissions)
- JerarquÃa de polÃticas de seguridad
- Enterprise, Máquina, Usuario
52Grupos de código
- Membership condition
- Application Directory
- Hash (SHA1 o MD5)
- Publisher
- Site
- Strong Name
- URL
- Zone
- My Computer, Local Intranet, Internet
- Trusted Sites, Untrusted Sites
53Permisos
- Environment Variables
- File Dialog
- File IO
- Isolated Storage File
- Reflection
- Registry
- Security
- User Interface
- DNS
- Printing
- Event Log
- Web Access
- Socket Access
- Performance Counter
- Directory Services
- Message Queue
- Service Controller
- OLE DB
- SQL Client
54Conjuntos de permisos
- FullTrust
- SkipVerification
- Execution
- Nothing
- LocalIntranet
- Internet
- Everything
- Environment (Leer USERNAME)
- File Dialog
- Isolated Storage
- User Interface
- DNS
- Printing (Default)
- Event log (Instrument)
- File Dialog (Open)
- Isolated Storage (10K)
- User Interface (Own clipboard, Safe top-level
windows) - Printing (Safe)
55Escenarios especiales
- AllowPartiallyTrustedCallersAttribute
- .NET Framework Assemblies and the
AllowPartiallyTrustedCallersAttribute - http//msdn.microsoft.com/library/default.asp?url
/library/en-us/dnnetsec/html/Aptcatypes.asp - EnterpriseServices
- SecurityPermissionFlag.UnmanagedCode
- Remoting
- SecurityPermissionFlag.RemotingConfiguration
- SecurityPermissionFlag.SerialiazationFormatter
- Automatic Deserialization in .NET Remoting
- http//msdn.microsoft.com/library/default.asp?url
/library/en-us/cpguide/html/cpconautomaticdeseria
lizationinnetremoting.asp
56Resumen
- No dejar Seguridad para el final! ?
- Adoptar prácticas de desarrollo seguro
- Principio de mÃnimo privilegio
- Validar datos de entrada
- No desarrollar como Administrador
- Determinar los mecanismos de autenticación y
autorización al principio - En base a los requisitos y caracterÃsticas de la
aplicación - No siempre hace falta impersonar
- Considerar el uso de roles .NET
- Utilizar SSL y IPSec cuando necesario
- Code Access Security proporciona otro nivel de
seguridad, basado en caracterÃsticas del código
57Referencias
- Building Secure ASP.NET Applications
Authentication, Authorization, and Secure
Communication - http//msdn.microsoft.com/library/en-us/dnnetsec/
html/secnetlpMSDN.asp - Programming Windows Security
Keith Brown, Addison-Wesley, 2000. - Improving Web Application Security. Threats and
Countermeasures - Próxima publicación! (verano 2003)
58Más referencias
- Seguridad en .NET (Grabación del taller de David
Carmona) - http//www.microsoft.com/spanish/msdn/spain/event
os/presentaciones/seguridad.asp - Web Services Security HTTP Basic Authentication
without Active Directory - http//www.rassoc.com/gregr/weblog/stories/2002/0
6/26/webServicesSecurityHttpBasicAuthenticationWit
houtActiveDirectory.html
59Forum de Desarrolladores Corporativos SEGURIDAD
EN .NETDesarrollando aplicaciones seguras con
.NET FrameworkCatherine Heller
Patrocinado por