惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Все публикации подряд на Хабре

Ransomware: математический аппарат на службе зла Блеск и нищета SMM hh.ru Как не похоронить бизнес на старте: анатомия корпоративных конфликтов при учреждении ООО Как стиль общения может создавать карьерный тупик в ИТ Ответы с «деврел‑супервизии», вопрос восьмой: как держать веру команды и ЛПР, когда метрики шатаются Новинка: Прикладные API для искусственного интеллекта и Data Science Миграция с ingress-nginx: выбор нового контроллера Как мы «взломали» MasterSCADA4D: выкинули стандартные блоки и заставили SCADA работать на SVG Ожидание: сделать ИИ-примерочную обоев за 2 дня. Реальность: пришлось добучать свою модель на SD Как мы тестируем в Профи.ру: почему у нас нет пирамиды, зато есть ромб и матрица Об Open-source — спасителе человечества и kernel-сообществе пророке его… ТОП-10 сайтов мебельных магазинов: лучшие UX-решения и приемы юзабилити QSEAL: новый подход в резервном копировании средствами СХД Книга: «Windows Server 2022. Полное руководство по администрированию» Нейросети для работы с Excel: Выбираем ИИ для создания таблиц и написания формул Совместимость Test IT и RedOS: опыт автоматизации сборки, тестирования и сертификации RAG-Anything: Как собрать по-настоящему мультимодальный RAG Как я готовился к Certified Kubernetes Security Specialist (CKS) в 2026 году Я держал кафе 16 лет и кормил полгорода. Потом пришли зумеры и всё посыпалось Есть ли жизнь на фазе: откуда берёт энергию умный выключатель без подключённой нейтрали Go Computer. История удивительного планшета из 1992 года с графическим интерфейсом Экономия GPU-часов в 2,5 раза, уход ИИ в бэкенд и новые стандарты агентских систем: ML-дайджест Что скрывается за AI-стратегией SAP, Oracle и Palantir: зачем корпоративному ИИ семантическое ядро Почему RAG — фундамент любой AI-трансформации Персонализация как баг Одна на 9 команд: как я внедряла квартальное планирование в трайбе, который сопротивлялся переменам После ИИ писать код руками ощущается уже не как норма Языковые модели без машинного обучения Обмен через интернет между мобильными приложениями ТСД и 1С От плановых ремонтов к предиктивному обслуживанию: дорожная карта для главного инженера Параллельный импорт техники закрыли или нет? Юридический разбор Резервное электрообеспечение для ЦОДов: патенты в мире и в России 256 зелёных тестов на нерабочем коде. Так выглядит «услужливый клерк» внутри нейросети Бизнес-аналитика для сети из 300 аптек: прогноз продаж и другие показатели Impact Analysis в дизайн-системе: как мы сделали CI осмысленнее, а review понятнее Топ-5 лучших нейросетей 2026 года: полный список на любой случай в SpeShu.AI Что делает сотрудников по-настоящему эффективными: процессы, знания или технологии Как за один вечер я написал сервис инвентаризации оргтехники для филиальной сети из 16 локаций Склад нанимает — и не может остановиться. Дефицит складских работников в 2026 году: причины и решения Шёл за утечкой памяти, нашёл утечку диска: SXSSFWorkbook без dispose() в Apache POI Штраф в размере 155 000 рублей получил владелец сайта по заявлению Роскомнадзора Индивидуальный план развития: от формальной процедуры к инструменту управления экспертизой команды Как понять, что вы не управляете финансами, а просто смотрите на цифры Водоросли и микропластик Масштабирование LLM: от одного чипа до ЦОДа. Глава 3. Траснформеры Бомба замедленного действия взорвалась: эпоха ИИ «бери сколько унесёшь» закончилась Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 2 288-ядерный Xeon 6+ и другие серверные CPU От OCR к смыслу: как мы научили модель понимать, кто кому отец, мать, жених и свидетель Насколько плох был Intel iAPX 432 — проверяем на практике Приручаем железо: внедряем DevOps в промышленной разработке Когда Reality не хватает: добавляем Hysteria2 + Salamander в iOS-мессенджер, и как всегда грабли по дороге (ч.2) Разработчики не экстрасенсы: как мы перестали приносить туман вместо ТЗ Дайджест C++: новости, полезные материалы и “свой язык” на десерт Ещё один репозиторий моделей для Archi 10 простых шагов, чтобы создать позиционирование для продукта Загадочная поэма древнего Китая, работающая как компьютер CLOUD Act, GDPR и ваш DNS: что на самом деле может ваш провайдер Ускоряем и оптимизируем numpy, pandas, scipy и sklearn Idempotency keys: 5 граблей, которые мы поймали на проде Gamedev. Парсинг данных из Google Sheets и Excel в json без привлечения программистов Nano Banana Google AI: как использовать Нано Банана для генерации и редактирования изображений Два игрока на весь российский рынок ИИ: что показал ЦИПР-2026 Менеджер ресурсов ЯНДЕКС 360 (YANDEX 360) промокоды июнь 2026: промокод Yandex 360 скидка 40% на годовые тарифы Open-Source инструмент для автоматического перевода книг Ищу ранних тестировщиков для Android-версии agent harnesses Не используйте LLM для текста Увеличиваем продажи без слез аналитика Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена 45 лет тюрьмы за DROP TABLE и переход Карпатого в Anthropic Планирование движения для ровера на ходовой Ackerman'а Революция в изучении языков Java — быстрая. Ваш код может таким не быть Как я опоздал на конкурс OpenAi с новой архитектурой нейросети Быстрые интеграции в 1С: прощайте, бесконечные переделки Как получить субсидию 300 миллионов от Минпромторга? preIPO Anthropic, OpenAI, SpaceX. Разбираемся — стоит ли участвовать? Entaxy ION + OPC UA: два способа получить данные с промышленного оборудования Память на миллион, а толку ноль: как мы спасали ИИ-агента от «тупости» РСЯ, AdSense или myTarget: что на самом деле в 2026 приносит больше денег сайту и причем тут монетизаторы Практическое построение сервисов на Go под реальный трафик PostgreSQL и аналитика: что меняется, когда хранилище становится общим Codex за 5 месяцев 2026: мой топ-5 релизов, что не зашло и где OpenAI обогнал Anthropic Как создать короткое видео с помощью нейросетей: Полный гайд по Veo 3.1, Kling 3.0 и Happy Horse 1.0 Алгоритм проверок физлиц от экс сотрудника ФНС Как ИИ портит резюме студентам Системные вызовы в сфере ИТ в 2026: стратегический взгляд для ИТ-руководителей Вайбкодинг заканчивается на localhost: как я строю SaaS для цифровизации коттеджных поселков с Codex Производственные риски в небольшом кастомном производстве. С чем я сталкивалась и как научилась это учитывать Подключаем ИИ органы чувств: bash-демон, пайка и самосознание на Raspberry Pi Я хотел повторить Growing Neural CA за вечер. Ушёл месяц Промт для генерации текста без ИИ следа — как писать уникальные тексты через нейросеть От capabilities к AppArmor: что реально остановит атакующего в контейнере CactOS Вектора интересов: как находить настоящую мотивацию и усиливать команды Цена безопасности [Перевод] Цена безопасности “Рубик” от пет-проекта до прода или ITIL 4 для строительно-торговых центров Чего ждать (и не ждать) от ремейка AC4 Black Flag
Пишем универсальную глитч-машину
ecurep · 2026-05-27 · via Все публикации подряд на Хабре

