
Современные встраиваемые устройства — от IoT-гаджетов до автомобильных контроллеров — основываются на сложных микроархитектурах, сочетающих производительность, эффективность и стоимость. С увеличением распространения этих устройств в критических приложениях, понимание и защита их микроархитектурных поведений от сложных атак становится первостепенным. Одним из самых тонких и разрушительных векторов атак являются атаки с внедрением ошибок, которые могут незаметно изменить поведение оборудования, захватить вычисления или раскрыть криптографические секреты.
В этом сообщении рассматриваются современные исследования по осознанию микроархитектурных событий и внедрению ошибок в встраиваемые системы в реальном времени, решения вроде MAFIA для обеспечения безопасности конвейеров, и нюансы моделей ошибок с учетом микроархитектуры. Мы рассмотрим практический мониторинг, применение в области безопасности и даже практический анализ с использованием Linux и скриптов.
Встраиваемые системы — это специализированные компьютеры, созданные для выполнения специальных функций, часто с жесткими ограничениями по времени, питанию и размеру. Они обеспечивают работу:
Угрозы: Хотя атаки на уровне программного обеспечения преобладают, физические и микроархитектурные уязвимости все чаще привлекают опытных злоумышленников, особенно на устройствах, обрабатывающих ценные данные или криптографию.
Внедрение ошибок — это хорошо зарекомендовавшая себя техника как в проверке оборудования, так и в кибербезопасности. В последнем случае оно составляет основу для современных аппаратных и программных атак.
Помимо значительных изменений логики, злоумышленники теперь нацелены на микроархитектуру — внутренний механизм процессоров, таких как конвейеры, кеши, TLB и сигналы управления. Успех здесь означает:
Мониторинг микроархитектурных событий имеет ключевое значение как для обнаружения вторжений, так и для внедрения ошибок. События дают представления о:
| Тип События | Описание | Импликации для Безопасности |
|---|---|---|
| Неправильные предсказания ветвлений | Неправильное выполнение спекулятивных ветвлений | Побочный канал для ключей, подмена управления |
| Промахи кеша | Доступы не в L1/L2, вызывают задержки/ошибки | Утечки времени, ошибки типа Rowhammer |
| Циклы задержек | Ожидание конвейером ресурсов/данных | Ошибки могут распространяться или усиливаться |
| Завершенные инструкции | Завершенные команды | Аномалии указывают на необычные потоки |
| Конкуренция за шину | Несколько мастеров добиваются доступа к памяти IO | Внедренные ошибки могут создавать/использовать истощение |
Точный, мониторинг в реальном времени позволяет обнаруживать, коррелировать и реагировать как на безвредные аномалии (например, интенсивные вычисления), так и на злонамеренные инциденты (например, поведение, вызванное сбоем).
Ссылка на статью: Осведомленность о микроархитектурных событиях в реальном времени встроенного инжектора ошибок
В ссылке на статью представлен инжектор ошибок в реальном времени, специально разработанный для:
Пусть есть криптографическое встроенное устройство: Инжектор ошибок может быть настроен на изменение конкретного контрольного бита только после, скажем, длительной серии неправильных предсказаний ветвлений, проверяя способность устройства обнаружить высоко спецализированные атаки или атаки, направленные на боковые каналы.
Логический Поток:
Обзор Архитектуры:
[Источник события] → [Монитор событий] → [Сопоставитель паттернов] → [Управление внедрением ошибок] → [Логгер событий/Хранилище]
Ссылка на статью: MAFIA - Защита микроархитектуры от атак с внедрением ошибок
Продвинутым защитникам нужно идти дальше обнаружения, переходя в предупреждение или смягчение непосредственно внутри самой микроархитектуры. MAFIA — это аппаратное решение, разработанное для:
Традиционная атака пропуска инструкций (где ошибка приводит к тому, что процессор игнорирует инструкцию безопасности) будет обнаружена и остановлена проверкой сигналов управления MAFIA, так как пропуск нарушит ожидаемые потоки сигналов и кодировки.
Ссылка на статью: Модели ошибок с учетом микроархитектуры: Экспериментальная оценка и последствия для безопасности
Традиционные "черные ящики" модели ошибок (например, случайные перевороты битов) значительно недооценивают тонкость и эффективность целенаправленных атак, осведомленных о микроархитектуре. Как показывают эксперименты:
Данный код:
if (user_is_admin) {
grant_access();
}
Злоумышленник, используя мониторинг микроархитектурных событий, выявляет период высокой нагрузки (неправильные предсказания ветвлений/занятый конвейер), и временно задаёт сбой для пропуска проверки grant_access.
Linux и многие современные встраиваемые платформы предоставляют аппаратные счётчики производительности, которые используются для обеспечения безопасности и диагностики.
# Наблюдение за всеми переходами и промахами кеша в течение 5 секунд для процесса с PID 1234
perf stat -e branches,branch-misses,cache-misses -p 1234 sleep 5
Пример вывода:
102,365 ветвлений
1,235 неправильных предсказаний ветвлений
20,570 промахов кеша
perf record -e cache-misses,branch-misses -a -- sleep 10
# Затем смотрите отчет с помощью:
perf report
Предположим, вы хотите извлечь только число промахов кеша из perf stat:
perf stat -e cache-misses -p 1234 sleep 2 2>&1 | grep "cache-misses"
Пример вывода:
12,345 промахов кеша
Дальнейший разборка с помощью Bash:
misses=$(perf stat -e cache-misses -p 1234 sleep 2 2>&1 | grep cache-misses | awk '{print $1}' | tr -d ',')
echo "Всего промахов кеша: $misses"
Давайте получяим данные о событиях в реальном времени (с использованием subprocess) и среагируем на аномальные всплески:
import subprocess
def get_cache_misses(pid):
cmd = ["perf", "stat", "-e", "cache-misses", "-p", str(pid), "sleep", "1"]
result = subprocess.run(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
# Perf выводит в stderr по умолчанию
for line in result.stderr.splitlines():
if "cache-misses" in line:
count = int(line.strip().split()[0].replace(',', ''))
return count
return 0
# Пример: Наблюдение и предупреждение, если пропуски > порог
PID = 1234 # Замените на реальный PID
WARNING_THRESHOLD = 10000
misses = get_cache_misses(PID)
if misses > WARNING_THRESHOLD:
print("АЛЯРМ: Обнаружено высокое количество пропусков кеша! ({})".format(misses))
else:
print("Норма: Промахи кеша = {}".format(misses))
Этот скрипт можно интегрировать в IDS системы встраивания/промышленной среды.
Вы можете расширить список событий (например, events = ['cache-misses', 'branch-misses']) и агрегировать значения или начать их логирование для выявления статистических аномалий.
perf с ARM-событиями.Мониторинг микроархитектурных событий и целевое внедрение ошибок находятся на грани исследований и практики в области безопасности встраиваемых систем. Обсуждаемые достижения повышают как возможности атакующих, так и сложность защитников. Решения такие как инжекторы ошибок, осведомленные о событиях, и внутрипоточная защита (например, MAFIA) дают возможность аудиторам безопасности и инженерам:
Выводы:
Осведомленность о микроархитектурных событиях в реальном времени встроенного инжектора ошибок
arXiv:2401.08397
MAFIA: Защита микроархитектуры от атак с внедрением ошибок
IEEE TCAD Paper
Модели ошибок с учетом микроархитектуры: Экспериментальная оценка и последствия для безопасности
IEEE Xplore
perf: Инструменты анализа производительности Linux
perf Wiki
ARM DS-5 Development Studio
Arm Developer
Этот блог-пост был оптимизирован для следующих ключевых слов: микроархитектурные события, внедрение ошибок, безопасность встраиваемых систем, модели с учетом микроархитектуры, целостность конвейера, мониторинг в реальном времени, встраиваемая кибербезопасность.
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.