fbpx
Wikipedia

Aleatoriedad en la disposición del espacio de direcciones

La aleatoriedad en la disposición del espacio de direcciones (conocida por las siglas en inglés ASLR) es una técnica de seguridad informática relacionada con la explotación de vulnerabilidades basadas en la corrupción de memoria. Con el fin de impedir que un atacante salte de forma fiable a, por ejemplo, una función explotable en concreto de la memoria, ASLR dispone de forma aleatoria las posiciones del espacio de direcciones de las áreas de datos clave de un proceso, incluyendo la base del ejecutable y las posiciones de la pila, el heap y las librerías.

Historia

El proyecto PaX de Linux fue el primero en acuñar el término "ASLR", y publicó el primer diseño e implementación de ASLR en julio de 2001 en forma de un parche para el núcleo Linux. Se la considera una implementación completa, y proporciona también un parche para la aleatoriedad de la pila del núcleo desde octubre de 2002.[1]

El primer sistema operativo popular en soportar ASLR por defecto fue la versión 3.4 de OpenBSD en 2003,[2][3]​ seguido por Linux en 2005.

Beneficios

La aleatoriedad del espacio de direcciones entorpece la labor de ciertos ataques contra la seguridad haciendo más difícil para un atacante predecir las direcciones de destino. Por ejemplo, los atacantes que intentan llevar a cabo ataques de retorno a libc deben primero localizar el código a ejecutar, mientras que los que intentan ejecutar código shell inyectado en la pila necesitan primero encontrar la propia pila. En ambos casos, el sistema oculta a ojos de los atacantes las direcciones de memoria que necesitan. Estos valores tienen que deducirse, y un error de deducción no suele ser recuperable puesto que conlleva el cuelgue de la aplicación.

Efectividad

La aleatoriedad en la disposición del espacio de direcciones se basa en la baja probabilidad de que un atacante pueda adivinar las localizaciones de áreas dispuestas de forma aleatoria. La seguridad mejora aumentando el espacio a buscar. Por lo tanto, la aleatoriedad del espacio de direcciones es más eficaz cuando está presente una mayor entropía en la aleatoriedad. La entropía aumenta elevando el tamaño del área de memoria virtual sobre la que se aplica la aleatoriedad, o bien reduciendo el período sobre el que tiene lugar la aleatoriedad. Este período suele implantarse de forma que sea lo más pequeño posible, así que la mayoría de los sistemas deben incrementar la aleatoriedad del área de memoria virtual.

Para superar el problema de la aleatoriedad, los atacantes deben ser capaces de adivinar con éxito las posiciones de todas las áreas que desean atacar. En el caso de áreas de datos como son la pila y el heap, donde se puede cargar código a medida o información útil, puede atacarse a más de un estado utilizando secuencias NOP para código o copias repetidas de datos. Esto permite a un atacante tener éxito si la aleatoriedad del área la ha situado finalmente en un rango de unos pocos valores. A menudo estas áreas se mezclan, por ejemplo se inyectan marcos de pila en la pila y se retorna una entrada a una librería.

Pueden declararse las siguientes variables:

  (bits en entropía del tope por arriba de la pila)
  (bits de entropía de la base mmap())
  (bits de entropía de la base del ejecutable principal)
  (bits de entropía de la base del heap)
  (bits atacados por cada intento de entropía de la pila)
  (bits atacados por cada intento de entropía de la base mmap())
  (bits atacados por cada intento de entropía del ejecutable principal)
  (bits atacados por cada intento de entropía de la base del heap)
  (intentos realizados)
  (número total de entropía:  )

Para calcular la probabilidad de un atacante de tener éxito, tenemos que asumir que se llevan a cabo α intentos sin que se produzca una interrupción entremedias por parte de un SPI basado en firmas, un refuerzo legal o cualquier otro factor; en el caso de un ataque de fuerza bruta, el demonio no puede reiniciarse. También tenemos que descubrir cuántos bits son relevantes y a cuántos se está atacando en cada intento, dejando a un lado los bits que el atacante tiene que derrotar.

Las siguientes fórmulas representan la probabilidad de éxito para un grupo dado de α intentos de N bits de entropía.

  (suposición aislada; tras cada intento, vuelve a aplicarse aleatoriedad al espacio de direcciones)
  (ataque sistemático de fuerza bruta sobre copias del programa con el mismo espacio de direcciones)

En muchos sistemas,   puede ser un valor de miles de millones; en los sistemas modernos de 64 bits, lo habitual es que estas cifras alcancen como mínimo millones. Hector Marco-Gisbert e Ismael Ripoll mostraron en 2014 cómo saltarse el ASLR en sistemas de 64 bits en menos de un segundo bajo ciertas circunstancias.[4]​ En el caso de sistemas de 32 bits a velocidades de 2004, y disponiendo de 16 bits para la aleatoriedad de las direcciones, Schacham y compañía aseguraron que "... 16 bits de aleatoriedad en las direcciones es algo que puede romperse con un ataque de fuerza bruta en cuestión de minutos".[5]​ Conviene apuntar que esta afirmación por parte de su autor depende de la capacidad par atacar a la misma aplicación múltiples veces sin retraso alguno. Una implementación correcta de ASLR como la incluida en grsecurity proporciona varios métodos para hacer inviables tales ataques de fuerza bruta. Uno de los métodos consiste en impedir que un ejecutable se ejecute durante un determinado período de tiempo en caso de haberse colgado antes cierto número de veces.

Android[6]​ y posiblemente otros sistemas implementan Aleatoriedad en el Orden de Carga de Librerías, una forma de ASLR que hace que el orden en el que se cargan las librerías sea aleatorio. Esto aporta muy poca entropía. Abajo se indica una aproximación del número de bits de entropía aportados por cada librería necesaria; esto no tiene en cuenta todavía los diferentes tamaños de las librerías, con lo cual la entropía obtenida en realidad es un poco mayor. Téngase en cuenta que los atacantes normalmente necesitan únicamente una librería; los cálculos son más complejos cuando entran en juego varias librerías, y también se muestran a continuación. Téngase también en cuenta que el caso de un atacante que emplea una única librería es una simplificación de la fórmula más compleja de  .

