La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Desarrollo de aplicaciones seguras con .NET

Presentaciones similares


Presentación del tema: "Desarrollo de aplicaciones seguras con .NET"— Transcripción de la presentación:

1 Desarrollo de aplicaciones seguras con .NET
Alejandro Mezcua MVP .NET Zaltor Soluciones Informáticas

2 Agenda Objetivo La importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

3 Agenda Objetivo Importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

4 Objetivo Mostrar distintos aspectos de seguridad a tener en cuenta por los desarrolladores Enseñar diversas capacidades de .NET en el área de seguridad

5 Agenda Objetivo La importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

6 Importancia de la seguridad en las aplicaciones Un mundo hostil (I)
Usuarios móviles conectan desde redes públicas Trabajadores conectando a la red corporativa Redes fijas, Wireless, modem, VPN PCs de la empresa, PCs privados Trabajadores conectando a (y desde) otras redes Puntos de acceso a Internet públicos, redes de partners, de clientes Partners conectando a Servicios Web

7 Importancia de la seguridad en las aplicaciones Un mundo hostil (II)
Dependencia de Internet Cada vez más aplicaciones requieren el uso de Internet ¡Internet ES hostil por naturaleza! Lleno de ladrones, vándalos, criminales y hackers,  Prácticas dañinas por negligencia o deliberadas Procedimientos internos débiles hacen a las aplicaciones susceptibles de ataques

8 Fallos de seguridad accidentales
Importancia de la seguridad en las aplicaciones Tipos comunes de problemas Fallos de conectividad Ataques corporativos Datos restringidos Fallos de seguridad accidentales Ataques Automatizados Hackers Virus, Troyanos, y gusanos Denegación de Servicio (DoS) DoS

9 Importancia de la seguridad en las aplicaciones Consecuencias
Virus de correo, fraude financiero, sabotaje de las redes y otros problemas de seguridad derivan en: Robos de propiedad intelectual Caídas de sistemas Pérdidas de productividad Daños a la reputación Pérdida de confianza de los clientes Pérdidas financieras por falta de ingresos

10 Importancia de la seguridad en las aplicaciones Ejemplos (I)
Gusano CodeRed Inicio de la infección el 19 de julio de 2001 Infectó a más de equipos en 14 horas Programado para lanzar un ataque DoS a Aprovechaba un error de ‘buffer overrun’ conocido de IIS (en Index Server)

11 Importancia de la seguridad en las aplicaciones Ejemplos (II)
ILoveYou Infecta mediante un archivo adjunto de tipo .vbs que simulaba ser una carta de amor (extensión no visible para usuarios normales) El se copia a si mismo a todos los contactos de la agenda Borra imágenes y archivos .mp3 y corrompe el registro del sistema

12 Importancia de la seguridad en las aplicaciones Ejemplos (III)
Gusano Nimda Explota la vulnerabilidad ‘Web server folder traversal’ Se infecta vía , o mediante conexiones de red abiertas Crea nuevas conexiones de red que ponen en peligro la seguridad del sistema Se copia a si mismo a determinado usuarios de la agenda Mantuvo a Internet ‘bloqueada’ el 18 de septiembre de 2001

13 Importancia de la seguridad en las aplicaciones Ejemplos (IV)
Gusano MyDoom Se propaga mediante correo electrónico Adjunta diversos archivos con distinto nombre Simula ser un mensaje del administrador El usuario lo abre y sólo ve texto ininteligible en el bloc de notas Copia un ejecutable preparado para lanzar un DoS contra y Se reenvía modificando el campo from con los usuarios de la agenda

14 Importancia de la seguridad en las aplicaciones Ejemplos (V)
Uso de ‘ingeniería social’ La mayoría de estos ingenios utiliza la ingeniería social para hacer ‘picar’ a los receptores Para funcionar confían en que una gran cantidad de usuarios abrirán un determinado correo y quedarán infectados

15 Importancia de la seguridad en las aplicaciones Retos
Razones Hackers vs. Defensores Un hacker necesita conocer UNA vulnerabilidad; el defensor necesita asegurar TODAS las vías de entrada Los hackers disponen de todo el tiempo del mundo Seguridad vs. Usabilidad Los sistemas seguros son más difíciles de usar Las contraseñas largas y complejas son difíciles de recordar Los usuarios prefieren contraseñas simples Seguridad a posteriori Los programadores y los ‘managers’ suelen pensar que la seguridad no añade ‘valor’ a la solución La seguridad se trata normalmente justo antes de distribuir el producto, cuando corregir los fallos es muy caro ¿Necesito seguridad?…

