
Оглавление
Современные вычислительные системы часто содержат тесно интегрированные компоненты CPU и GPU с общими ресурсами памяти и микроархитектуры. Хотя такая интеграция дает огромные преимущества в производительности, она также несет значительные риски в виде побочных и скрытых каналов. Эти угрозы позволяют злоумышленникам извлекать информацию между компонентами, обходя традиционную изоляцию процессов.
Этот пост предлагает подробный технический обзор кросс-компонентных скрытых каналов на интегрированных процессорах, особенно фокусируясь на тех, которые используют общие микроархитектурные компоненты — кэши, предсказатели ветвлений и другие. Мы рассмотрим теоретические основы, реальную выполнимость, демонстрации кода и нынешние стратегии смягчения. Если вы начинающий специалист по безопасности или продвинутый исследователь, это руководство охватит модели угроз, практические PoC и лучшие практики защиты.
Скрытый канал - это путь передачи информации, который не предназначен для передачи данных. В вычислительной технике этот термин часто относится к сценариям, когда один процесс (отправитель или "высокий" процесс) намеренно передает информацию другому процессу (получателю или "низкому" процессу) способом, который запрещен политикой безопасности.
Скрытые каналы не ограничиваются сетевым трафиком. Многие из них существуют на более низких уровнях систем, включая каналы хранения (с использованием файлов, времени работы памяти и т.д.) и временные каналы (различия в доступности ресурсов).
Современные процессоры и GPU используют общие ресурсы для удобства:
Когда два процесса разделяют эти ресурсы, они могут передавать информацию, изменяя состояние или время работы общих аппаратных средств, даже когда прямая связь не допускается.
Самые известные скрытые каналы — это каналы на основе кэша:
Обе атаки используют совместное использование многоуровневых кэшей процессора, особенно кэша последнего уровня (LLC).
Современные процессоры используют предсказатели ветвлений, чтобы ускорить выполнение. Эти предсказатели общие между процессами и иногда между ядрами. Если отправитель обучает предсказатель, получатель может проверить и наблюдать изменения в предсказании, позволяя передачу данных.
См.: "Скрытые каналы через предсказатели ветвлений: исследование возможности".
Интегрированные системы процессоров-GPU разделяют DRAM, а иногда и более детализированные компоненты (например, LLC, системные шины). Это разделение ресурсов между компонентами открывает новые, почти неизученные, поверхности атак:
Академические исследования рассматривают атаки, где процессор и GPU или разные процессы, работающие на них, образуют скрытый канал через общие строки кэша или полосу пропускания памяти (Leaky Buddies).
clflush).Ключевой момент: Различия во времени раскрывают действия отправителя.
Используется в основном в настройках облака, где общем доступ к памяти может отсутствовать.
См. "Скрытые каналы через предсказатели ветвлений: исследование возможности" для демонстрации атаки.
Начнем с сбора информации о кэше процессора и предсказателе ветвлений.
# Список деталей кэша процессора
lscpu | grep -i cache
# Продвинутое: парсинг размеров кэша процессора напрямую
cat /proc/cpuinfo | grep -E 'cache size|model name'
# Список разделяемых библиотек, отобразившихся процессом
pidof firefox # Например
cat /proc/<pid>/maps | grep r-xp | grep 'lib'
# Python: Парсинг для поиска областей общих объектов
import os
pid = <your_pid>
with open(f"/proc/{pid}/maps") as f:
for line in f:
if 'lib' in line and 'r-xp' in line:
print(line.strip())
// gcc -O2 -o flush_reload flush_reload.c
#include <stdio.h>
#include <stdint.h>
#include <x86intrin.h>
uint64_t measure_access_time(volatile char *addr) {
uint64_t start = __rdtscp(&start);
*(volatile char *)addr;
uint64_t end = __rdtscp(&end);
return end - start;
}
int main() {
char *ptr = ...; // карта общих объектов
while (1) {
_mm_clflush(ptr); // Отправитель: или пропустить для Получателя
uint64_t t = measure_access_time(ptr);
printf("Время доступа: %lu\n", t);
}
}
import ctypes
import time
# Отображение общей библиотеки/файла, например, через mmap
libc = ctypes.CDLL("libc.so.6")
address = ctypes.c_void_p(...)
def measure_access_time(addr):
t1 = time.perf_counter_ns()
dummy = ctypes.c_char.from_address(addr.value)
val = dummy.value
t2 = time.perf_counter_ns()
return t2 - t1
while True:
t = measure_access_time(address)
print(f"Время доступа: {t}ns")
// Псевдокод для отправителя и получателя в атаке предсказания ветвлений
// Дата бит для передачи: 0 или 1
// Отправитель: "обучить" предсказатель ветвлений
if (bit_to_send == 1) {
for (int i = 0; i < 1000; i++) { if (cond) foo(); }
} else {
for (int i = 0; i < 1000; i++) { if (!cond) foo(); }
}
// Получатель: измерить время неверного предсказания ветвления
uint64_t t1 = rdtscp();
if (cond) foo();
uint64_t t2 = rdtscp();
uint64_t elapsed = t2 - t1;
if (elapsed > THRESHOLD) decode as bit 1 else 0;
Примечание: Нет ни одной идеальной защиты — компромиссы включают производительность/безопасность.
Эти атаки представляют собой надмножество побочных/скрытых каналов, использующих спекулятивное выполнение (Spectre, Meltdown) и другие временно выполняемые инструкции для утечки состояния через микроархитектурные каналы:
См. серию лекций "Побочные каналы и временное выполнение" для визуально-графического объяснения.
perf stat ...)# Мониторинг пропусков кэша и неверных предсказаний ветвлений
sudo perf stat -e cache-misses,branch-misses ./your_app
import psutil
# Мониторинг использования кэша и процессора каждым процессом во времени
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
print(proc.info)
Кросс-компонентные скрытые каналы подчеркивают критическую и постоянную угрозу в области микроархитектурной безопасности. По мере того как процессоры и GPU становятся более интегрированными, граница утечки секретных данных расширяется, включая общие кэши процессоров, сложные предсказатели ветвлений и кросс-ресурсы процессора-GPU.
Защита требует координированных усилий в аппаратуре, ОС и программном обеспечении — и всегда связана с затратами на производительность. Чем глубже атака, тем сложнее выбор.
Для исследователей продолжающееся перечисление, моделирование и смягчение новых техник кросс-компонентных скрытых каналов является непрерывным процессом. Для организаций важны моделирование угроз и осведомленность о ситуации.
Для последних исследований и раскрытия уязвимостей регулярно мониторьте доверенные академические сайты и уведомления CVE.
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.