l (número de librerías cargadas)
β (número de librerías usadas por el atacante)
 

Estos valores tienden a ser bajos aun con valores grandes de  , lo que resulta importante dado que los atacantes normalmente pueden usar únicamente la librería estándar de C y por tanto uno puede suponer que  . Resulta interesante, sin embargo, el hecho de que incluso con un pequeño número de librerías se ganan aquí unos pocos bits de entropía; por lo tanto, resulta potencialmente interesante combinar la aleatoriedad en el orden de carga de las librerías con la aleatoriedad de las direcciones de memoria virtual para ganar así unos bits extra de entropía. Téngase en cuenta que estos bits extra de entropía no se aplicarán a otros segmentos de mmap(), sino únicamente a librerías.

Reducción de la entropía

Un atacante puede utilizar varios métodos para reducir la entropía presente en un espacio de direcciones al que se ha aplicado aleatoriedad, que pueden ir desde simples fugas de información a atacar múltiples bits de entropía en cada ataque (como la técnica de pulverización del heap). Poco puede hacerse a este respecto.

Es posible obtener información sobre la disposición de la memoria empleando vulnerabilidades en el formateo de cadenas. Las funciones de formateo de cadenas tales como printf utilizan una lista de argumentos variables para hacer su trabajo; los especificadores de formato describen el aspecto de la lista de argumentos. Debido a la manera en que se suelen pasar los argumentos, cada especificador de formato se acerca cada vez más al tope superior del marco de la pila. Llegado a cierto punto pueden extraerse el puntero de retorno y el puntero del marco de la pila, revelando así las direcciones de una librería vulnerable y la dirección de un marco de pila conocido; esto puede eliminar por completo la aleatoriedad de la pila y de las librerías como un obstáculo para el atacante.

Uno puede también reducir la entropía en la pila o en el heap. Lo habitual es que la pila tenga que alinearse a 16 bytes, con lo cual este sería el intervalo de aleatoriedad más pequeño posible, mientras que el heap debe alinearse a página, normalmente 4096 bytes. Al intentar llevar a cabo un ataque, es posible alinear ataques duplicados con estos intervalos; una cadena de instrucciones NOP puede utilizarse con inyección de código shell, y la cadena '/bin/sh' puede sustituirse con '////////bin/sh' empleando un número arbitrario de barras inclinadas al intentar retornar al sistema. El número de bits eliminado es exactamente   para n intervalos atacados.

Tales reducciones están limitadas debido a la cantidad de información presente en la pila o en el heap. La pila, por ejemplo, suele estar limitada a 8 MBs y crece para ser mucho más pequeña; esto permite como mucho 19 bits, aunque una estimación más conservadora sería de entre 8 y 10 bits correspondientes a 4-16 KBs de ataques a la pila. El heap, por otra parte, está limitado por el comportamiento del adjudicador de memoria; en el caso de glibc, las reservas por encima de los 128KB se crean con mmap, limitando los atacantes a 5 bits de reducción. Esto es un factor también limitante en el caso de ataques de fuerza bruta; aunque puede reducirse el número de ataques que es necesario realizar, el tamaño de los ataques aumenta lo suficiente como para que en determinadas circunstancias esto llame la atención de un sistema de prevención de intrusos.

Implementaciones

Varios sistemas operativos populares de propósito general implementan ASLR.

Android

Android 4.0 Ice Cream Sandwich proporciona aleatoriedad en la disposición del espacio de direcciones (ASLR) para ayudar a proteger el sistema y las aplicaciones de terceros frente a vulnerabilidades relacionadas con la gestión de la memoria. Android 4.1 añadió soporte para ejecutables independientes de posición (PIE),[7]​ mientras que Android 5.0 abandonó el soporte para ejecutables sin PIE y exige que todos los binarios enlazados dinámicamente sean independientes de posición.[8][9]​ La aleatoriedad en el orden de carga de las librerías se aceptó en el proyecto de código abierto Android el 26 de octubre de 2015,[6]​ y fue incluido a partir de Android 7.0.

DragonFly BSD

DragonFly BSD dispone de una implementación de ASLR basada en el modelo de OpenBSD, añadido en 2010.[10]​ Está desactivada por defecto, y puede activarse poniendo a 1 el valor de vm.randomize_mmap con sysctl.

iOS (iPhone, iPod Touch, iPad)

Apple introdujo ASLR en iOS 4.3, lanzado en marzo de 2011.[11]

Base del kernel KASLR una vez aplicada la aleatoriedad = 0x01000000 + ((1+0xRR) * 0x00200000)[12]

donde 0xRR = un byte aleatorio de SHA1(información alatoria) generado por iBoot (el cargador de arranque de segunda etapa).

Linux

El núcleo Linux activó una forma débil de ASLR por defecto desde su versión 2.6.12, lanzada en junio de 2005.[13]​ Los juegos de parches PaX y Exec Shield aplicados al núcleo Linux proporcionan implementaciones más completas. El parche Exec Shield para Linux proporciona 19 bits de entropía de la pila en un período de 16 bytes, así como 8 bits de aleatoriedad de la base de mmap en un período de 1 página de 4096 bytes. Esto sitúa a la base de la pila en un área de una anchura de 8 MB, conteniendo 524.288 posiciones posibles, y la base de mmap en un área de 1 MB de anchura, conteniendo 256 posiciones posibles. Varias distribuciones de Linux —incluyendo Adamantix, Alpine Linux, Gentoo Hardened y Hardened Linux From Scratch— vienen por defecto con la implantación PaX de ASLR.

La técnica Ejecutable independiente de posición (PIE) implementa una dirección base aleatoria para el binario ejecutable principal y ha estado vigente desde 2003. Proporciona la misma aleatoriedad en las direcciones al ejecutable principal que la que se utiliza en el caso de las librerías compartidas. PIE se utiliza solamente para los demonios orientados a redes – PIE no puede combinarse con la función de preenlazado en el mismo ejecutable. La herramienta de preenlazado implementa aleatoriedad en el momento del preenlazado en lugar de hacerlo en el momento de la ejecución, ya que por diseño el preenlazado tiene como objetivo encargarse de la relocatación de librerías antes de que el enlazador dinámico tenga que hacerlo, lo que permite que la relocatación tenga lugar una sola vez para muchas ejecuciones del programa. Como resultado, una verdadera aleatoriedad en el espacio de direcciones echaría a perder el objetivo del preenlazado.

La aleatoriedad en la disposición del espacio de direcciones del kernel (KASLR), que añade soporte para la aplicación de aleatoriedad al espacio de direcciones a las imágenes del núcleo Linux a base de aplicar aleatoriedad al lugar donde se coloca el código del kernel en el momento del arranque,[14]​ se fusionó en el árbol de desarrollo del kernel en la versión 3.14, lanzada el 30 de marzo de 2014.[15]​ Tras su compilación, esta característica puede desactivarse durante el arranque indicando nokaslr como uno de los parámetros de arranque del kernel.[16]

Existen varios ataques de canal lateral viables en los procesadores x86 que podrían llegar a averiguar las direcciones del kernel.[17][18]​ A finales de 2017 se desarrolló el aislamiento de tablas de páginas del kernel (KPTI, también conocido como KAISER) con el fin de poner coto a estos ataques.[19][20]

Microsoft Windows

El sistema operativo Windows Vista de Microsoft (lanzado en enero de 2007) y las versiones posteriores del sistema operativo llevan ASLR activado únicamente para los ejecutables y librerías de enlace dinámico enlazadas específicamente para que se les aplique ASLR.[21]​ Por razones de compatibilidad, no está activado por defecto para el resto de aplicaciones. Lo habitual es que sólo el software más antiguo sea incompatible y ASLR puede activarse completamente editando el valor "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages" del registro,[22]​ o bien instalando el kit Enhanced Mitigation Experience Toolkit de Microsoft.

A las localizaciones del heap, la pila y el TLB también se aplica aleatoriedad. Un documento de Symantec destacó que la implementación ASLR en Windows Vista de 32 bits puede no ser tan robusta como se esperaba, y Microsoft ha reconocido una debilidad en dicha implementación.[23]

Los sistemas de prevención de intrusos basados en anfitrión tales como WehnTrust[24]​ y Ozone[25]​ también ofrecen ASLR para los sistemas operativos Windows XP y Windows Server 2003. Wehntrust es código abierto.[26]​ No hay información detallada sobre la implementación utilizada por Ozone.[27]

En febrero de 2012[28]​ se apuntó que la implementación de ASLR en los sistemas operativos Windows de 32 bits anteriores a Windows 8 puede sufrir una pérdida de eficacia en situaciones de escasez de memoria. La misma investigación detectó un efecto similar en Linux. El código utilizado como prueba causó un pánico del núcleo en MacOS X 10.7.3, así que no quedó claro el comportamiento de ASLR en este caso.

NetBSD

El soporte para ASLR en el espacio de usuario apareció en NetBSD 5.0, lanzado en abril de 2009,[29]​ y se activó por defecto en NetBSD-current en abril de 2016.[30]

El soporte para ASLR referente al kernel en amd64 se añadió en NetBSD-current en octubre de 2017, convirtiendo a NetBSD en el primer sistema BSD en soportar KASLR.[31]

OpenBSD

En 2003 OpenBSD se convirtió en el primer sistema operativo popular en soportar una variante poderosa de ASLR y en activarla por defecto.[2]​ OpenBSD completó su soporte para ASLR en 2008 cuando añadió soporte para binarios PIE.[32]​ La función malloc de OpenBSD se diseñó para mejorar la seguridad aprovechando las ventajas de ASLR y los huecos entre páginas implantados como parte de la llamada al sistema mmap de OpenBSD, y para detectar fallos del tipo usar-despueś-de-liberar.[33]​ Lanzado en 2013, OpenBSD 5.3 fue el primer sistema operativo popular en habilitar PIE por defecto en múltiples arquitecturas de hardware, y OpenBSD 5.7 activó por defecto los binarios estáticos independientes de posición (Static-PIE).[32]

OS X

En Mac OS X Leopard 10.5 (lanzado en octubre de 2007) Apple introdujo aleatoriedad para las librerías del sistema.[34]

En Mac OS X Lion 10.7 (lanzado en julio de 2011), Apple amplió su implementación para cubrir todas las aplicaciones, afirmando que "la aleatoriedad en la disposición del espacio de direcciones (ASLR) ha sido mejorada para todas las aplicaciones. Ahora está disponible para aplicaciones de 32 bits (como es el caso de las protecciones de memoria del heap), haciendo que tanto las aplicaciones de 64 como de 32 bits sean más resistentes a ataques".[35]

En Mac OS X Mountain Lion 10.8 (lanzado en julio de 2012) y posteriores, todo el sistema, incluyendo tanto el kernel como los módulos cargados por él y las zonas se relocalizan de forma aleatoria durante el arranque del sistema.[36]

Solaris

ASLR se introdujo en Solaris a partir de la versión 11.1, lanzada en octubre de 2012. La implementación de ASLR en Solaris 11.1 puede actuar en todo el sistema, por zonas, o individualmente por binarios.[37]

Explotación

Se ha demostrado que un ataque de canal lateral basado en un búfer de objetivo de ramificación puede saltarse la protección que ofrece ASLR.[38]​ En 2017 se mostró un ataque denominado "ASLR⊕Cache" que podía saltarse la protección de ASLR en un navegador web utilizando JavaScript.[39]

Véase también

