
Tabla de Contenidos
Con el avance de las arquitecturas de computadora, los procesadores modernos se han vuelto susceptibles a una amplia gama de ataques que explotan características de hardware de bajo nivel. Los canales microarquitectónicos —incluyendo canales laterales y encubiertos— han pasado de ser curiosidades teóricas a convertirse en amenazas de seguridad prácticas, permitiendo a atacantes filtrar información sensible sin activar las alarmas clásicas de seguridad.
Un caso de uso particularmente preocupante es la creación de canales encubiertos de alta capacidad, que pueden transmitir de manera confiable grandes cantidades de información secreta entre dos procesos coludidos, incluso a través de límites de proceso o de seguridad. Como se descubrió y analizó en Understanding and Improving High Capacity Covert Channels via Microarchitectural Channel Engineering (HPCA 2015) y en investigaciones subsecuentes, estos vectores de ataque tienen un impacto en el mundo real y demandan un escrutinio riguroso.
Este artículo explica los canales microarquitectónicos desde el nivel principiante hasta el avanzado, profundiza en cómo se diseñan los canales de alta capacidad, proporciona ejemplos de código para detección y medición, revisa las mitigaciones disponibles y detalla la importancia de este tema dentro de la ciberseguridad moderna.
Los canales microarquitectónicos surgen de la implementación física de la arquitectura de un procesador —la llamada "microarquitectura." Mientras la arquitectura describe qué hace el procesador (el conjunto de instrucciones), la microarquitectura describe cómo lo logra (pipelines, caches, buffers, tablas de predicción, etc.).
Los procesadores están diseñados para el rendimiento, no para el aislamiento de seguridad a nivel microarquitectónico. Los recursos compartidos llevan a variaciones en tiempo, disponibilidad o comportamiento observable por otros software, lo cual puede ser usado para filtrar secretos.
Idea Clave: Incluso si dos procesos no comparten memoria, pueden compartir hardware, permitiendo la comunicación.
Diferencia:
Los canales laterales filtran secretos involuntariamente; los canales encubiertos están construidos explícitamente para la comunicación entre conspiradores a través de límites de seguridad.
Los canales encubiertos modernos pueden ser diseñados para lograr fiabilidad y alta capacidad (ancho de banda), capaces de filtrar datos sustanciales en cortos periodos de tiempo. Vamos a desglosar cómo los atacantes logran esto.
Para que los canales encubiertos funcionen, son esenciales los recursos microarquitectónicos compartidos. Como se explica en AutoCC: Descubrimiento Automático de Canales Encubiertos en Procesadores Multiplexados por División de Tiempo (Princeton, 2023):
| Tipo de Recurso | Mecanismo de Ejemplo | Vector de Ataque |
|---|---|---|
| Caches | Caches de datos e instrucciones L1/L2/L3 | Prime+Probe, Flush+Reload |
| Predictores de rama | Tablas de historia de dirección, BTB, RSB | BranchShadowing |
| TLBs | Buffers de búsqueda de traducción compartidos | Ataques tipo TLBleed |
| Buses de memoria | Bancos de DRAM, buffers de fila | Canalización de filas de DRAM |
| Buffers de prefetching | Prefetchers de hardware, prefetching de víctima | Variantes de Spectre |
Un proceso emisor puede primar un set de cache (cargar direcciones específicas). El receptor, ejecutándose más tarde, verifica el tiempo de acceso a las mismas direcciones:
Descripción:
El emisor llena (primar) un set de cache. Si la sonda del receptor muestra lecturas lentas, infiere que el cache fue evicted entre sondas (indicando un bit específico).
Utilizado para:
Filtrar datos de entornos seguros o de sandbox (por ejemplo, JavaScript de navegador) a procesos no confiables.
Ancho de banda:
Dependiendo del hardware, cientos de kilobits por segundo son posibles como se muestra en HPCA 2015.
Descripción:
Depende de memoria compartida, como librerías de código mapeadas en la misma ubicación en múltiples procesos (por ejemplo, a través de librerías compartidas en Linux).
La detección es desafiante ya que las operaciones de los canales encubiertos imitan patrones de acceso a recursos benignos. Sin embargo, con una medición cuidadosa, los canales pueden ser descubiertos y caracterizados.
rdtsc en x86).Revisemos pasos prácticos para investigadores de seguridad.
hwloc, lscpu, dmidecode# Imprimir topología de cache y CPU
lscpu
hwloc-ls
dmidecode --type cache
import time
start = time.perf_counter_ns()
# Acceder a memoria/llamar función
end = time.perf_counter_ns()
print(f"Elapsed (ns): {end - start}")
Usar rdtsc para medir tiempos de acceso.
#include <stdio.h>
#include <x86intrin.h>
int main() {
volatile int data = 0;
unsigned long t1, t2;
int iterations = 1000;
for (int i = 0; i < iterations; i++) {
t1 = __rdtsc();
data += i; // Acceder a memoria
t2 = __rdtsc();
printf("%lu\n", t2 - t1); // Imprimir ciclos tomados para el acceso
}
return 0;
}
Supongamos que tienes un archivo timings.txt (del ejemplo anterior en C):
# Imprimir mínimo, máximo, promedio de tiempos
awk '{sum+=$1; if(min==""||$1<min) min=$1; if($1>max) max=$1} END {print "Min:", min, "Max:", max, "Avg:", sum/NR}' timings.txt
# Usando perf para monitorear eventos de cache (requiere root)
sudo perf stat -e cache-misses,cache-references -p <pid>
Como se discute en Prevención de Canales Encubiertos Microarquitectónicos en un SoC (Wistoff et al. 2020):
perf, analizadores estáticos y características de seguridad específicas del proveedor (por ejemplo, Intel CAT, AMD SEV).Los canales encubiertos microarquitectónicos representan una clase sofisticada y en constante evolución de vectores de amenaza en ciberseguridad. A medida que los atacantes desarrollan canales confiables y de alta capacidad aprovechando la compartición de recursos de hardware, los defensores deben combinar estrategias de hardware, OS y software para mitigar estos canales.
Comprender el cómo y por qué detrás de estas vulnerabilidades empodera a los practicantes para detectar, prevenir y minimizar el riesgo. Con investigaciones en curso, desde HPCA 2015 hasta herramientas como AutoCC y trabajos contemporáneos, la lucha entre atacantes y defensores continúa en los niveles más bajos de la computación.
Por [Tu Nombre], Investigador en Ciberseguridad — [Tu Sitio/Contacto]
Si encontraste este contenido valioso, imagina lo que podrías lograr con nuestro programa de capacitación élite integral de 47 semanas. Únete a más de 1.200 estudiantes que han transformado sus carreras con las técnicas de la Unidad 8200.