На пентесте 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 emanation | EM-пробник + предусилитель |
Первые два пункта - стандартный hardware пентест. Side-channel начинается там, где они не сработали. И вот что часто упускают в теоретических обзорах: без возможности подавать контролируемые plaintext/ciphertext классический DPA не работает. Это критическое предусловие.
Power analysis атака: SPA и дифференциальный анализ мощности
Power analysis - самый зрелый и документированный класс атак по сторонним каналам. Принцип завязан на физику CMOS-логики: ток потребления пропорционален количеству переключений транзисторов. Операция
XOR 0xFF переключает больше битов, чем XOR 0x00, - и разница видна на осциллограмме.SPA: простой анализ мощности
Simple Power Analysis работает, когда криптоалгоритм содержит условные переходы, зависящие от битов ключа, с визуально различимым паттерном потребления.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Дифференциальный анализ мощности (DPA)
DPA атака - статистический подход. Вместо визуального анализа одного трейса собираются тысячи трейсов шифрования с разными входными данными, затем вычисляется корреляция между гипотезой о ключе и реальным потреблением.Алгоритм DPA для AES-128, описанный Полом Кохером в работе "Introduction to Differential Power Analysis" и детализированный Rambus:
- Подать N plaintext'ов на вход шифратора (N = 5 000–50 000 в зависимости от уровня шума)
- Записать трейс потребления для каждого plaintext'а - получается двумерный массив S[N][samples]
- Для каждого из 256 вариантов одного байта ключа: вычислить выход S-box, построить модель потребления (Hamming weight выхода S-box), посчитать корреляцию Пирсона с реальными трейсами
- Байт с максимальной корреляцией - правильный
- Повторить для всех 16 байт AES-128
Ключевой фрагмент анализа на 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())
Работает если: контролируется 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 до сетевых сервисов
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: непривилегированный пользователь атакует криптопроцесс
[Применимо: внутренний пентест, 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
- Работает даже при наличии фильтров и стабилизаторов на линии питания
Работает если: физическое расстояние до чипа < 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, ~50 | ChipWhisperer-Husky, ~550 |
| Осциллограф | PicoScope 2208B MSO, ~600 | PicoScope 3206D MSO или 3000E-серия, ~1 500 |
| EM-пробник | DIY из коаксиала, ~5 | Langer RF-U 5-2, ~300 |
| Предусилитель | Mini-Circuits ZFL-500LN, ~100 | Langer PA 303, ~250 |
| Целевая плата | STM32F303 Nucleo, ~15 | CW308 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-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:
- Masking - промежуточные значения XOR'ятся со случайной маской, нейтрализует DPA первого порядка
- Shuffling - порядок обращений к S-box рандомизирован, снижает корреляцию
- Constant-time - все ветвления не зависят от секрета, нейтрализует timing и SPA
- Noise injection - случайные задержки и фиктивные операции, увеличивает необходимое число трейсов
- Dual-rail logic - каждый бит представлен двумя проводниками, потребление постоянно
Для атак на смарт-карты с сертификацией применяется отдельный подход - 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 дают почувствовать корреляционный анализ без покупки осциллографа.
Последнее редактирование модератором: