La diversidad de software es un campo de investigación sobre la comprensión y la ingeniería de la diversidad en el contexto del software.
Áreas
Las diferentes áreas de diversidad de software se discuten en encuestas sobre diversidad para tolerancia a fallas [1] o para seguridad. [2] [3] Una encuesta reciente enfatiza los avances más recientes en el campo. [4]
Las principales áreas son:
- diversidad de diseño, programación de n-versiones , diversidad de datos para tolerancia a fallos
- aleatorización
- variabilidad del software [5]
Dominios
El software se puede diversificar en la mayoría de los dominios:
Técnicas
Transformaciones de código
Es posible amplificar la diversidad de software a través de procesos de transformación automatizados que crean diversidad sintética. Un "multicompilador" es un compilador que incorpora un motor de diversificación. [9] Un entorno de ejecución multivariante (MVEE) es responsable de seleccionar la variante para ejecutar y comparar la salida. [10]
Fred Cohen fue uno de los primeros promotores de este enfoque. Propuso una serie de transformaciones de reescritura y reordenamiento de código que apuntan a producir cantidades masivas de diferentes versiones de funciones de sistemas operativos. [11] Estas ideas se han desarrollado a lo largo de los años y han llevado a la construcción de esquemas de ofuscación integrados para proteger funciones clave en grandes sistemas de software. [12]
Otro enfoque para aumentar la diversidad de protección del software consiste en agregar aleatoriedad en ciertos procesos centrales, como la carga de memoria. La aleatoriedad implica que todas las versiones del mismo programa se ejecutan de manera diferente entre sí, lo que a su vez crea una diversidad de comportamientos del programa. Esta idea fue inicialmente propuesta y experimentada por Stephanie Forrest y sus colegas. [13]
Un trabajo reciente sobre la diversidad de software automático explora diferentes formas de transformaciones de programas que varían ligeramente el comportamiento de los programas. El objetivo es convertir un programa en una población de programas diversos que brinden servicios similares a los usuarios, pero con un código diferente. [14] [15] Esta diversidad de código mejora la protección de los usuarios contra un solo ataque que podría bloquear todos los programas al mismo tiempo.
Los operadores de transformación incluyen: [16]
- Aleatorización de diseño de código: reordenar funciones en código
- Aleatorización de diseño global: reordenar y rellenar globales
- Aleatorización de variables de pila: reordenar las variables en cada marco de pila
- aleatorización del diseño del montón
Dado que explorar el espacio de diversos programas es computacionalmente costoso, es importante encontrar estrategias eficientes para realizar esta exploración. Para ello, un trabajo reciente estudia las regiones plásticas en el código de software: [17] las regiones plásticas son aquellas partes en las que el código es más susceptible de ser cambiado sin interrumpir las funcionalidades proporcionadas por la pieza de software. Estas regiones se pueden apuntar específicamente mediante la transformación automática de código para crear diversidad artificial en el software existente.
Diversidad de software natural
Se sabe que algunas funcionalidades están disponibles en múltiples implementaciones intercambiables, a esto se le ha llamado diversidad natural de software. [4] Esta diversidad natural puede explotarse, por ejemplo, se ha demostrado que es valiosa para aumentar la seguridad en los sistemas en la nube . [18] La diversidad natural también se puede utilizar para combinar las fortalezas de diferentes herramientas: por ejemplo, si combina muchos descompiladores juntos, el meta-descompilador resultante es más efectivo. [19]
Referencias
- ^ Deswarte, Y .; Kanoun, K .; Laprie, J.-C. (Julio de 1998). Diversidad frente a faltas accidentales y deliberadas . Procedimientos Seguridad informática, confiabilidad y garantía: de las necesidades a las soluciones (Cat. No.98EX358) . Computación IEEE. Soc. págs. 171-181. CiteSeerX 10.1.1.27.9420 . doi : 10.1109 / csda.1998.798364 . ISBN 978-0769503370. S2CID 5597924 .
- ^ Knight, John C. (2011), "Diversidad", Computación confiable e histórica , Lecture Notes in Computer Science, 6875 , Springer Berlin Heidelberg, págs. 298-312, doi : 10.1007 / 978-3-642-24541-1_23 , ISBN 9783642245404
- ^ Solo, James E .; Cornwell, Mark (29 de octubre de 2004). Revisión y análisis de diversidad sintética para romper monocultivos . ACM. págs. 23–32. CiteSeerX 10.1.1.76.3691 . doi : 10.1145 / 1029618.1029623 . ISBN 978-1581139709. S2CID 358885 .
- ^ a b Baudry, Benoit; Monperrus, Martin (29 de septiembre de 2015). "Las múltiples facetas de la diversidad de software: desarrollos recientes en el año 2000 y más allá". Encuestas de computación ACM . 48 (1): 16. arXiv : 1409.7324 . doi : 10.1145 / 2807593 . ISSN 0360-0300 . S2CID 215812499 .
- ^ Schaefer, Ina; Rabiser, Rick; Clarke, Dave; Bettini, Lorenzo; Benavides, David; Botterweck, Goetz; Pathak, Animesh; Trujillo, Salvador; Villela, Karina (28 de julio de 2012). "Diversidad de software: estado del arte y perspectivas". Revista internacional de herramientas de software para la transferencia de tecnología . 14 (5): 477–495. CiteSeerX 10.1.1.645.1960 . doi : 10.1007 / s10009-012-0253-y . ISSN 1433-2779 . S2CID 7347285 .
- ^ Hosseinzadeh, Shohreh; Rauti, Sampsa; Hyrynsalmi, Sami; Leppanen, Ville (diciembre de 2015). Seguridad en Internet de las cosas mediante la ofuscación y la diversificación . 2015 Conferencia Internacional sobre Informática, Comunicación y Seguridad (ICCCS) . págs. 1-5. doi : 10.1109 / cccs.2015.7374189 . ISBN 978-1-4673-9354-6. S2CID 9855649 .
- ^ Allier, Simon; Barais, Olivier; Baudry, Benoit; Bourcier, Johann; Daubert, Erwan; Fleurey, Franck; Monperrus, Martin; Song, Hui; Tricoire, Maxime (enero de 2015). "Diversificación multinivel en aplicaciones de software basadas en web" . Software IEEE . 32 (1): 83–90. doi : 10.1109 / ms.2014.150 . S2CID 218184081 .
- ^ Franz, Michael (21 de septiembre de 2010). "E unibus pluram". E unibus pluram: diversidad de software a gran escala como mecanismo de defensa . págs. 7–16. doi : 10.1145 / 1900546.1900550 . ISBN 9781450304153. S2CID 7248879 .
- ^ "Protección de aplicaciones con diversidad de software automatizado" . Galois, Inc . 2018-09-10 . Consultado el 12 de febrero de 2019 .
- ^ Coppens, Bart; De Sutter, Bjorn; Volckaert, Stijn (2018-03-01), "Entornos de ejecución de múltiples variantes", The Continuing Arms Race: Code-Reuse Attacks and Defenses , ACM, págs. 211-258, doi : 10.1145 / 3129743.3129752 , ISBN 9781970001839
- ^ Cohen, Frederick B. (1993). "Protección del sistema operativo a través de la evolución del programa" (PDF) . Computadoras y seguridad . 12 (6): 565–584. doi : 10.1016 / 0167-4048 (93) 90054-9 . ISSN 0167-4048 .
- ^ Chenxi Wang; Davidson, J .; Hill, J .; Caballero, J. (2001). Protección de los mecanismos de supervivencia basados en software (PDF) . Proceedings International Conference on Dependable Systems and Networks . Computación IEEE. Soc. págs. 193–202. CiteSeerX 10.1.1.1.7416 . doi : 10.1109 / dsn.2001.941405 . ISBN 978-0769511016. S2CID 15860593 .
- ^ Forrest, S .; Somayaji, A .; Ackley, DH (1997). Construcción de diversos sistemas informáticos (PDF) . Actas. El sexto taller sobre temas candentes en sistemas operativos (Cat. No.97TB100133) . Computación IEEE. Soc. Prensa. págs. 67–72. CiteSeerX 10.1.1.131.3961 . doi : 10.1109 / hotos.1997.595185 . ISBN 978-0818678349. S2CID 1332487 .
- ^ Schulte, Eric; Fry, Zachary P .; Rápido, Ethan; Weimer, Westley; Forrest, Stephanie (28 de julio de 2013). "Robustez mutacional del software" (PDF) . Programación genética y máquinas evolutivas . 15 (3): 281–312. arXiv : 1204.4224 . doi : 10.1007 / s10710-013-9195-8 . ISSN 1389-2576 . S2CID 11520214 .
- ^ Baudry, Benoit; Allier, Simon; Monperrus, Martin (21 de julio de 2014). Actas del Simposio internacional de 2014 sobre pruebas y análisis de software - ISSTA 2014 . ACM. págs. 149-159. arXiv : 1401.7635 . doi : 10.1145 / 2610384.2610415 . ISBN 9781450326452. S2CID 215812773 . Lay resumen .
- ^ "Diversidad de software automatizado: a veces más no es mejor" . Galois, Inc . 2018-09-10 . Consultado el 12 de febrero de 2019 .
- ^ Harrand, Nicolas; Allier, Simon; Rodríguez-Cancio, Marcelino; Monperrus, Martin; Baudry, Benoit (25 de junio de 2019). "Un viaje entre variantes de programas neutrales de Java". Programación genética y máquinas evolutivas . 20 (4): 531–580. arXiv : 1901.02533 . doi : 10.1007 / s10710-019-09355-3 . ISSN 1389-2576 . S2CID 57759345 .
- ^ Gorbenko, Anatoliy; Kharchenko, Vyacheslav; Tarasyuk, Olga; Romanovsky, Alexander (2011), "Uso de la diversidad en el entorno de implementación basado en la nube para evitar intrusiones", Lecture Notes in Computer Science , Berlín, Heidelberg: Springer Berlin Heidelberg, págs. 145-155, doi : 10.1007 / 978-3-642 -24124-6_14 , ISBN 978-3-642-24123-9
- ^ Harrand, Nicolas; Soto-Valero, César; Monperrus, Martin; Baudry, Benoit (2020). "Diversidad del descompilador de Java y su aplicación a la meta-descompilación". Revista de sistemas y software . 168 : 110645. arXiv : 2005.11315 . doi : 10.1016 / j.jss.2020.110645 . S2CID 218870447 .