
Tabla de Contenidos
Los canales encubiertos microarquitectónicos son una preocupación crítica en la seguridad informática moderna. En su núcleo, estos canales explotan comportamientos sutiles de hardware para filtrar información entre límites de seguridad aislados, evadiendo las defensas tradicionales a nivel de sistema operativo y aplicaciones. Con la computación en la nube y los entornos multiinquilino convirtiéndose en la norma, la detección automática y mitigación de tales amenazas nunca ha sido más importante.
AutoCC es un marco innovador que automatiza el descubrimiento de estos canales de tiempo encubiertos, permitiendo a las partes interesadas tanto ofensivas como defensivas avanzar en su comprensión y protecciones. En esta guía, cubriremos la tecnología y la investigación detrás de AutoCC, repasaremos consejos prácticos de detección y explicaremos la importancia de los canales encubiertos microarquitectónicos en el panorama de amenazas actual.
En seguridad informática, un canal encubierto es una ruta de comunicación no intencionada que puede ser explotada para transferir información de una manera que viola las políticas de seguridad del sistema. A diferencia de los canales de banda lateral (que típicamente filtran datos a través de radiaciones no intencionadas u observaciones), los canales encubiertos se usan para transmitir información subrepticiamente entre agentes cooperantes, a menudo eludiendo los controles de acceso.
Características clave:
La microarquitectura se refiere a los detalles de implementación a nivel de hardware de una CPU diseñada para parecer invisible para el software mediante abstracción.
Los canales encubiertos microarquitectónicos explotan estas transiciones de estado de hardware, que son:
Cita de la investigación:
Los canales microarquitectónicos explotan los estados de hardware invisibles para la arquitectura del conjunto de instrucciones (ISA) para habilitar el flujo de información no autorizada.
La brecha entre las características de hardware (e.g., cachés, buffers, predictores de ramificación) y la vista abstracta proporcionada por la ISA abre oportunidades para canales encubiertos.
Los programas que comparten el mismo hardware pueden influir en el tiempo de ejecución o el comportamiento de los demás, incluso en ausencia de canales de comunicación directos.
Los canales de tiempo son los canales encubiertos microarquitectónicos más comunes. Operan mediante:
Recursos típicamente abusados:
A menudo surgen canales cuando dos procesos compiten por un recurso de hardware limitado (e.g., un conjunto de caché, cola de controladores de memoria).
Los canales encubiertos microarquitectónicos explotan cambios en la temporización de ejecución resultantes de acceso competido a recursos de hardware limitados.
Esta competencia causa diferencias de tiempo medibles que pueden codificar información encubierta.
La caché de la CPU, compartida a través de múltiples núcleos/hilos, es una mina de oro para la explotación de canales encubiertos.
Escenario:
Prime+Probe: Usa el acceso temporal para verificar si la línea de caché ha sido reemplazada.
Flush+Reload: Se basa en memoria compartida, más precisa que Prime+Probe.
# Pseudocódigo: Bucle Prime+Probe en Python (conceptual)
import time
CACHE_SET = 0xdeadbeef # Dirección simulada
def access_memory(addr):
# Simular acceso a una línea de caché
pass
def prime():
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
def probe():
start = time.perf_counter_ns()
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
end = time.perf_counter_ns()
return end - start
# El emisor prepara, espera, luego el receptor sondea y mide el acceso
Aunque no son canales encubiertos puros (a menudo clasificados como vulnerabilidades de canal lateral), estos ataques inspiraron un renovado interés en las filtraciones de información microarquitectónica al mostrar cómo la especulación y la ejecución fuera de orden pueden romper los límites de seguridad y filtrar secretos a través de cambios de estado microarquitectónicos.
Ataques estilo Spectre: Abusan de la ejecución especulativa para inyectar datos controlados por el atacante en estructuras microarquitectónicas, afectando la ejecución del código de la víctima de manera observable.
AutoCC significa Descubrimiento Automático de Canales Encubiertos en el Tiempo. Es un enfoque sistemático y herramienta desarrollada para encontrar automáticamente canales de tiempo encubiertos en recursos microarquitectónicos de CPU.
De Marcelo et al., MICRO 2023:
AutoCC:
Perspectiva Clave de la Investigación:
AutoCC encontró previamente canales no documentados y debilidades en CPUs populares, indicando la urgente necesidad de análisis automatizado y defensa.
AutoCC usa una mezcla de técnicas:
Con AutoCC, tanto atacantes como defensores obtienen:
Prevenir o mitigar los canales encubiertos es un desafío debido a su origen a nivel de hardware. Sin embargo, algunas estrategias de alto nivel incluyen:
Los sistemas operativos pueden ayudar mediante:
rdtsc o instrucciones similares.Los vendedores de hardware pueden:
Linux ofrece contadores de monitoreo de rendimiento a través de la herramienta perf, que puede usarse para detectar actividad microarquitectónica sospechosa o anomalías de rendimiento que podrían indicar el uso de un canal encubierto.
perf list
# Registrar fallos de caché y ciclos para el proceso con PID 1234
sudo perf stat -e cache-misses,cycles -p 1234
# Análisis de salida (ejemplo de salida)
# 1,234,567 cache-misses
# 23,456,789 cycles
Las aplicaciones que usan rdtsc o /dev/tsc pueden ser indicios de código de ataque basado en tiempo.
# Listar procesos que usan /dev/tsc o similares
lsof | grep '/dev/tsc'
# Encontrar binarios que referencian el opcode rdtsc (0f 31)
grep -rl -E $'\x0f\x31' /usr/bin /usr/local/bin
# Alternativa: Usar strace para monitorear llamadas a sistema relacionados con tiempo en un proceso sospechoso
strace -e trace=clock_gettime,gettimeofday -p <pid>
import subprocess
def monitor_perf(pid, duration=10):
cmd = [
'perf', 'stat', '-e', 'cache-misses,cycles',
'-p', str(pid), 'sleep', str(duration)
]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
return out.decode(), err.decode()
# Uso de ejemplo
out, err = monitor_perf(1234)
print("Salida de Perf:", out)
print("Errores de Perf:", err)
Para una automatización más profunda, se puede analizar la salida de perf para cambios sospechosos en las tasas de fallos de caché, posiblemente sugiriendo actividad de canal encubierto basado en caché activo.
import re
def parse_perf_output(perf_err):
cache_misses = re.search(r'([\d,]+)\s+cache-misses', perf_err)
cycles = re.search(r'([\d,]+)\s+cycles', perf_err)
return {
'cache_misses': int(cache_misses.group(1).replace(',', '')) if cache_misses else 0,
'cycles': int(cycles.group(1).replace(',', '')) if cycles else 0,
}
metrics = parse_perf_output(err)
print(f"Fallos de Caché: {metrics['cache_misses']}, Ciclos: {metrics['cycles']}")
Los canales encubiertos deben incluirse en los modelos de amenazas para:
Preguntas a considerar:
Los equipos rojos pueden desplegar herramientas estilo AutoCC para identificar métodos viables de exfiltración y simular ataques del mundo real.
Los equipos azules y analistas forenses pueden usar contadores de rendimiento, registros de trazas del SO y perfiles de comportamiento para buscar anomalías sintomáticas de actividad de canal encubierto.
Los canales encubiertos microarquitectónicos representan una de las amenazas más insidiosas en la seguridad del hardware hoy en día. Muy por debajo del nivel de las clásicas vulnerabilidades de red o aplicaciones, explotan los bloques de construcción mismos de la computación moderna para habilitar el flujo de información no autorizada entre usuarios y procesos aislados.
AutoCC y una investigación similar están impulsando el campo hacia adelante, proporcionando las herramientas y metodologías necesarias para descubrir y cerrar estos canales—antes de que los atacantes tengan la oportunidad de usarlos. A medida que tanto las CPUs como los defensores evolucionan, lo único constante es que debemos seguir buscando (y aprendiendo de) cada canal oculto que emerja.
Al integrar el monitoreo, análisis y modelado proactivo de amenazas en los procesos de seguridad, las organizaciones pueden adelantarse a este vector de amenaza sutil pero poderoso.
AutoCC: Automatic Discovery of Covert Channels in Time
Autores: Marcelo Santos, et al. MICRO 2023
Artículo completo (PDF)
Prevention of Microarchitectural Covert Channels on an Open-Source 64-bit RISC-V Processor
Autores: Wistoff et al.
Preimpresión en arXiv
Texto completo (PDF)
Documentación de Linux perf
https://perf.wiki.kernel.org/index.php/Main_Page
Manual de Referencia de Optimización Intel® 64 y Arquitecturas IA-32
https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html
Ataques Spectre y Meltdown
https://meltdownattack.com/
¿Interesado en guías más detalladas? ¡Suscríbete a nuestro boletín de noticias sobre ciberseguridad!
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.