La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Escritura de código seguro: defensa contra las amenazas.

Presentaciones similares


Presentación del tema: "Escritura de código seguro: defensa contra las amenazas."— Transcripción de la presentación:

1 Escritura de código seguro: defensa contra las amenazas

2 Contenido La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

3 Requisitos previos para la sesión Experiencia en desarrollo con Microsoft® Visual Basic®, Microsoft Visual C++® o C# Nivel 200

4 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

5 La necesidad de disponer de código seguro Puerto de EE.UU. atacado por un pirata del Reino Unido Varias corporaciones dicen que perdieron 10 millones de dólares en un único ataque Hasta 1500 sitios Web pudieron haberse visto afectados por un ataque reciente La piratería cuesta más de 4300 puestos de trabajo y 850 millones de dólares en daños El virus Sobig causó unos daños económicos de millones de dólares en todo el mundo Los ataques costarán a la economía mundial 1,6 trillones de dólares estadounidenses este año

6 Escenarios de amenazas Empleados que se conectan a la red de la empresa Por cable, inalámbrica, acceso telefónico, VPN PCs de la empresa, sistemas propiedad de los usuarios Empleados que se conectan a otras redes Zonas activas de Internet, redes asociadas, banda ancha Asociados que se conectan a la red de la empresa Autenticación local frente a federada Invitados anónimos Nuevos escenarios y nuevas amenazas

7 Posibles atacantes LadronesTimadoresVándalosCriminalesHackers No debe sorprenderle que se produzcan ataques

8 Tipos comunes de ataque Errores de conexión Ataques organizativos Datos restringidos Infracciones accidentales de la seguridad Ataques automatizados Hackers Virus, caballos de Troya y gusanos Denegación de servicio (DoS) DoS

9 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

10 Qué es un desbordamiento de búfer Ocurre cuando los datos superan el tamaño esperado y sobrescriben otros valores Se produce principalmente en código C/C++ no administrado Incluye cuatro tipos: Desbordamientos de búfer basados en pilas Desbordamiento de memoria dinámica Sobrescrituras de punteros de función y de V-table Sobrescrituras de manejadores de excepciones Lo pueden explotar los gusanos

11 Posible resultadoObjetivo del pirata Infracción de acceso Realizar ataques de denegación de servicio contra los servidores Inestabilidad Interrumpir el funcionamiento normal del software Inyección de código Conseguir privilegios para su propio código Explotar datos empresariales fundamentales Realizar acciones destructivas Posibles resultados de los desbordamientos de búfer

12 void UnSafe (const char* uncheckedData) { int anotherLocalVariable; strcpy (localVariable, uncheckedData); } char localVariable[4]; Ejemplo de desbordamiento de búfer basado en pila Parte superior de la pila char[4] int Dirección de retorno

13 Desbordamiento de memoria dinámica Sobrescriben datos almacenados en la memoria dinámica (HEAP) Son más difíciles de explotar que un desbordamiento de búfer Datos Puntero Datos Puntero strcpy xxxxxxx xxxxxxx

14 Defensa contra los desbordamientos de búfer (1 de 2) Tenga mucho cuidado cuando utilice: strcpystrncpyCopyMemoryMultiByteToWideChar Use la opción de compilación /GS de Visual C++ para detectar desbordamientos de búfer Utilice strsafe.h para lograr un tratamiento más seguro de los búferes

15 Defensa contra los desbordamientos de búfer (2 de 2) Compruebe todos los índices de matrices Utilice clases de empaquetadores existentes para lograr un tratamiento seguro de las matrices Compruebe las longitudes de rutas de acceso a archivos mediante _MAX_PATH Utilice métodos reconocidos de procesamiento de rutas de acceso a archivos, como splitpath Utilice código administrado, pero preste atención a PInvoke y COM Interop

16 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

17 Errores aritméticos Se producen cuando se superan las limitaciones de una variable Generan errores graves en tiempo de ejecución Suelen pasarse por alto y subestimarse Incluyen: Desbordamiento: valor demasiado grande para un tipo de datos Subdesbordamiento: valor demasiado pequeño para un tipo de datos

18 Defensa contra errores aritméticos Sea consciente de las limitaciones de los tipos de datos elegidos Escriba código de defensa que compruebe si hay desbordamientos Considere la posibilidad de escribir funciones seguras reutilizables Considere la posibilidad de utilizar una clase plantilla segura (si está programando en C++)

19 Demostración 1 Problemas de memoria y errores de tipo de datos Investigación de los desbordamientos de búfer Uso del modificador de compilación /GS Uso de STRSAFE.H Realización de cálculos aritméticos seguros

20 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

21 Qué son las secuencias de comandos entre sitios Una técnica que permite a los hackers: Ejecutar una secuencia de comandos malintencionada en el explorador Web de un cliente Insertar etiquetas,,, y Insertar etiquetas,,, y Robar información de la sesión Web y cookies de autenticación Tener acceso al equipo cliente Cualquier página Web que produzca código HTML que contenga datos proporcionados por el usuario es vulnerable

22 Dos explotaciones frecuentes de las secuencias de comandos entre sitios Ataques a plataformas de correo electrónico y paneles de discusión basados en Web Uso de etiquetas de HTML para redirigir información privada

23 Ataques basados en Form (1 de 2) Response.Write(Bienvenido & Request.QueryString(UserName))

24 Ataques basados en Form (2 de 2) idForm.cookie.value=document.cookie; idForm.submit(); > here

25 Demostración 2 Secuencias de comandos entre sitios Investigación de secuencias de comandos entre sitios

26 Defensa contra secuencias de comandos entre sitios No: Confíe en los datos proporcionados por los usuarios Repita datos especificados por los usuarios basados en Web a menos que los haya validado Almacene información secreta en cookies Sí: Utilice la opción de cookie HttpOnly Utilice el atributo de seguridad Utilice el atributo de seguridad Aproveche las características de ASP.NET

27 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

28 Qué es la inyección de SQL La inyección de SQL es: El proceso de agregar instrucciones SQL con los datos especificados por el usuario Los hackers la utilizan para: Examinar bases de datos Eludir la autorización Ejecutar varias instrucciones SQL Llamar a procedimientos almacenados integrados

29 Ejemplos de inyección de SQL Si la variable ID se lee directamente de un cuadro de texto de un formulario Web o de Windows, el usuario podría introducir cualquiera de los siguientes valores: ALFKI1001 ALFKI1001' or 1=1 -- ALFKI1001' DROP TABLE OrderDetail -- ALFKI1001' exec xp_cmdshell('fdisk.exe') -- sqlString = "SELECT HasShipped FROM" + " OrderDetail WHERE OrderID ='" + ID + "'";

30 Demostración 3 Inyección de SQL Investigación de problemas por inyección de SQL Uso de consultas parametrizadas para defenderse contra la inyección de SQL

31 Defensa contra inyecciones de SQL Limpie todos los datos especificados por los usuarios Considere que todos los datos de entrada son peligrosos mientras no se demuestre lo contrario Busque los datos válidos y rechace todos los demás Considere la posibilidad de utilizar expresiones regulares para quitar los caracteres no deseados Ejecute el código con el menor privilegio posible Nunca ejecute código como sa Restrinja el acceso a los procedimientos almacenados integrados Utilice procedimientos almacenados o consultas de SQL parametrizadas para tener acceso a los datos No muestre los errores de ODBC

32 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

33 Problemas de canonización Suele haber más de una forma de denominar algo Existen representaciones alternativas para: Nombres de archivo Direcciones URL Dispositivos (como impresoras) Los hackers pueden explotar código que toma decisiones basándose en nombres de archivo o direcciones URL

34 Problemas de canonización Ejemplo 1: nombres de archivo 1. MiArchivoLargo.txt 2. MiArchivoLargo.txt. 3. MiArch~1.txt 4. MiArchivoLargo.txt::$DATA

35 Hay muchas formas de representar caracteres en Internet Problemas de canonización Ejemplo 2: representación de caracteres Es igual que =

36 Demostración 4 Problemas de canonización Investigación de las decisiones de seguridad basándose en nombres de archivo

37 Defensa contra problemas de canonización Utilice la seguridad del sistema de archivos para restringir el acceso a datos privados No tome nunca una decisión basándose en un nombre Deshabilite la opción de rutas de acceso primarias de IIS

38 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

39 Debilidades en la criptografía Uso inapropiado de algoritmos Creación de los suyos propios Uso de algoritmos débiles Aplicación incorrecta No mantener las claves seguras Almacenamiento inseguro Uso prolongado El factor humano Clave Texto sin cifrar Texto cifrado Algoritmo Necesito tres elementos de los anteriores para descifrar sus datos

40 Defensa contra debilidades en la criptografía Recicle las claves periódicamente Utilice ACL para restringir el acceso a las claves Almacene las claves en un dispositivo externo Utilice SACL para supervisar las actividades Utilice claves largas para ofrecer mayor seguridad Utilice DPAPI para simplificar la administración de claves, si es posible No implemente sus propias rutinas criptográficas

41 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

42 Problemas de Unicode Errores frecuentes Tratamiento de un carácter Unicode como un único byte Cálculo incorrecto del tamaño de búfer necesario Uso incorrecto de MultiByteToWideChar Validación de los datos antes de la conversión, pero no después Resultados Desbordamientos de búfer Algunas secuencias de caracteres posiblemente peligrosas pueden entrar en sus rutinas de validación

43 Defensa contra problemas de Unicode Calcular tamaños de búfer mediante sizeof (WCHAR) Conocer los estándares GB18030 (4 bytes por carácter) Convertir de Unicode a ASCII y después validar Utilizar IsNLSDefinedString durante la validación Utilizar MultiByteToWideChar correctamente para proporcionar un búfer suficiente

44 Demostración 5 Problemas de Unicode Investigación de problemas de Unicode

45 Agenda La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

46 Ataques de denegación de servicio Insuficiencia de CPU Insuficiencia de memoria Insuficiencia de recursos Insuficiencia de red

47 Defensa contra los ataques de denegación de servicio Considere la seguridad como una característica de diseño No confíe en los datos proporcionados por los usuarios Aplique inteligencia en caso de error Pruebe la seguridad

48 Resumen de la sesión La necesidad de disponer de código seguro Defensa contra problemas de memoria Defensa contra errores aritméticos Defensa contra secuencias de comandos entre sitios Defensa contra inyecciones de SQL Defensa contra problemas de canonización Defensa contra debilidades en la criptografía Defensa contra problemas de Unicode Defensa contra la denegación de servicio

49 Pasos siguientes 1. Mantenerse informado sobre la seguridad Suscribirse a boletines de seguridad: (este sitio está en inglés) Obtener las directrices de seguridad de Microsoft más recientes: (este sitio está en inglés) 2. Obtener información de seguridad adicional Buscar seminarios de aprendizaje en línea y presenciales: (este sitio está en inglés) Buscar un CTEC local que ofrezca cursos prácticos: (este sitio está en inglés)

50 Para obtener más información Sitio de seguridad de Microsoft (todos los usuarios) (este sitio está en inglés) Sitio de seguridad de MSDN (desarrolladores) (este sitio está en inglés) Sitio de seguridad de TechNet (profesionales de IT)

51 Preguntas y respuestas

52


Descargar ppt "Escritura de código seguro: defensa contra las amenazas."

Presentaciones similares


Anuncios Google