Атаки по сторонним каналам без осциллографа: 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 (без деталей эксплуатации, чтобы не давать готовый эксплойт-килл-чейн):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Псевдокод идеи, лежащей в основе Hot Pixels / DVFS-таймингов async function sampleFrequencyProxy(durationMs) { const samples = []; let last = performance.now(); while (performance.now() - last < durationMs) { const t0 = performance.now(); // энергоёмкая операция-нагрузка (например, WASM SIMD цикл) burnCycles(1e5); const t1 = performance.now(); samples.push(t1 - t0); // время цикла ~ пропорционально частоте/энергии } return samples; } |
Идея простая: если операция чувствительна к данным жертвы, время её выполнения (из-за 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 как удалённый вектор.
Как это применимо на практике и что с этим делать
Для пентестера/ресёрчера здесь три рабочих сценария:
- Website/app fingerprinting — по паттернам частоты/энергопотребления при загрузке страницы можно с высокой точностью угадать, какой сайт открыт, даже в изолированных контейнерах или Tor Browser (Hypnos демонстрировал fingerprinting Chrome через CPUIDLE).
- Пиксель-стилинг кросс-ориджин контента — Hot Pixels буквально ворует содержимое iframe без единой уязвимости в CSP, эксплуатируя только физику throttling.
- Скрытая эксфильтрация — 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.

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