Автор: Ehab Hussein
Введение
Эта статья не является ни пропагандой курения, ни вейпинга. Основная цель заметки – обход защиты в электронных сигаретах со встроенной защитой от возгорания с целью оценки перспектив удаленного использования девайсов подобного рода в качестве оружия посредством модификации прошивки при помощи вредоносной программы, которая ожидает подключения через USB или обнаруживает устройство через Bluetooth.
Рынок электронных сигарет продолжает расти. Согласно статистике, представленной компанией EuroMonitor, которая специализируется на исследовании рынков, количество людей, использующих вейпы, к 2021 году достигнет почти 55 миллионов. В этой статье мы рассмотрим различные способы использования отдельных компонентов и электронных сигарет в целом с целью инициация воспламенения и/или взрыва, что может повлиять на различные сферы нашей жизни самым непосредственным образом, как, например, индустрию гражданской авиации.
Рисунок 1: Динамика роста взрослого населения, использующего продукцию вейпинга (в миллионах)
Вейпинг 101:
Прежде, чем перейти к наведению хаоса, коротко рассмотрим компоненты, из которых состоит современный вейп. Существуют два основных типа вейпов: регулируемые и нерегулируемые.
У регулируемых (или коробочных) вейпов есть встроенные защиты против перегрева и продолжительного возгорания. Кроме того, доступна регулировка мощности.
Рисунок 2: Конструкция современного регулируемого вейпа
-
В коробочных вейпах наиболее часто используется батарея 18650 с литий-ионными элементами, являющаяся высокотоковой и с возможностью перезарядки.
-
Две кнопки используются для регулировки подводимой мощности к катушкам с целью нагревания или охлаждения.
-
В коробочных вейпах может быть одна или более батарей. При нажатии кнопки включения, батареи разряжаются, катушки нагреваются, после чего жидкость превращается в пар, вдыхаемый через капельный наконечник.
Рисунок 3: Конструкция механического вейпа
У нерегулирумых (или механических) вейпов отсутствует электрическая схема и, как следствие, защита от воспламенения. В этих устройства мощность от батарей поступает напрямую к катушке (которые сами по себе представляют опасность).
Рисунок 4: Одна из моделей механического вейпа в действии
Процедура включения вейпа выглядит так:
-
Нажимаем кнопку включения (зажигания).
-
Ток подходит к катушкам, после чего происходит нагрев.
-
Жидкость на ватном фитиле начинает испаряться.
1 – Проблема с батареями в вейпах
Большинство батарей находятся в металлическом корпусе внутри термоусадочной пленки с целью изоляции положительного и отрицательного полюса и предотвращения короткого замыкания, которое может привести к взрыву или воспламенению в зависимости от качества батареи.
Качественные аккумуляторы идут вместе с защитными клапанами и защитной пластиной, что обеспечивает довольно высокий уровень безопасности. При замыкании качественной батареи клапаны открываются, высвобождая давление, и, таким образом, взрыв предотвращается. Однако выделяющиеся химические вещества могут взаимодействовать, что способствует воспламенению. У низкокачественных батарей практически отсутствует защита, поскольку предохранительные клапаны не могут справиться с выпускаемым паром, вследствие чего давление нарастает и повышается вероятность взрыва.
Взрыв аккумулятора может произойти по нескольким причинам:
-
Нахождение во влажной среде с высокой температурой (превышающей 65˚C)
-
Чрезмерная зарядка, короткое замыкание, пробоины, нахождение рядом с огнем.
-
Перегрев.
-
Плохое обслуживание (например, повреждение термоусадочной пленки).
-
Использование подделок (клонов известных брендов).
-
Использование батарей для запитывания катушек с ненадлежащим номинальным сопротивлением.
Основная проблема, с которой сталкиваются пользователи вейпов, - повреждение термоусадочной пленки. Из-за постоянного вынимания и установки аккумулятора пленка начинает отслаиваться, и обнажаются положительные и отрицательные полюса, что в свою очередь может способствовать короткому замыканию при определенных условиях.
Рисунок 5: Батареи высокого и низкого качества
На рисунке выше батарея слева хорошо упакована в термоусадочную пленку. У батареи справа пленка отслоилась из-за постоянного использования (во время вынимания, зарядки и установки обратно в вейп).
Вейпы с подобными батареями можно легко пронести в самолет без каких-либо ограничений, что представляет собой серьезную опасность. При помощи батареи и монеты вы можете спровоцировать воспламенение или взрыв (в зависимости от качества батареи).
Рисунок 6: Пример воспламенения аккумулятора
На рисунке выше батарея с отслоившейся термоусадочной пленкой замыкается накоротко при помощи монеты.
2 – Отключение защит у вейпов с регулировкой
Чтобы регулируемый вейп превратился в оружие, вначале нам нужно наметить план действий с целью достижения наилучших результатов. Ниже приведен перечень вещей, которые нам необходимо реализовать:
-
Получить прошивку.
-
Выполнить следующие модификации в прошивке:
-
Отключить защиту от продолжительного воспламенения.
-
Отключить защиту, следящую за максимальной температурой.
-
Установить на максимум изначальную температуру и мощность.
-
Активировать зажигание без нажатия на кнопку.
-
Отключить другие защиты, которые могут срабатывать во время использования вейпа.
-
Если есть возможность, перепрограммировать устройство, загрузив обновленную прошивку.
Получить прошивку можно двумя способами: на сайте производителя (обычно в разделе с обновлениями программного обеспечения) или путем демонтажа устройства (поиском отладочных пинов JTAG/SWD с последующей выгрузкой прошивки).
Начнем с осмотра компонентов, из которых состоит вейп:
Рисунок 7: Регулируемый вейп использует ARM микроконтроллер cortex-m0 (Nuvoton NUC220LE3AN)
Рисунок 8: Микроконтроллер Nuvoton NUC220LE3AN
На печатной плате присутствуют следующие пины:
- G: VSS (Земля)
- V: VCC (Питание)
- D: DATA (Данные)
- C: CLOCK (Часы)
- R: RESET (Сброс)
Рисунок 9: Программатор / отладчик Nu-Link Pro
Рисунок 10: Подключение программатора к вейпу
Для выгрузки прошивки выполняем следующие шаги:
-
Подключаем программатор NuLink-pro к чипу Nuvoton. Используем отладчик OpenOCD.
-
Цепляем отладчик gdb-multiarch к удаленной цели (multiarch поддерживает архитектуру arm), который будем использовать позже.
-
Подключаемся к OpenOCD при помощи Telnet к хосту localhost:4444 для выгрузки прошивки.
-
Проверяем выгруженный образ.
Рисунок 11: Процедура выгрузки прошивки
После выгрузки прошивки пришло время воспользоваться вашим любимым дизассемблером.
Рисунок 11: В микроконтроллерах ARM Cortex-M0 порядок байтов от младшего к старшему, архитектура ARMv6-M, используются Thumb-инструкции
Затем создайте сегменты в соответствии с документацией на микроконтроллер:
Совет: если у вас IDA-PRO 7.5 или BinaryNinja, можете воспользоваться плагинами с целью создания периферийных устройств чипа посредством загрузки SVD файла через соответствующий плагин.
- SVD файл представляет собой XML файл, включающий в себя описания и информацию о периферии чипа.
- SVD файлы можно скачать по ссылке https://developer.arm.com/tools-and-software/embedded/cmsis/cmsis-search и загрузить при помощи плагина в дизассемблер для автоматического создания всех сегментов/периферийных устройств.
Рисунок 13: Структура системной памяти чипа, используемая для создания сегментов
Или вы можете написать небольшой скрипт для создания сегментов.
Рисунок 14: Сегменты созданы
- Выровняйте таблица векторов прерываний: (используется 4-байтовое выравнивание)
-
Таблица векторов прерывания представляет собой структуру, содержащую обработчики исключений. При возникновении исключения вызывается соответствующая функция и выполняются инструкции. Каждое исключение в таблице векторов прерывания указывает на функцию. Например, если вы нажимаете кнопку на устройстве, срабатывает исключение. Затем ищется функция, связанная с исключением, в таблице векторов прерываний, и выполняются инструкции внутри найденной функции.
-
В таблице векторов прерываний есть исключение «вектор сброса» (reset vector). Этот адрес является точкой входа, где находятся первые инструкции, запускаемые микроконтроллером после сброса/старта/загрузки (обычно по смещению 0x4 от базового адреса прошивки).
-
На рисунках ниже показано выравнивание таблицы векторов прерываний.
Рисунок 15: https://developer.arm.com/documentation/dui0497/a/the-cortex-m0-processor/exception-model/vector-table?lang=en
Рисунок 16: Перед выравниванием таблицы векторов прерываний
Рисунок 17: После выравнивания таблицы векторов прерываний
Вектор сброса изначально указывает на адрес 0xd5, который на самом деле находится на один байт после реального адреса вектора сброса, поскольку перед переходом к адресу микроконтроллер проверяет, чему равен наименьший значащий бит (0 или 1). В зависимости от этого значения будут выполнятся либо инструкции Thumb (1), либо инструкции ARM (0). В нашем случае наименьший значащий бит равен 1, поскольку микроконтроллер ARM Cortex-M0 выполняет Thumb-инструкции. Если наименьший значащий бит равен 0, возникнет исключение, связанное с отказом в обслуживании, поскольку ARM-инструкции не поддерживаются. Чтобы узнать, какая ветвь будет выполняться, вы можете выполнить побитовую операцию над этим адресом. После получения адреса, перейдите к адресу вектора сброса, сконвертируйте в функцию и дайте дизассемблеру выполнить свою работу.
Рисунок 18: Вычисление реального адреса вектора сброса
Теперь мы готовы к поиску защит и модификации прошивки.
Рисунок 19: Общая блок-схема прошивки
Патч#1 Отключение проверки максимальной температуры
Эта защита не разрешает вейпу зажигаться, если температура устройства выше 75˚C (0x4b). Максимальную температуру можно увеличить до 255˚C (0xff) или отключить проверку вовсе.
Рисунок 20: Участок кода, отвечающий за проверку температуры вейпа (75˚C)
Патч#2 Установка изначальной мощности/температуры на максимум
Эти патчи позволяют установить максимальную мощность, подводимую к спиралям. На видео ниже можно заметить разницу между зажиганием при той же мощности (6.1) до и после модификации прошивки.
Рисунок 21: Участки кода прошивки до (слева) и после (справа) изменений
https://www.youtube.com/watch?v=8sZIb5yl8os&feature=emb_title
Патч#3 Отключение защиты от продолжительного воспламенения
Эта задача решается посредством отключения сброса значения на выходном пине в первоначальное состояние, которое в нашем случае было «0x0000FFFF» (см. патч#4).
Патч#4 Инициация зажигания без нажатия на кнопку
На видео ниже демонстрируется поведение устройства с модифицированной прошивкой, когда зажигание инициируется само по себе.
https://www.youtube.com/watch?v=MonzPoLcioY&feature=emb_title
В этом случае возникает реальная угроза, если вейп поддерживает беспроводное обновление прошивки (и такие модели существует). Злоумышленник может перепрограммировать устройство, находящееся в кармане пользователя через Bluetooth, после чего могут произойти крайне неприятные последствия.
Другие защиты:
- Мной были найдены другие защиты, которые можно отключить:
-
Проверка омического сопротивления спиралей.
-
Проверка батареи.
-
Проверка максимального количества затяжек.
-
Проверка распылителя.
-
Проверка нарушения защиты.
Рисунок 22: Проверка на предмет нарушения защиты
По результатам исследований внутреннего устройства вейпов с регулировкой я полагаю, что в некоторых случаях устройство может превратить в настоящее оружие. Злоумышленник может навести хаос, удаленно инициируя воспламенение или даже взрыв, поскольку прошивка никак не защищена и возможна модификация без каких-либо проблем. В итоге вейп превращается в нерегулируемый.
Сценарии угроз:
- Нет сомнений, что в ближайшем будущем появится вредоносное ПО (MalVape, vapeware), нацеленное на пользователей устройств, заряжаемых от ноутбука или поддерживающих обновления через Bluetooth. Вредонос сможет отслеживать подключения вейпов через USB/Bluetooth, модифицировать прошивку и перепрограммировать вейп, превращая устройство в опасное оружие.
- Вейпы, высокотоковые батареи и монеты разрешены в самолетах. Злоумышленник может спровоцировать воспламенение в туалете, бросив батарею с прикрепленной монетой в мусорное ведро с бумагой. То же самое относится к срабатыванию зажигания у самого вейпа.
- Вейпы могут быть запрограммированы на воспламенение в определенную дату и время (в случае поддержки настроек даты и времени).
Рекомендации:
- Прошивка вейпа должна быть подписана и зашифрована:
-
Подписанная прошивка гарантирует, что перепрограммирование доступно только производителю устройства.
-
Шифрование прошивки затрудняет реверс-инжиниринг. Хотя эта защита не является панацеей, но остановит большинство злоумышленников. Вейпы со слабой защитой могут стать источником серьезной угрозы.
-
Не заряжайте вейп от ноутбука. Используйте зарядные устройства.
-
Всегда проверяйте, что беспроводное соединение у вейпа отключено (в случае поддержки беспроводного обновления прошивки). Вообще, вейпы не должны поддерживать беспроводное подключение, поскольку в этом случае расширяются возможности для атаки.
-
Покупайте хорошо известные распылители и компоненты.
-
Всегда покупайте аутентичные батареи. Подделки известных производителей могут привести к несчастным случаям.
-
Всегда носите батареи в футляре.
Рисунок 24: Футляр для батареи
Ссылки
- The Definitive Guide to ARM Cortex -M0 and Cortex-M0+ Processors 2nd Edition by Joseph Yiu (Joseph writes the best ARM books I recommend reading his books)
- https://www.amazon.com/Definitive-Guide-Cortex-Cortex-M0-Processors/dp/0128032774
- Cortex-M0 Devices Generic User Guide
- https://developer.arm.com/documentation/dui0497/a/DUI0497A_cortex_m0_r0p0_generic_ug.pdf
- NuMicro NUC200/220 Series Technical Reference Manual
- https://www.nuvoton.com/resource-files/TRM_NUC200_220(AN)_Series_EN_V1.02.pdf
- Customized OpenOCD for Nuvoton devices
- https://github.com/OpenNuvoton/OpenOCD-Nuvoton
- CMSIS Search:
- https://developer.arm.com/tools-and-software/embedded/cmsis/cmsis-search