Пишем универсальную глитч-машину

Уровень сложностиСредний

Время на прочтение6 мин

Охват и читатели1.5K

Кейс

Вы — всюду: некий призрак вещий,
Что встарь вставал из лунных мшин!
На всех путях, на каждой вещи —
Клеймо познанья, след машин.
В. Брюсов

Предпосылки

Voltage Glitching (также известный как Power Glitching или VCC Glitch) — это метод аппаратного взлома (класс Fault Injection, FI), при котором намеренно создаются кратковременные искажения (провалы/импульсы) в линии питания процессора.

Цель такой атаки — вызвать просчет в работе внутренней логики чипа на аппаратном уровне. Даже если прошивка или ОС запрещают чтение памяти программно, Voltage Glitching заставляет процессор физически ошибиться и выдать данные, которые он не должен выдавать.

Не очень давно мы уже публиковали статью, в которой решалась проблема с преодолением защиты от чтения на процессоре V850E2, используя данный метод. Уже тогда была написана небольшая программа для Raspberry Pi Pico, которая часто используется для этих задач в силу высокой частоты своего GPIO, ну и, конечно же, стоимости.

В данном эксперименте мы стали заниматься процессором Renesas RH850, подход к преодолению защиты которого отличается от того, что мы делали ранее, при этом хотелось написать что-то условно универсальное, что можно было бы использовать от проекта к проекту. К тому же схема, использованная для чтения процессора V850E2 содержала два устройства, одно из которых работало как USB2UART, а второе - занималось непосредственно glitch атакой.

Мы решили избавиться от USB2UART адаптера и перенести этот функционал также в Pico, таким образом схема упростится, и всё, что нам надо это: транзистор для управления питанием, Raspberry Pi Pico и скрипт на python, реализующий атаку и UART программатор в режиме загрузчика.

Реализация двух портов

Для того чтобы Pico работал как USB2UART устройство, получая команды от программатора, написанного на python, а также получал управляющие команды по другому serial интерфейсу, необходимо было создать двух-портовое устройство. Библиотека TinyUSB обеспечивает эмуляцию двух COM-портов через один USB-соединение, а аппаратный UART Pico используется для физического интерфейса с целевой системой.

Код создает два независимых CDC (Communication Device Class) порта через TinyUSB:

  • CDC0 (интерфейс 0) - “глитч-порт” для управления и команд

  • CDC1 (интерфейс 1) - “UART-мост” для передачи данных к целевому процессору

  • Скорость: настраиваемая (по умолчанию 9600 бод)

Архитектура “моста” между USB CDC и UART Ключевой принцип - создание двухстороннего моста:

  1. CDC1 → UART1: Данные от хоста (компьютера) через CDC1 передаются в целевой процессор через UART1

  2. UART1 → CDC1: Ответы от целевого процессора через UART1 передаются обратно хосту через CDC1

  • process_cdc0_command() - обрабатывает команды управления глитчем от CDC0

  • process_cdc1_data() - передает потоковые данные от CDC1 в UART1 с поддержкой триггеров

  • Скорость UART может меняться на лету через tud_cdc_line_coding_cb() при изменении настроек в хосте

  • Триггерные паттерны для UART позволяют детектировать специфичные последовательности байт

  • Буферизация предотвращает потерю данных при высоких скоростях

  • Использование tud_task() для обработки USB событий

  • Проверка доступности буферов перед записью (tud_cdc_n_write_available())

  • Ожидание готовности UART перед отправкой (uart_is_writable())

  • Прерывания для приема UART данных (on_uart1_rx())

Блок для испытаний

От теории - к практике, необходимо было проверить машину в действии.

Под рукой был блок SRS от VOLVO 32246116 с закрытым процессором R7F701330. Блоки достаточно старые, их все уже давно читают и пишут, поэтому было понятно, что проблем с ним не будет.

Штатная система питания ядра (1,2V) построена на основе импульсного стабилизатора с ШИМ-контроллером. В установившемся режиме он обеспечивает низкий уровень пульсаций благодаря замкнутому контуру обратной связи и высокочастотной фильтрации выходными конденсаторами.

Демонтаж сглаживающих конденсаторов приводит к довольно жёсткой “пиле”, которая сама порождает glitch, и приводит к сбою в работе процессора.

Voltage glitch

Для получения чистого, управляемого глитча предлагается полное шунтирование штатного контура питания. Напряжение 1,2V формируется низкошумящим линейным стабилизатором (LDO), включенным последовательно с нагрузкой. В разрыв цепи питания (или на путь GND) устанавливается высокоскоростной МОП-ключ (в наличии имелся IRLML2030). LDO обеспечивает низкое выходное сопротивление и мгновенное восстановление напряжения после спада, что позволяет формировать прямоугольные провалы питания с крутыми фронтами без эффекта «звона» и послесвечения, характерного для дросселей ШИМ.

В наличии имелся LDO LD3985M122R (фиксированный 1.22V).

Сначала попробовали разрыв. В принципе, рабочий (и более безопасный для схемы) вариант, однако есть ньюанс. После закрытия ключа напряжение на ядре падает до уровня ёмкостного делителя (0.6–0.7В) и далее разряжается очень медленно (током ядра). Резистор 10к на землю не помогает, так как разрядка происходит очень медленно, а glitch длится 1-2 микросекунды или менее.

glitchbreak

glitchbreak

Необходимо всё же “сажать” на землю. Это можно сделать двумя мосфетами:

Глитч с двумя мосфетами:

glitch2nmos

glitch2nmos

Но и один транзистор, который сажает на землю, при условии подачи питания от LD3985M122R, работает уж очень эффективно, и глитч, даже в 560нс настолько силён, что “валит” проц, не давая опомниться. Пришлось даже вернуть сглаживающий конденсатор. Хотя запас в 300МГц, до которых удалось разогнать Pico, все ещё позволял увеличивать делитель WIDTHS_DIVIDOR, определяющий какую долю микросекунды считать нашим “тиком”:

uint32_t t_delay = system_status.glitch_delay *
                     (sysclock / MICROSECOND_SCALE) / WIDTHS_DIVIDOR;
uint32_t t_width = system_status.glitch_width *
                     (sysclock / MICROSECOND_SCALE) / WIDTHS_DIVIDOR;

Очень соблазнительно выглядит вариант использования драйвера TC4427. В таком случае одним управляющим сигналом можно было бы как прерывать питание, так и ставить линию на землю.

Как выяснилось для разных вариантов нужен как обычный, так и инвертированный сигнал, в случае с двумя транзисторами (такой вариант тоже может быть нужен), и то, и другое. Поэтому прошивка была доработана и повяилось два вывода glitch (GP2, GP1).

Финальная схема для этого процессора была такой:

scheme

scheme

Триггерный паттерн

Так как флеш процессора закрыт на чтение (bitlock или 0x3F), то и “глитчить” необходимо именно команду чтения. Так как ответ от команды чтения об ошибке (код 0xDA) приходит через 11мкс, окно уязвимости очень невелико. Однако, как понять что сообщение уже послано?

window

window

Для этого передаём нашей машине триггерный паттерн, на который “заряжать” глитч. Поскольку весь трафик по UART идёт через наш второй UART интерфейс (CDC1), сделать это не так уж сложно. Однако, дьявол кроется в мелочах.

В частности, пришлось доработать прошивку pico чтобы убедиться, что байты уже отосланы. За это отвечает uart_tx_busy(). К тому же проверять все байты пакета зачастую не требуется, достаточно проверить часть байт, однако отсчёт необходимо вести от последнего байта, поэтому при установке паттерна, мы посылаем два значения: сам паттерн и реальную длину сообщения, на которое мы будем реагировать.

Использовение двух ядер

Так как в Pi Pico есть два ядра, логично процесс работы моста и работу glitch положить в разные ядра. Поэтому процедуру работы glitch запускаем посредстовм multicore_launch_core1().

Назначение пинов для работы с RH850

Пин Pico

Назначение

Описание

GP4

UART1_TX

Передача данных к процессору RH850 (через FTDI или напрямую)

GP5

UART1_RX

Прием данных от процессора RH850

GP6

RESET_PIN

Сброс процессора (активный низкий уровень)

GP3

TRIGGER_PIN

Вход триггера для запуска глитча (GPIO или UART)

GP2

GLITCH_PIN

Выход глитч-импульса

GP1

GLITCH_PIN

Инвертированный выход глитч-импульса

Создание скрипта для работы с UART Bootloader

Из открытых источников можно почерпнуть принципы работы протокола загрузчика похожего процессора и написать скрипт для выполнения основных команд на python. Затем вписываем в него обращения ко второму порту и получаем скрипт для глитчинга.

class RH850Command(IntEnum):
    CMD_INQUIRY = 0x00        # Запрос состояния
    CMD_ERASE = 0x12          # Стирание
    CMD_WRITE = 0x13          # Запись
    CMD_READ = 0x15           # Чтение
    CMD_DLM = 0x2C            # Проверка защиты
    CMD_FREQ = 0x32           # Установка частоты
    CMD_BAUDRATE = 0x34       # Установка скорости UART
    CMD_DEVTYPE = 0x38        # Получение типа устройства
    CMD_SIGNATURE = 0x3A      # Чтение Silicon Signature
...    

Команда 0x21 возвращает байт состояния защиты. Интерпретация:

  • 0x3F = “Read / Write Disable” (чтение и запись запрещены)

  • 0x7F = “Read Disable” (чтение запрещено)

  • 0xBF = “Write Disable” (запись запрещена)

  • 0x1F = “Erase Disable” (стирание запрещено)

Побочные эффекты

Глитчинг этих процессоров может иметь “побочные эффекты”. Например, один из процессоров имел защиту Serial Disable, при которой протокол по UART частично заблокирован (позволяет выполнить информационные команды). При попытке “прохождении” этой защиты, процессор полностью закрылся 0x1F.

Дальнейшие перспективы

Дальнейшие перспективы проекта - подключение триггера на протоколе JTAG. Этот протокол также часто встречается в различных процессорах, и было бы небезинтересно попробовать подключить глитч-атаку на команды этого протокола. Например, проверку DEBUG password (ADKP). Если получится доработать эту машину до такого состояния, будем писать продолжение этой статьи.

Где код

Обсуждение публикации кода для данных процессоров вызвала недовольство со стороны общественности, поэтому код пока не публикуется. Мы не считаем, что код данной машины представляет собой какую-то ценность, но и не желаем создавать ненужную “конкуренцию” коммерческим продуктам в этой сфере. Спасибо за понимание.