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] :
- rendimiento y utilidad ( usabilidad , inglés usability );
- seguridad ( seguridad en inglés ) - la capacidad de proteger contra amenazas externas, ataques y mantener el rendimiento después de que se reflejan y eliminan;
- confiabilidad ( confiabilidad en inglés ) - comportamiento predecible, correcto y a prueba de fallas en caso de datos iniciales incorrectos;
- confidencialidad ( privacidad en inglés ) - garantizar un trabajo seguro y correcto con información confidencial;
- Garantizar la integridad y la corrección de los negocios ( integridad comercial en inglés ): una organización clara del mantenimiento del programa, el control de la transparencia, la legalidad y la corrección del trabajo del usuario.
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] :
- CVE (vulnerabilidades y exposiciones comunes): un diccionario de vulnerabilidades específicas de productos específicos;
- CWE(Common Weakness Enumeration) - una base de datos de tipos de vulnerabilidad. El objetivo principal del proyecto es proporcionar descripciones de tipos comunes de vulnerabilidades, formas de prevenirlas, detectarlas y corregirlas;
- BID de enfoque de seguridad;
- OSVDB(Base de datos de vulnerabilidades de código abierto): "una base de datos abierta de vulnerabilidades" creada por tres organizaciones sin fines de lucro. Dejó de funcionar el 5 de abril de 2016. El blog sigue funcionando [12] ;
- Secunia : una cinta de vulnerabilidades de la conocida empresa danesa Secunia en el campo de la seguridad informática y de redes;
- Fuerza X de la ISS de IBM .
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] :
- Base ( base en inglés ): características de vulnerabilidad que no dependen del tiempo y el entorno de ejecución. Sirve para describir la dificultad de explotar una vulnerabilidad, el daño potencial a la confidencialidad, integridad y disponibilidad de la información;
- Temporal ( inglés temporal ): una métrica que tiene en cuenta el factor tiempo, por ejemplo, el tiempo para corregir una vulnerabilidad;
- Contextual ( en inglés ambiental ): una métrica que tiene en cuenta información sobre el entorno del software.
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
- ↑ GOST R 56939-2016, 2016 , Términos y definiciones, págs. 2.
- ↑ 1 2 Guía de introducción a la codificación segura .
- ↑ Programación defensiva .
- ↑ 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.
- ↑ Criterios de evaluación de la seguridad de la tecnología de la información, 2002 , Disposiciones generales, págs. III-IV.
- ↑ Principios de ingeniería para la seguridad de la tecnología de la información, 2004 , Fundamentos de seguridad, págs. 6-8.
- ↑ Principios de ingeniería para la seguridad de la tecnología de la información, 2004 , Fundamentos de seguridad. Principio 5, págs. ocho.
- ↑ Tecnologías modernas para desarrollar programas confiables y seguros, 2008 , pp. 25-26.
- ↑ Tecnologías modernas para desarrollar programas confiables y seguros, 2008 , pp. 26
- ↑ CÓMO de programación segura: creación de software seguro, 2015 , Principios de seguridad, págs. 7-8.
- ↑ 1 2 Revista Hacker: Medimos vulnerabilidades, 2009 , pp. 48-51.
- ↑ OSVDB: FIN, 2016 .
- ↑ 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.
- ↑ 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”.
- ↑ Introducción a la Guía de codificación segura , De un vistazo.
- ↑ Sistema de puntuación de vulnerabilidad común, 2006 , p.86.
- ↑ CVSS: especificación .
- ↑ 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".
- ↑ 24 Pecados capitales de la seguridad del software: fallas de programación y cómo solucionarlas, 2009 , Introducción.
- ↑ 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”.
- ↑ 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.
- ↑ 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".
- ↑ Codificación segura en C y C++, 2013 , 2.6 Estrategias de protección en tiempo de ejecución: Validación de entrada.
- ↑ 1 2 Codificación segura en C y C++, 2013 , 2.6 Estrategias de protección en tiempo de ejecución.
- ↑ Seguridad de Django .
- ↑ Seguridad de Ruby on Rails .
- ↑ Notas de un investigador de virus informáticos, 2005 , Tabla 3.1, p. 90.
- ↑ Historia del malware, 2010 , La NSA versus Morris: $100 millones en daños, p. 23
- ↑ CNBC International: El cibercrimen le cuesta a la economía global $450 mil millones .
- ↑ The New Paper: Cybercrime le costó a la economía mundial $620 mil millones el año pasado .
- ↑ RBC: El daño del virus WannaCry se estimó en mil millones de dólares .
- ↑ 6abs: El daño causado por el virus WannaCry superó los mil millones de dólares .
- ↑ Hi-Tech Mail.ru: Los expertos nombraron una cantidad récord de daños por el virus WannaCry .
- ↑ MS17-010: Desbordamiento de grupo grande no paginado de EternalBlue en el controlador SRV .
- ↑ WannaCry ransomware utilizado en ataques generalizados en todo el mundo .
- ↑ CNews: Daños económicos por virus .
- ↑ Pérdidas netas: Estimación del costo global del delito cibernético .
Literatura
- Kaspersky K. Notas de un investigador de virus informáticos . - Pedro, 2005. - Pág. 93, 103-104, 117-122. — 316 pág. — ISBN 5469003310 .
- GOST R 56939-2016: Seguridad de la información. Desarrollo de software seguro. Requisitos generales / Agencia Federal de Regulación Técnica y Metrología. - Informe estándar, 2016. - 24 p.
- GOST R ISO/IEC 25010-2015: Tecnología de la información. Ingeniería de sistemas y software. Evaluación de requisitos y calidad de sistemas y software (SQuaRE). Modelos de calidad de sistemas y productos de software / Agencia Federal de Regulación Técnica y Metrología. - Informe estándar, 2015. - 36 p.
- Comisión Técnica Estatal de Rusia . Documento guía. Seguridad de la tecnología de la información. Criterios para evaluar la seguridad de las tecnologías de la información . - 2002. - P. III-IV. — 48p.
- Seguridad de la información de las empresas. Estudio de las tendencias actuales en seguridad de la información empresarial. : Investigación / Kaspersky Lab. - 2014. - Pág. 14.
- Komarov A. Medimos vulnerabilidades // Hacker: Journal. - 2009. - Nº 04 (124) . - Pág. 48-51.
- Safonov V. O. Tecnologías modernas para el desarrollo de programas confiables y seguros // Herramientas informáticas en educación: Revista. - 2008. - Nº 06 . - Pág. 25-33.
- Vakhrushev I.A., Kaushan V.V., Padaryan V.A., Fedotov A.N. Método de búsqueda de vulnerabilidad de cadena de formato // Procedimientos de ISP RAS. - 2015. - T. 27 , N º 4 . - S. 23-38 . - Pág. 25-33.
- Howard M., LeBlanc D., Viega J. 24 Pecados capitales de la seguridad del software : fallas de programación y cómo solucionarlas . - McGraw Hill Professional, 2009. - 464 p. — ISBN 9780071626767 .
- Codificación segura Seacord RC en C y C++ . - 2. - Addison-Wesley, 2013. - 600 p. — ISBN 9780132981972 .
- Stoneburner G., Hayden C., Feringa A. Principios de ingeniería para la seguridad de la tecnología de la información (una línea de base para lograr la seguridad) (inglés) / Instituto Nacional de Estándares y Tecnología . - Revisión A. - 2004. - 33 p.
- Wheeler D.A. CÓMO de programación segura: creación de software seguro . - 2015. - 186 págs.
- Historial de malware (inglés) / BitDefender . - 2010. - Págs. 23-24. — 71p.
- Howard M., LeBlanc D. Escritura de código seguro . - 2. - Microsoft Press, 2002. - P. 43. - 512 p. — ISBN 9780735615885 .
Lecturas adicionales
Enlaces
- Bondarenko, María . El daño causado por el virus WannaCry se estimó en mil millones de dólares , Moscú: RBC (25 de mayo de 2017). Consultado el 23 de octubre de 2017.
- Matyukhin, Grigori . Los expertos nombraron una cantidad récord de daños por el virus WannaCry , Moscú: Hi-Tech Mail.ru (25 de mayo de 2017). Consultado el 23 de octubre de 2017.
- Borovko, Román . Daño económico de los virus , Moscú: CNews Analytics (2003). Consultado el 23 de octubre de 2017.
- Introducción a la guía de codificación segura . https://developer.apple.com/ . Apple Inc. . Consultado: 23 de octubre de 2017.
- Fundación de Software Django . Seguridad en Django . https://www.djangoproject.com/ _ Recuperado: 5 de diciembre de 2017.
- Guía de seguridad de Ruby on Rails . http://rubyonrails.org/ . Recuperado: 5 de diciembre de 2017.
- Graham, Lucas . El cibercrimen le cuesta a la economía global $450 mil millones: CEO , EE. UU.: CNBC International (7 de febrero de 2017). Consultado el 23 de octubre de 2017.
- Sol, David . El delito cibernético le costó a la economía mundial $ 620 mil millones el año pasado , Singapur: The New Paper (5 de julio de 2017). Consultado el 23 de octubre de 2017.
- El daño causado por el virus WannaCry superó los mil millones de dólares (inglés) , EE. UU.: 6abc (25 de mayo de 2017). Archivado desde el original el 15 de octubre de 2017. Consultado el 23 de octubre de 2017.
- William Gamazo Sánchez (Investigación de Vulnerabilidades). MS17-010: Desbordamiento de grupo grande no paginado de EternalBlue en el controlador SRV . http://blog.trendmicro.com/ . Trend Micro (2 de junio de 2017). Consultado: 23 de octubre de 2017.
- WannaCry ransomware utilizado en ataques generalizados en todo el mundo . https://securelist.com/ . ZAO Kaspersky Lab (12 de mayo de 2017). Consultado: 23 de octubre de 2017.
- M. Tim Jones. Programación defensiva (inglés) (enlace no disponible) (1 de febrero de 2005). Consultado el 12 de noviembre de 2017. Archivado desde el original el 13 de noviembre de 2017.
- OSVDB: FIN (inglés) (enlace descendente) . https://blog.osvdb.org/ (5 de abril de 2016). Consultado el 3 de diciembre de 2017. Archivado desde el original el 28 de mayo de 2016.
- Common Vulnerability Scoring System v3.0 : Documento de especificación . https://www.first.org/ . PRIMERO. Recuperado: 12 de noviembre de 2017.