Diferencia entre revisiones de «Meltdown (vulnerabilidad)»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Jonpagecr (discusión · contribs.)
mSin resumen de edición
Tactica (discusión · contribs.)
Añadida la mayoría de referencias que faltaban (menos una de Amazon que hace saltar el filtro antispam), actualización del propio artículo.
Línea 20: Línea 20:
}}
}}


La vulnerabilidad '''Meltdown''' es un [[agujero de seguridad]] en el hardware que afecta a los [[procesadores]] [[Intel x86]] así como a algunos procesadores basados en la [[arquitectura ARM]], y que permite efectivamente que un proceso extraño pueda leer memoria física, del kernel o mapeada a otro proceso, con independencia de si debería o no poder hacerlo.
La vulnerabilidad '''Meltdown''' es un [[agujero de seguridad]] en el hardware que afecta a los [[procesadores]] [[Intel x86]] así como a algunos procesadores basados en la [[arquitectura ARM]],<ref>{{cita web|url=https://support.apple.com/en-us/HT208394|title=About speculative execution vulnerabilities in ARM-based and Intel CPUs|publisher=}}</ref><ref name="auto1">{{cita web|url=https://developer.arm.com/support/security-update|title=Arm Processor Security Update – Arm Developer|first=Arm|last=Ltd.|website=ARM Developer}}</ref> y que permite efectivamente que un proceso extraño pueda leer memoria física, del kernel o mapeada a otro proceso, con independencia de si debería o no poder hacerlo.


Meltdown afecta a una amplia gama de sistemas. En el momento de hacerse pública su existencia se incluían todos los modelos [[iPhone]] y [[Mac]], así como cualquier máquina con hardware vulnerable que estuviese ejecutando cualquier versión de [[Microsoft Windows]], o cualquier versión de [[Linux]] salvo las más recientes. Por lo tanto, muchos servidores y [[servicios en la nube]] se han visto impactados, así como potencialmente la mayoría de dispositivos inteligentes y [[sistemas embebidos]] que utilizan procesadores con arquitectura ARM (dispositivos móviles, TVs inteligentes y otros), incluyendo una amplia gama de equipo usado en redes. Se ha considerado que una solución basada únicamente en software para Meltdown enlentecería los ordenadores entre un cinco y un 30 por ciento dependiendo de la tarea que realizasen. Por su parte, las compañías responsables de la corrección del software en relación con este agujero de seguridad informan de un impacto mínimo según pruebas tipo.
Meltdown afecta a una amplia gama de sistemas. En el momento de hacerse pública su existencia se incluían todos los modelos basados en [[iOS]] y los [[Mac]],<ref>{{cita web|url=https://www.macrumors.com/2018/01/04/apple-meltdown-spectre-vulnerability-fixes/|title=Apple Confirms 'Meltdown' and 'Spectre' Vulnerabilities Impact All Macs and iOS Devices, Some Fixes Already Released|publisher=}}</ref> así como cualquier máquina con hardware vulnerable que estuviese ejecutando cualquier versión de [[Microsoft Windows]], o cualquier versión de [[Linux]] salvo las más recientes. Por lo tanto, muchos servidores y [[servicios en la nube]] se han visto impactados,<ref>{{cita web|url=https://winbuzzer.com/2018/01/04/cert-warns-way-fix-intel-kernel-security-flaw-replace-cpu-xcxwbn|title=CERT: "Meltdown and Spectre” CPU Security Flaw Can Only Be Fixed by Hardware Replacement - WinBuzzer|date=January 4, 2018|publisher=}}</ref> así como potencialmente la mayoría de dispositivos inteligentes y [[sistemas embebidos]] que utilizan procesadores con arquitectura ARM (dispositivos móviles, TVs inteligentes y otros), incluyendo una amplia gama de equipo usado en redes. Se ha considerado que una solución basada únicamente en software para Meltdown enlentecería los ordenadores entre un cinco y un 30 por ciento dependiendo de la tarea que realizasen.<ref name=register/> Por su parte, las compañías responsables de la corrección del software en relación con este agujero de seguridad informan de un impacto mínimo según pruebas tipo.<ref>{{Cita web|url=https://newsroom.intel.com/news-releases/industry-testing-shows-recently-released-security-updates-not-impacting-performance-real-world-deployments/|title=Industry Testing Shows Recently Released Security Updates Not Impacting Performance in Real-World Deployments|last=|first=|date=January 4, 2018|website=Intel newsroom|archive-url=|archive-date=|dead-url=|access-date=January 5, 2018}}</ref>


A Meltdown le ha sido asignado en Enero de 2018 el IDentificador CVE-2017-5754, también conocido como Carga Maligna del Caché de Datos (''Rogue Data Cache Load''). Su existencia fue revelada junto con otra vulnerabilidad, [[Spectre (vulnerabilidad)|Spectre]], con el cual comparte algunas características.
A Meltdown le ha sido asignado en Enero de 2018 el IDentificador CVE-2017-5754, también conocido como Carga Maligna del Caché de Datos (''Rogue Data Cache Load'').<ref name="auto1"/> Su existencia fue revelada junto con otra vulnerabilidad, [[Spectre (vulnerabilidad)|Spectre]], con el cual comparte algunas características.


== Base de funcionamiento ==
== Base de funcionamiento ==
Línea 34: Línea 34:


== Historia ==
== Historia ==
En 2014, el [[núcleo Linux]] adoptó la [[randomización en la presentación del espacio de direcciones del núcleo]] (KASLR) para mitigar las fugas de direcciones.
La vulnerabilidad Meltdown fue descubierta de forma independiente por Jann Horn del [[Proyecto Cero]] de [[Google]], Werner Haas y Thomas Prescher de Cyberus Technology, así como Daniel Gruss, Moritz Lipp, Stefan Mangard, Michael Schwarz de la Universidad Tecnológica de Graz.<ref>{{Cita web|url=https://meltdownattack.com/#faq-systems-meltdown|título=Meltdown and Spectre|fechaacceso=2018-01-05|sitioweb=meltdownattack.com|idioma=en}}</ref> Los mismos equipos de investigación que descubrieron Meltdown también descubrieron una vulnerabilidad de seguridad relacionada con la CPU ahora denominada [[Spectre (vulnerabilidad)|Spectre]]. Las dos vulnerabilidades se hicieron públicas conjuntamente el 3 de enero de 2018, varios días antes de la fecha de anuncio decidida del 9 de enero de 2018, debido a que varios sitios de noticias comenzaron a informar sobre los cambios al núcleo de Linux y los mensajes a su lista de correo.<ref>{{Cita noticia|título=Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign|url=https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/|fechaacceso=2018-01-05|idioma=en}}</ref> Como resultado, no se disponía de parches para algunas plataformas, como Ubuntu,<ref>{{Cita web|url=https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/SpectreAndMeltdown|título=SecurityTeam/KnowledgeBase/SpectreAndMeltdown - Ubuntu Wiki|fechaacceso=2018-01-05|sitioweb=wiki.ubuntu.com}}</ref> cuando se revelaron ambas vulnerabilidades.

En junio de 2017, se detectó que KASLR contaba por sí mismo de una nueva clase de nuevas vulnerabilidades.<ref>{{cita web |url=https://gruss.cc/files/kaiser.pdf |title=KASLR is Dead: Long Live KASLR}}</ref> Los investigadores de la Universidad de Graz mostraron cómo resolver estas vulnerabilidades impidiendo todo acceso a páginas no autorizadas.<ref>{{cite journal |url=https://link.springer.com/chapter/10.1007/978-3-319-62105-0_11 |title=ESSoS 2017: Engineering Secure Software and Systems}}</ref> Este trabajo condujo al [[aislamiento de tablas de páginas del kernel]] (KPTI, originalmente conocido como KAISER) en 2017, que se confirmó que eliminaba un gran número de fallos de seguridad, incluyendo el por entonces aún no descubierto Meltdown, extremo éste confirmado por los autores de Meltdown.<ref name="MeltdownPaper">{{cita web |author-first1=Moritz |author-last1=Lipp |author-first2=Michael |author-last2=Schwarz |author-first3=Daniel |author-last3=Gruss |author-first4=Thomas |author-last4=Prescher |author-first5=Werner |author-last5=Haas |author-first6=Stefan |author-last6=Mangard |author-first7=Paul |author-last7=Kocher |author-first8=Daniel |author-last8=Genkin |author-first9=Yuval |author-last9=Yarom |author-first10=Mike |author-last10=Hamburg |title=Meltdown |url=https://meltdownattack.com/meltdown.pdf |website=Meltdown and Spectre |access-date=January 4, 2018 |page=8 sec. 5.1 |format=PDF}}</ref>

La vulnerabilidad Meltdown fue descubierta de forma independiente por Jann Horn del [[Proyecto Cero]] de [[Google]], Werner Haas y Thomas Prescher de Cyberus Technology, así como Daniel Gruss, Moritz Lipp, Stefan Mangard, Michael Schwarz de la Universidad Tecnológica de Graz.<ref name="meltdownwebsite"/> Los mismos equipos de investigación que descubrieron Meltdown también descubrieron una vulnerabilidad de seguridad relacionada con la CPU ahora denominada [[Spectre (vulnerabilidad)|Spectre]]. Las dos vulnerabilidades se hicieron públicas conjuntamente el 3 de enero de 2018, varios días antes de la fecha de anuncio decidida del 9 de enero de 2018, debido a que varios sitios de noticias comenzaron a informar sobre los cambios al núcleo de Linux y los mensajes a su lista de correo.<ref>{{Cita noticia|título=Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign|url=https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/|fechaacceso=2018-01-05|idioma=en}}</ref> Como resultado, no se disponía de parches para algunas plataformas, como Ubuntu,<ref>{{Cita web |url=https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/SpectreAndMeltdown |title=Information Leak via speculative execution side channel attacks (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754 aka Spectre and Meltdown) |website=Ubuntu Wiki |access-date=2018-01-04}}</ref> cuando se revelaron ambas vulnerabilidades.


== Hardware afectado ==
== Hardware afectado ==
La vulnerabilidad Meltdown afecta principalmente a [[microprocesador]]es [[Intel]].<ref>{{cita web |title=A Critical Intel Flaw Breaks Basic Security for Most Computers |url=https://www.wired.com/story/critical-intel-flaw-breaks-basic-security-for-most-computers/ |publisher=[[Wired (magazine)|Wired]] |date=January 3, 2018}}</ref> Se piensa que no afecta a los [[Anexo:Procesadores AMD|microprocesadores de AMD]],<ref name="NYT-20180103">{{Cite news |url=https://www.nytimes.com/2018/01/03/business/computer-flaws.html |title=Researchers Discover Two Major Flaws in the World's Computers |author-last1=Metz |author-first1=Cade |author-last2=Perlroth |author-first2=Nicole |date=January 3, 2018 |work=The New York Times |access-date=2018-01-03 |language=en-US |issn=0362-4331}}</ref><ref>{{Cite news |url=https://www.theverge.com/2018/1/3/16844630/intel-processor-security-flaw-bug-kernel-windows-linux |title=Intel's processors have a security bug and the fix could slow down PCs |work=[[The Verge]] |access-date=2018-01-03}}</ref><ref name="auto">{{Cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=x86-PTI-Initial-Gaming-Tests |title=Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work - Phoronix |website=www.phoronix.com |language=en |access-date=2018-01-03}}</ref><ref>{{Cite web |url=https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=694d99d40972f12e59a3696effee8a376b79d7c8|title=x86/cpu, x86/pti: Do not enable PTI on AMD processors |author-first=Thomas |author-last=Gleixner |date=January 3, 2018}}</ref><ref>{{Cite web |author-first=Tom |author-last=Lendacky |url=https://lkml.org/lkml/2018/1/3/425 |title=[tip:x86/pti] x86/cpu, x86/pti: Do not enable PTI on AMD processors |website=lkml.org |access-date=2018-01-03}}</ref> si bien Intel ha replicado que los defectos afectan a todos los procesadores.<ref>{{cita web |url=https://www.digitaltrends.com/computing/intel-cpus-suffer-bug-requiring-performance-reducing-fix/ |title=Patches arrive for Intel's ‘Meltdown’ flaw — here's how to protect your device |date=January 4, 2018 |publisher=}}</ref> AMD ha negado esta última afirmación, y asegura que las posibilidades de que sus procesadores estén afectados son prácticamente cero.<ref>{{cita web |url=https://www.pcworld.com/article/3245508/components-processors/intel-responds-to-the-cpu-kernel-bug.html |title=Intel responds to the CPU kernel bug, claiming its patches will make PCs 'immune' |publisher=}}</ref> Los investigadores han indicado que la vulnerabilidad Meltdown es exclusiva de los procesadores Intel, mientras que la vulnerabilidad [[Spectre (vulnerabilidad)|Spectre]] puede posiblemente afectar a procesadores [[Intel]], [[AMD]] y [[arquitectura ARM|ARM]].<ref>{{cita web |url=http://chronicle.augusta.com/news/business/2018-01-04/who-s-affected-computer-chip-security-flaw |title=Who's affected by computer chip security fla w|publisher=}}</ref><ref>{{cita web |url=https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/ |title=Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign |publisher=}}</ref><ref>{{Cite web |author=Staff |url=https://spectreattack.com/#faq-systems-spectre |title=Meltdown and Spectre-faq-systems-spectre |date=2018 |work=[[Graz University of Technology]] |language=en |access-date=2018-01-04}}</ref><ref>{{cita web |author-last1=Busvine |author-first1=Douglas |author-last2=Nellis |author-first2=Stephen |title=Security flaws put virtually all phones, computers at risk |url=https://www.reuters.com/article/us-cyber-intel/security-flaws-put-virtually-all-phones-computers-at-risk-idUSKBN1ES1BO |date=January 3, 2018 |website=Reuters |publisher=Thomson-Reuters |access-date=2018-01-03 |ref=busvined_nelliss}}</ref> Concretamente, los procesadores con [[ejecución especulativa]] serían los afectados por estas vulnerabilidades;<ref>{{cita web |url=https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html |title=Today's CPU vulnerability: what you need to know |publisher=}}</ref> los procesadores Intel y ARM serían los más afectados, mientras que los de AMD serían los menos.<ref>{{cita web |url=https://wccftech.com/intel-affected-by-critical-kernel-bug-amd-hit/ |title=Google Pitches In On x86 Kernel Bug - 3 Variants, Intel & ARM Chips Mostly Affected, Near Zero Risk To AMD |author-first=Abdullah |author-last=Saad |date=January 3, 2018 |publisher=}}</ref> Google ha manifestado que todos los procesadores de Intel desde 1995 con ejecución fuera de orden son potencialmente vulnerables a Meltdown.<ref>{{cita web |url=https://www.bleepingcomputer.com/news/security/google-almost-all-cpus-since-1995-vulnerable-to-meltdown-and-spectre-flaws/ |title=Google: Almost All CPUs Since 1995 Vulnerable To "Meltdown" And "Spectre" Flaws |publisher=}}</ref> Intel introdujo la ejecución especulativa en sus procesadores a partir de la familia [[Intel P6|P6]] con el procesador [[Pentium Pro]] [[IA-32]] en 1995.<ref>{{cita web |url=http://www.jaist.ac.jp/iscenter-new/mpc/altix/altixdata/opt/intel/vtune/doc/users_guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/reference_hh/p6_family_micro-architecture.htm |title=P6 family microarchitecture |website=www.jaist.ac.jp}}</ref>
La vulnerabilidad Meltdown afecta principalmente a [[microprocesador]]es [[Intel]]. Se piensa que no afecta a microprocesadores de AMD, si bien Intel ha replicado que los defectos afectan a todos los procesadores. AMD ha negado esta última afirmación, y asegura que las posibilidades de que sus procesadores estén afectados son prácticamente cero. Los investigadores han indicado que la vulnerabilidad Meltdown es exclusiva de los procesadores Intel, mientras que la vulnerabilidad [[Spectre (vulnerabilidad)|Spectre]] puede posiblemente afectar a procesadores [[Intel]], [[AMD]] y [[arquitectura ARM|ARM]]. Los procesadores Intel y ARM serían los más afectados, mientras que los de AMD serían los menos. Google ha manifestado que todos los procesadores de Intel desde 1995 con ejecución fuera de orden es potencialmente vulnerable a Meltdown. Intel introdujo la ejecución especulativa en sus procesadores a partir de la familia [[Intel P6|P6]] con el procesador [[Pentium Pro]] [[IA-32]] en 1995.


ARM ha manifestado que la mayoría de sus procesadores no son vulnerables, y publicó una lista de los procesadores en concreto que sí están afectados. Sin embargo, el ARM Cortex A75 core está afectado directamente por la vulnerabilidad Meltdown, mientras que los Cortex-A15, Cortex-A57 y Cortex-A72 lo están por ciertas variedades de Meltdown. Esto contradice algunas de las primeras aseveraciones realizadas acerca de Meltdown que aseguraban que la vulnerabilidad sólo afectaba a Intel.
ARM ha manifestado que la mayoría de sus procesadores no son vulnerables, y publicó una lista de los procesadores en concreto que sí están afectados. Sin embargo, el ARM Cortex A75 core está afectado directamente por la vulnerabilidad Meltdown, mientras que los Cortex-A15, Cortex-A57 y Cortex-A72 lo están por ciertas variedades de Meltdown.<ref>{{cita web |url=https://developer.arm.com/support/security-update |title=Arm Processor Security Update |publisher=[[ARM Ltd.]] |website=ARM Developer |date=January 3, 2018 |access-date=2018-01-05}}</ref> Esto contradice algunas de las primeras aseveraciones realizadas acerca de Meltdown que aseguraban que la vulnerabilidad sólo afectaba a Intel.<ref>{{cita web |url=http://fortune.com/2018/01/04/meltdown-spectre-intel-amd-arm-security-bug-apple-microsoft-google-apple-amazon/ |title=Understanding Those Alarming Computer Chip Security Holes: 'Meltdown' and 'Spectre' |publisher=}}</ref>


Una gran parte de los teléfonos móviles Android actuales de gama media utilizan Cortex-A53 y Cortex-A55 de 8 núcleos y no están afectados ni por Meltdown ni por Spectre, ya que no realizan ejecución fuera de orden. Esto incluye también a los Qualcomm Snapdragon 630, Snapdragon 626, Snapdragon 625, y todos los procesadores Snapdragon 4xx basados en cores A53 y A55.
Una gran parte de los teléfonos móviles Android actuales de gama media utilizan Cortex-A53 y Cortex-A55 de 8 núcleos y no están afectados ni por Meltdown ni por Spectre, ya que no realizan ejecución fuera de orden. Esto incluye también a los Qualcomm Snapdragon 630, Snapdragon 626, Snapdragon 625, y todos los procesadores Snapdragon 4xx basados en cores A53 y A55.<ref>{{cita web |url=https://www.androidauthority.com/meltdown-spectre-kpti-827527/ |title='Spectre' and 'Meltdown': New CPU vulnerabilities affect most smartphones and computers |date=January 4, 2018 |publisher=}}</ref>


== Mecanismo de acción ==
== Mecanismo de acción ==


Meltdown se basa en una [[condición de carrera]] de la [[CPU]] que puede surgir entre la ejecución de instrucciones y la comprobación de privilegios, con el fin de leer de forma no autorizada [[información mapeada en memoria]] de forma indetectable antes de que pueda tener lugar la comprobación de privilegios que normalmente impediría que se leyese esa información. El texto siguiente describe el funcionamiento de la vulnerabilidad, y el mapeo de memoria que usa como objetivo. El ataque se describe tal como ocurre en un procesador [[Intel]] corriendo [[Microsoft Windows]] o [[Linux]], los principales sistemas a prueba en los documentos técnicos originales, pero también afecta a otros procesadores y sistemas operativos.
Meltdown<ref name="MeltdownPaper" /> se basa en una [[condición de carrera]] de la [[CPU]] que puede surgir entre la ejecución de instrucciones y la comprobación de privilegios, con el fin de leer de forma no autorizada [[información mapeada en memoria]] de forma indetectable antes de que pueda tener lugar la comprobación de privilegios que normalmente impediría que se leyese esa información. El texto siguiente describe el funcionamiento de la vulnerabilidad, y el mapeo de memoria que usa como objetivo. El ataque se describe tal como ocurre en un procesador [[Intel]] corriendo [[Microsoft Windows]] o [[Linux]], los principales sistemas a prueba en los documentos técnicos originales, pero también afecta a otros procesadores y sistemas operativos.


=== Antecedentes - diseño actual de las CPUs ===
=== Antecedentes - diseño actual de las CPUs ===


Las [[CPUs]] de los actuales equipos informáticos emplean una variedad de técnicas para proporcionar altos niveles de eficiencia. En el caso de Meltdown, hay cuatro particularidades que resultan especialmente relevantes:
Las [[CPUs]] de los actuales equipos informáticos emplean una variedad de técnicas para proporcionar altos niveles de eficiencia. En el caso de Meltdown, hay cuatro particularidades que resultan especialmente relevantes:


:* '''[[Memoria virtual|Memoria virtual (paginada)]], también conocido como mapeo de memoria''' - se utiliza para que los accesos a la memoria resulten más eficientes, y para controlar qué procesos pueden acceder a determinadas áreas de la memoria.<br />Un ordenador actual normalmente ejecuta muchos [[procesos]] en paralelo. En un sistema operativo como [[Windows]] o [[Linux]], a cada proceso se le hace pensar que dispone de un uso completo de la [[memoria física]] del ordenador, y que puede disponer de ella como quiera. En realidad, al proceso se le asigna una parte de la memoria física, que actúa como una "porción" de la memoria disponible, cuando intenta por primera vez usar una determinada dirección de la memoria (ya sea para leerla o escribir en ella). Esto permite que una multitud de procesos &mdash;incluyendo el [[kernel]] o el propio [[sistema operativo]]&mdash; puedan cohabitar en el mismo sistema, al tiempo que conservan su actividad individual y su propia integridad sin verse afectados por cualquier otro proceso concurrente, y sin resultar vulnerables frente a interferencias o accesos no autorizados causados por un proceso fuera de control.
:* '''[[Memoria virtual|Memoria virtual (paginada)]], también conocido como mapeo de memoria''' - se utiliza para que los accesos a la memoria resulten más eficientes, y para controlar qué procesos pueden acceder a determinadas áreas de la memoria.<br />Un ordenador actual normalmente ejecuta muchos [[procesos]] en paralelo. En un sistema operativo como [[Windows]] o [[Linux]], a cada proceso se le hace pensar que dispone de un uso completo de la [[memoria física]] del ordenador, y que puede disponer de ella como quiera. En realidad, al proceso se le asigna una parte de la memoria física, que actúa como una "porción" de la memoria disponible, cuando intenta por primera vez usar una determinada dirección de la memoria (ya sea para leerla o escribir en ella). Esto permite que una multitud de procesos &mdash;incluyendo el [[kernel]] o el propio [[sistema operativo]]&mdash; puedan cohabitar en el mismo sistema, al tiempo que conservan su actividad individual y su propia integridad sin verse afectados por cualquier otro proceso concurrente, y sin resultar vulnerables frente a interferencias o accesos no autorizados causados por un proceso fuera de control.
Línea 55: Línea 59:
:* '''[[Anillo de protección|Los dominios de protección]] o anillos de protección''' - proporcionan un medio por el cual el [[sistema operativo]] puede controlar qué procesos están autorizados a leer determinadas áreas de la memoria virtual.<br />Puesto que la memoria virtual permite a un ordenador hacer referencia a una cantidad de memoria muy superior a la que puede contener físicamente, el sistema puede gozar de un aumento de velocidad considerable "mapeando" cada proceso y la memoria que utilizan &mdash;esto es, ''toda'' la memoria de ''todos'' los procesos activos&mdash; a la memoria virtual de ''cada'' proceso. En algunos sistemas toda la memoria física está también mapeada para ganar así todavía más velocidad y eficiencia. Normalmente esto se considera algo seguro, dado que el sistema operativo puede confiar en que los [[anillo de protección|dominios de protección]] de los que consta el propio procesador limitarán las áreas de la memoria a las que se permite acceder a cada proceso. Un intento de acceder a memoria autorizada tendrá éxito inmediatamente, mientras que un intento de acceder a memoria no autorizada causará una [[manejo de excepciones|excepción]] y declarará nula la instrucción de lectura, que devolverá un fallo. Tanto el proceso llamante como el sistema operativo pueden decidir lo que ocurre cuando se realiza un intento de leer de memoria no autorizada; lo habitual es que esto cause una condición de error y que se ponga fin al proceso que intentó llevar a cabo dicha lectura. Dado que las lecturas no autorizadas no suelen formar parte de la ejecución normal de un programa, resulta mucho más rápido usar este método en lugar de pausar el proceso cada vez que ejecute alguna función que requiera acceso a memoria privilegiada, para permitir que esa memoria se mapee a un espacio de direcciones legible.
:* '''[[Anillo de protección|Los dominios de protección]] o anillos de protección''' - proporcionan un medio por el cual el [[sistema operativo]] puede controlar qué procesos están autorizados a leer determinadas áreas de la memoria virtual.<br />Puesto que la memoria virtual permite a un ordenador hacer referencia a una cantidad de memoria muy superior a la que puede contener físicamente, el sistema puede gozar de un aumento de velocidad considerable "mapeando" cada proceso y la memoria que utilizan &mdash;esto es, ''toda'' la memoria de ''todos'' los procesos activos&mdash; a la memoria virtual de ''cada'' proceso. En algunos sistemas toda la memoria física está también mapeada para ganar así todavía más velocidad y eficiencia. Normalmente esto se considera algo seguro, dado que el sistema operativo puede confiar en que los [[anillo de protección|dominios de protección]] de los que consta el propio procesador limitarán las áreas de la memoria a las que se permite acceder a cada proceso. Un intento de acceder a memoria autorizada tendrá éxito inmediatamente, mientras que un intento de acceder a memoria no autorizada causará una [[manejo de excepciones|excepción]] y declarará nula la instrucción de lectura, que devolverá un fallo. Tanto el proceso llamante como el sistema operativo pueden decidir lo que ocurre cuando se realiza un intento de leer de memoria no autorizada; lo habitual es que esto cause una condición de error y que se ponga fin al proceso que intentó llevar a cabo dicha lectura. Dado que las lecturas no autorizadas no suelen formar parte de la ejecución normal de un programa, resulta mucho más rápido usar este método en lugar de pausar el proceso cada vez que ejecute alguna función que requiera acceso a memoria privilegiada, para permitir que esa memoria se mapee a un espacio de direcciones legible.


:* '''[[Encolamiento de instrucciones]] y la [[ejecución especulativa]]''' se utilizan para permitir que las instrucciones se ejecuten del modo más eficiente posible &mdash;si es necesario, permitiéndoles correr fuera de orden o en paralelo a través de las múltiples unidades de procesamiento de la [[CPU]]&mdash; siempre que el resultado final sea correcto.<br />Los procesadores modernos suelen contener múltiples [[unidad de ejecución|unidades de ejecución]] separadas, y un [[planificador]] que decodifica las instrucciones y decide, en el momento de ejecutarlas, la forma más eficiente de hacerlo. Esto puede suponer decidir que dos instrucciones pueden ejecutarse al mismo tiempo, o incluso fuera de orden, en unidades de ejecución diferentes (algo conocido como "encolamiento de instrucciones"). Mientras el resultado final sea el correcto, esto maximiza la eficiencia al hacer que se usen al máximo todas las unidades de ejecución del procesador. Si se percibe que una instrucción podría llevar a dos resultados diferentes (por ejemplo, "haz esto si el resultado es cero, o si no lo es haz esto otro"), entonces en lugar de esperar a que el resultado sea éxito o fracaso la CPU a menudo se adelantará para ejecutar ''ambas'' opciones (lo que se conoce como "ejecución especulativa") y nunca guardará o emitirá los resultados de la opción que no se utilice, puesto esto es mucho más rápido que hacer que todo se detenga a la espera de conocer el resultado de esa ramificación.
:* '''[[Encolamiento de instrucciones]] y [[ejecución especulativa]]''' - se utilizan para permitir que las instrucciones se ejecuten del modo más eficiente posible &mdash;si es necesario, permitiéndoles correr fuera de orden o en paralelo a través de las múltiples unidades de procesamiento de la [[CPU]]&mdash; siempre que el resultado final sea correcto.<br />Los procesadores modernos suelen contener múltiples [[unidad de ejecución|unidades de ejecución]] separadas, y un [[planificador]] que decodifica las instrucciones y decide, en el momento de ejecutarlas, la forma más eficiente de hacerlo. Esto puede suponer decidir que dos instrucciones pueden ejecutarse al mismo tiempo, o incluso fuera de orden, en unidades de ejecución diferentes (algo conocido como "encolamiento de instrucciones"). Mientras el resultado final sea el correcto, esto maximiza la eficiencia al hacer que se usen al máximo todas las unidades de ejecución del procesador. Si se percibe que una instrucción podría llevar a dos resultados diferentes (por ejemplo, "haz esto si el resultado es cero, o si no lo es haz esto otro"), entonces en lugar de esperar a que el resultado sea éxito o fracaso la CPU a menudo se adelantará para ejecutar ''ambas'' opciones (lo que se conoce como "ejecución especulativa") y nunca guardará o emitirá los resultados de la opción que no se utilice, puesto esto es mucho más rápido que hacer que todo se detenga a la espera de conocer el resultado de esa ramificación.


:* '''[[Caché de CPU|El caché de la CPU]]''' es una pequeña cantidad de memoria alojada en la CPU que se utiliza para garantizar el alto rendimiento del procesador, acelerar los accesos a memoria y facilitar la ejecución "inteligente" de instrucciones de un modo eficiente.<br />Desde la perspectiva de una CPU, el acceso a la memoria física del ordenador es muy lento. Además, las instrucciones que ejecuta una CPU suelen ser repetitivas, o se accede muchas veces a las mismas o similares direcciones de memoria. Para maximizar el uso eficiente de los recursos de la CPU, las CPUs modernas albergan en su interior una modesta cantidad de memoria conocida como "[[caché de CPU]]", de acceso muy rápido. Cuando se accede a información a cuando se lee una instrucción de la memoria física, de forma rutinaria una copia de esa información se guarda en la caché de la CPU al mismo tiempo. Si posteriormente la CPU necesita acceder de nuevo a la misma instrucción o al mismo contenido de la memoria, puede obtener esa información en un tiempo mínimo de su propio caché en lugar de tener que esperar a que tenga lugar una petición a la memoria física, mucho más lenta en comparación.
:* '''[[Caché de CPU|El caché de la CPU]]''' es una pequeña cantidad de memoria alojada en la CPU que se utiliza para garantizar el alto rendimiento del procesador, acelerar los accesos a memoria y facilitar la ejecución "inteligente" de instrucciones de un modo eficiente.<br />Desde la perspectiva de una CPU, el acceso a la memoria física del ordenador es muy lento. Además, las instrucciones que ejecuta una CPU suelen ser repetitivas, o se accede muchas veces a las mismas o similares direcciones de memoria. Para maximizar el uso eficiente de los recursos de la CPU, las CPUs modernas albergan en su interior una modesta cantidad de memoria conocida como "[[caché de CPU]]", de acceso muy rápido. Cuando se accede a información a cuando se lee una instrucción de la memoria física, de forma rutinaria una copia de esa información se guarda en la caché de la CPU al mismo tiempo. Si posteriormente la CPU necesita acceder de nuevo a la misma instrucción o al mismo contenido de la memoria, puede obtener esa información en un tiempo mínimo de su propio caché en lugar de tener que esperar a que tenga lugar una petición a la memoria física, mucho más lenta en comparación.
Línea 61: Línea 65:
=== La vulnerabilidad Meltdown ===
=== La vulnerabilidad Meltdown ===


Por lo general, los mecanismos anteriormente descritos se consideran seguros, y proporcionan la base en la que se fundamentan la mayoría de sistemas operativos y procesadores modernos. Meltdown se aprovecha de la forma en que interactúan estas mecánicas, para saltarse los controles de privilegios fundamentales de la CPU y poder así acceder a información sensible del sistema operativo y de otros procesos. Para comprender el funcionamiento de Meltdown, consideremos la información que está mapeada en memoria virtual (gran parte de la cual se supone que resulta inaccesible para el proceso en cuestión), y veamos cómo responde la CPU cuando un proceso intenta acceder a memoria no autorizada. El proceso está corriendo en una versión vulnerable de [[Windows]] o [[Linux]], sobre un procesador de [[64 bits]] de los considerados como vulnerables. (Se trata de una combinación muy habitual entre todos los ordenadores de sobremesa, portátiles, servidores y dispositivos móviles usados actualmente.)
Por lo general, los mecanismos anteriormente descritos se consideran seguros, y proporcionan la base en la que se fundamentan la mayoría de sistemas operativos y procesadores modernos. Meltdown se aprovecha de la forma en que interactúan estas mecánicas, para saltarse los controles de privilegios fundamentales de la CPU y poder así acceder a información sensible del sistema operativo y de otros procesos. Para comprender el funcionamiento de Meltdown, consideremos la información que está mapeada en memoria virtual (gran parte de la cual se supone que resulta inaccesible para el proceso en cuestión), y veamos cómo responde la CPU cuando un proceso intenta acceder a memoria no autorizada. El proceso está corriendo en una versión vulnerable de [[Windows]] o [[Linux]], sobre un procesador de [[64 bits]] de los considerados como vulnerables.<ref name="MeltdownPaper"/> (Se trata de una combinación muy habitual entre todos los ordenadores de sobremesa, portátiles, servidores y dispositivos móviles usados actualmente.)


# Al igual que sucede con cualquier otro proceso y con el propio sistema operativo, el proceso "extraño" cuenta con acceso a un [[espacio de direcciones]] virtual (memoria virtual) de billones de gigabytes. Ignorando los controles de privilegios, este espacio se usará de tal forma que maximice la eficiencia. La mayor parte de este espacio no está adjudicado, es decir, no contiene información alguna. Algunas áreas están asignadas al proceso extraño para sus propias instrucciones y su información. Por razones de eficiencia, e ignorando los controles de privilegios, este espacio ''también'' contiene el resto de la información que emplean ''los demás'' procesos que están en marcha, incluyendo el sistema operativo, y posiblemente incluso memoria que se utilizó anteriormente pero que no se ha vaciado todavía o bien direcciones que siempre se mapean directamente a la totalidad de la memoria física. Sin embargo, el hecho de que toda esta información se mapee a la memoria de cada proceso suele considerarse un procedimiento completamente seguro, puesto que los controles de privilegios de la CPU se encargarán de impedir cualquier abuso. Cualquier intento por parte del proceso extraño de acceder a información que no le pertenece &mdash;es decir, cualquier dirección de memoria a la que no le esté permitido acceder&mdash; supondrá una excepción, es decir, un error. La petición fallará y el proceso no recibirá información alguna, garantizando así la seguridad del sistema.
# Al igual que sucede con cualquier otro proceso y con el propio sistema operativo, el proceso "extraño" cuenta con acceso a un [[espacio de direcciones]] virtual (memoria virtual) de billones de gigabytes. Ignorando los controles de privilegios, este espacio se usará de tal forma que maximice la eficiencia. La mayor parte de este espacio no está adjudicado, es decir, no contiene información alguna. Algunas áreas están asignadas al proceso extraño para sus propias instrucciones y su información. Por razones de eficiencia, e ignorando los controles de privilegios, este espacio ''también'' contiene el resto de la información que emplean ''los demás'' procesos que están en marcha, incluyendo el sistema operativo, y posiblemente incluso memoria que se utilizó anteriormente pero que no se ha vaciado todavía o bien direcciones que siempre se mapean directamente a la totalidad de la memoria física. Sin embargo, el hecho de que toda esta información se mapee a la memoria de cada proceso suele considerarse un procedimiento completamente seguro, puesto que los controles de privilegios de la CPU se encargarán de impedir cualquier abuso. Cualquier intento por parte del proceso extraño de acceder a información que no le pertenece &mdash;es decir, cualquier dirección de memoria a la que no le esté permitido acceder&mdash; supondrá una excepción, es decir, un error. La petición fallará y el proceso no recibirá información alguna, garantizando así la seguridad del sistema.
Línea 67: Línea 71:
# En teoría, suponiendo que la unidad de ejecución, el controlador de memoria, el planificador y la comprobación de privilegios funcionen correctamente, este procedimiento es completamente seguro. Aún en el caso de que la memoria privilegiada llegase a ser leída inicialmente por la unidad de ejecución y el controlador de memoria, la ejecución de la instrucción se cancelaría a medio camino, y los datos procesados a medias se descartarían &mdash; el comportamiento ha sido el correcto. Sin embargo, como demuestra Meltdown, esto no es tan seguro como se creía.
# En teoría, suponiendo que la unidad de ejecución, el controlador de memoria, el planificador y la comprobación de privilegios funcionen correctamente, este procedimiento es completamente seguro. Aún en el caso de que la memoria privilegiada llegase a ser leída inicialmente por la unidad de ejecución y el controlador de memoria, la ejecución de la instrucción se cancelaría a medio camino, y los datos procesados a medias se descartarían &mdash; el comportamiento ha sido el correcto. Sin embargo, como demuestra Meltdown, esto no es tan seguro como se creía.
# En los primeros estadíos de la ejecución de la instrucción, el planificador de la CPU planificó dos eventos: una comprobación de privilegios, y los primeros pasos de la ejecución de la instrucción. Como parte de esta labor, ''mientras estaba esperando a que la comprobación de privilegios se completase'', la unidad de ejecución empezó su trabajo y solicitó la información. En el caso de un proceso extraño, la información procedía de una dirección no autorizada, ''pero aún así fue obtenida por el controlador de memoria duante la etapa inicial de la ejecución de la instrucción, aunque fuera después descartada y abandonada cuando la comprobación de privilegios se completó y produjo un fallo''.
# En los primeros estadíos de la ejecución de la instrucción, el planificador de la CPU planificó dos eventos: una comprobación de privilegios, y los primeros pasos de la ejecución de la instrucción. Como parte de esta labor, ''mientras estaba esperando a que la comprobación de privilegios se completase'', la unidad de ejecución empezó su trabajo y solicitó la información. En el caso de un proceso extraño, la información procedía de una dirección no autorizada, ''pero aún así fue obtenida por el controlador de memoria duante la etapa inicial de la ejecución de la instrucción, aunque fuera después descartada y abandonada cuando la comprobación de privilegios se completó y produjo un fallo''.
# <p>Normalmente esto no tiene efecto alguno y la seguridad está garantizada, puesto que la información leída nunca se pone a disposición de otros procesos hasta completarse la comprobación de privilegios. Sin embargo, aún cuando falla la instrucción, la información ya ha sido solicitada por la unidad de ejecución y obtenida por el controlador de memoria con el fin de estar listo para procesarla, y si bien la unidad de ejecución descarta la información al fallar la comprobación de privilegios, la caché de la CPU de hecho se actualizó como una parte automática de leer la información de la memoria, por si acaso la misma información fuese necesaria en breve plazo una segunda vez.</p><p>'''Es en este momento cuando interviene Meltdown:'''</p>
# <p>Normalmente esto no tiene efecto alguno y la seguridad está garantizada, puesto que la información leída nunca se pone a disposición de otros procesos hasta completarse la comprobación de privilegios. Sin embargo, aún cuando falla la instrucción, la información ya ha sido solicitada por la unidad de ejecución y obtenida por el controlador de memoria con el fin de estar listo para procesarla, y si bien la unidad de ejecución descarta la información al fallar la comprobación de privilegios, la caché de la CPU de hecho se actualizó como una parte automática de leer la información de la memoria, por si acaso la misma información fuese necesaria en breve plazo una segunda vez.</p><p>'''Es en este momento cuando interviene Meltdown:'''<ref name="MeltdownPaper"/></p>
# La caché de la CPU no es legible por parte de un proceso no autorizado, puesto que es algo interno de la CPU. Pero, usando un [[ataque coordinado a la caché]] (una forma de ataque de [[canal lateral]]), resulta posible para un proceso extraño determinar si la información de una dirección específica se encuentra en la caché de la CPU, aunque no pueda leer por sí mismo la información que se encuentra en esa dirección. Si la información de alguna dirección ha sido cacheada por la CPU, entonces una segunda instrucción para leer esa dirección utilizará la caché de la CPU para este propósito (puesto que esto mejora el rendimiento), de lo contrario la CPU tendría que solicitar la lectura de esa información a partir de la memoria normal (que es más lento). El proceso extraño puede utilizar esta diferencia temporal para detectar cuál de ambos casos ha tenido lugar, y saber así si la dirección ya estaba en la caché de la CPU o no. Normalmente esto no sería de por sí una vulnerabilidad insuperable, pero Meltdown puede combinar este conocimiento con otras particularidades del [[juego de instrucciones]] de la CPU para obtener de un acceso completo a toda la memoria mapeada...
# La caché de la CPU no es legible por parte de un proceso no autorizado, puesto que es algo interno de la CPU. Pero, usando un [[ataque coordinado a la caché]] (una forma de ataque de [[canal lateral]]), resulta posible para un proceso extraño determinar si la información de una dirección específica se encuentra en la caché de la CPU, aunque no pueda leer por sí mismo la información que se encuentra en esa dirección. Si la información de alguna dirección ha sido cacheada por la CPU, entonces una segunda instrucción para leer esa dirección utilizará la caché de la CPU para este propósito (puesto que esto mejora el rendimiento), de lo contrario la CPU tendría que solicitar la lectura de esa información a partir de la memoria normal (que es más lento). El proceso extraño puede utilizar esta diferencia temporal para detectar cuál de ambos casos ha tenido lugar, y saber así si la dirección ya estaba en la caché de la CPU o no. Normalmente esto no sería de por sí una vulnerabilidad insuperable, pero Meltdown puede combinar este conocimiento con otras particularidades del [[juego de instrucciones]] de la CPU para obtener de un acceso completo a toda la memoria mapeada...
# Cuando una instrucción solicita una lectura de memoria, puede indicar la dirección de la que efectuar esa lectura de muchas maneras distintas. Puede emplear, por ejemplo, [[modos de direccionamiento]] indirectos: instrucciones que le digan a la CPU que lea de la memoria X, que use el valor almacenado en X para calcular una segunda dirección Y, y la "respuesta" (o valor retornado) es el valor almacenado en la dirección Y. Meltdown utiliza esta técnica como base de un [[ataque de canal lateral]] para determinar el contenido de cualquier dirección de memoria. Supongamos que la dirección de 2000 no es legible de forma directa para el proceso, pero podría tener un valor comprendido entre 1 y 5, y supongamos también que ignoramos la comprobación de privilegios. Uno podría ejecutar una instrucción "Lee el valor de memoria en la dirección dada por (5000 + el valor de la memoria en la dirección 2000)". Si la dirección 2000 contiene 1, entonces la CPU intentará devolver el valor de la memoria en la dirección 5001; si la dirección 2000 contiene 2, intentará devolver el valor de la memoria en la dirección 5002, y así sucesivamente. Si a continuación ejecutamos un ataque coordinado, y descubrimos que la CPU ha tardado más en leer de las direcciones 5001, 5002, 5003 y 5005, pero ha sido más rápida leyendo de la dirección 5004, entonces podemos concluir que es porque recientemente ha accedido a esa dirección. Y podemos deducir, por tanto, que la dirección 2000 contiene el valor "4".
# Cuando una instrucción solicita una lectura de memoria, puede indicar la dirección de la que efectuar esa lectura de muchas maneras distintas. Puede emplear, por ejemplo, [[modos de direccionamiento]] indirectos: instrucciones que le digan a la CPU que lea de la memoria X, que use el valor almacenado en X para calcular una segunda dirección Y, y la "respuesta" (o valor retornado) es el valor almacenado en la dirección Y. Meltdown utiliza esta técnica como base de un [[ataque de canal lateral]] para determinar el contenido de cualquier dirección de memoria. Supongamos que la dirección de 2000 no es legible de forma directa para el proceso, pero podría tener un valor comprendido entre 1 y 5, y supongamos también que ignoramos la comprobación de privilegios. Uno podría ejecutar una instrucción "Lee el valor de memoria en la dirección dada por (5000 + el valor de la memoria en la dirección 2000)". Si la dirección 2000 contiene 1, entonces la CPU intentará devolver el valor de la memoria en la dirección 5001; si la dirección 2000 contiene 2, intentará devolver el valor de la memoria en la dirección 5002, y así sucesivamente. Si a continuación ejecutamos un ataque coordinado, y descubrimos que la CPU ha tardado más en leer de las direcciones 5001, 5002, 5003 y 5005, pero ha sido más rápida leyendo de la dirección 5004, entonces podemos concluir que es porque recientemente ha accedido a esa dirección. Y podemos deducir, por tanto, que la dirección 2000 contiene el valor "4".
# Si 2000 es una dirección no autorizada, entonces este intento debería fracasar y el proceso no debería sacar ninguna información de ello, debido a la comprobación de privilegios.
# Si 2000 es una dirección no autorizada, entonces este intento debería fracasar y el proceso no debería sacar ninguna información de ello, debido a la comprobación de privilegios.
# Pero el problema &mdash;tal como demuestra Meltdown&mdash; es que, para ser eficiente, la CPU <u>ya ha comenzado</u> a prepararse para acceder a las posiciones de memoria que pueden resultar necesarias, en paralelo con la comprobación de privilegios. Esto significa que cuando la comprobación de privilegios da negativo y la unidad de ejecución (correctamente) descarta la información y abandona la instrucción de lectura, ''la dirección 2000 ya ha sido leída y su contenido utilizado para leer la dirección 5004, aunque la lectura fuese abandonada y la información empleada en la tarea fuese descartada por la unidad de ejecución de la CPU''. Es más, cuando el controlador de memoria recibió orden de la unidad de ejecución de acceder a la dirección 5004 ''para prepararse'' para la instrucción, automáticamente colocó una copia de esa información en el caché de la CPU como es habitual, en previsión de una futura lectura de la misma información, ''y esa copia todavía está presente en la caché de la CPU''. (No es espera que sea detectable sin autorización, y a menudo será utilizada de nuevo muy pronto aunque no llegase a ser utilizada la primera vez). Es decir, que aunque la instrucción en sí falló, y a pesar de que el proceso no puede leer directamente el contenido de la dirección 2000 ni tampoco el contenido cacheado de cualquiera de las direcciones 5001 a la 5005, el proceso extraño puede a pesar de todo emplear su ataque de canal lateral para saber que la dirección 5004 está en la caché, y que las otras direcciones de la 5001 a la 5005 no lo están, ''con lo cual puede, a pesar de todo, determinar que la dirección que la instrucción <u>hubiera</u> intentado leer es la 5004, y por tanto que el contenido de la dirección no autorizada es "4"''.
# Pero el problema &mdash;tal como demuestra Meltdown&mdash; es que, para ser eficiente, la CPU <u>ya ha comenzado</u> a prepararse para acceder a las posiciones de memoria que pueden resultar necesarias, en paralelo con la comprobación de privilegios. Esto significa que cuando la comprobación de privilegios da negativo y la unidad de ejecución (correctamente) descarta la información y abandona la instrucción de lectura, ''la dirección 2000 ya ha sido leída y su contenido utilizado para leer la dirección 5004, aunque la lectura fuese abandonada y la información empleada en la tarea fuese descartada por la unidad de ejecución de la CPU''. Es más, cuando el controlador de memoria recibió orden de la unidad de ejecución de acceder a la dirección 5004 ''para prepararse'' para la instrucción, automáticamente colocó una copia de esa información en el caché de la CPU como es habitual, en previsión de una futura lectura de la misma información, ''y esa copia todavía está presente en la caché de la CPU''. (No es espera que sea detectable sin autorización, y a menudo será utilizada de nuevo muy pronto aunque no llegase a ser utilizada la primera vez). Es decir, que aunque la instrucción en sí falló, y a pesar de que el proceso no puede leer directamente el contenido de la dirección 2000 ni tampoco el contenido cacheado de cualquiera de las direcciones 5001 a la 5005, el proceso extraño puede a pesar de todo emplear su ataque de canal lateral para saber que la dirección 5004 está en la caché, y que las otras direcciones de la 5001 a la 5005 no lo están, ''con lo cual puede, a pesar de todo, determinar que la dirección que la instrucción <u>hubiera</u> intentado leer es la 5004, y por tanto que el contenido de la dirección no autorizada 2000 es "4"''.


Meltdown emplea esta técnica de forma secuencial para leer cualquier dirección que le interese a alta velocidad, y dependiendo de cuáles sean los otros procesos concurrentes, el resultado puede contener contraseñas, información encriptada y cualquier otro tipo de información sensible, de cualquier dirección de cualquier proceso que exista en su mapa de memoria. En la práctica, dado que los ataques de canal lateral al caché son lentos, resulta más rápido extraer la información un bit cada vez (sólo son necesarios 2 x 8 = 16 ataques al caché para leer un byte, en lugar de 2 x 256 = 512 pasos si intentase leer los 8 bits a la vez).
Meltdown emplea esta técnica de forma secuencial para leer cualquier dirección que le interese a alta velocidad, y dependiendo de cuáles sean los otros procesos concurrentes, el resultado puede contener contraseñas, información encriptada y cualquier otro tipo de información sensible, de cualquier dirección de cualquier proceso que exista en su mapa de memoria. En la práctica, dado que los ataques de canal lateral al caché son lentos, resulta más rápido extraer la información un bit cada vez (sólo son necesarios {{nowrap|2 x 8 {{=}} 16 ataques al caché}} para leer un byte, en lugar de {{nowrap|2 x 256 {{=}} 512 pasos}} si intentase leer los 8 bits a la vez).


== Impacto ==
== Impacto ==
Línea 86: Línea 90:
El impacto en sí depende de la implantación del mecanismo de traducción de direcciones empleado por el sistema operativo y de la arquitectura del hardware subyacente. El ataque puede revelar el contenido de cualquier espacio de memoria mapeado en el espacio de direcciones de usuario, aún en el caso de estar protegido de otro modo. Por ejemplo, antes de la introducción del [[aislamiento de tablas de páginas del kernel]], la mayor parte de versiones de Linux mapean toda la memoria física al espacio de direcciones de todo proceso en el espacio de usuario; las direcciones mapeadas están (en su mayor parte) protegidas, haciéndolas ilegibles desde el espacio de usuario y resultando accesibles únicamente cuando llegan al kernel. La existencia de estos mapeos acelera la transición de información hacia y desde el kernel, pero es una práctica que resulta insegura en presencia de esta vulnerabilidad Meltdown, ya que el contenido de toda la memoria física (que puede contener información sensible, como contraseñas pertenecientes a otros procesos o al kernel mismo) puede obtenerse entonces mediante al proceso descrito arriba empleando cualquier proceso sin autorización desde el espacio de usuario.
El impacto en sí depende de la implantación del mecanismo de traducción de direcciones empleado por el sistema operativo y de la arquitectura del hardware subyacente. El ataque puede revelar el contenido de cualquier espacio de memoria mapeado en el espacio de direcciones de usuario, aún en el caso de estar protegido de otro modo. Por ejemplo, antes de la introducción del [[aislamiento de tablas de páginas del kernel]], la mayor parte de versiones de Linux mapean toda la memoria física al espacio de direcciones de todo proceso en el espacio de usuario; las direcciones mapeadas están (en su mayor parte) protegidas, haciéndolas ilegibles desde el espacio de usuario y resultando accesibles únicamente cuando llegan al kernel. La existencia de estos mapeos acelera la transición de información hacia y desde el kernel, pero es una práctica que resulta insegura en presencia de esta vulnerabilidad Meltdown, ya que el contenido de toda la memoria física (que puede contener información sensible, como contraseñas pertenecientes a otros procesos o al kernel mismo) puede obtenerse entonces mediante al proceso descrito arriba empleando cualquier proceso sin autorización desde el espacio de usuario.


Según los investigadores, "todo procesador de Intel que implemente [[ejecución fuera de orden]] está potencialmente afectado, lo que significa efectivamente todos los procesadores de la marca comercializados desde 1995 (excepto el [[Intel Itanium]] y el [[Intel Atom]] de antes de 2013". Intel respondió a las vulnerabilidades reportadas en la seguridad con un comunicado oficial.
Según los investigadores, "todo procesador de Intel que implemente [[ejecución fuera de orden]] está potencialmente afectado, lo que significa efectivamente todos los procesadores de la marca comercializados desde 1995 (excepto el [[Intel Itanium]] y el [[Intel Atom]] de antes de 2013".<ref name="meltdownwebsite">{{Cita web |url=https://meltdownattack.com/#faq-systems-meltdown |title=Meltdown and Spectre: Which systems are affected by Meltdown? |last= |first= |date= |website=meltdownattack.com |language=en |archive-url= |archive-date= |dead-url= |access-date=January 3, 2018}}</ref> Intel respondió a las vulnerabilidades reportadas en la seguridad con un comunicado oficial.<ref name="Intel-20180103">{{cita web |author=Staff |title=Intel Responds To Security Research Findings |url=https://newsroom.intel.com/news/intel-responds-to-security-research-findings/ |date=January 3, 2018 |work=[[Intel]] |access-date=January 4, 2018}}</ref>


Se espera que la vulnerabilidad tenga impacto sobre los grandes proveedores de servicios de [[computación en la nube]] tales como [[Amazon Web Services]] (AWS) y la plataforma [[Google Cloud]]. Los proveedores de servicios en la nube permiten a los usuarios ejecutar programas en los mismos servidores físicos en los que podría estar alojada información sensible, y dependen de salvaguardas proporcionadas por la CPU para impedir accesos no autorizados a posiciones de memoria protegidas donde se guarda esa información, una sistema de seguridad que la vulnerabilidad Meltdown puede saltarse.
Se espera que la vulnerabilidad tenga impacto sobre los grandes proveedores de servicios de [[computación en la nube]] tales como [[Amazon Web Services]] (AWS) y la plataforma [[Google Cloud]]. Los proveedores de servicios en la nube permiten a los usuarios ejecutar programas en los mismos servidores físicos en los que podría estar alojada información sensible, y dependen de salvaguardas proporcionadas por la CPU para impedir accesos no autorizados a posiciones de memoria protegidas donde se guarda esa información, una sistema de seguridad que la vulnerabilidad Meltdown puede saltarse.


Uno de los descubridores de la vulnerabilidad informa de que las tecnologías de [[paravirtualización]] ([[Xen]]) y los contenedores tales como [[Docker (software)|Docker]], [[LXC]] y [[OpenVZ]]) también están afectados.<ref>{{Cita web|url=http://blog.cyberus-technology.de/posts/2018-01-03-meltdown.html|título=Cyberus Technology Blog - Meltdown|fechaacceso=2018-01-05|sitioweb=blog.cyberus-technology.de|idioma=en}}</ref> El informe apunta a que en entornos de virtualización pura, sería posible acceder al espacio de memoria del kernel de la máquina virtualizada desde el espacio de usuario de la misma máquina virtualizada, pero no al espacio del kernel de la máquina anfitrión.
Uno de los descubridores de la vulnerabilidad informa de que las tecnologías de [[paravirtualización]] ([[Xen]]) y los [[contenedores de software|contenedores]] tales como [[Docker (software)|Docker]], [[LXC]] y [[OpenVZ]]) también están afectados.<ref>{{Cita web|url=http://blog.cyberus-technology.de/posts/2018-01-03-meltdown.html|título=Cyberus Technology Blog - Meltdown|fechaacceso=2018-01-05|sitioweb=blog.cyberus-technology.de|idioma=en}}</ref> El informe apunta a que en entornos de virtualización pura, sería posible acceder al espacio de memoria del kernel de la máquina virtualizada desde el espacio de usuario de la misma máquina virtualizada, pero no al espacio del kernel de la máquina anfitrión.


== Mitigación ==
== Mitigación ==
{{Further|Aislamiento de tablas de páginas del kernel}}
{{Further|Aislamiento de tablas de páginas del kernel}}


La mitigación de esta vulnerabilidad requiere cambios en el código del kernel del sistema operativo, incluyendo un mayor aislamiento de la memoria del kernel respecto a los procesos del modo usuario. Los desarrolladores del [[núcleo Linux]] se han referido a esta medida como [[aislamiento de las tablas de páginas del kernel]] ('''KPTI''', según las siglas en inglés). Los parches KPTI han sido desarrollados para el kernel Linux 4.15, y han sido liberados como ''[[backport]]'' para el kernel 4.14.11.<ref>{{Cita web|url=https://lwn.net/Articles/738975/|título=KAISER: hiding the kernel from user space [LWN.net]|fechaacceso=2018-01-05|sitioweb=lwn.net}}</ref><ref>{{Cita web|url=https://lwn.net/Articles/741878/|título=The current state of kernel page-table isolation [LWN.net]|fechaacceso=2018-01-05|sitioweb=lwn.net}}</ref> [[MacOS]] ha sido parcheado desde la versión 10.13.2 High Sierra.<ref>{{Cita noticia|título=Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign|url=https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/|fechaacceso=2018-01-05|idioma=en}}</ref> [[Microsoft]] lanzó una actualización de emergencia para [[Windows 10]], [[Windows 8.1|8.1]] y [[Windows 7|7 SP1]] para abordar la vulnerabilidad el 3 de enero de 2018,<ref>{{Cita noticia|título=Microsoft issues emergency Windows update for processor security bugs|url=https://www.theverge.com/2018/1/3/16846784/microsoft-processor-bug-windows-10-fix|fechaacceso=2018-01-05|periódico=The Verge}}</ref><ref>{{Cita web|url=https://support.microsoft.com/en-gb/help/4073119/protect-against-speculative-execution-side-channel-vulnerabilities-in|título=https://support.microsoft.com/en-gb/help/4073119/protect-against-speculative-execution-side-channel-vulnerabilities-in|fechaacceso=2018-01-05|sitioweb=support.microsoft.com}}</ref> y también para [[Windows Server 2016|Windows Server]].<ref>{{Cita web|url=https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution|título=https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution|fechaacceso=2018-01-05|sitioweb=support.microsoft.com}}</ref> Se sabe que estos parches causan conflictos con software antivirus de terceros que utilizan llamadas al núcleo no soportadas; los sistemas que ejecutan estos programas no recibirán la actualización hasta que el antivirus sea parcheado.<ref>{{Cita web|url=https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released|título=https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released|fechaacceso=2018-01-05|sitioweb=support.microsoft.com}}</ref> Red Hat publicó actualizaciones del kernel para sus distribuciones [[Red Hat Enterprise Linux]] versión 6<ref>{{Cita web|url=https://access.redhat.com/errata/RHSA-2018:0008|título=Red Hat Customer Portal|fechaacceso=2018-01-05|sitioweb=access.redhat.com}}</ref> y versión 7.<ref>{{Cita web|url=https://access.redhat.com/errata/RHSA-2018:0007|título=Red Hat Customer Portal|fechaacceso=2018-01-05|sitioweb=access.redhat.com}}</ref> [[CentOS]] también ha publicado ya sus actualizaciones del kernel para CentOS-6 y CentOS-7.
La mitigación de esta vulnerabilidad requiere cambios en el código del kernel del sistema operativo, incluyendo un mayor aislamiento de la memoria del kernel respecto a los procesos del modo usuario. Los desarrolladores del [[núcleo Linux]] se han referido a esta medida como [[aislamiento de las tablas de páginas del kernel]] ('''KPTI''', según las siglas en inglés). Los parches KPTI han sido desarrollados para el kernel Linux 4.15, y han sido liberados como ''[[backport]]'' para el kernel 4.14.11.<ref>{{Cita web|url=https://lwn.net/Articles/738975/|título=KAISER: hiding the kernel from user space [LWN.net]|fechaacceso=2018-01-05|sitioweb=lwn.net}}</ref><ref>{{Cita web|url=https://lwn.net/Articles/741878/|título=The current state of kernel page-table isolation [LWN.net]|fechaacceso=2018-01-05|sitioweb=lwn.net}}</ref> [[MacOS]] ha sido parcheado desde la versión 10.13.2 High Sierra.<ref>{{Cita noticia|título=Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign|url=https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/|fechaacceso=2018-01-05|idioma=en}}</ref> [[Microsoft]] lanzó una actualización de emergencia para [[Windows 10]], [[Windows 8.1|8.1]] y [[Windows 7|7 SP1]] para abordar la vulnerabilidad el 3 de enero de 2018,<ref>{{Citea web |url=https://aws.amazon.com/de/security/security-bulletins/AWS-2018-013/ |title=Processor Speculative Execution Research Disclosure |website=Amazon Web Services, Inc. |language=en-US |access-date=January 3, 2018}}</ref> y también para [[Windows Server 2016|Windows Server]].<ref>{{Cita web|url=https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution|título=https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution|fechaacceso=2018-01-05|sitioweb=support.microsoft.com}}</ref> Se sabe que estos parches causan conflictos con software antivirus de terceros que utilizan llamadas al núcleo no soportadas; los sistemas que ejecutan estos programas no recibirán la actualización hasta que el antivirus sea parcheado.<ref>{{Cita web|url=https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released|título=https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released|fechaacceso=2018-01-05|sitioweb=support.microsoft.com}}</ref> Red Hat publicó actualizaciones del kernel para sus distribuciones [[Red Hat Enterprise Linux]] versión 6<ref>{{Cita web|url=https://access.redhat.com/errata/RHSA-2018:0008|título=Red Hat Customer Portal|fechaacceso=2018-01-05|sitioweb=access.redhat.com}}</ref> y versión 7.<ref>{{Cita web|url=https://access.redhat.com/errata/RHSA-2018:0007|título=Red Hat Customer Portal|fechaacceso=2018-01-05|sitioweb=access.redhat.com}}</ref> [[CentOS]] también ha publicado ya sus actualizaciones del kernel para CentOS-6<ref>{{Cita web |url=https://lists.centos.org/pipermail/centos-announce/2018-January/022701.html |title=[CentOS-announce] CESA-2018:0008 Important CentOS 6 kernel Security Update|author-last= |author-first= |date=January 4, 2018 |website=CentOS announcements |archive-url= |archive-date= |dead-url= |access-date=January 5, 2018}}</ref> y CentOS-7.<ref>{{Cita web |url=https://lists.centos.org/pipermail/centos-announce/2018-January/022696.html |title=[CentOS-announce] CESA-2018:0007 Important CentOS 7 kernel Security Update |author-last= |author-first= |date=January 4, 2018 |website=CentOS announcements |archive-url= |archive-date= |dead-url= |access-date=January 5, 2018}}</ref>.

Se ha indicado que la implantación de KPTI puede conllevar una reducción en el rendimiento de la CPU, que alcanzaría según algunos investigadores hasta un 30% dependiendo del uso, aunque Intel consideró este último extremo una exageración.<ref>{{Cita noticia|título=Computer chip scare: What you need to know|url=http://www.bbc.com/news/technology-42562303|fecha=2018|fechaacceso=2018-01-05|periódico=BBC News|idioma=en-GB}}</ref> Se informó asimismo de que las generaciones de procesadores Intel que admiten identificadores de contexto de procesos (PCID), una característica introducida con [[Westmere]]<ref>{{Cita web|url=https://www.realworldtech.com/westmere/|título=Westmere Arrives|fechaacceso=2018-01-05|sitioweb=www.realworldtech.com|idioma=en-US}}</ref> y disponible en todos los chips de la arquitectura [[Haswell]] en adelante, no eran tan susceptibles a las pérdidas de rendimiento con KPTI como las generaciones anteriores que carecen de ella.<ref>{{Cite news |url=https://www.wired.com/story/critical-intel-flaw-breaks-basic-security-for-most-computers/ |title=A Critical Intel Flaw Breaks Basic Security for Most Computers |work=[[Wired (magazine)|Wired]] |access-date=January 4, 2018 |language=en-US}}</ref><ref>{{Cite news |url=https://www.pcworld.com/article/3245606/security/intel-x86-cpu-kernel-bug-faq-how-it-affects-pc-mac.html |title=Intel CPU kernel bug FAQ: Fix for massive security flaw could slow down PCs and Macs |work=PCWorld |access-date=January 4, 2018 |language=en}}</ref>


En declaraciones Intel dijo que "cualquier impacto en el rendimiento depende de la carga de trabajo y, para el usuario medio de PC, no debería ser significativo y se mitigará con el tiempo".<ref>{{Cita noticia|título=Intel says processor bug isn’t unique to its chips and performance issues are ‘workload-dependent’|url=https://www.theverge.com/2018/1/3/16846540/intel-processor-security-flaw-bug-response|fechaacceso=2018-01-05|periódico=The Verge}}</ref> [[Phoronix]] comparó varios juegos de PC populares en un sistema Linux con la CPU [[Coffee Lake]] Core i7-8700K de Intel y parches KPTI instalados, y descubrió que cualquier impacto en el rendimiento era pequeño o inexistente.<ref name="auto"/> En otras pruebas, incluyendo medidas de E/S sintéticas y bases datos como [[PostgreSQL]] y [[Redis]], sí se encontró un impacto mensurable en el rendimiento.<ref>{{Cita web|url=https://www.phoronix.com/scan.php?page=article&item=linux-415-x86pti&num=2|título=Initial Benchmarks Of The Performance Impact Resulting From Linux's x86 Security Changes - Phoronix|fechaacceso=2018-01-05|sitioweb=www.phoronix.com|idioma=en}}</ref>
Se ha indicado que la implantación de KPTI puede llevar a una reducción en el rendimiento de la CPU, que alcanzaría según algunos investigadores hasta un 30% dependiendo del uso, aunque Intel consideró este último extremo una exageración.<ref>{{Cita noticia|título=Computer chip scare: What you need to know|url=http://www.bbc.com/news/technology-42562303|fecha=2018|fechaacceso=2018-01-05|periódico=BBC News|idioma=en-GB}}</ref> Se informó asimismo de que las generaciones de procesadores Intel que admiten identificadores de contexto de procesos (PCID), una característica introducida con [[Westmere]]<ref>{{Cita web|url=https://www.realworldtech.com/westmere/|título=Westmere Arrives|fechaacceso=2018-01-05|sitioweb=www.realworldtech.com|idioma=en-US}}</ref> y disponible en todos los chips de la arquitectura [[Haswell]] en adelante, no eran tan susceptibles a las pérdidas de rendimiento con KPTI como las generaciones anteriores que carecen de ella.<ref>{{Cita noticia|título=Meltdown and Spectre FAQ: Fix for Intel CPU flaws could slow down PCs and Macs|url=https://www.pcworld.com/article/3245606/security/intel-x86-cpu-kernel-bug-faq-how-it-affects-pc-mac.html|fechaacceso=2018-01-05|periódico=PCWorld|idioma=en}}</ref>


El 4 de enero de 2018, el blog de seguridad de Google proporcionó detalles adicionales sobre cómo se podría mitigar la vulnerabilidad de ejecución especulativa (Spectre) utilizando un conjunto de instrucciones x86 que supondría una sobrecarga insignificante para el procesador, en contraste con lo se había temido anteriormente.<ref>{{Cita noticia|título=More details about mitigations for the CPU Speculative Execution issue|url=https://security.googleblog.com/2018/01/more-details-about-mitigations-for-cpu_4.html|fechaacceso=2018-01-05|periódico=Google Online Security Blog|idioma=en-US}}</ref><ref>{{cita web|url=https://tech.slashdot.org/story/18/01/04/2230207/google-says-cpu-patches-cause-negligible-impact-on-performance-with-new-retpoline-technique|title=Google Says CPU Patches Cause 'Negligible Impact On Performance' With New 'Retpoline' Technique - Slashdot|website=tech.slashdot.org}}</ref>
En declaraciones Intel dijo que "cualquier impacto en el rendimiento depende de la carga de trabajo y, para el usuario medio de PC, no debería ser significativo y se mitigará con el tiempo".<ref>{{Cita noticia|título=Intel says processor bug isn’t unique to its chips and performance issues are ‘workload-dependent’|url=https://www.theverge.com/2018/1/3/16846540/intel-processor-security-flaw-bug-response|fechaacceso=2018-01-05|periódico=The Verge}}</ref> [[Phoronix]] comparó varios juegos de PC populares en un sistema Linux con la CPU [[Coffee Lake]] Core i7-8700K de Intel y parches KPTI instalados, y descubrió que cualquier impacto en el rendimiento era pequeño o inexistente.<ref>{{Cita web|url=https://www.phoronix.com/scan.php?page=news_item&px=x86-PTI-Initial-Gaming-Tests|título=Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work - Phoronix|fechaacceso=2018-01-05|sitioweb=www.phoronix.com|idioma=en}}</ref> En otras pruebas, incluyendo medidas de E/S sintéticas y bases datos como [[PostgreSQL]] y [[Redis]], sí se encontró un impacto mensurable en el rendimiento.<ref>{{Cita web|url=https://www.phoronix.com/scan.php?page=article&item=linux-415-x86pti&num=2|título=Initial Benchmarks Of The Performance Impact Resulting From Linux's x86 Security Changes - Phoronix|fechaacceso=2018-01-05|sitioweb=www.phoronix.com|idioma=en}}</ref>


También se ha sugerido<ref>{{cita web |url=https://www.howtogeek.com/338269/a-huge-intel-security-hole-could-slow-down-your-pc-soon/ |title= }}</ref> que el coste de la mitigación puede aliviarse en procesadores que soporten la limpieza selectiva del ''translation lookaside buffer'' (TLB), una característica denominada ''identificador de contexto de proceso'' (PCID) en la arquitectura Intel 64, y ''número de espacio de dirección'' (ASN) en Alpha. Esto es porque la limpieza selectiva habilita el
El 4 de enero de 2018, el blog de seguridad de Google proporcionó detalles adicionales sobre cómo se podría mitigar la vulnerabilidad de ejecución especulativa (Spectre) utilizando un conjunto de instrucciones x86 que supondría una sobrecarga insignificante para el procesador, en contraste con lo se había temido anteriormente.<ref>{{Cita noticia|título=More details about mitigations for the CPU Speculative Execution issue|url=https://security.googleblog.com/2018/01/more-details-about-mitigations-for-cpu_4.html|fechaacceso=2018-01-05|periódico=Google Online Security Blog|idioma=en-US}}</ref>
comportamiento [[translation lookaside buffer]] (TLB) que es crucial para la vulnerabilidad para aislarse entre procesos, sin estar constantemente limpiando el TLB al completo &mdash; la principal razón para el coste de la mitigación.


Se han reportado varios procedimientos para ayudar a proteger las computadoras personales y otros dispositivos relacionados con las vulnerabilidades de seguridad "Meltdown" y "Spectre".
Se han reportado varios procedimientos para ayudar a proteger las computadoras personales y otros dispositivos relacionados contra las vulnerabilidades de seguridad "Meltdown" y "Spectre".<ref name="NYT-20180104">{{cite news |last1=Metz |first1=Cade |last2=Chen |first2=Brian X. |title=What You Need to Do Because of Flaws in Computer Chips
|url=https://www.nytimes.com/2018/01/04/technology/meltdown-spectre-questions.html |date=January 4, 2018 |work=[[The New York Times]] |accessdate=January 5, 2018 }}</ref><ref name="FM-20180105">{{cite web |last=Pressman |first=Aaron |title=Why Your Web Browser May Be Most Vulnerable to Spectre and What to Do About It |url=http://fortune.com/2018/01/05/spectre-safari-chrome-firefox-internet-explorer/ |date=January 5, 2018 |work=[[Fortune (magazine)]] |accessdate=January 5, 2018 }}</ref><ref name="PCW-20180104">{{cite web |last=Chacos |first=Brad |title=How to protect your PC from the major Meltdown and Spectre CPU flaws |url=https://www.pcworld.com/article/3245810/security/how-to-protect-your-pc-meltdown-spectre-cpu-flaws.html |date=January 4, 2018 |work=[[PC World]] |accessdate=January 4, 2018 }}</ref><ref name="CNET-20180104">{{cite web |last=Elliot |first=Matt |title=Security - How to protect your PC against the Intel chip flaw - Here are the steps to take to keep your Windows laptop or PC safe from Meltdown and Spectre. |url=https://www.cnet.com/how-to/how-to-protect-your-pc-against-the-intel-chip-flaw/ |date=January 4, 2018 |work=[[CNET]] |accessdate=January 4, 2018 }}</ref>


== Véase también ==
== Véase también ==

Revisión del 01:13 6 ene 2018

Meltdown
Información general
Tipo de programa agujero de seguridad
Alias intelbug
Vulnerabilidades CVE-2017-5754
Enlaces

La vulnerabilidad Meltdown es un agujero de seguridad en el hardware que afecta a los procesadores Intel x86 así como a algunos procesadores basados en la arquitectura ARM,[1][2]​ y que permite efectivamente que un proceso extraño pueda leer memoria física, del kernel o mapeada a otro proceso, con independencia de si debería o no poder hacerlo.

Meltdown afecta a una amplia gama de sistemas. En el momento de hacerse pública su existencia se incluían todos los modelos basados en iOS y los Mac,[3]​ así como cualquier máquina con hardware vulnerable que estuviese ejecutando cualquier versión de Microsoft Windows, o cualquier versión de Linux salvo las más recientes. Por lo tanto, muchos servidores y servicios en la nube se han visto impactados,[4]​ así como potencialmente la mayoría de dispositivos inteligentes y sistemas embebidos que utilizan procesadores con arquitectura ARM (dispositivos móviles, TVs inteligentes y otros), incluyendo una amplia gama de equipo usado en redes. Se ha considerado que una solución basada únicamente en software para Meltdown enlentecería los ordenadores entre un cinco y un 30 por ciento dependiendo de la tarea que realizasen.[5]​ Por su parte, las compañías responsables de la corrección del software en relación con este agujero de seguridad informan de un impacto mínimo según pruebas tipo.[6]

A Meltdown le ha sido asignado en Enero de 2018 el IDentificador CVE-2017-5754, también conocido como Carga Maligna del Caché de Datos (Rogue Data Cache Load).[2]​ Su existencia fue revelada junto con otra vulnerabilidad, Spectre, con el cual comparte algunas características.

Base de funcionamiento

Meltdown explota una condición de carrera inherente al diseño de muchas CPUs actuales que se da entre los accesos a la memoria y la comprobación de privilegios durante el procesamiento de instrucciones, en combinación con un ataque de canal lateral al caché de la CPU, para permitir que un proceso se salte las comprobaciones habituales de nivel de privilegio para aislar al proceso extraño e impedir que acceda a datos que pertenecen al sistema operativo y otros procesos concurrentes. Permite que un proceso no autorizado lea información de cualquier dirección mapeada al espacio de memoria del proceso actual, dado que el encolamiento de instrucciones en los procesadores afectados significa que la información de la dirección no autorizada casi siempre se cargará temporalmente en el caché de la CPU durante la ejecución especulativa, desde el cual puede luego recuperarse empleando otras técnicas, aún en el caso de que la instrucción de lectura original fallase debido a una comprobación de los privilegios y nunca produjese un resultado legible.

Dado que muchos sistemas operativos mapean la memoria física, los procesos del kernel y otros procesos del espacio de usuario en el espacio de direcciones de cada proceso, y que dependen de la comprobación de privilegios para que se impida todo acceso no autorizado, efectivamente Meltdown permite que un proceso extraño pueda leer cualquier la memoria mapeada física, del kernel o de otro proceso, con independencia de si debería o no poder hacerlo. Las defensas contra Meltdown exigirían evitar el uso del mapeo de memoria de un modo que resultase vulnerable a tales amenazas (una solución basada en software), o bien evitar la condición de carrera subyacente (una modificación del microcódigo de la CPU y/o la ruta de ejecución).

El agujero es viable en cualquier sistema operativo en el que haya información privilegiada que se mapee a memoria virtual de procesos no privilegiados, lo cual incluye la mayoría de los sistemas operativos más populares que corren en las arquitecturas de CPU afectadas. Por lo tanto, potencialmente Meltdown puede afectar a una gama de dispositivos mayor que la identificada actualmente, puesto que hay sólo un puñado de familias de procesadores usados de forma ubicua.

Historia

En 2014, el núcleo Linux adoptó la randomización en la presentación del espacio de direcciones del núcleo (KASLR) para mitigar las fugas de direcciones.

En junio de 2017, se detectó que KASLR contaba por sí mismo de una nueva clase de nuevas vulnerabilidades.[7]​ Los investigadores de la Universidad de Graz mostraron cómo resolver estas vulnerabilidades impidiendo todo acceso a páginas no autorizadas.[8]​ Este trabajo condujo al aislamiento de tablas de páginas del kernel (KPTI, originalmente conocido como KAISER) en 2017, que se confirmó que eliminaba un gran número de fallos de seguridad, incluyendo el por entonces aún no descubierto Meltdown, extremo éste confirmado por los autores de Meltdown.[9]

La vulnerabilidad Meltdown fue descubierta de forma independiente por Jann Horn del Proyecto Cero de Google, Werner Haas y Thomas Prescher de Cyberus Technology, así como Daniel Gruss, Moritz Lipp, Stefan Mangard, Michael Schwarz de la Universidad Tecnológica de Graz.[10]​ Los mismos equipos de investigación que descubrieron Meltdown también descubrieron una vulnerabilidad de seguridad relacionada con la CPU ahora denominada Spectre. Las dos vulnerabilidades se hicieron públicas conjuntamente el 3 de enero de 2018, varios días antes de la fecha de anuncio decidida del 9 de enero de 2018, debido a que varios sitios de noticias comenzaron a informar sobre los cambios al núcleo de Linux y los mensajes a su lista de correo.[11]​ Como resultado, no se disponía de parches para algunas plataformas, como Ubuntu,[12]​ cuando se revelaron ambas vulnerabilidades.

Hardware afectado

La vulnerabilidad Meltdown afecta principalmente a microprocesadores Intel.[13]​ Se piensa que no afecta a los microprocesadores de AMD,[14][15][16][17][18]​ si bien Intel ha replicado que los defectos afectan a todos los procesadores.[19]​ AMD ha negado esta última afirmación, y asegura que las posibilidades de que sus procesadores estén afectados son prácticamente cero.[20]​ Los investigadores han indicado que la vulnerabilidad Meltdown es exclusiva de los procesadores Intel, mientras que la vulnerabilidad Spectre puede posiblemente afectar a procesadores Intel, AMD y ARM.[21][22][23][24]​ Concretamente, los procesadores con ejecución especulativa serían los afectados por estas vulnerabilidades;[25]​ los procesadores Intel y ARM serían los más afectados, mientras que los de AMD serían los menos.[26]​ Google ha manifestado que todos los procesadores de Intel desde 1995 con ejecución fuera de orden son potencialmente vulnerables a Meltdown.[27]​ Intel introdujo la ejecución especulativa en sus procesadores a partir de la familia P6 con el procesador Pentium Pro IA-32 en 1995.[28]

ARM ha manifestado que la mayoría de sus procesadores no son vulnerables, y publicó una lista de los procesadores en concreto que sí están afectados. Sin embargo, el ARM Cortex A75 core está afectado directamente por la vulnerabilidad Meltdown, mientras que los Cortex-A15, Cortex-A57 y Cortex-A72 lo están por ciertas variedades de Meltdown.[29]​ Esto contradice algunas de las primeras aseveraciones realizadas acerca de Meltdown que aseguraban que la vulnerabilidad sólo afectaba a Intel.[30]

Una gran parte de los teléfonos móviles Android actuales de gama media utilizan Cortex-A53 y Cortex-A55 de 8 núcleos y no están afectados ni por Meltdown ni por Spectre, ya que no realizan ejecución fuera de orden. Esto incluye también a los Qualcomm Snapdragon 630, Snapdragon 626, Snapdragon 625, y todos los procesadores Snapdragon 4xx basados en cores A53 y A55.[31]

Mecanismo de acción

Meltdown[9]​ se basa en una condición de carrera de la CPU que puede surgir entre la ejecución de instrucciones y la comprobación de privilegios, con el fin de leer de forma no autorizada información mapeada en memoria de forma indetectable antes de que pueda tener lugar la comprobación de privilegios que normalmente impediría que se leyese esa información. El texto siguiente describe el funcionamiento de la vulnerabilidad, y el mapeo de memoria que usa como objetivo. El ataque se describe tal como ocurre en un procesador Intel corriendo Microsoft Windows o Linux, los principales sistemas a prueba en los documentos técnicos originales, pero también afecta a otros procesadores y sistemas operativos.

Antecedentes - diseño actual de las CPUs

Las CPUs de los actuales equipos informáticos emplean una variedad de técnicas para proporcionar altos niveles de eficiencia. En el caso de Meltdown, hay cuatro particularidades que resultan especialmente relevantes:

  • Memoria virtual (paginada), también conocido como mapeo de memoria - se utiliza para que los accesos a la memoria resulten más eficientes, y para controlar qué procesos pueden acceder a determinadas áreas de la memoria.
    Un ordenador actual normalmente ejecuta muchos procesos en paralelo. En un sistema operativo como Windows o Linux, a cada proceso se le hace pensar que dispone de un uso completo de la memoria física del ordenador, y que puede disponer de ella como quiera. En realidad, al proceso se le asigna una parte de la memoria física, que actúa como una "porción" de la memoria disponible, cuando intenta por primera vez usar una determinada dirección de la memoria (ya sea para leerla o escribir en ella). Esto permite que una multitud de procesos —incluyendo el kernel o el propio sistema operativo— puedan cohabitar en el mismo sistema, al tiempo que conservan su actividad individual y su propia integridad sin verse afectados por cualquier otro proceso concurrente, y sin resultar vulnerables frente a interferencias o accesos no autorizados causados por un proceso fuera de control.
  • Los dominios de protección o anillos de protección - proporcionan un medio por el cual el sistema operativo puede controlar qué procesos están autorizados a leer determinadas áreas de la memoria virtual.
    Puesto que la memoria virtual permite a un ordenador hacer referencia a una cantidad de memoria muy superior a la que puede contener físicamente, el sistema puede gozar de un aumento de velocidad considerable "mapeando" cada proceso y la memoria que utilizan —esto es, toda la memoria de todos los procesos activos— a la memoria virtual de cada proceso. En algunos sistemas toda la memoria física está también mapeada para ganar así todavía más velocidad y eficiencia. Normalmente esto se considera algo seguro, dado que el sistema operativo puede confiar en que los dominios de protección de los que consta el propio procesador limitarán las áreas de la memoria a las que se permite acceder a cada proceso. Un intento de acceder a memoria autorizada tendrá éxito inmediatamente, mientras que un intento de acceder a memoria no autorizada causará una excepción y declarará nula la instrucción de lectura, que devolverá un fallo. Tanto el proceso llamante como el sistema operativo pueden decidir lo que ocurre cuando se realiza un intento de leer de memoria no autorizada; lo habitual es que esto cause una condición de error y que se ponga fin al proceso que intentó llevar a cabo dicha lectura. Dado que las lecturas no autorizadas no suelen formar parte de la ejecución normal de un programa, resulta mucho más rápido usar este método en lugar de pausar el proceso cada vez que ejecute alguna función que requiera acceso a memoria privilegiada, para permitir que esa memoria se mapee a un espacio de direcciones legible.
  • Encolamiento de instrucciones y ejecución especulativa - se utilizan para permitir que las instrucciones se ejecuten del modo más eficiente posible —si es necesario, permitiéndoles correr fuera de orden o en paralelo a través de las múltiples unidades de procesamiento de la CPU— siempre que el resultado final sea correcto.
    Los procesadores modernos suelen contener múltiples unidades de ejecución separadas, y un planificador que decodifica las instrucciones y decide, en el momento de ejecutarlas, la forma más eficiente de hacerlo. Esto puede suponer decidir que dos instrucciones pueden ejecutarse al mismo tiempo, o incluso fuera de orden, en unidades de ejecución diferentes (algo conocido como "encolamiento de instrucciones"). Mientras el resultado final sea el correcto, esto maximiza la eficiencia al hacer que se usen al máximo todas las unidades de ejecución del procesador. Si se percibe que una instrucción podría llevar a dos resultados diferentes (por ejemplo, "haz esto si el resultado es cero, o si no lo es haz esto otro"), entonces en lugar de esperar a que el resultado sea éxito o fracaso la CPU a menudo se adelantará para ejecutar ambas opciones (lo que se conoce como "ejecución especulativa") y nunca guardará o emitirá los resultados de la opción que no se utilice, puesto esto es mucho más rápido que hacer que todo se detenga a la espera de conocer el resultado de esa ramificación.
  • El caché de la CPU es una pequeña cantidad de memoria alojada en la CPU que se utiliza para garantizar el alto rendimiento del procesador, acelerar los accesos a memoria y facilitar la ejecución "inteligente" de instrucciones de un modo eficiente.
    Desde la perspectiva de una CPU, el acceso a la memoria física del ordenador es muy lento. Además, las instrucciones que ejecuta una CPU suelen ser repetitivas, o se accede muchas veces a las mismas o similares direcciones de memoria. Para maximizar el uso eficiente de los recursos de la CPU, las CPUs modernas albergan en su interior una modesta cantidad de memoria conocida como "caché de CPU", de acceso muy rápido. Cuando se accede a información a cuando se lee una instrucción de la memoria física, de forma rutinaria una copia de esa información se guarda en la caché de la CPU al mismo tiempo. Si posteriormente la CPU necesita acceder de nuevo a la misma instrucción o al mismo contenido de la memoria, puede obtener esa información en un tiempo mínimo de su propio caché en lugar de tener que esperar a que tenga lugar una petición a la memoria física, mucho más lenta en comparación.

La vulnerabilidad Meltdown

Por lo general, los mecanismos anteriormente descritos se consideran seguros, y proporcionan la base en la que se fundamentan la mayoría de sistemas operativos y procesadores modernos. Meltdown se aprovecha de la forma en que interactúan estas mecánicas, para saltarse los controles de privilegios fundamentales de la CPU y poder así acceder a información sensible del sistema operativo y de otros procesos. Para comprender el funcionamiento de Meltdown, consideremos la información que está mapeada en memoria virtual (gran parte de la cual se supone que resulta inaccesible para el proceso en cuestión), y veamos cómo responde la CPU cuando un proceso intenta acceder a memoria no autorizada. El proceso está corriendo en una versión vulnerable de Windows o Linux, sobre un procesador de 64 bits de los considerados como vulnerables.[9]​ (Se trata de una combinación muy habitual entre todos los ordenadores de sobremesa, portátiles, servidores y dispositivos móviles usados actualmente.)

  1. Al igual que sucede con cualquier otro proceso y con el propio sistema operativo, el proceso "extraño" cuenta con acceso a un espacio de direcciones virtual (memoria virtual) de billones de gigabytes. Ignorando los controles de privilegios, este espacio se usará de tal forma que maximice la eficiencia. La mayor parte de este espacio no está adjudicado, es decir, no contiene información alguna. Algunas áreas están asignadas al proceso extraño para sus propias instrucciones y su información. Por razones de eficiencia, e ignorando los controles de privilegios, este espacio también contiene el resto de la información que emplean los demás procesos que están en marcha, incluyendo el sistema operativo, y posiblemente incluso memoria que se utilizó anteriormente pero que no se ha vaciado todavía o bien direcciones que siempre se mapean directamente a la totalidad de la memoria física. Sin embargo, el hecho de que toda esta información se mapee a la memoria de cada proceso suele considerarse un procedimiento completamente seguro, puesto que los controles de privilegios de la CPU se encargarán de impedir cualquier abuso. Cualquier intento por parte del proceso extraño de acceder a información que no le pertenece —es decir, cualquier dirección de memoria a la que no le esté permitido acceder— supondrá una excepción, es decir, un error. La petición fallará y el proceso no recibirá información alguna, garantizando así la seguridad del sistema.
  2. Si un proceso intentara leer de memoria no autorizada, la instrucción de lectura en principio llegaría al planificador para ser ejecutada por la CPU, como cualquier otra instrucción. Como es habitual, se elegiría una unidad de ejecución y una unidad del controlador de memoria recibiría la orden de leer el contenido de esa memoria y pasarla a la instrucción, de forma que estuviese lista y accesible de forma rápida en la CPU cuando llegase el momento de ejecutar el resto de la instrucción. En algún momento previo a que se permitiese a la instrucción producir cualquier información de salida, la comprobación de privilegios completaría su trabajo en otra parte. En el caso de una lectura no autorizada, la unidad de ejecución recibirá el dato de que la instrucción no ha superado la comprobación de privilegios — descartará toda la información de la instrucción, nunca le pasará nada al proceso, y abandonará la instrucción para proceder a atender a la siguiente.
  3. En teoría, suponiendo que la unidad de ejecución, el controlador de memoria, el planificador y la comprobación de privilegios funcionen correctamente, este procedimiento es completamente seguro. Aún en el caso de que la memoria privilegiada llegase a ser leída inicialmente por la unidad de ejecución y el controlador de memoria, la ejecución de la instrucción se cancelaría a medio camino, y los datos procesados a medias se descartarían — el comportamiento ha sido el correcto. Sin embargo, como demuestra Meltdown, esto no es tan seguro como se creía.
  4. En los primeros estadíos de la ejecución de la instrucción, el planificador de la CPU planificó dos eventos: una comprobación de privilegios, y los primeros pasos de la ejecución de la instrucción. Como parte de esta labor, mientras estaba esperando a que la comprobación de privilegios se completase, la unidad de ejecución empezó su trabajo y solicitó la información. En el caso de un proceso extraño, la información procedía de una dirección no autorizada, pero aún así fue obtenida por el controlador de memoria duante la etapa inicial de la ejecución de la instrucción, aunque fuera después descartada y abandonada cuando la comprobación de privilegios se completó y produjo un fallo.
  5. Normalmente esto no tiene efecto alguno y la seguridad está garantizada, puesto que la información leída nunca se pone a disposición de otros procesos hasta completarse la comprobación de privilegios. Sin embargo, aún cuando falla la instrucción, la información ya ha sido solicitada por la unidad de ejecución y obtenida por el controlador de memoria con el fin de estar listo para procesarla, y si bien la unidad de ejecución descarta la información al fallar la comprobación de privilegios, la caché de la CPU de hecho se actualizó como una parte automática de leer la información de la memoria, por si acaso la misma información fuese necesaria en breve plazo una segunda vez.

    Es en este momento cuando interviene Meltdown:[9]

  6. La caché de la CPU no es legible por parte de un proceso no autorizado, puesto que es algo interno de la CPU. Pero, usando un ataque coordinado a la caché (una forma de ataque de canal lateral), resulta posible para un proceso extraño determinar si la información de una dirección específica se encuentra en la caché de la CPU, aunque no pueda leer por sí mismo la información que se encuentra en esa dirección. Si la información de alguna dirección ha sido cacheada por la CPU, entonces una segunda instrucción para leer esa dirección utilizará la caché de la CPU para este propósito (puesto que esto mejora el rendimiento), de lo contrario la CPU tendría que solicitar la lectura de esa información a partir de la memoria normal (que es más lento). El proceso extraño puede utilizar esta diferencia temporal para detectar cuál de ambos casos ha tenido lugar, y saber así si la dirección ya estaba en la caché de la CPU o no. Normalmente esto no sería de por sí una vulnerabilidad insuperable, pero Meltdown puede combinar este conocimiento con otras particularidades del juego de instrucciones de la CPU para obtener de un acceso completo a toda la memoria mapeada...
  7. Cuando una instrucción solicita una lectura de memoria, puede indicar la dirección de la que efectuar esa lectura de muchas maneras distintas. Puede emplear, por ejemplo, modos de direccionamiento indirectos: instrucciones que le digan a la CPU que lea de la memoria X, que use el valor almacenado en X para calcular una segunda dirección Y, y la "respuesta" (o valor retornado) es el valor almacenado en la dirección Y. Meltdown utiliza esta técnica como base de un ataque de canal lateral para determinar el contenido de cualquier dirección de memoria. Supongamos que la dirección de 2000 no es legible de forma directa para el proceso, pero podría tener un valor comprendido entre 1 y 5, y supongamos también que ignoramos la comprobación de privilegios. Uno podría ejecutar una instrucción "Lee el valor de memoria en la dirección dada por (5000 + el valor de la memoria en la dirección 2000)". Si la dirección 2000 contiene 1, entonces la CPU intentará devolver el valor de la memoria en la dirección 5001; si la dirección 2000 contiene 2, intentará devolver el valor de la memoria en la dirección 5002, y así sucesivamente. Si a continuación ejecutamos un ataque coordinado, y descubrimos que la CPU ha tardado más en leer de las direcciones 5001, 5002, 5003 y 5005, pero ha sido más rápida leyendo de la dirección 5004, entonces podemos concluir que es porque recientemente ha accedido a esa dirección. Y podemos deducir, por tanto, que la dirección 2000 contiene el valor "4".
  8. Si 2000 es una dirección no autorizada, entonces este intento debería fracasar y el proceso no debería sacar ninguna información de ello, debido a la comprobación de privilegios.
  9. Pero el problema —tal como demuestra Meltdown— es que, para ser eficiente, la CPU ya ha comenzado a prepararse para acceder a las posiciones de memoria que pueden resultar necesarias, en paralelo con la comprobación de privilegios. Esto significa que cuando la comprobación de privilegios da negativo y la unidad de ejecución (correctamente) descarta la información y abandona la instrucción de lectura, la dirección 2000 ya ha sido leída y su contenido utilizado para leer la dirección 5004, aunque la lectura fuese abandonada y la información empleada en la tarea fuese descartada por la unidad de ejecución de la CPU. Es más, cuando el controlador de memoria recibió orden de la unidad de ejecución de acceder a la dirección 5004 para prepararse para la instrucción, automáticamente colocó una copia de esa información en el caché de la CPU como es habitual, en previsión de una futura lectura de la misma información, y esa copia todavía está presente en la caché de la CPU. (No es espera que sea detectable sin autorización, y a menudo será utilizada de nuevo muy pronto aunque no llegase a ser utilizada la primera vez). Es decir, que aunque la instrucción en sí falló, y a pesar de que el proceso no puede leer directamente el contenido de la dirección 2000 ni tampoco el contenido cacheado de cualquiera de las direcciones 5001 a la 5005, el proceso extraño puede a pesar de todo emplear su ataque de canal lateral para saber que la dirección 5004 está en la caché, y que las otras direcciones de la 5001 a la 5005 no lo están, con lo cual puede, a pesar de todo, determinar que la dirección que la instrucción hubiera intentado leer es la 5004, y por tanto que el contenido de la dirección no autorizada 2000 es "4".

Meltdown emplea esta técnica de forma secuencial para leer cualquier dirección que le interese a alta velocidad, y dependiendo de cuáles sean los otros procesos concurrentes, el resultado puede contener contraseñas, información encriptada y cualquier otro tipo de información sensible, de cualquier dirección de cualquier proceso que exista en su mapa de memoria. En la práctica, dado que los ataques de canal lateral al caché son lentos, resulta más rápido extraer la información un bit cada vez (sólo son necesarios 2 x 8 = 16 ataques al caché para leer un byte, en lugar de 2 x 256 = 512 pasos si intentase leer los 8 bits a la vez).

Impacto

El impacto de Meltdown depende del diseño de la CPU, del diseño del sistema operativo (concretamente, de cómo utiliza la paginación de memoria) y de la capacidad de la parte maliciosa para ejecutar código en ese sistema, así como del valor de la información obtenida en caso de llegar a ejecutarse.

  • CPU - Muchas de las CPUs modernas empleadas comunmente desde finales de 1990 hasta principios de 2018 tienen el diseño vulnerable necesario para dar lugar a este agujero en la seguridad. Sin embargo, es posible mitigarlo con el diseño de la CPU. Una CPU que pudiese detectar y evitar accesos a memoria por parte de instrucciones sin los privilegios necesarios, o que no fuese susceptible a ataques coordinados a su caché u otras "sondas" similares, o que eliminase información del caché al detectar usos no autorizados (y no permitiese a otros procesos acceder a esa información hasta contar con la debida autorización) como parte del proceso de descarte de la instrucción, no estaría sujeta a ser explotada de esta manera. Algunos observadores consideran que todas las soluciones basadas únicamente en software son "parches" a un problema que continúa estando presente y que la verdadera solución es actualizar los diseños de CPU afectados para eliminar las debilidades subyacentes.
  • Sistema operativo - La mayoría de los sistemas operativos de propósito general utilizados comunmente emplean niveles de privilegios y mapeo de memoria virtual como parte de su diseño. Meltdown sólo puede acceder a páginas que están mapeadas en memoria, con lo cual el impacto será mayor si todos los procesos y la memoria activa están mapeados a memoria en cada proceso, y menor si el sistema operativo está diseñado de tal forma que no pueda accederse a casi nada de esta manera. Un sistema operativo podría también ser capaz de mitigar hasta cierto punto el impacto mediante software asegurando que los intentos de sondeo de este tipo no revelen nada útil. Sin embargo, los modernos sistemas operativos utilizan mapeo de memoria para aumentar la velocidad, con lo cual esto podría conllevar una caída del rendimiento.
  • Acceso a ejecución - Entre los chips vulnerables se encuentran los fabricados por ARM e Intel diseñados para dispositivos tanto autónomos como embebidos, tales como dispositivos móviles, TVs inteligentes, equipos de red, vehículos, discos duros, aparatos de control industrial y similares. Como ocurre con todas las vulnerabilidades, si un tercero no puede ejecutar código en el dispositivo, sus vulnerabilidades internas no pueden explotarse. Por ejemplo, el procesador ARM de un teléfono inteligente o un aparato de la Internet de las cosas puede ser vulnerable, pero el mismo procesador alojado en un aparato de cocina o en la circuitería de control de un disco duro es extremadamente improbable que sea explotado de este modo.

El impacto en sí depende de la implantación del mecanismo de traducción de direcciones empleado por el sistema operativo y de la arquitectura del hardware subyacente. El ataque puede revelar el contenido de cualquier espacio de memoria mapeado en el espacio de direcciones de usuario, aún en el caso de estar protegido de otro modo. Por ejemplo, antes de la introducción del aislamiento de tablas de páginas del kernel, la mayor parte de versiones de Linux mapean toda la memoria física al espacio de direcciones de todo proceso en el espacio de usuario; las direcciones mapeadas están (en su mayor parte) protegidas, haciéndolas ilegibles desde el espacio de usuario y resultando accesibles únicamente cuando llegan al kernel. La existencia de estos mapeos acelera la transición de información hacia y desde el kernel, pero es una práctica que resulta insegura en presencia de esta vulnerabilidad Meltdown, ya que el contenido de toda la memoria física (que puede contener información sensible, como contraseñas pertenecientes a otros procesos o al kernel mismo) puede obtenerse entonces mediante al proceso descrito arriba empleando cualquier proceso sin autorización desde el espacio de usuario.

Según los investigadores, "todo procesador de Intel que implemente ejecución fuera de orden está potencialmente afectado, lo que significa efectivamente todos los procesadores de la marca comercializados desde 1995 (excepto el Intel Itanium y el Intel Atom de antes de 2013".[10]​ Intel respondió a las vulnerabilidades reportadas en la seguridad con un comunicado oficial.[32]

Se espera que la vulnerabilidad tenga impacto sobre los grandes proveedores de servicios de computación en la nube tales como Amazon Web Services (AWS) y la plataforma Google Cloud. Los proveedores de servicios en la nube permiten a los usuarios ejecutar programas en los mismos servidores físicos en los que podría estar alojada información sensible, y dependen de salvaguardas proporcionadas por la CPU para impedir accesos no autorizados a posiciones de memoria protegidas donde se guarda esa información, una sistema de seguridad que la vulnerabilidad Meltdown puede saltarse.

Uno de los descubridores de la vulnerabilidad informa de que las tecnologías de paravirtualización (Xen) y los contenedores tales como Docker, LXC y OpenVZ) también están afectados.[33]​ El informe apunta a que en entornos de virtualización pura, sería posible acceder al espacio de memoria del kernel de la máquina virtualizada desde el espacio de usuario de la misma máquina virtualizada, pero no al espacio del kernel de la máquina anfitrión.

Mitigación

La mitigación de esta vulnerabilidad requiere cambios en el código del kernel del sistema operativo, incluyendo un mayor aislamiento de la memoria del kernel respecto a los procesos del modo usuario. Los desarrolladores del núcleo Linux se han referido a esta medida como aislamiento de las tablas de páginas del kernel (KPTI, según las siglas en inglés). Los parches KPTI han sido desarrollados para el kernel Linux 4.15, y han sido liberados como backport para el kernel 4.14.11.[34][35]MacOS ha sido parcheado desde la versión 10.13.2 High Sierra.[36]Microsoft lanzó una actualización de emergencia para Windows 10, 8.1 y 7 SP1 para abordar la vulnerabilidad el 3 de enero de 2018,[37]​ y también para Windows Server.[38]​ Se sabe que estos parches causan conflictos con software antivirus de terceros que utilizan llamadas al núcleo no soportadas; los sistemas que ejecutan estos programas no recibirán la actualización hasta que el antivirus sea parcheado.[39]​ Red Hat publicó actualizaciones del kernel para sus distribuciones Red Hat Enterprise Linux versión 6[40]​ y versión 7.[41]CentOS también ha publicado ya sus actualizaciones del kernel para CentOS-6[42]​ y CentOS-7.[43]​.

Se ha indicado que la implantación de KPTI puede conllevar una reducción en el rendimiento de la CPU, que alcanzaría según algunos investigadores hasta un 30% dependiendo del uso, aunque Intel consideró este último extremo una exageración.[44]​ Se informó asimismo de que las generaciones de procesadores Intel que admiten identificadores de contexto de procesos (PCID), una característica introducida con Westmere[45]​ y disponible en todos los chips de la arquitectura Haswell en adelante, no eran tan susceptibles a las pérdidas de rendimiento con KPTI como las generaciones anteriores que carecen de ella.[46][47]

En declaraciones Intel dijo que "cualquier impacto en el rendimiento depende de la carga de trabajo y, para el usuario medio de PC, no debería ser significativo y se mitigará con el tiempo".[48]Phoronix comparó varios juegos de PC populares en un sistema Linux con la CPU Coffee Lake Core i7-8700K de Intel y parches KPTI instalados, y descubrió que cualquier impacto en el rendimiento era pequeño o inexistente.[16]​ En otras pruebas, incluyendo medidas de E/S sintéticas y bases datos como PostgreSQL y Redis, sí se encontró un impacto mensurable en el rendimiento.[49]

El 4 de enero de 2018, el blog de seguridad de Google proporcionó detalles adicionales sobre cómo se podría mitigar la vulnerabilidad de ejecución especulativa (Spectre) utilizando un conjunto de instrucciones x86 que supondría una sobrecarga insignificante para el procesador, en contraste con lo se había temido anteriormente.[50][51]

También se ha sugerido[52]​ que el coste de la mitigación puede aliviarse en procesadores que soporten la limpieza selectiva del translation lookaside buffer (TLB), una característica denominada identificador de contexto de proceso (PCID) en la arquitectura Intel 64, y número de espacio de dirección (ASN) en Alpha. Esto es porque la limpieza selectiva habilita el comportamiento translation lookaside buffer (TLB) que es crucial para la vulnerabilidad para aislarse entre procesos, sin estar constantemente limpiando el TLB al completo — la principal razón para el coste de la mitigación.

Se han reportado varios procedimientos para ayudar a proteger las computadoras personales y otros dispositivos relacionados contra las vulnerabilidades de seguridad "Meltdown" y "Spectre".[53][54][55][56]

Véase también

Referencias

  1. «About speculative execution vulnerabilities in ARM-based and Intel CPUs». 
  2. a b Ltd., Arm. «Arm Processor Security Update – Arm Developer». ARM Developer. 
  3. «Apple Confirms 'Meltdown' and 'Spectre' Vulnerabilities Impact All Macs and iOS Devices, Some Fixes Already Released». 
  4. «CERT: "Meltdown and Spectre” CPU Security Flaw Can Only Be Fixed by Hardware Replacement - WinBuzzer». January 4, 2018. 
  5. Error en la cita: Etiqueta <ref> no válida; no se ha definido el contenido de las referencias llamadas register
  6. «Industry Testing Shows Recently Released Security Updates Not Impacting Performance in Real-World Deployments». Intel newsroom. January 4, 2018. Consultado el January 5, 2018. 
  7. «KASLR is Dead: Long Live KASLR». 
  8. ESSoS 2017: Engineering Secure Software and Systems. 
  9. a b c d Lipp, Moritz; Schwarz, Michael; Gruss, Daniel; Prescher, Thomas; Haas, Werner; Mangard, Stefan; Kocher, Paul; Genkin, Daniel; Yarom, Yuval; Hamburg, Mike. «Meltdown» (PDF). Meltdown and Spectre. p. 8 sec. 5.1. Consultado el January 4, 2018. 
  10. a b «Meltdown and Spectre: Which systems are affected by Meltdown?». meltdownattack.com (en inglés). Consultado el January 3, 2018. 
  11. «Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign» (en inglés). Consultado el 5 de enero de 2018. 
  12. «Information Leak via speculative execution side channel attacks (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754 aka Spectre and Meltdown)». Ubuntu Wiki. Consultado el 4 de enero de 2018. 
  13. «A Critical Intel Flaw Breaks Basic Security for Most Computers». Wired. January 3, 2018. 
  14. Metz, Cade; Perlroth, Nicole (January 3, 2018). «Researchers Discover Two Major Flaws in the World's Computers». The New York Times (en inglés estadounidense). ISSN 0362-4331. Consultado el 3 de enero de 2018. 
  15. «Intel's processors have a security bug and the fix could slow down PCs». The Verge. Consultado el 3 de enero de 2018. 
  16. a b «Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work - Phoronix». www.phoronix.com (en inglés). Consultado el 3 de enero de 2018. 
  17. Gleixner, Thomas (January 3, 2018). «x86/cpu, x86/pti: Do not enable PTI on AMD processors». 
  18. Lendacky, Tom. «[tip:x86/pti] x86/cpu, x86/pti: Do not enable PTI on AMD processors». lkml.org. Consultado el 3 de enero de 2018. 
  19. «Patches arrive for Intel's ‘Meltdown’ flaw — here's how to protect your device». January 4, 2018. 
  20. «Intel responds to the CPU kernel bug, claiming its patches will make PCs 'immune'». 
  21. «Who's affected by computer chip security fla w». 
  22. «Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign». 
  23. Staff (2018). «Meltdown and Spectre-faq-systems-spectre». Graz University of Technology (en inglés). Consultado el 4 de enero de 2018. 
  24. Busvine, Douglas; Nellis, Stephen (January 3, 2018). «Security flaws put virtually all phones, computers at risk». Reuters. Thomson-Reuters. Consultado el 3 de enero de 2018. 
  25. «Today's CPU vulnerability: what you need to know». 
  26. Saad, Abdullah (January 3, 2018). «Google Pitches In On x86 Kernel Bug - 3 Variants, Intel & ARM Chips Mostly Affected, Near Zero Risk To AMD». 
  27. «Google: Almost All CPUs Since 1995 Vulnerable To "Meltdown" And "Spectre" Flaws». 
  28. «P6 family microarchitecture». www.jaist.ac.jp. 
  29. «Arm Processor Security Update». ARM Developer. ARM Ltd. January 3, 2018. Consultado el 5 de enero de 2018. 
  30. «Understanding Those Alarming Computer Chip Security Holes: 'Meltdown' and 'Spectre'». 
  31. «'Spectre' and 'Meltdown': New CPU vulnerabilities affect most smartphones and computers». January 4, 2018. 
  32. Staff (January 3, 2018). «Intel Responds To Security Research Findings». Intel. Consultado el January 4, 2018. 
  33. «Cyberus Technology Blog - Meltdown». blog.cyberus-technology.de (en inglés). Consultado el 5 de enero de 2018. 
  34. «KAISER: hiding the kernel from user space [LWN.net]». lwn.net. Consultado el 5 de enero de 2018. 
  35. «The current state of kernel page-table isolation [LWN.net]». lwn.net. Consultado el 5 de enero de 2018. 
  36. «Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign» (en inglés). Consultado el 5 de enero de 2018. 
  37. Plantilla:Citea web
  38. «https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution». support.microsoft.com. Consultado el 5 de enero de 2018. 
  39. «https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released». support.microsoft.com. Consultado el 5 de enero de 2018. 
  40. «Red Hat Customer Portal». access.redhat.com. Consultado el 5 de enero de 2018. 
  41. «Red Hat Customer Portal». access.redhat.com. Consultado el 5 de enero de 2018. 
  42. «[CentOS-announce] CESA-2018:0008 Important CentOS 6 kernel Security Update». CentOS announcements. January 4, 2018. Consultado el January 5, 2018. 
  43. «[CentOS-announce] CESA-2018:0007 Important CentOS 7 kernel Security Update». CentOS announcements. January 4, 2018. Consultado el January 5, 2018. 
  44. «Computer chip scare: What you need to know». BBC News (en inglés británico). 2018. Consultado el 5 de enero de 2018. 
  45. «Westmere Arrives». www.realworldtech.com (en inglés estadounidense). Consultado el 5 de enero de 2018. 
  46. «A Critical Intel Flaw Breaks Basic Security for Most Computers». Wired (en inglés estadounidense). Consultado el January 4, 2018. 
  47. «Intel CPU kernel bug FAQ: Fix for massive security flaw could slow down PCs and Macs». PCWorld (en inglés). Consultado el January 4, 2018. 
  48. «Intel says processor bug isn’t unique to its chips and performance issues are ‘workload-dependent’». The Verge. Consultado el 5 de enero de 2018. 
  49. «Initial Benchmarks Of The Performance Impact Resulting From Linux's x86 Security Changes - Phoronix». www.phoronix.com (en inglés). Consultado el 5 de enero de 2018. 
  50. «More details about mitigations for the CPU Speculative Execution issue». Google Online Security Blog (en inglés estadounidense). Consultado el 5 de enero de 2018. 
  51. «Google Says CPU Patches Cause 'Negligible Impact On Performance' With New 'Retpoline' Technique - Slashdot». tech.slashdot.org. 
  52. https://www.howtogeek.com/338269/a-huge-intel-security-hole-could-slow-down-your-pc-soon/.  Falta el |título= (ayuda)
  53. Metz, Cade; Chen, Brian X. (January 4, 2018). «What You Need to Do Because of Flaws in Computer Chips». The New York Times. Consultado el January 5, 2018. 
  54. Pressman, Aaron (January 5, 2018). «Why Your Web Browser May Be Most Vulnerable to Spectre and What to Do About It». Fortune (magazine). Consultado el January 5, 2018. 
  55. Chacos, Brad (January 4, 2018). «How to protect your PC from the major Meltdown and Spectre CPU flaws». PC World. Consultado el January 4, 2018. 
  56. Elliot, Matt (January 4, 2018). «Security - How to protect your PC against the Intel chip flaw - Here are the steps to take to keep your Windows laptop or PC safe from Meltdown and Spectre.». CNET. Consultado el January 4, 2018. 

Error en la cita: La etiqueta <ref> definida en las <references> con nombre «xa01» no se utiliza en el texto anterior.
Error en la cita: La etiqueta <ref> definida en las <references> con nombre «in01» no se utiliza en el texto anterior.

Error en la cita: La etiqueta <ref> definida en las <references> con nombre «fa01» no se utiliza en el texto anterior.

Enlaces externos