16 Dos fallos principales de seguridad
Importancia de la seguridad en las aplicaciones Vulnerabilidades comunes Dos fallos principales de seguridad Confianza en los datos de entrada “¡Todos los datos de entrada son culpables hasta que se demuestre lo contrario!” Son la fuente de los problemas más graves Buffer Overruns Inyección de SQL Cross-site Scripting Todo lo demás

17 Agenda Objetivo Importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

18 Prácticas aconsejables de seguridad Aproximación funcional a la seguridad
Cualquier sistema es tan seguro como el menos seguro de sus componentes La seguridad ha de ser considerada en todos sus niveles Durante el diseño, el desarrollo y la puesta en producción A nivel de la red, de los equipos y de la aplicación

19 Prácticas aconsejables de seguridad Seguridad durante todo el proyecto
Acuerdo sobre los criterios de seguridad Auditoría de seguridad Preguntas de seguridad en las entrevistas Modelo de riesgos Revisión externa Empuje Aprender y refinar Concepto / Requisitos Diseños Completos Planes de prueba Completos Código Completo V1.0 Pasos posteriores Revisión de fallos anteriores Uso de guías comunes de seguridad Uso de herramientas Revisión de seguridad Formación del grupo Pruebas de mínimos privilegios

20 Prácticas aconsejables de seguridad Un marco de seguridad
Arquitectura y código seguros Análisis de riesgos Reducción de vulnerabilidades Seguro por Diseño (Design) Seguro por Defecto (Default) Reducción del posible área de ataque Características no usadas del producto sin habilitar por defecto Requerir mínimos privilegios privilege Proteger, detectar, defender, recuperar, administrar Procesos: How to’s, guías de arquitectura Formación Seguro en la Distribución (Deployment)

21 Prácticas aconsejables de seguridad Qué es el análisis de riesgos
Es un análisis de la aplicación desde el punto de vista de la seguridad Ayuda a ver al equipo de desarrollo dónde es más vulnerable la aplicación Determina que riesgos hay que disminuir y cómo hacerlo Es una parte crucial del proceso de diseño Es imposible construir sistemas seguros sin un buen conocimiento de los riesgos potenciales Reduce el coste requerido para asegurar una aplicación Es más barato encontrar un bug en el diseño y solucionarlo en ese momento que arreglar código a posteriori

22 Prácticas aconsejables de seguridad Proceso de análisis de riesgos
El proceso será similar al siguiente: Crear un equipo que realizará el análisis Descomponer la aplicación en sus apartados – analizar su operación mediante diagramas de flujo de datos por ejemplo Examinar los flujos datos y determinar si existe algún riesgo en cualquier parte del sistema Numerar los riesgos por orden decreciente de importancia Escoger cómo responder a cada uno de los riesgos Seleccionar las técnicas que permitan mitigarlos Seleccionar las tecnologías apropiadas para cada una de las técnicas seleccionadas

23 Prácticas aconsejables de seguridad Reparto de tareas
La seguridad en las aplicaciones se consigue involucrando a todas las partes implicadas: Arquitectos de la solución Desarrolladores Administradores de los sistemas finales Es común ver que se contrata un desarrollo y luego no se puede implantar por problemas de seguridad en los sistemas finales Firewalls, permisos, etc.

24 Prácticas aconsejables de seguridad La responsabilidad de los programadores
Los desarrolladores deben contribuir mediante: Su entendimiento de las técnicas de programación segura existentes Conociendo cuáles son las vulnerabilidades más comunes y cómo evitarlas Adoptando prácticas de programación que incorporen conceptos de seguridad desde el principio

25 Prácticas aconsejables de seguridad Consejos (I)
Utilizar el análisis de riesgos Identificar las posibles vulnerabilidades durante la fase de diseño Educación Aprender sobre los defectos comunes y cómo evitarlos Entender la aplicación correcta de las tecnologías de seguridad Revisión del código Hacer énfasis en código que: Accede a la red Se ejecuta por defecto o con privilegios elevados Utiliza protocolos no autenticados

