# Ataque DMA

Un ataque DMA es un tipo de ataque de canal lateral en seguridad informática, en el cual un atacante puede penetrar una computadora u otro dispositivo, explotando la presencia de puertos de expansión de alta velocidad que permiten el acceso directo a memoria ("DMA").
DMA está incluido en varias conexiones, ya que permite que un dispositivo conectado (como una videocámara, tarjeta de red, dispositivo de almacenamiento u otro accesorio útil o tarjeta de PC interna) transfiera datos entre sí y la computadora a la máxima velocidad posible, mediante el uso de acceso directo a hardware para leer o escribir directamente en la memoria principal sin supervisión ni interacción del sistema operativo. Los usos legítimos de tales dispositivos han llevado a una amplia adopción de accesorios y conexiones de DMA, pero un atacante puede usar la misma facilidad para crear un accesorio que se conectará usando el mismo puerto, y luego puede obtener acceso directo a una parte o la totalidad del espacio de direcciones de memoria física de la computadora, evitando todos los mecanismos de seguridad del sistema operativo y cualquier pantalla de bloqueo, para leer todo lo que está haciendo la computadora, robar datos o claves criptográficas, instalar o ejecutar spyware y otros exploits, o modificar el sistema para permitir puertas traseras u otro malware.
La prevención de conexiones físicas a tales puertos evitará los ataques DMA. En muchas computadoras, las conexiones que implementan DMA también se pueden desactivar dentro del BIOS o UEFI si no se utilizan, lo que, dependiendo del dispositivo, puede anular o reducir el potencial de este tipo de exploits.
Algunos ejemplos de conexiones que pueden permitir DMA de alguna forma explotable incluyen FireWire, CardBus, ExpressCard, Thunderbolt, PCI y PCI Express.

## Descripción

En los sistemas operativos modernos, las aplicaciones que no pertenecen al sistema (es decir, el modo de usuario) no pueden acceder a ninguna ubicación de memoria no autorizada explícitamente por el controlador de memoria virtual (llamada Unidad de gestión de memoria (MMU)). Además de contener daños que pueden ser causados por fallas de software y permitir un uso más eficiente de la memoria física, esta arquitectura forma parte integral de la seguridad del sistema operativo. Sin embargo, los controladores en modo kernel, muchos dispositivos de hardware y las vulnerabilidades de modo de usuario permiten el acceso directo y sin obstáculos del espacio de direcciones de la memoria física. El espacio de direcciones físicas incluye toda la memoria principal del sistema, así como los buses y dispositivos de hardware mapeados en memoria (que son controlados por el sistema operativo a través de lecturas y escrituras como si fueran RAM normales).
La especificación OHCI 1394 (FireWire) permite a los dispositivos, por motivos de rendimiento, eludir el sistema operativo y acceder directamente a la memoria física sin restricciones de seguridad. Pero los dispositivos SBP2 pueden falsificarse fácilmente, lo que permite engañar a un sistema operativo para que permita a un atacante leer y escribir en la memoria física y, de ese modo, obtener acceso no autorizado a material criptográfico sensible en la memoria.
Los sistemas aún pueden ser vulnerables a un ataque DMA por un dispositivo externo si tienen un FireWire, ExpressCard, Thunderbolt u otro puerto de expansión que, como PCI y PCI Express en general, conecte los dispositivos conectados directamente al espacio de direcciones de memoria física en lugar de virtual. Por lo tanto, los sistemas que no tienen un puerto FireWire aún pueden ser vulnerables si tienen una tarjeta PCMCIA / CardBus / PC o un puerto ExpressCard que permitiría instalar una tarjeta de expansión con un FireWire.

## Usos

Un atacante podría, por ejemplo, usar un ataque de ingeniería social y enviar un "afortunado ganador" a un dispositivo Thunderbolt malicioso. Al conectarse a una computadora, el dispositivo, a través de DMA al espacio de direcciones físico, podría eludir casi todas las medidas de seguridad del sistema operativo y tener la capacidad de leer claves de cifrado, instalar malware o controlar otros dispositivos del sistema . El ataque también se puede ejecutar fácilmente donde el atacante tiene acceso físico a la computadora de destino.
Además de los usos nefastos antes mencionados, también hay algunos usos beneficiosos, ya que las funciones de DMA se pueden utilizar para la depuración del kernel.
Hay una herramienta especial llamada Inception para este ataque, que solo requiere una máquina con un puerto de expansión sospechoso para este ataque. Otra aplicación conocida por explotar esta vulnerabilidad para obtener acceso no autorizado a la ejecución de computadoras con Windows, Mac OS y Linux es el spyware FinFireWire.

## Mitigaciones

Los ataques de DMA pueden prevenirse mediante la seguridad física contra dispositivos potencialmente maliciosos.
Los controladores en modo Kernel tienen muchas facultades para comprometer la seguridad de un sistema, y se debe tener cuidado para cargar controladores confiables y libres de errores. Por ejemplo, las versiones recientes de Microsoft Windows requieren que los controladores sean probados y firmados digitalmente por Microsoft, y eviten que se instalen controladores no firmados.
IOMMU es una tecnología que aplica el concepto de memoria virtual a dichos buses del sistema, y puede usarse para cerrar esta vulnerabilidad de seguridad (así como para aumentar la estabilidad del sistema). Intel marca su IOMMU como VT-d. AMD lo llama AMD-Vi. Linux es compatible con estas IOMMU y puede usarlos para bloquear transacciones de E/S que no se han permitido. Sin embargo, las IOMMU se utilizan en su mayoría para dar acceso a máquinas virtuales invitadas al hardware host.
Los sistemas operativos más nuevos pueden tomar medidas para prevenir los ataques de DMA. Los kernels recientes de Linux incluyen la opción de desactivar DMA mediante dispositivos FireWire mientras permiten otras funciones. Windows 8.1 puede impedir el acceso a los puertos DMA de una máquina desatendida si la consola está bloqueada.
Nunca permitir que los datos confidenciales se almacenen en la memoria RAM sin cifrar es otro lugar de mitigación contra los ataques de DMA. Sin embargo, la protección contra la lectura del contenido de la RAM no es suficiente, ya que escribir en RAM a través de DMA puede comprometer el almacenamiento aparentemente seguro fuera de la RAM mediante la inyección de código. Un ejemplo del último tipo de ataque es TRESOR-HUNT, que expone claves criptográficas que nunca se almacenan en la RAM (pero solo en ciertos registros de la CPU); TRESOR-HUNT logra esto sobrescribiendo partes del sistema operativo.