Power Analysis

Атаки по сторонним каналам без осциллографа: Power Analysis в браузере

Забудь про шунтирующий резистор, дифференциальный пробник и ChipWhisperer за 300 баксов. Современный power analysis всё чаще делают без единого физического датчика — прямо из вкладки Chrome, через JavaScript. Разбираем, как это работает и почему это не фантастика.

Почему осциллограф больше не обязателен

Классическая SPA/DPA-схема — воткнуть резистор в цепь питания и снимать напряжение осциллографом, пока чип шифрует данные. Это работает для смарткарт и микроконтроллеров, но требует физического доступа к железу.

Софтверные атаки идут другим путём: они эксплуатируют программные интерфейсы, которые случайно коррелируют с реальным энергопотреблением. Вместо пробника — счётчик, регистр или даже сенсор акселерометра, доступный без единого привилегированного вызова

Три главных класса таких «прокси-каналов»:

  • Аппаратные счётчики энергии (Intel RAPL) — читаются в user-space без прав root.
  • DVFS/тротлинг частоты — частота проца меняется в зависимости от данных, а время выполнения меняется вместе с частотой.
  • Сенсоры и API — Battery Status API, гироскоп, магнитометр телефона паразитно чувствуют потребление тока.

PLATYPUS: RAPL как утечка из user-space

PLATYPUS (2021) показал, что интерфейс Intel RAPL, который выдаёт значения, напрямую коррелирующие с энергопотреблением CPU/DRAM, доступен обычному непривилегированному процессу через /sys/class/powercap в Linux или через MSR. Атакующий гоняет жертву (например, SGX-энклаву, шифрующую AES) и параллельно читает RAPL — получается низкоразрешённый, но статистически достаточный power trace для восстановления ключа методами, похожими на классическую DPA.

Из браузера RAPL напрямую не читается — но это база для понимания следующего пункта: если утечка есть в OS, её можно «поднять» в браузер через побочные эффекты, вроде задержек рендеринга.

Hertzbleed и Hot Pixels: частота как побочный канал

Hertzbleed доказал, что DVFS (динамическое масштабирование частоты) — это не просто «тише работает — меньше жрёт», а утечка данных: одни и те же вычисления с разными операндами дают разную частоту throttling, и это видно даже по времени выполнения через Date.now().

Дальше пошли ещё жёстче — Hot Pixels (USENIX Security 2023) показали JavaScript-атаку прямо из браузера: рисуя SVG-фильтры над кросс-ориджин iframe, скрипт заставляет CPU/GPU менять частоту в зависимости от цвета пикселя под курсором, а затем вычисляет цвет чужого пикселя, просто измеряя микро-задержки таймером внутри вкладки. Ни оскилла, ни RAPL, ни установленного приложения — чистый веб-код.

Схематично логика PoC (без деталей эксплуатации, чтобы не давать готовый эксплойт-килл-чейн):

Идея простая: если операция чувствительна к данным жертвы, время её выполнения (из-за throttling) выдаёт эти данные. Дальше — статистика, пороги, накопление трасс. Всё как в классической DPA, только вместо вольт — миллисекунды.

Battery API и малварь-батарея: power trace из телефона

Отдельная ветка — атаки через Battery Status API. Исследование Lifshits et al. (PETS 2018) показало, что вредоносная батарея (или прошивка BMS) может сэмплировать реальный power trace устройства с частотой ~1 кГц и через JavaScript в браузере эксфильтровать данные наружу через управляемый software-visible charging state, который читается веб-страницей.

По этому power trace восстанавливали:

  • какие символы набирались на экране (по паттернам нагрузки при тапах);
  • историю посещённых сайтов в open-world постановке;
  • входящие звонки и даже условия съёмки фото по вспышке.

Позже (NDSS 2025) показали более общий класс: сенсоры Android (в частности геомагнитный ротационный вектор) паразитно чувствуют колебания энергопотребления и доступны без спецразрешений — атаку демонстрировали прямо из вкладки Chrome как удалённый вектор.

Как это применимо на практике и что с этим делать

Для пентестера/ресёрчера здесь три рабочих сценария:

  1. Website/app fingerprinting — по паттернам частоты/энергопотребления при загрузке страницы можно с высокой точностью угадать, какой сайт открыт, даже в изолированных контейнерах или Tor Browser (Hypnos демонстрировал fingerprinting Chrome через CPUIDLE).
  2. Пиксель-стилинг кросс-ориджин контента — Hot Pixels буквально ворует содержимое iframe без единой уязвимости в CSP, эксплуатируя только физику throttling.
  3. Скрытая эксфильтрация — Battery/RAPL-каналы дают ковёрт-channel даже в air-gapped или сильно ограниченных средах.

Митигации, которые реально работают на стороне защиты:

  • Джиттер и квантование таймеров — многие браузеры уже режут точность performance.now() до сотен микросекунд именно из-за таких атак.
  • Изоляция RAPL — Linux и Intel рекомендуют закрывать /sys/class/powercap от непривилегированных процессов.
  • Constant-time код и алгоритмическое маскирование данных при криптооперациях убирают саму корреляцию «данные → энергия/частота».
  • Для мобильных — ограничение частоты опроса сенсоров через permission-модель, а не оставлять их «по умолчанию открытыми».

Итог

Power analysis перестал быть привилегией лаборатории с ChipWhisperer — сегодня это full-stack дисциплина: от RAPL-регистров до SVG-фильтров в браузере. Если ты пишешь код, который обрабатывает секреты (ключи, пароли, приватные данные) и он крутится где угодно — от embedded до веб-воркера — считай таймингово-энергетический канал таким же реальным вектором, как SQL-инъекция. Just because there’s no oscilloscope on the table doesn’t mean nobody’s watching your watts.

Атаки по сторонним каналам без осциллографа: Power Analysis в браузере

На этом все. Всем хорошего дня!