280 likes | 388 Views
Rodrigo Salinas Arquitecto / Consultor / Trainer .NET, Java EE, Seguridad & Business Intelligence Gerente de Desarrollo Tecnológico de Direkto S. A. http://www.rodrigosalinas.cl. Principios de la Seguridad In-Depth Seguridad In-Depth en ASP.NET Ataques y Debilidades más comunes
E N D
Rodrigo Salinas Arquitecto / Consultor / Trainer .NET, Java EE, Seguridad & Business Intelligence Gerente de Desarrollo Tecnológico de Direkto S. A. http://www.rodrigosalinas.cl
Principios de la Seguridad In-Depth • Seguridad In-Depth en ASP.NET • Ataques y Debilidades más comunes • ¿Cómo prevenir esos ataques? • Buenas Prácticas de Seguridad • Herramientas de apoyo • Patrones de Diseño de Seguridad
“Intelectuales resuelven problemas. Genios los previenen.” Albert Einstein.
Seguridad no es apenas uso de hardware • Aplicaciones suelen sufrir de vulnerabilidades relacionadas más bien con el desarrollo, no solo con las comunicaciones • La seguridad por lo tanto se debe aplicar a todos los niveles de la organización
Confidencialidad • Autenticación • Integridad • No-repudiación • Autorización • Confianza • Privacidad
Autenticación de Usuarios Configuración Segura Protección de Información Confidencial Prevención de Manipulación de Parámetros Manejo de Excepciones Protección de Información Confidencial Prevención de Robos de Sesiones o de Cookies Autorización de Usuarios Auditoría y Logging de Actividades y Transacciones Validación de la Entrada Autenticación y Autorización de Identidades transferidas Encriptación o Hashing de Datos Confidenciales
Es esencial que el proceso de autenticación del usuario de un sistema web sea seguro • El mecanismo de manejo de sesiones utilizado para continuar reconociendo a un usuario durante su uso de la aplicación debe ser igualmente bien protegido
¿Cómo se envían las credenciales del usuario? • ¿Cómo se almacenan las credenciales? • ¿Cómo son verificadas las credenciales? • ¿Cómo es autenticado el usuario después del login inicial?
Separación de áreas públicas y restringidas • Use pólizas de bloqueo de cuentas de usuario • Establezca contraseñas expirables • Siempre debe ser posible deshabilitar cuentas • No almacene las contraseñas, use hashes y salts • Requiera contraseñas seguras • No envíe contraseñas como texto plano a través de la red • Proteja las cookies de autenticación
¿Se usará Impersonation / Delegation o Trusted Subsystems para el acceso a recursos corporativos? Ambas estrategias tienen sus ventajas y desventajas • Windows 2003 Server soporta además Constrained Delegation
using System.Security.Principal; ... WindowsIdentity wi = new WindowsIdentity(usuario@nombreDominio); WindowsImpersonationContext ctx = null; try { ctx = wi.Impersonate(); // El Thread actual de procesamiento está impersonado. } catch { // Aquí se previenen las propagaciones de excepciones. } finally { // Se debe asegurar que la impersonación es terminada. ctx.Undo(); }
Utilice múltiples Gatekeepers (IPSec, ACL, URL Authorization) • Restrinja el acceso a recursos del sistema • Considere implementar Autorización Granular (Impersonation)
Asegure las interfaces de administración • Asegure el almacén de configuración • Mantenga privilegios granulares de administración • Use cuentas de Servicio y de Proceso separadas y con Privilegios Mínimos (Least Privileged)
Secretos • No los almacene si es posible • Menos tenerlos en código • No almacene nada en texto plano, use encriptación • No usar LSA (Local Security Authority) • Use la interfaz DPAPI de Windows para manejar secretos • Privacidad • Retorne información sensible encriptada solo cuando es requerida, evitando tenerla en caché • Asegure el canal (SSL, IPSec) • Considere asegurar el mensaje cuando éste debe pasar por varios intermediarios o cuando la Auditoría y la No-Repudiación son requerimientos importantes • No almacenar información importante en cookies persistentes • Evite el protocolo HTTP-GET para pasar información sensible
Proporciona: • Confidencialidad • No-Repudiación • Integridad • Autenticación • Buenas Prácticas: • No desarrolle su propio algoritmo • Mantenga la data desencriptada cerca del algoritmo
¿Cómo elegir el algoritmo apropiado? • Encriptación Simétrica (AES, 3DES) • Encriptación Asimétrica (DSA, RSA) • Hashing (MD5, SHA1, SHA256, HMACSHA256) • ¿Cómo elegir el tamaño de llave apropiado? • ¿Cómo generar números aleatorios? • Use RNGCryptoServiceProvider, no Random • ¿Cómo usar passwords para generar claves? • Use Rfc2898DeriveBytes el cual soporta RSA Password-Based Key Derivation Function version 2 (PBKDF2)
using System.Security.Cryptography; ... // Cree el salt (random bytes) usando RNGCryptoServiceProvider. byte[] salt = new byte[8]; new RNGCryptoServiceProvider().GetBytes(salt); // Obtenga los bytes derivados de la password y del salt. Rfc2898DeriveBytes passwordBytes = new Rfc2898DeriveBytes ("P@ssword!", salt); // Cree un objeto TripleDESCryptoServiceProvider. TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); // Obtenga la llave derivada de largo 16 bytes y // agréguela a la propiedad Key. tdes.Key = passwordBytes.GetBytes(16); // Use el objeto TripleDESCryptoServiceProvider para encriptar // y desencriptar la información. ...
Utilice SSL para proteger cookies de autenticación de sesión • Encripte el contenido de las cookies de autenticación • Limite el tiempo de vida de la sesión • Proteja el estado de la sesión del acceso no autorizado
Encripte estados de cookies sensibles • Asegúrese de que usuarios no pasen a llevar sus restricciones • Valide todos los valores enviados por el usuario • No confíe en el HTTP Header
No filtre información hacia el usuario • Mande el detalle de los errores hacia el log • Atrape todas las excepciones
Audite y escriba logs desde todas las capas de la aplicación • Considere el flujo de la identidad • Escriba a log eventos clave • Asegure los archivos de log • Respalde y analice los logs frecuentemente
El Open Web Application Security Project (www.owasp.org) es una organización sin fines de lucro • Proporciona mínimos standards para la seguridad de aplicaciones web • Contiene mucha documentación acerca de las mejores prácticas de seguridad • Tiene links a varias herramientas de aseguramiento de aplicaciones • Publica una lista de los principales tipos de ataques a aplicaciones web (TOP TEN)
Unvalidated Input • Broken Access Control • Broken Authorization & Session Management • Cross Site Scripting (XSS) • Buffer Overflows • Injection Flaws • Manejo de Errores Inapropiados • Almacenamiento Inseguro • Denial-Of-Service (DOS) • Administración de Configuración Insegura
Minimizar el área de superficie de ataque • Seguro por defecto • Principio del Least Privilege • Principio de Defense in Depth • Fallo Seguro • Sistemas externos son inseguros • Separación de deberes • No confiar en la seguridad solamente mediante Obfuscation • Simplicidad • Corregir sin demora items de seguridad
Microsoft Anti-XSS Library • Best Practices Analyzer • FxCop
Patrones de Disponibilidad de Aplicación • Checkpointed System • Standby • Comparator-Checked Fault-Tolerant System • Replicated System • Error Detection/Correction • Patrones de Sistemas Protegidos • Protected System • Policy • Authenticator • Subject Descriptor • Secure Communication • Security Context • Security Association • Secure Proxy