26 Prácticas aconsejables de seguridad Consejos (II)
Utilización de herramientas: Crea herramientas para automatizar las pruebas, a gran escala La mejor herramienta es ¡tu cabeza! Por si solas las herramientas no arreglan los problemas Considera la migración a código .NET No reinventes la rueda Evita la encriptación propia - La encriptación es difícil y las soluciones propias raramente son buenas Utiliza la infraestructura (SSL/IPSec) Utiliza componentes probados, como CAPICOM o el namespace de Cryptography de .NET

27 Prácticas aconsejables de seguridad Consejos (III)
No uses el equipo como administrador Es posible ejecutar cualquier aplicación con usuarios con menos privilegios Es necesario realizar una configuración más avanzada Mucha gente no lo usa por decir que no se puede Muy recomendable si la máquina está conectada a Internet Guía de configuración:

28 Agenda Objetivo Importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

29 Tecnologías de seguridad Resumen
Los programadores han de conocer cuáles son y cómo se utilizan: Encriptación Comunicación segura Autenticación Autorización Firewalls Auditoría

30 Tecnologías de seguridad ¿Que es la encriptación? (I)
Es la ciencia que trata la codificación de la información Protege la identidad de un usuario o sus datos para que no puedan ser leídos Protege la información para que no pueda ser modificada Verifica que la información es originada por un determinado usuario

31 Tecnologías de seguridad ¿Que es la encriptación? (II)
Es el proceso de codificación de la información Una clave es una cadena de bits que varía el resultado de una determinada encriptación La encriptación sólo es tan fuerte como la fuerza de su clave Datos Clave Algoritmo de encriptación

32 Tecnologías de seguridad Encriptación simétrica
Se utiliza la misma clave y el mismo algoritmo para codificar y decodificar la información Rápida y eficiente Es difícil intercambiar las claves de manera segura con lo que se modifican frecuentemente Datos Encriptar Desencriptar La clave es conocida por el emisor y el receptor

33 Tecnologías de seguridad Encriptación simétrica. Algoritmos
Relativamente lenta Clave de 56 bits, no muy segura Triple DES Realiza tres operaciones DES. Equivale a tener una clave de 168 bits. Relativamente lenta. Más segura que DES y ampliamente utilizada. Advanced Encryption Standard (AES) Claves de 128, 192 y 256 bits. Actualmente el estándar usado por el gobierno norteamericano International Data Encryption Algorithm (IDEA) Clave de 128 bit. Requiere una licencia para su uso comercial RC2 Claves de 8 a 128 bits. Cifrado basado en ‘streams’.

34 Tecnologías de seguridad Encriptación asimétrica
Dos claves, una privada y una pública Los mensajes codificados con la clave pública sólo pueden ser decodificados usando la clave privada y vice versa La encriptación asimétrica es más segura que la simétrica, pero no tan eficiente Usuario A Usuario B Clave Privada Clave Pública Clave Pública

35 Tecnologías de seguridad Encriptación asimétrica. Algoritmos
RSA Claves de 384 a Utilizada normalmente para codificar datos y crear firmas digitales. Estándar de-facto para codificación pública Diffie-Helman Claves de 768 a 1014 bits. Primer algoritmo de clave pública, reemplazado por RSA DSA Claves de 512 a 1024 bits. Sólo para firmas digitales

36 Tecnologías de seguridad Encriptación. Verificación hash
Usuario A Usuario B Datos Valor Hash Algoritmo Hash Algoritmo Hash Si los valores coinciden los datos son válidos Usuario A envía los datos y el hash al Usuario B

37 Tecnologías de seguridad Encriptación. Firmas digitales
Usuario A User B Datos Algoritmo Hash Datos Algoritmo Hash Valor Hash Decodificación del Hash con clave pública del Usuario A Valor Hash Valor Hash Si los valores hash coinciden los datos han de venir del Usuario A, es el único que lo puede codificar Codificación del Hash con clave privada del Usuario A

38 Tecnologías de seguridad Encriptación. Certificados digitales
Un certificado digital vincula una clave pública a una entidad o persona a través de una tercera parte (autoridad de certificación, CA) Un usuario, equipo, servicio o aplicación crea su par de claves (publica/privada) La clave pública se envía a la autoridad de certificación de manera segura La CA verifica la información y, si lo aprueba, firma la clave pública con su clave privada Un usuario puede entonces verificar, a través de la CA, si la clave pública viene de quien dice venir Usos típicos Comunicación wireless 802.1x, certificados digitales, autenticación en Internet, IPSec, firmas de código

39 Tecnologías de seguridad Comunicación segura
Son técnicas probadas que utilizan la encriptación para codificar la comunicación en la red Incluyen: IPSec, SSL, codificación RPC SSL IPSec codificación RPC

40 Tecnologías de seguridad Comunicación segura. SSL
2 Certificado del Servidor Web Mensaje Navegador SSL Servidor Web 3 4 HTTPS 1 1 El usuario accede al servidor Web mediante HTTPS El navegador crea una clave de sesión única y la codifica usando la clave pública del servidor Web, generada a partir de un certificado El servidor Web recibe la clave de la sesión y la decodifica mediante su clave privada A partir de ese momento el navegador codifica la información usando la clave pública del servidor 2 3 4

41 Demo Creación de un certificado SSL para un servidor

42 Tecnologías de seguridad Autenticación
Proceso para obtener las credenciales de un usuario/agente y verificarlas frente a una autoridad Métodos Básica, Digest Firmas y certificados digitales Integrada Kerberos v5 NTLM Microsoft Passport Biometría

43 Tecnologías de seguridad Autenticación. Cuándo usar certificados
En aplicaciones Web SSL usa certificados X.509 para autenticar el servidor Opcionalmente el servidor puede requerir que el cliente se autentique con su propio certificado En aplicaciones distribuidas: Las aplicaciones pueden usar un canal SSL El cliente y el servidor se verifican mutuamente con sus certificados En SmartCards Los certificados de cliente se almacenan en una tarjeta

44 Tecnologías de seguridad Autenticación. Cuándo usar integrada
¿Intranet? Cliente No No se puede Firewall Si ¿Windows 2000 O posterior? No NTLM - Autenticación del Servidor Si Integrada ¿Dominio de Active Directory? No Kerberos - Autenticación del Cliente y del servidor Si

45 Demo Distintos métodos de autenticación con IIS

46 Tecnologías de seguridad Autorización
Es el proceso de confirmar que un agente autenticado puede realizar distintas tareas Se aplican derechos sobre los distintos recursos (archivos, bases de datos, etc) Basados en usuarios Grupos y roles Basado en código Derechos del código

47 Tecnologías de seguridad Autorización. Modelo de delegación
Aplicación Web Base de datos u otro recurso A B C El cliente se autentica en el primer punto y sus credenciales se pasan a los demás

48 Tecnologías de seguridad Autorización. Modelo de confianza
Aplicación Web Base de datos u otro recurso A B C 1 2 Rol Los clientes se asocian a roles Dependiendo del rol se usan unas credenciales u otras El servidor de recursos confía en el de aplicación

49 Tecnologías de seguridad Firewalls
Los firewalls proporcionan: Filtrado de paquetes de red Filtrado de aplicaciones Auditoria Los firewalls NO proporcionan: Protección contra ataques a nivel de aplicación al utilizar HTTP o HTTPS

50 Tecnologías de seguridad Auditoría (I)
La auditoría permite: Detectar intrusiones y actividades sospechosas Mantener un registro legal de actividad Ayuda a diagnosticar posibles fallos de seguridad

51 Tecnologías de seguridad Auditoría (II)
Es conveniente establecer logs de seguridad acerca de: Acceso a ficheros Intentos de inicio de sesión (válidos e inválidos) Fallos de aplicación

52 Agenda Objetivo Importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

53 Implementación en .NET Ejecución de aplicaciones .NET
.NET Framework Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debugger MSIL to Native Compilers Code Manager Garbage Collection Class Loader ¡El Gran Hermano te vigila!

54 Implementación en .NET Seguridad de tipos
Controla que se acceda únicamente a posiciones de memoria permitidas El acceso a los objetos se hace únicamente mediante los tipos expuestos Propiedades, campos, métodos

55 Implementación en .NET Protección contra buffer overruns
Los strings son inmutables El sistema crea y destruye strings con el tamaño correcto en todo momento (clase String) Para manipular strings de manera eficiente se usa la clase StringBuilder que controla los tamaños Pueden ocurrir buffer overruns si se utiliza código nativo Mediante COM Interop o acceso a código no seguro (unsafe)

56 Demo Tipos en .NET

57 Implementación en .NET Overflows aritméticos
Por defecto no hay comprobación de overflows. Se puede habilitar a la hora de compilar mediante: La palabla ‘checked’ ó Propiedades del proyecto byte b=0; while (true) { Console.WriteLine (b); checked b++; } }

58 Demo Overflows

59 Implementación en .NET ‘Identity’ y ‘Principals’
Un ‘identity’ contiene información del usuario, como su nombre de logon WindowsIdentity, GenericIdentity Un ‘Principal’ contiene información de roles acerca del usuario o el equipo WindowsPrincipal, GenericPrincipal Generic Windows Custom

60 Implementación en .NET ‘Identity’ y ‘Principals’. Creación
Usar WindowsIdentity y WindowsPrincipal para: Validación individual Validación repetitiva WindowsIdentity myIdent = WindowsIdentity.GetCurrent(); WindowsPrincipal myPrin = new WindowsPrincipal(myIdent); AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); WindowsPrincipal myPrin = System.Threading.Thread.CurrentPrincipal;

61 Demo Principals e impersonación

62 Implementación en .NET SQL Injection
Ocurre cuando el usuario de la aplicación puede controlar las sentencias SQL que se pueden ejecutar, modificando el comportamiento de la página Cuatro escenarios típicos: Inspección de bases de datos Elevación de privilegios Ejecución de múltiples sentencias SQL Acceso a procedimientos almacenados de sistema

63 Implementación en .NET SQL Injection. Ejemplo
Se debería poner 1001 SELECT HasShipped FROM detail WHERE ID= '1001' Se puede poner 1001’ or 1=1 -- SELECT HasShipped FROM detail WHERE ID= '1001' or 1=1 -- '

64 Implementación en .NET SQL Injection. Protección
Verificar todas las entradas Rechazar todas las entradas no válidas Considerar el uso de expresiones regulares para verificar la validez Ejecutar con mínimos privilegios Nunca ejecutar como ‘sa’ o SYSTEM Restringir el acceso a procedimientos almacenados concretos Usar consultas parametrizadas. No construirlas mediante strings No mostrar errores de ODBC. Dan pistas

65 Demo SQL Injection

66 Implementación en .NET Cross-site scripting
Permite a un hacker ejecutar código en el navegador de un usuario Mediante el uso de una aplicación Web en un servidor Cualquier página que genera HTML a partir de la entrada del usuario es susceptible de vulnerabilidad

67 Implementación en .NET Cross-site scripting
Los hackers pueden incluir etiquetas de <script>, <object>, <applet>, <embed>, etc. Potencialmente pueden robar información de sesiones, cookies y, si el usuario afectado dispone de suficientes permisos, acceder a información local del equipo del usuario

68 Implementación en .NET Cross-site scripting. Protección
Verificar todas las entradas Comprobar que no se incluyen etiquetas en los datos pasados por formularios Codificar todas las entradas mediante Server.HtmlEncode En intranets, ejecutar con mínimos privilegios en el puesto del cliente En ASP.NET 1.1 la protección viene por omisión Se puede eliminar mediante directiva de página ValidateRequest

69 Demo Cross-site scripting

70 Implementación en .NET DoS Web. Protección
Un hacker puede ejecutar múltiples solicitudes a una aplicación Web, agotando los recursos del servidor y haciendo que no pueda responder Para proteger estos ataques Cerrar todos los recursos que se usen, como conexiones de datos, data readers, ficheros Utilizar control de errores mediante try-catch-finally, cerrando recursos siempre en finally Comprobar el tamaño de los datos de entrada Comprobar el tamaño de los resultados de una consulta antes de mostrarlos en una página ¿es necesario mostrar registros? Establecer un límite en el tamaño de los ficheros de subida, si los hay <configuration> <system.web> <httpRuntime maxRequestLength="4096" /> </system.web> </configuration>

71 Agenda Objetivo Importancia de la seguridad en las aplicaciones
Prácticas aconsejables de seguridad Tecnologías de seguridad Implementación en .NET Conclusiones

72 Conclusiones Validar TODOS los datos de entrada
Ejecutar las aplicaciones con el mínimo privilegio Disminuir el área de ataque Exponer únicamente interfaces conocidos No mostrar información interna en los errores <customErrors mode=on> Application_Error Event handler Utilizar permisos concretos en los recursos


Descargar ppt "Desarrollo de aplicaciones seguras con .NET"

Presentaciones similares


Anuncios Google