Referencias

  1. Brad Spengler (Octubre de 2003). «PaX: The Guaranteed End of Arbitrary Code Execution». grsecurity.net (en inglés). Slides 22 through 35. Consultado el 20 de agosto de 2015. 
  2. Theo De Raadt (2005). «Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005» (en inglés). Consultado el 26 de agosto de 2009. 
  3. «OpenBSD Innovations» (en inglés). The OpenBSD project. Consultado el 12 de septiembre de 2016. 
  4. Marco-Gisbert, Hector; Ripoll, Ismael (20 de noviembre de 2014). «On the Effectiveness of Full-ASLR on 64-bit Linux» (en inglés). 
  5. Shacham, H.; Page, M.; Pfaff, B.; Goh, E.J.; Modadugu, N.; Boneh, D (2004). On the Effectiveness of Address-Space Randomization. 11th ACM conference on Computer and communications security (en inglés). pp. 298—307. 
  6. «Implement Library Load Order Randomization» (en inglés). Consultado el 26 de junio de 2017.  (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  7. «Android Security» (en inglés). Android Developers. Consultado el 7 de julio de 2012. 
  8. «oss-security» (en inglés). Consultado el 4 de octubre de 2015. 
  9. «Revert "Reenable support for non-PIE executables"» (en inglés). Consultado el 26 de junio de 2017.  (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  10. mmap - add mmap offset randomization, DragonFly Gitweb, 25 de noviembre de 2010.
  11. Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows, Ars Technica, 11 de marzo de 2011
  12. iOS Kernel ASLR
  13. The NX Bit And ASLR, Tom's Hardware, 25 de marzo de 2009.
  14. Jake Edge (9 de octubre de 2013). «Kernel address space layout randomization» (en inglés). LWN.net. Consultado el 2 de abril de 2014. 
  15. «Linux kernel 3.14, Section 1.7. Kernel address space randomization». kernelnewbies.org (en inglés). 30 de marzo de 2014. Consultado el 2 de abril de 2014. 
  16. «kernel/git/torvalds/linux.git: x86, kaslr: Return location from decompress_kernel (Linux kernel source tree)» (en inglés). kernel.org. 13 de octubre de 2013. Consultado el 2 de abril de 2014. 
  17. KASLR is Dead: Long Live KASLR. Engineering Secure Software and Systems 2017 (en inglés). 24 de junio de 2017. 
  18. Jang, Yeongjin; Lee, Sangho; Kim, Taesoo (2016). «Breaking Kernel Address Space Layout Randomization with Intel TSX». 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16 (en inglés) (New York, NY, USA: ACM): 380-392. ISBN 9781450341394. doi:10.1145/2976749.2978321. 
  19. Corbet, Jonathan (20 de diciembre de 2017). «The current state of kernel page-table isolation». LWN.net (en inglés). 
  20. Corbet, Jonathan (15 de noviembre de 2017). «KAISER: hiding the kernel from user space». LWN.net (en inglés). 
  21. «Windows ISV Software Security Defenses» (en inglés). Msdn.microsoft.com. Consultado el 10 de abril de 2012. 
  22. Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-7356-2530-3 (en inglés)
  23. Ollie Whitehouse (Febrero de 2007). (PDF) (en inglés). Archivado desde el original el 7 de junio de 2011. Consultado el 7 de enero de 2018. 
  24. «WehnTrust» (en inglés). Codeplex.com. Consultado el 10 de abril de 2012. 
  25. «Security Architects' Ozone» (en inglés). Security Architects. Consultado el 10 de abril de 2012. 
  26. «WehnTrust source code» (en inglés). Consultado el 15 de noviembre de 2013. 
  27. «Address-Space Randomization for Windows Systems» (PDF) (en inglés). Consultado el 10 de abril de 2012. 
  28. Ollie (2 de marzo de 2012). «Research, Develop, Assess, Consult & Educate | Recx: A Partial Technique Against ASLR – Multiple O/Ss» (en inglés). Recxltd.blogspot.co.uk. Consultado el 10 de abril de 2012. 
  29. «Announcing NetBSD 5.0». Consultado el 25 de abril de 2016. 
  30. Christos Zoulas (2016). «PIE binaries and ASLR are on in the default build for amd64» (en inglés). Consultado el 25 de abril de 2016. 
  31. «Kernel ASLR on amd64» (en inglés). 2017. Consultado el 16 de octubre de 2017. 
  32. Kurt Miller (2008). «OpenBSD's Position Independent Executable (PIE) Implementation» (en inglés). desde el original el 12 de junio de 2011. Consultado el 22 de julio de 2011. 
  33. «libc/stdlib/malloc.c». BSD Cross Reference, OpenBSD src/lib/ (en inglés). 
  34. (en inglés). Apple. Archivado desde el original el 25 de mayo de 2011. Consultado el 10 de abril de 2012. 
  35. (en inglés). Apple Inc. Archivado desde el original el 6 de junio de 2011. Consultado el 6 de junio de 2011. 
  36. «OS X Mountain Lion Core Technologies Overview» (en inglés). Junio de 2012. Consultado el 25 de julio de 2012. 
  37. Controlling Access to Machine Resources, Oracle Information Library, 26 de octubre de 2012.
  38. Dmitry Evtyushkin; Dmitry Ponomarev; Nael Abu-Ghazaleh (2016). «Jump over ASLR: Attacking branch predictors to bypass ASLR» (en inglés). 
  39. AnC VUSec, 2017

Enlaces externos

  • Exploit Mitigation Techniques: an Update After 10 Years el 20 de febrero de 2014 en Wayback Machine. in OpenBSD (en inglés)
  • PaX documentation on ASLR (en inglés)
  • Comparison of PaX to Exec Shield and W^X (en inglés)
  • ASLR for Windows Vista beta 2 (en inglés)
  • (en inglés)
  • Bypassing PaX ASLR protection (en inglés)
  • On the effectiveness of address space layout randomization (en inglés)
  • Test Applications (or libraries) for their ASLR and DEP support (en inglés)
  • ASLR Smack & Laugh Reference (en inglés)
  •   Datos: Q353346

aleatoriedad, disposición, espacio, direcciones, aleatoriedad, disposición, espacio, direcciones, conocida, siglas, inglés, aslr, técnica, seguridad, informática, relacionada, explotación, vulnerabilidades, basadas, corrupción, memoria, impedir, atacante, salt. La aleatoriedad en la disposicion del espacio de direcciones conocida por las siglas en ingles ASLR es una tecnica de seguridad informatica relacionada con la explotacion de vulnerabilidades basadas en la corrupcion de memoria Con el fin de impedir que un atacante salte de forma fiable a por ejemplo una funcion explotable en concreto de la memoria ASLR dispone de forma aleatoria las posiciones del espacio de direcciones de las areas de datos clave de un proceso incluyendo la base del ejecutable y las posiciones de la pila el heap y las librerias Indice 1 Historia 2 Beneficios 2 1 Efectividad 2 1 1 Reduccion de la entropia 3 Implementaciones 3 1 Android 3 2 DragonFly BSD 3 3 iOS iPhone iPod Touch iPad 3 4 Linux 3 5 Microsoft Windows 3 6 NetBSD 3 7 OpenBSD 3 8 OS X 3 9 Solaris 4 Explotacion 5 Vease tambien 6 Referencias 7 Enlaces externosHistoria EditarEl proyecto PaX de Linux fue el primero en acunar el termino ASLR y publico el primer diseno e implementacion de ASLR en julio de 2001 en forma de un parche para el nucleo Linux Se la considera una implementacion completa y proporciona tambien un parche para la aleatoriedad de la pila del nucleo desde octubre de 2002 1 El primer sistema operativo popular en soportar ASLR por defecto fue la version 3 4 de OpenBSD en 2003 2 3 seguido por Linux en 2005 Beneficios EditarLa aleatoriedad del espacio de direcciones entorpece la labor de ciertos ataques contra la seguridad haciendo mas dificil para un atacante predecir las direcciones de destino Por ejemplo los atacantes que intentan llevar a cabo ataques de retorno a libc deben primero localizar el codigo a ejecutar mientras que los que intentan ejecutar codigo shell inyectado en la pila necesitan primero encontrar la propia pila En ambos casos el sistema oculta a ojos de los atacantes las direcciones de memoria que necesitan Estos valores tienen que deducirse y un error de deduccion no suele ser recuperable puesto que conlleva el cuelgue de la aplicacion Efectividad Editar La aleatoriedad en la disposicion del espacio de direcciones se basa en la baja probabilidad de que un atacante pueda adivinar las localizaciones de areas dispuestas de forma aleatoria La seguridad mejora aumentando el espacio a buscar Por lo tanto la aleatoriedad del espacio de direcciones es mas eficaz cuando esta presente una mayor entropia en la aleatoriedad La entropia aumenta elevando el tamano del area de memoria virtual sobre la que se aplica la aleatoriedad o bien reduciendo el periodo sobre el que tiene lugar la aleatoriedad Este periodo suele implantarse de forma que sea lo mas pequeno posible asi que la mayoria de los sistemas deben incrementar la aleatoriedad del area de memoria virtual Para superar el problema de la aleatoriedad los atacantes deben ser capaces de adivinar con exito las posiciones de todas las areas que desean atacar En el caso de areas de datos como son la pila y el heap donde se puede cargar codigo a medida o informacion util puede atacarse a mas de un estado utilizando secuencias NOP para codigo o copias repetidas de datos Esto permite a un atacante tener exito si la aleatoriedad del area la ha situado finalmente en un rango de unos pocos valores A menudo estas areas se mezclan por ejemplo se inyectan marcos de pila en la pila y se retorna una entrada a una libreria Pueden declararse las siguientes variables E s displaystyle E s bits en entropia del tope por arriba de la pila E m displaystyle E m bits de entropia de la base mmap E x displaystyle E x bits de entropia de la base del ejecutable principal E h displaystyle E h bits de entropia de la base del heap A s displaystyle A s bits atacados por cada intento de entropia de la pila A m displaystyle A m bits atacados por cada intento de entropia de la base mmap A x displaystyle A x bits atacados por cada intento de entropia del ejecutable principal A h displaystyle A h bits atacados por cada intento de entropia de la base del heap a displaystyle alpha intentos realizados N displaystyle N numero total de entropia N E s A s E m A m E x A x E h A h displaystyle N E s A s E m A m E x A x E h A h Para calcular la probabilidad de un atacante de tener exito tenemos que asumir que se llevan a cabo a intentos sin que se produzca una interrupcion entremedias por parte de un SPI basado en firmas un refuerzo legal o cualquier otro factor en el caso de un ataque de fuerza bruta el demonio no puede reiniciarse Tambien tenemos que descubrir cuantos bits son relevantes y a cuantos se esta atacando en cada intento dejando a un lado los bits que el atacante tiene que derrotar Las siguientes formulas representan la probabilidad de exito para un grupo dado de a intentos de N bits de entropia g a 1 1 2 N a if 0 a displaystyle g left alpha right 1 left 1 2 N right alpha text if 0 leq alpha suposicion aislada tras cada intento vuelve a aplicarse aleatoriedad al espacio de direcciones b a a 2 N if 0 a 2 N displaystyle b left alpha right frac alpha 2 N text if 0 leq alpha leq 2 N ataque sistematico de fuerza bruta sobre copias del programa con el mismo espacio de direcciones En muchos sistemas 2 N displaystyle 2 N puede ser un valor de miles de millones en los sistemas modernos de 64 bits lo habitual es que estas cifras alcancen como minimo millones Hector Marco Gisbert e Ismael Ripoll mostraron en 2014 como saltarse el ASLR en sistemas de 64 bits en menos de un segundo bajo ciertas circunstancias 4 En el caso de sistemas de 32 bits a velocidades de 2004 y disponiendo de 16 bits para la aleatoriedad de las direcciones Schacham y compania aseguraron que 16 bits de aleatoriedad en las direcciones es algo que puede romperse con un ataque de fuerza bruta en cuestion de minutos 5 Conviene apuntar que esta afirmacion por parte de su autor depende de la capacidad par atacar a la misma aplicacion multiples veces sin retraso alguno Una implementacion correcta de ASLR como la incluida en grsecurity proporciona varios metodos para hacer inviables tales ataques de fuerza bruta Uno de los metodos consiste en impedir que un ejecutable se ejecute durante un determinado periodo de tiempo en caso de haberse colgado antes cierto numero de veces Android 6 y posiblemente otros sistemas implementan Aleatoriedad en el Orden de Carga de Librerias una forma de ASLR que hace que el orden en el que se cargan las librerias sea aleatorio Esto aporta muy poca entropia Abajo se indica una aproximacion del numero de bits de entropia aportados por cada libreria necesaria esto no tiene en cuenta todavia los diferentes tamanos de las librerias con lo cual la entropia obtenida en realidad es un poco mayor Tengase en cuenta que los atacantes normalmente necesitan unicamente una libreria los calculos son mas complejos cuando entran en juego varias librerias y tambien se muestran a continuacion Tengase tambien en cuenta que el caso de un atacante que emplea una unica libreria es una simplificacion de la formula mas compleja de l 1 displaystyle l 1 l numero de librerias cargadas b numero de librerias usadas por el atacante E m log 2 l if b 1 l 1 i l l b 1 log 2 i if b 1 l 1 displaystyle E m begin cases log 2 left l right amp text if beta 1 l geq 1 sum i l l left beta 1 right log 2 left i right amp text if beta geq 1 l geq 1 end cases Estos valores tienden a ser bajos aun con valores grandes de l displaystyle l lo que resulta importante dado que los atacantes normalmente pueden usar unicamente la libreria estandar de C y por tanto uno puede suponer que b 1 displaystyle beta 1 Resulta interesante sin embargo el hecho de que incluso con un pequeno numero de librerias se ganan aqui unos pocos bits de entropia por lo tanto resulta potencialmente interesante combinar la aleatoriedad en el orden de carga de las librerias con la aleatoriedad de las direcciones de memoria virtual para ganar asi unos bits extra de entropia Tengase en cuenta que estos bits extra de entropia no se aplicaran a otros segmentos de mmap sino unicamente a librerias Reduccion de la entropia Editar Un atacante puede utilizar varios metodos para reducir la entropia presente en un espacio de direcciones al que se ha aplicado aleatoriedad que pueden ir desde simples fugas de informacion a atacar multiples bits de entropia en cada ataque como la tecnica de pulverizacion del heap Poco puede hacerse a este respecto Es posible obtener informacion sobre la disposicion de la memoria empleando vulnerabilidades en el formateo de cadenas Las funciones de formateo de cadenas tales como printf utilizan una lista de argumentos variables para hacer su trabajo los especificadores de formato describen el aspecto de la lista de argumentos Debido a la manera en que se suelen pasar los argumentos cada especificador de formato se acerca cada vez mas al tope superior del marco de la pila Llegado a cierto punto pueden extraerse el puntero de retorno y el puntero del marco de la pila revelando asi las direcciones de una libreria vulnerable y la direccion de un marco de pila conocido esto puede eliminar por completo la aleatoriedad de la pila y de las librerias como un obstaculo para el atacante Uno puede tambien reducir la entropia en la pila o en el heap Lo habitual es que la pila tenga que alinearse a 16 bytes con lo cual este seria el intervalo de aleatoriedad mas pequeno posible mientras que el heap debe alinearse a pagina normalmente 4096 bytes Al intentar llevar a cabo un ataque es posible alinear ataques duplicados con estos intervalos una cadena de instrucciones NOP puede utilizarse con inyeccion de codigo shell y la cadena bin sh puede sustituirse con bin sh empleando un numero arbitrario de barras inclinadas al intentar retornar al sistema El numero de bits eliminado es exactamente log 2 n displaystyle log 2 left n right para n intervalos atacados Tales reducciones estan limitadas debido a la cantidad de informacion presente en la pila o en el heap La pila por ejemplo suele estar limitada a 8 MBs y crece para ser mucho mas pequena esto permite como mucho 19 bits aunque una estimacion mas conservadora seria de entre 8 y 10 bits correspondientes a 4 16 KBs de ataques a la pila El heap por otra parte esta limitado por el comportamiento del adjudicador de memoria en el caso de glibc las reservas por encima de los 128KB se crean con mmap limitando los atacantes a 5 bits de reduccion Esto es un factor tambien limitante en el caso de ataques de fuerza bruta aunque puede reducirse el numero de ataques que es necesario realizar el tamano de los ataques aumenta lo suficiente como para que en determinadas circunstancias esto llame la atencion de un sistema de prevencion de intrusos Implementaciones EditarVarios sistemas operativos populares de proposito general implementan ASLR Android Editar Android 4 0 Ice Cream Sandwich proporciona aleatoriedad en la disposicion del espacio de direcciones ASLR para ayudar a proteger el sistema y las aplicaciones de terceros frente a vulnerabilidades relacionadas con la gestion de la memoria Android 4 1 anadio soporte para ejecutables independientes de posicion PIE 7 mientras que Android 5 0 abandono el soporte para ejecutables sin PIE y exige que todos los binarios enlazados dinamicamente sean independientes de posicion 8 9 La aleatoriedad en el orden de carga de las librerias se acepto en el proyecto de codigo abierto Android el 26 de octubre de 2015 6 y fue incluido a partir de Android 7 0 DragonFly BSD Editar DragonFly BSD dispone de una implementacion de ASLR basada en el modelo de OpenBSD anadido en 2010 10 Esta desactivada por defecto y puede activarse poniendo a 1 el valor de vm randomize mmap con sysctl iOS iPhone iPod Touch iPad Editar Apple introdujo ASLR en iOS 4 3 lanzado en marzo de 2011 11 Base del kernel KASLR una vez aplicada la aleatoriedad 0x01000000 1 0xRR 0x00200000 12 donde 0xRR un byte aleatorio de SHA1 informacion alatoria generado por iBoot el cargador de arranque de segunda etapa Linux Editar El nucleo Linux activo una forma debil de ASLR por defecto desde su version 2 6 12 lanzada en junio de 2005 13 Los juegos de parches PaX y Exec Shield aplicados al nucleo Linux proporcionan implementaciones mas completas El parche Exec Shield para Linux proporciona 19 bits de entropia de la pila en un periodo de 16 bytes asi como 8 bits de aleatoriedad de la base de mmap en un periodo de 1 pagina de 4096 bytes Esto situa a la base de la pila en un area de una anchura de 8 MB conteniendo 524 288 posiciones posibles y la base de mmap en un area de 1 MB de anchura conteniendo 256 posiciones posibles Varias distribuciones de Linux incluyendo Adamantix Alpine Linux Gentoo Hardened y Hardened Linux From Scratch vienen por defecto con la implantacion PaX de ASLR La tecnica Ejecutable independiente de posicion PIE implementa una direccion base aleatoria para el binario ejecutable principal y ha estado vigente desde 2003 Proporciona la misma aleatoriedad en las direcciones al ejecutable principal que la que se utiliza en el caso de las librerias compartidas PIE se utiliza solamente para los demonios orientados a redes PIE no puede combinarse con la funcion de preenlazado en el mismo ejecutable La herramienta de preenlazado implementa aleatoriedad en el momento del preenlazado en lugar de hacerlo en el momento de la ejecucion ya que por diseno el preenlazado tiene como objetivo encargarse de la relocatacion de librerias antes de que el enlazador dinamico tenga que hacerlo lo que permite que la relocatacion tenga lugar una sola vez para muchas ejecuciones del programa Como resultado una verdadera aleatoriedad en el espacio de direcciones echaria a perder el objetivo del preenlazado La aleatoriedad en la disposicion del espacio de direcciones del kernel KASLR que anade soporte para la aplicacion de aleatoriedad al espacio de direcciones a las imagenes del nucleo Linux a base de aplicar aleatoriedad al lugar donde se coloca el codigo del kernel en el momento del arranque 14 se fusiono en el arbol de desarrollo del kernel en la version 3 14 lanzada el 30 de marzo de 2014 15 Tras su compilacion esta caracteristica puede desactivarse durante el arranque indicando nokaslr como uno de los parametros de arranque del kernel 16 Existen varios ataques de canal lateral viables en los procesadores x86 que podrian llegar a averiguar las direcciones del kernel 17 18 A finales de 2017 se desarrollo el aislamiento de tablas de paginas del kernel KPTI tambien conocido como KAISER con el fin de poner coto a estos ataques 19 20 Microsoft Windows Editar El sistema operativo Windows Vista de Microsoft lanzado en enero de 2007 y las versiones posteriores del sistema operativo llevan ASLR activado unicamente para los ejecutables y librerias de enlace dinamico enlazadas especificamente para que se les aplique ASLR 21 Por razones de compatibilidad no esta activado por defecto para el resto de aplicaciones Lo habitual es que solo el software mas antiguo sea incompatible y ASLR puede activarse completamente editando el valor HKLM SYSTEM CurrentControlSet Control Session Manager Memory Management MoveImages del registro 22 o bien instalando el kit Enhanced Mitigation Experience Toolkit de Microsoft A las localizaciones del heap la pila y el TLB tambien se aplica aleatoriedad Un documento de Symantec destaco que la implementacion ASLR en Windows Vista de 32 bits puede no ser tan robusta como se esperaba y Microsoft ha reconocido una debilidad en dicha implementacion 23 Los sistemas de prevencion de intrusos basados en anfitrion tales como WehnTrust 24 y Ozone 25 tambien ofrecen ASLR para los sistemas operativos Windows XP y Windows Server 2003 Wehntrust es codigo abierto 26 No hay informacion detallada sobre la implementacion utilizada por Ozone 27 En febrero de 2012 28 se apunto que la implementacion de ASLR en los sistemas operativos Windows de 32 bits anteriores a Windows 8 puede sufrir una perdida de eficacia en situaciones de escasez de memoria La misma investigacion detecto un efecto similar en Linux El codigo utilizado como prueba causo un panico del nucleo en MacOS X 10 7 3 asi que no quedo claro el comportamiento de ASLR en este caso NetBSD Editar El soporte para ASLR en el espacio de usuario aparecio en NetBSD 5 0 lanzado en abril de 2009 29 y se activo por defecto en NetBSD current en abril de 2016 30 El soporte para ASLR referente al kernel en amd64 se anadio en NetBSD current en octubre de 2017 convirtiendo a NetBSD en el primer sistema BSD en soportar KASLR 31 OpenBSD Editar En 2003 OpenBSD se convirtio en el primer sistema operativo popular en soportar una variante poderosa de ASLR y en activarla por defecto 2 OpenBSD completo su soporte para ASLR en 2008 cuando anadio soporte para binarios PIE 32 La funcion malloc de OpenBSD se diseno para mejorar la seguridad aprovechando las ventajas de ASLR y los huecos entre paginas implantados como parte de la llamada al sistema mmap de OpenBSD y para detectar fallos del tipo usar despues de liberar 33 Lanzado en 2013 OpenBSD 5 3 fue el primer sistema operativo popular en habilitar PIE por defecto en multiples arquitecturas de hardware y OpenBSD 5 7 activo por defecto los binarios estaticos independientes de posicion Static PIE 32 OS X Editar En Mac OS X Leopard 10 5 lanzado en octubre de 2007 Apple introdujo aleatoriedad para las librerias del sistema 34 En Mac OS X Lion 10 7 lanzado en julio de 2011 Apple amplio su implementacion para cubrir todas las aplicaciones afirmando que la aleatoriedad en la disposicion del espacio de direcciones ASLR ha sido mejorada para todas las aplicaciones Ahora esta disponible para aplicaciones de 32 bits como es el caso de las protecciones de memoria del heap haciendo que tanto las aplicaciones de 64 como de 32 bits sean mas resistentes a ataques 35 En Mac OS X Mountain Lion 10 8 lanzado en julio de 2012 y posteriores todo el sistema incluyendo tanto el kernel como los modulos cargados por el y las zonas se relocalizan de forma aleatoria durante el arranque del sistema 36 Solaris Editar ASLR se introdujo en Solaris a partir de la version 11 1 lanzada en octubre de 2012 La implementacion de ASLR en Solaris 11 1 puede actuar en todo el sistema por zonas o individualmente por binarios 37 Explotacion EditarSe ha demostrado que un ataque de canal lateral basado en un bufer de objetivo de ramificacion puede saltarse la proteccion que ofrece ASLR 38 En 2017 se mostro un ataque denominado ASLR Cache que podia saltarse la proteccion de ASLR en un navegador web utilizando JavaScript 39 Vease tambien EditarDesbordamiento del bufer Bit NXReferencias Editar Brad Spengler Octubre de 2003 PaX The Guaranteed End of Arbitrary Code Execution grsecurity net en ingles Slides 22 through 35 Consultado el 20 de agosto de 2015 a b Theo De Raadt 2005 Exploit Mitigation Techniques updated to include random malloc and mmap at OpenCON 2005 en ingles Consultado el 26 de agosto de 2009 OpenBSD Innovations en ingles The OpenBSD project Consultado el 12 de septiembre de 2016 Marco Gisbert Hector Ripoll Ismael 20 de noviembre de 2014 On the Effectiveness of Full ASLR on 64 bit Linux en ingles Shacham H Page M Pfaff B Goh E J Modadugu N Boneh D 2004 On the Effectiveness of Address Space Randomization 11th ACM conference on Computer and communications security en ingles pp 298 307 a b Implement Library Load Order Randomization en ingles Consultado el 26 de junio de 2017 enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Android Security en ingles Android Developers Consultado el 7 de julio de 2012 oss security en ingles Consultado el 4 de octubre de 2015 Revert Reenable support for non PIE executables en ingles Consultado el 26 de junio de 2017 enlace roto disponible en Internet Archive vease el historial la primera version y la ultima mmap add mmap offset randomization DragonFly Gitweb 25 de noviembre de 2010 Pwn2Own day 2 iPhone BlackBerry beaten Chrome Firefox no shows Ars Technica 11 de marzo de 2011 iOS Kernel ASLR The NX Bit And ASLR Tom s Hardware 25 de marzo de 2009 Jake Edge 9 de octubre de 2013 Kernel address space layout randomization en ingles LWN net Consultado el 2 de abril de 2014 Linux kernel 3 14 Section 1 7 Kernel address space randomization kernelnewbies org en ingles 30 de marzo de 2014 Consultado el 2 de abril de 2014 kernel git torvalds linux git x86 kaslr Return location from decompress kernel Linux kernel source tree en ingles kernel org 13 de octubre de 2013 Consultado el 2 de abril de 2014 KASLR is Dead Long Live KASLR Engineering Secure Software and Systems 2017 en ingles 24 de junio de 2017 Jang Yeongjin Lee Sangho Kim Taesoo 2016 Breaking Kernel Address Space Layout Randomization with Intel TSX 2016 ACM SIGSAC Conference on Computer and Communications Security CCS 16 en ingles New York NY USA ACM 380 392 ISBN 9781450341394 doi 10 1145 2976749 2978321 Corbet Jonathan 20 de diciembre de 2017 The current state of kernel page table isolation LWN net en ingles Corbet Jonathan 15 de noviembre de 2017 KAISER hiding the kernel from user space LWN net en ingles Windows ISV Software Security Defenses en ingles Msdn microsoft com Consultado el 10 de abril de 2012 Windows Internals Including Windows Server 2008 and Windows Vista Fifth Edition PRO Developer ISBN 978 0 7356 2530 3 en ingles Ollie Whitehouse Febrero de 2007 An Analysis of Address Space Layout Randomization on Windows Vista PDF en ingles Archivado desde el original el 7 de junio de 2011 Consultado el 7 de enero de 2018 WehnTrust en ingles Codeplex com Consultado el 10 de abril de 2012 Security Architects Ozone en ingles Security Architects Consultado el 10 de abril de 2012 WehnTrust source code en ingles Consultado el 15 de noviembre de 2013 Address Space Randomization for Windows Systems PDF en ingles Consultado el 10 de abril de 2012 Ollie 2 de marzo de 2012 Research Develop Assess Consult amp Educate Recx A Partial Technique Against ASLR Multiple O Ss en ingles Recxltd blogspot co uk Consultado el 10 de abril de 2012 Announcing NetBSD 5 0 Consultado el 25 de abril de 2016 Christos Zoulas 2016 PIE binaries and ASLR are on in the default build for amd64 en ingles Consultado el 25 de abril de 2016 Kernel ASLR on amd64 en ingles 2017 Consultado el 16 de octubre de 2017 a b Kurt Miller 2008 OpenBSD s Position Independent Executable PIE Implementation en ingles Archivado desde el original el 12 de junio de 2011 Consultado el 22 de julio de 2011 libc stdlib malloc c BSD Cross Reference OpenBSD src lib en ingles Mac OS X Security Keeps safe from viruses and malware en ingles Apple Archivado desde el original el 25 de mayo de 2011 Consultado el 10 de abril de 2012 Security en ingles Apple Inc Archivado desde el original el 6 de junio de 2011 Consultado el 6 de junio de 2011 OS X Mountain Lion Core Technologies Overview en ingles Junio de 2012 Consultado el 25 de julio de 2012 Controlling Access to Machine Resources Oracle Information Library 26 de octubre de 2012 Dmitry Evtyushkin Dmitry Ponomarev Nael Abu Ghazaleh 2016 Jump over ASLR Attacking branch predictors to bypass ASLR en ingles AnC VUSec 2017Enlaces externos EditarExploit Mitigation Techniques an Update After 10 Years Archivado el 20 de febrero de 2014 en Wayback Machine in OpenBSD en ingles PaX documentation on ASLR en ingles Comparison of PaX to Exec Shield and W X en ingles ASLR for Windows Vista beta 2 en ingles ASLR for Windows 2000 XP 2003 WehnTrust en ingles Bypassing PaX ASLR protection en ingles On the effectiveness of address space layout randomization en ingles Test Applications or libraries for their ASLR and DEP support en ingles ASLR Smack amp Laugh Reference en ingles Esta obra contiene una traduccion derivada de Address space layout randomization de la Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Datos Q353346Obtenido de https es wikipedia org w index php title Aleatoriedad en la disposicion del espacio de direcciones amp oldid 132633909, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos