Programación segura

La programación segura es una  técnica de desarrollo de software que evita la introducción accidental de vulnerabilidades y brinda resistencia al malware y al acceso no autorizado . Los errores y errores lógicos son la causa principal de las vulnerabilidades del software.

El software seguro es un software desarrollado utilizando un conjunto de medidas destinadas a prevenir la aparición y eliminación de vulnerabilidades del programa [1] .

La tarea de la programación segura es proteger los datos del usuario contra robos y daños, para mantener el control sobre el sistema. Un programa no seguro es un objetivo potencial para un atacante que puede usar las vulnerabilidades existentes para ver, cambiar o eliminar información existente, afectar el funcionamiento de programas y servicios (iniciar o detener) e inyectar código malicioso en el sistema [2] .

Terminología

En la literatura inglesa, hay dos términos que se pueden traducir como programación segura.

La programación defensiva es un principio de desarrollo de software en el que los desarrolladores intentan tener en cuenta todos los posibles errores y fallas, aislarlos tanto como sea posible y, si es posible, restaurar el rendimiento del programa en caso de mal funcionamiento. Esto debería hacer que el software sea más estable y menos vulnerable. Por ejemplo, una implementación de hardware de este principio es un temporizador de vigilancia , cálculo de suma de control  , para detectar errores en la transmisión de paquetes de datos [3] .

La codificación segura es una técnica para escribir programas resistentes a los ataques de malware e intrusos. La programación segura ayuda a proteger los datos del usuario contra robo o corrupción. Además, un programa inseguro puede dar acceso a un atacante para controlar el servidor o la computadora del usuario; Las consecuencias pueden variar desde la denegación de servicio a un solo usuario hasta el compromiso de información confidencial, pérdida de servicio o daño a los sistemas de miles de usuarios [2] .

Importancia

Los problemas de garantizar la seguridad y la operatividad del sistema son una parte integral de la etapa de su diseño ( diseño del sistema) [4] . Los requisitos de seguridad para productos y sistemas de TI específicos se establecen en función de las amenazas de seguridad existentes y previstas, la política de seguridad que se persigue y también teniendo en cuenta las condiciones para su aplicación [5] . La implementación de soluciones de seguridad después de que se haya desarrollado un sistema es compleja y costosa. Por lo tanto, los requisitos de seguridad deben tenerse en cuenta desde el principio durante todo el ciclo de vida del sistema [4] .

El sistema de información se divide en niveles físicos y lógicos. Comprender qué es exactamente lo que debe protegerse de los factores externos ayuda a elegir y aplicar las medidas de protección de la forma más eficaz. La política de seguridad que rige un cierto conjunto de información y tecnologías de la información que tiene límites físicos debe determinar un límite claro entre los niveles . Una complicación adicional es que la misma computadora o servidor puede albergar tanto información pública como privada . Como resultado, se pueden aplicar múltiples políticas de seguridad a la misma máquina o dentro del mismo sistema. Por lo tanto, al desarrollar un sistema de información, los límites de seguridad deben tenerse en cuenta y describirse en la documentación pertinente y las políticas de seguridad del sistema [4] . Sus desarrolladores deben ser capaces de garantizar la seguridad del sistema al diseñar , desarrollar , administrar y configurar , integrando, prueba adecuadamente [6] .

El análisis (manual o automático) y la seguridad es un procedimiento costoso que aumenta el costo total de un producto de software . Anteriormente, la eliminación completa de los riesgos era un objetivo común de la seguridad. Hoy se reconoce que eliminar todos los riesgos no es rentable. Para cada sistema de control propuesto, se debe realizar un análisis de costo-beneficio. En algunos casos, los beneficios de un sistema más seguro pueden no justificar los costos directos e indirectos. Los beneficios incluyen no solo la prevención de pérdidas monetarias; Vale la pena considerar, por ejemplo, las pérdidas de reputación. Los costos directos incluyen el costo de adquirir e instalar esta tecnología; los costos indirectos incluyen el rendimiento reducido del sistema y la capacitación adicional de los empleados [7] .

Principios

Actualmente, existen diversas tecnologías para el desarrollo de software seguro . Pero hay un conjunto de principios que se tienen en cuenta en cualquier enfoque [8] :

Las últimas cuatro cualidades se han convertido en la base de Trustworthy Computing (TwC) ( Ing.  Trustworthy Computing ) ("Cómputos que son confiables"): iniciativas de Microsoft Corporation , cuya tarea principal es llamar la atención de los desarrolladores sobre la importancia de asegurando estos requisitos en cada etapa del desarrollo de software [9] .

Hay muchos principios de seguridad del software, la mayoría de los cuales son similares entre sí. Su generalización se puede considerar los principios anteriores [10] .

Clasificación y tipos de vulnerabilidades

Clasificadores

El uso de descripciones de vulnerabilidades estandarizadas simplifica el trabajo de los especialistas en seguridad de la información. Actualmente, hay varios clasificadores populares [11] :

Los analizadores de código modernos y los auditores automatizados pueden explotar bases de vulnerabilidad similares. Esto aumenta el nivel de confianza en el producto y también puede ser importante al informar sobre las vulnerabilidades presentes en el producto de software [13] .

También hay otros clasificadores. Al trabajar con ellos, se debe prestar atención a los autores, ya que cada sistema de clasificación debe ser creado por expertos en este campo [14] .

Métricas

Cada programa es un objetivo potencial para los atacantes. Tras encontrar vulnerabilidades en aplicaciones o servicios, intentarán utilizarlas para robar información confidencial, corromper datos, controlar sistemas informáticos y redes [15] . Para describir las propiedades de una vulnerabilidad, los expertos utilizan el sistema de puntuación de riesgo de vulnerabilidad CVSS . Es una escala en base a la cual se otorgan puntajes. El sistema de métricas está diseñado para priorizar la reparación de vulnerabilidades. Cada escala se refiere a una sección semántica específica, que se denomina métrica. Hay tres métricas de este tipo [16] [17] [11] :

Las dos últimas métricas son de carácter auxiliar y se utilizan únicamente para ajustar los indicadores de la métrica básica, teniendo en cuenta diversas especificidades [18] .

Tipos de vulnerabilidades

Lista de errores comunes que comprometen la seguridad de los programas modernos [19] :

Es imposible enumerar todas las vulnerabilidades conocidas , dado que todos los días aparecen nuevas. Esta lista contiene vulnerabilidades comunes que son fáciles de cometer, pero cuyas consecuencias pueden ser catastróficas. Por ejemplo, la propagación del gusano Blaster se debió a un error en solo dos líneas de código [22] .

Defensa

La estrategia correcta para protegerse contra errores y vulnerabilidades es prevenirlos y prevenirlos. Esto requiere que el desarrollador verifique constantemente los datos de entrada. Por ejemplo, la mejor manera de protegerse contra ataques de desbordamiento de búfer es asegurarse de que los datos de entrada no excedan el tamaño del búfer en el que se almacenan. Los datos destinados a enviarse a la base de datos requieren validación para protegerse contra un ataque como la inyección SQL. Si los datos se envían a una página web, entonces deben validarse contra XSS . Sin embargo, un número excesivo de comprobaciones complica el desarrollo del código fuente del programa y puede dar lugar, a su vez, a la aparición de nuevos errores, por lo que esta estrategia debe combinarse con otras [23] .

El compilador o el sistema operativo pueden proporcionar mecanismos de protección contra errores . El compilador GCC permite usar la función _builtin_object_size () para obtener el tamaño de un objeto mediante un puntero a este objeto, por lo que su uso hace que el procedimiento de copia sea más seguro. MSVC , cuando se usa el indicador /RTCs , permite verificar en tiempo de compilación los desbordamientos de variables locales, el uso de variables no inicializadas, la corrupción del puntero de la pila causada por convenciones de llamada no coincidentes. El uso de la tecnología CRED (detector de errores de rango C) e insertos especiales frente a la sección protegida de la pila ( StackGuard , SSP ) permite detectar y prevenir parcialmente los ataques asociados con el desbordamiento de la matriz y la destrucción de la pila [24] .

El sistema operativo también puede controlar la ejecución del programa. Esta estrategia puede ser útil si se desconoce el código fuente de este programa. ASLR (Address Space Schema Randomization) es una función de seguridad del sistema operativo diseñada para evitar que se ejecute código arbitrario. Actualmente, ASLR es compatible con Linux y Windows . El aumento del nivel de seguridad se logra mediante el uso de tecnologías de pila no ejecutables: W^X, PaX [24] .

Los ataques típicos a los servicios web son inyección SQL, XSS, CSRF , clickjacking . Los marcos modernos ayudan a los desarrolladores a crear aplicaciones web seguras. El uso de soluciones listas para usar le permite no lidiar con numerosos controles de datos entrantes: desde encabezados de solicitud HTTP hasta su contenido. También proporciona un método más seguro para trabajar con la base de datos  : ORM [25] [26] .

Daños

Los atacantes pueden utilizar la información sobre las vulnerabilidades para crear virus . Por ejemplo, uno de los primeros gusanos de red conocidos ( el virus Morris ) en 1988 explotó vulnerabilidades como un desbordamiento de búfer en el daemon de Unix para propagarse entre máquinas. Entonces el número de autos infectados rondaba los 6 mil [27] , y el daño económico, según la Cámara de Cuentas de Estados Unidos, oscilaba entre los 10 y los 100 millones de dólares [28] .

En 2016 , los virus informáticos causaron daños por valor de 450 000 millones de dólares a la economía mundial [29] [30] .

En 2017, el daño causado por el virus WannaCry se estimó en mil millones de dólares. Se han notificado infecciones en al menos 150 países [31] [32] [33] . El virus usó el exploit EternalBlue explotando una vulnerabilidad de desbordamiento de búfer en el protocolo SMB [34] [35] [36] [37] .

Notas

  1. GOST R 56939-2016, 2016 , Términos y definiciones, págs. 2.
  2. 1 2 Guía de introducción a la codificación segura .
  3. Programación defensiva .
  4. 1 2 3 Principios de ingeniería para la seguridad de la tecnología de la información, 2004 , Fundamentos de seguridad. Principio 2, págs. 7.
  5. Criterios de evaluación de la seguridad de la tecnología de la información, 2002 , Disposiciones generales, págs. III-IV.
  6. Principios de ingeniería para la seguridad de la tecnología de la información, 2004 , Fundamentos de seguridad, págs. 6-8.
  7. Principios de ingeniería para la seguridad de la tecnología de la información, 2004 , Fundamentos de seguridad. Principio 5, págs. ocho.
  8. Tecnologías modernas para desarrollar programas confiables y seguros, 2008 , pp. 25-26.
  9. Tecnologías modernas para desarrollar programas confiables y seguros, 2008 , pp. 26
  10. CÓMO de programación segura: creación de software seguro, 2015 , Principios de seguridad, págs. 7-8.
  11. 1 2 Revista Hacker: Medimos vulnerabilidades, 2009 , pp. 48-51.
  12. OSVDB: FIN, 2016 .
  13. Hacker Magazine: Medición de vulnerabilidades, 2009 , Uso de clasificadores en escáneres, págs. 51: “Los auditores automatizados modernos generalmente se adaptan a una base de conocimiento específica. En primer lugar, es prestigioso y, en segundo lugar, es útil. Por ejemplo, al prepararse para la certificación de acuerdo con uno de los estándares modernos (NERC-CIP, PCI , FISMA, GLBA o HIPAA), el administrador tiene la oportunidad de recibir una plantilla de informe que corresponde al documento emitido por el auditor.
  14. Revista Hacker: Medición de vulnerabilidades, 2009 , Clasificaciones seleccionadas, págs. 51: “A veces puedes ver clasificaciones absolutamente hechas por ti mismo en la Web... Naturalmente, dicho sistema no tiene mucho peso, porque debe ser compilado por verdaderos expertos que comprendan la esencia del problema”.
  15. Introducción a la Guía de codificación segura , De un vistazo.
  16. Sistema de puntuación de vulnerabilidad común, 2006 , p.86.
  17. CVSS: especificación .
  18. CVSS:Especificación , 1.2. Puntuación: "La métrica base se puede refinar mediante el cálculo de métricas temporales y contextuales para reflejar mejor el riesgo para el usuario causado por la vulnerabilidad".
  19. 24 Pecados capitales de la seguridad del software: fallas de programación y cómo solucionarlas, 2009 , Introducción.
  20. Método de búsqueda de vulnerabilidad de cadena de formato, 2015 , Introducción: “Incluso en los trabajos de los años 90, se demostró que el trabajo incorrecto con la cadena de formato puede generar vulnerabilidades de seguridad de software graves, como ejecución de código arbitrario, escalada de privilegios y fugas de datos sensibles”.
  21. The Protection of Information in Computer Systems, 1975 , h) Aceptabilidad psicológica: “Es muy importante que la interfaz de usuario sea amigable para que los usuarios apliquen de forma intuitiva y sencilla los mecanismos de protección de la forma correcta. Si las representaciones mentales del usuario de los objetivos de protección son consistentes con los mecanismos que utiliza en la práctica, se minimizará el número de errores. Si el usuario tiene que traducir sus ideas sobre protección a un lenguaje de especificaciones completamente diferente, inevitablemente cometerá errores.
  22. Codificación segura en C y C++, 2013 , Figura 1.2. Lógica defectuosa explotada por el gusano W32.Blaster.Worm: "Las fallas lógicas explotadas por el gusano W32.Blaster.Worm se muestran en la fig. 1.2. El error es que el ciclo while en las líneas 21 y 22 (utilizado para extraer el nombre de host de una cadena larga) no está lo suficientemente delimitado".
  23. Codificación segura en C y C++, 2013 , 2.6 Estrategias de protección en tiempo de ejecución: Validación de entrada.
  24. 1 2 Codificación segura en C y C++, 2013 , 2.6 Estrategias de protección en tiempo de ejecución.
  25. Seguridad de Django .
  26. Seguridad de Ruby on Rails .
  27. Notas de un investigador de virus informáticos, 2005 , Tabla 3.1, p. 90.
  28. Historia del malware, 2010 , La NSA versus Morris: $100 millones en daños, p. 23
  29. CNBC International: El cibercrimen le cuesta a la economía global $450 mil millones .
  30. The New Paper: Cybercrime le costó a la economía mundial $620 mil millones el año pasado .
  31. RBC: El daño del virus WannaCry se estimó en mil millones de dólares .
  32. 6abs: El daño causado por el virus WannaCry superó los mil millones de dólares .
  33. Hi-Tech Mail.ru: Los expertos nombraron una cantidad récord de daños por el virus WannaCry .
  34. MS17-010: Desbordamiento de grupo grande no paginado de EternalBlue en el controlador SRV .
  35. WannaCry ransomware utilizado en ataques generalizados en todo el mundo .
  36. CNews: Daños económicos por virus .
  37. Pérdidas netas: Estimación del costo global del delito cibernético .

Literatura

Lecturas adicionales

Enlaces