Статья Side-channel атаки на практике: power analysis, timing attacks и electromagnetic emanation для пентестера

Плата ChipWhisperer Lite на антистатическом коврике с электромагнитным зондом у микроконтроллера STM32. Дисплей светится зелёным, отображая прогресс DPA-атаки на AES-128.


На пентесте IoT-шлюза для промышленного вендора я убил двое суток на попытки вытащить прошивку через UART и JTAG - оба интерфейса залочены, OTP-биты выставлены, firmware зашифрована AES-128. Классический тупик. Единственным путём к ключу оказался дифференциальный анализ мощности: 50 000 трейсов с ChipWhisperer Lite, четыре часа захвата - и все 128 бит ключа восстановлены побайтово. Когда все программные и интерфейсные векторы закрыты, side-channel атаки из академической экзотики превращаются в рабочий инструмент. Других вариантов просто нет.
UART (Universal Asynchronous Receiver-Transmitter) — это аппаратный протокол связи, который передает и принимает последовательные данные между устройствами.
JTAG (Joint Test Action Group) — это отраслевой стандарт аппаратного интерфейса, используемый в основном для тестирования печатных плат, отладки встроенного программного обеспечения и программирования микросхем.

Место атак по сторонним каналам в цепочке hardware security пентеста​

Side-channel атаки занимают узкую, но незаменимую нишу в kill chain. Они включаются, когда физический доступ к устройству есть, а программные интерфейсы отладки заблокированы - JTAG fuse выставлен, SWD отключён, прошивка зашифрована и классический reverse engineering невозможен без ключа расшифровки. Типичные цели: извлечение криптографического ключа из Secure Element, TPM или обычного MCU с программной реализацией AES/RSA.
SWD - это аппаратный протокол отладки и программирования, который пришел на смену JTAG.

Бизнес-логика атаки прямолинейна: скомпрометированный ключ AES из secure boot позволяет расшифровать firmware, модифицировать её и подписать - после чего любое устройство серии принимает вредоносное обновление. Для IoT-вендора это катастрофа: уязвимость в одном экземпляре масштабируется на весь парк.

По MITRE ATT&CK side-channel пентест пересекается с несколькими тактиками. На этапе Reconnaissance собираются данные об аппаратной платформе - Hardware (T1592.001) и Firmware (T1592.003): без fingerprinting'а конкретного MCU и его криптореализации side-channel атака бессмысленна. На этапе Credential Access извлечённый ключ работает как credential для расшифровки firmware, подписи обновлений или аутентификации на backend-сервере - по аналогии с Password Cracking (T1110.002), только вместо перебора паролей тут статистический анализ физических утечек.

Когда применять side-channel: выбор вектора​

Прежде чем паять провода, нужен recon: определить MCU/SoC на плате по маркировке, понять какой криптоалгоритм и в каком режиме используется, оценить наличие аппаратных контрмер (masking, shuffling), проверить возможность контроля входных данных.

УсловиеРекомендуемый векторИнструмент
JTAG/SWD открытПрямой дамп памятиOpenOCD, J-Link
UART доступен, shell естьИзвлечение ключа из ФСminicom + binwalk
Интерфейсы залочены, plaintext контролируетсяPower Analysis (DPA)ChipWhisperer
Интерфейсы залочены, plaintext не контролируетсяSPA или EM-analysisОсциллограф + EM-пробник
Удалённый доступ, сетевой сервисTiming attackСкрипт на Python
Физический доступ, нельзя резать цепиEM emanationEM-пробник + предусилитель

Первые два пункта - стандартный hardware пентест. Side-channel начинается там, где они не сработали. И вот что часто упускают в теоретических обзорах: без возможности подавать контролируемые plaintext/ciphertext классический DPA не работает. Это критическое предусловие.

Power analysis атака: SPA и дифференциальный анализ мощности

1780453650939.webp

Power analysis - самый зрелый и документированный класс атак по сторонним каналам. Принцип завязан на физику CMOS-логики: ток потребления пропорционален количеству переключений транзисторов. Операция XOR 0xFF переключает больше битов, чем XOR 0x00, - и разница видна на осциллограмме.

SPA: простой анализ мощности​

Simple Power Analysis работает, когда криптоалгоритм содержит условные переходы, зависящие от битов ключа, с визуально различимым паттерном потребления.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Дифференциальный анализ мощности (DPA)​

DPA атака - статистический подход. Вместо визуального анализа одного трейса собираются тысячи трейсов шифрования с разными входными данными, затем вычисляется корреляция между гипотезой о ключе и реальным потреблением.

Алгоритм DPA для AES-128, описанный Полом Кохером в работе "Introduction to Differential Power Analysis" и детализированный Rambus:
  1. Подать N plaintext'ов на вход шифратора (N = 5 000–50 000 в зависимости от уровня шума)
  2. Записать трейс потребления для каждого plaintext'а - получается двумерный массив S[N][samples]
  3. Для каждого из 256 вариантов одного байта ключа: вычислить выход S-box, построить модель потребления (Hamming weight выхода S-box), посчитать корреляцию Пирсона с реальными трейсами
  4. Байт с максимальной корреляцией - правильный
  5. Повторить для всех 16 байт AES-128
По данным Rambus, DPA при достаточном количестве трейсов может изолировать переключение отдельного транзистора - даже в шумной системе, где криптографические вычисления составляют малую долю общего потребления. Чёрнокоробочная атака в чистом виде: не нужно знать внутреннюю архитектуру чипа.

Ключевой фрагмент анализа на ChipWhisperer (Python):
Python:
import chipwhisperer.analyzer as cwa
# Пример упрощён; точный API см. в tutorial PA_CPA_1 из chipwhisperer-jupyter
project = cwa.open_project("my_traces.cwp")
leak_model = cwa.leakage_models.sbox_output_hamming_weight
attack = cwa.cpa(project, leak_model)
results = attack.run()
key = bytes([g['guess'] for g in results.best_guesses()])
print("Recovered key:", key.hex())
На STM32F3 без контрмер 10 000 трейсов хватает для полного восстановления ключа AES-128. С masking первого порядка (STM32L4 с аппаратным AES-модулем) количество трейсов вырастает до 500 000+, что делает атаку непрактичной в рамках типичного пентест-engagement'а.

Работает если: контролируется plaintext или ciphertext, известен алгоритм (AES/DES), MCU без masking. Не работает если: masking 2-го порядка и выше, аппаратный крипто-модуль с сертификацией CC EAL5+, невозможно подавать контролируемые данные.

ЦельDPA эффективнаТрейсовКомментарий
AES на STM32F1/F3, ATmegaДа5 000–20 000Без контрмер
AES с masking 1-го порядкаЧастично100 000–500 000Нужна 2nd-order DPA
AES в HW-крипто (CC EAL4+)Нет--Dual-rail logic, шум слишком высок
RSA без constant-timeДа (SPA)1–10Визуальный анализ одного трейса
ECC с рандомизацией координатНет--Projective randomization

Timing attack пентест: от embedded до сетевых сервисов​

1780454248948.webp

Timing attacks эксплуатируют разницу во времени выполнения операций, зависящую от секретных данных. Принципиальное отличие от power analysis: физический доступ не требуется - хватает сетевого.

Классический timing на уровне приложения​

Самый распространённый вектор - сравнение строк с ранним выходом. Если сервис сравнивает API-ключ или HMAC побайтово через memcmp и прекращает при первом несовпадении, каждый правильный байт увеличивает время ответа на наносекунды.

Практическая применимость зависит от дистанции до цели. На loopback разница в десятки наносекунд измеряема стабильно. В локальной сети - при 1 000+ измерений на байт статистика вытягивает сигнал из джиттера ~50 мкс. Через интернет - крайне редко: сетевой джиттер перекрывает полезный сигнал на порядки.

Из анализа КриптоПро: timing attack на реализацию Диффи-Хеллмана через схему Горнера позволяет определить вес секретного ключа (количество единичных битов). Для 512-битного ключа знание точного веса Хэмминга существенно сокращает пространство перебора - при весе ~496 остаётся порядка 2^78 вариантов вместо 2^512. Эффективная длина ключа падает на сотни бит. Неплохо для атаки, которая не требует паяльника.

Работает если: криптобиблиотека не использует constant-time реализации; доступны высокоточные измерения (nanosecond resolution); собрана достаточная статистика.
Не работает если: OpenSSL 3.x / BoringSSL / libsodium (constant-time by default); сетевой джиттер > 100 мкс при удалённой атаке.

[Применимо: внутренний пентест сетевых сервисов, аудит API, тестирование криптографических библиотек]

Cache timing attack и утечка информации по побочным каналам​

Cache-based side-channel атаки - Flush+Reload, Prime+Probe - отдельный подкласс, где атакующий и жертва делят физический CPU. Это вектор не для hardware пентеста, а для облачных и shared-сред.

Применимость:
  • Виртуализация и облако: атакующая VM на том же хосте (co-location attack)
  • Shared hosting: несколько tenant'ов на одном сервере
  • Privilege escalation: непривилегированный пользователь атакует криптопроцесс
Meltdown и Spectre (2018) подтвердили, что cache timing работает далеко за пределами embedded-мира - Meltdown (CVE-2017-5754, CVSS 5.6 Medium, CWE-200) затронул процессоры Intel x86, IBM POWER и ARM Cortex-A75, а Spectre v1/v2 - Intel, AMD и ARM. Отдельно стоит упомянуть Collide+Power - атака, которая бьёт по практически всем современным CPU. Meltdown закрыт через KPTI на Linux 4.15+; Spectre v2 (Branch Target Injection) - через retpoline/IBRS/IBPB. А вот Spectre v1 (Bounds Check Bypass) полностью на уровне ОС не закрывается - нужны митигации в самих приложениях (lfence, array_index_nospec). Новые варианты появляются регулярно, и это не тот зоопарк, который когда-нибудь закончится.

[Применимо: внутренний пентест, shared-инфраструктура, облачные среды с co-tenancy]

Electromagnetic emanation атака: перехват без физического контакта​

EM-analysis - бесконтактный аналог power analysis. Токи в проводниках на кристалле создают электромагнитное поле, которое ловится пробником без необходимости резать цепи питания.

Near-field EM vs TEMPEST​

Near-field (ближнее поле): пробник на расстоянии < λ/2π от чипа. Для частот 100–500 МГц это ~10–48 см. Здесь работают side-channel уязвимости встроенных систем с EM-пробниками типа Langer RF-U 5-2.

Far-field (дальнее поле, TEMPEST): перехват на расстоянии метров. Историческая часть тут любопытная. По рассекреченным документам NSA, ещё в 1943 году инженер Bell Labs обнаружил, что шифратор Bell 131-B2 излучает электромагнитные сигналы, коррелирующие с открытым текстом (NSA TEMPEST: A Signal Problem, рассекречено в 2007). В 1960-х британская MI5 анализировала излучения французского шифровального оборудования. В 1980-х советские спецслужбы, по имеющимся данным, ставили жучки в IBM Selectric для мониторинга электрического шума ударного механизма - характеристики сигналов позволяли определить нажатую клавишу. Ну и van Eck phreaking - мониторинг ЭМ-излучения монитора для просмотра информации до её шифрования. Холодная война, шпионские игры - но физика та же, что и сегодня.

Для пентестера актуален near-field. Три преимущества перед power analysis:
  • Не нужно резать цепь питания - полностью неинвазивно
  • Пространственная селективность - можно «прицелиться» в конкретный блок на кристалле, что даёт лучшее отношение сигнал/шум по сравнению с общесистемным power analysis
  • Работает даже при наличии фильтров и стабилизаторов на линии питания
Workflow идентичен DPA: захват трейсов, корреляционный анализ, побайтовое восстановление ключа. Сигнал зашумлённее - требуется в 2–5 раз больше трейсов для того же уровня корреляции.

Работает если: физическое расстояние до чипа < 5 см (near-field), нет металлического экранирования корпуса, в тракте стоит предусилитель 20+ дБ.
Не работает если: чип в полностью экранированном корпусе (Faraday cage), аппаратные контрмеры masking/shuffling, расстояние > 30 см без направленной антенны.

Сборка лаборатории для атак по сторонним каналам​

Требования к окружению​

ОС: Ubuntu 22.04 LTS (рекомендуется) или Windows 10+. macOS - ограниченная поддержка ChipWhisperer.
RAM: минимум 8 ГБ для наборов до 10 000 трейсов, рекомендуется 16 ГБ для DPA с 50 000+ трейсов.
Python: 3.9+ (рекомендуется 3.10+).
Режим работы: offline, интернет нужен только для установки пакетов.

КомпонентБюджетный (~USD)Рекомендуемый (~USD)
Плата захватаChipWhisperer-Nano, ~50ChipWhisperer-Husky, ~550
ОсциллографPicoScope 2208B MSO, ~600PicoScope 3206D MSO или 3000E-серия, ~1 500
EM-пробникDIY из коаксиала, ~5Langer RF-U 5-2, ~300
ПредусилительMini-Circuits ZFL-500LN, ~100Langer PA 303, ~250
Целевая платаSTM32F303 Nucleo, ~15CW308 target board, ~40
ПОChipWhisperer (open source)+ Riscure Inspector
Итого~770~2 640

Установка и первый запуск:
Bash:
pip install chipwhisperer
git clone https://github.com/newaetech/chipwhisperer-jupyter
cd chipwhisperer-jupyter && jupyter notebook
Репозиторий chipwhisperer-jupyter содержит готовые notebooks для SPA на RSA, CPA (корреляционный power analysis) на AES, fault injection - каждый с пошаговым разбором от подключения оборудования до восстановления ключа. Самый быстрый путь от нуля до первого извлечённого ключа.

Формула для старта: ChipWhisperer-Nano ($50) + STM32 Nucleo ($15) + бесплатные notebooks = минимальный стенд для DPA за $65 (без осциллографа и EM-пробника). Осциллограф на старте не обязателен - Nano имеет встроенный АЦП для захвата power traces.

Когда side-channel не работает: ограничения в реальных engagement'ах​

ФакторВлияниеКритичность
Нет физического доступаPower/EM невозможныБлокирующее для SCA
Неизвестный алгоритмDPA требует модели потребленияВысокая: нет модели - нет корреляции
Masking / shuffling на чипеТрейсов нужно в 100x большеСредняя: атака возможна, но непрактична
Ограниченное время физического доступа50 000 трейсов = часы работыЗависит от scope engagement'а
Экранирование корпусаEM-перехват невозможенБлокирующее для EM
Constant-time реализацииTiming attack нерелевантенБлокирующее для timing

Контрмеры, которые нужно уметь идентифицировать до начала SCA:
  1. Masking - промежуточные значения XOR'ятся со случайной маской, нейтрализует DPA первого порядка
  2. Shuffling - порядок обращений к S-box рандомизирован, снижает корреляцию
  3. Constant-time - все ветвления не зависят от секрета, нейтрализует timing и SPA
  4. Noise injection - случайные задержки и фиктивные операции, увеличивает необходимое число трейсов
  5. Dual-rail logic - каждый бит представлен двумя проводниками, потребление постоянно
Если чип имеет сертификацию Common Criteria EAL4+ и выше - с высокой вероятностью все перечисленные контрмеры реализованы. Атака через side-channel в рамках типичного engagement'а будет стоить несоизмеримо дорого по времени и оборудованию.

Для атак на смарт-карты с сертификацией применяется отдельный подход - template attacks. По данным Rambus, template attack использует «шаблонное» устройство, идентичное целевому, для построения детальной статистической модели, которая затем применяется к минимальному числу трейсов с целевого чипа. Один из немногих методов, работающих против masking - но требует наличия второго экземпляра устройства.

Заключение​

За пять лет работы с embedded-пентестом я пришёл к неудобному выводу: для большинства пентестеров, работающих вне hardware-специализации, side-channel атаки - это overhead без отдачи. Вложить $400 в оборудование, потратить неделю на настройку стенда и сбор трейсов - чтобы получить ключ из одного экземпляра устройства. В корпоративном пентесте ROI обычно не сходится.

Но три ниши, где это не курьёз, а основной инструмент: bug bounty по hardware (программы IoT-вендоров), аудит IoT-продуктов перед выходом на рынок и сертификация по Common Criteria.

Проблема русскоязычного рынка - разрыв между теоретическим пониманием (статьи-классификации без единой команды) и практикой. ChipWhisperer Nano стоит $50, tutorials - бесплатные Jupyter notebooks. Порог входа ниже, чем принято думать. Кто сейчас вложит время в DPA и EM-анализ, через два года окажется одним из десятка специалистов в RU-сегменте, способных проводить аудит side-channel устойчивости. Рынок IoT растёт, регуляторные требования ужесточаются - а людей, умеющих ломать криптографию через осциллограф, можно пересчитать по пальцам. Если интересно попробовать восстановить криптоключ из реального трейса - задачи по crypto на HackerLab.pro дают почувствовать корреляционный анализ без покупки осциллографа.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab