Статьи

Android-устройства предоставляют различные механизмы защиты данных, поэтому решить проблему извлечения и дешифрования данных раз и навсегда для всех моделей невозможно. Тем не менее, в определенных случаях извлечение данных реально, иногда даже для широкого класса устройств. Но ключевым здесь является «в определенных случаях». Производители специализированного ПО порой делают громкие заявления, порождая ряд слухов о всемогуществе своих решений с использованием различных методов, например, EDL. Попробуем разобраться, что же такое EDL и как его можно использовать в мобильной криминалистике. 

Слышал, что есть какой-то режим EDL, через который можно извлекать физические дампы. Что это за режим?

Производителями SoC для мобильных устройств, как правило, предусмотрены специальные режимы, предназначенные для отладки/диагностики/восстановления. Компания Qualcomm, занимающая более 40% рынка мобильных устройств, не исключение. Для этих нужд в Qualcomm-устройствах предусмотрен специальный аварийный режим загрузки (Emergency Download Mode – EDL). В данном режиме, в частности, можно получить доступ к низкоуровневым функциям чтения/записи памяти. Это относится не только к ROM, но и к RAM.

Так я могу просто подключить телефон по USB и начать извлечение?

Нет, все не так просто. Сначала необходимо перевести устройство в режим EDL, и здесь нет единого подхода. Точнее, он есть, но слишком сложен для повседневного использования. А главное, зачастую есть более простые альтернативы. Для того, чтобы во всем разобраться, рассмотрим процесс загрузки Qualcomm-устройств, изображенный на рисунке. 

"

При подаче питания управление передается так называемому основному загрузчику (Primary Boot Loader – PBL), код которого содержится непосредственно в SoC. Затем PBL пытается загрузить и передать управление SBL 1 (Secondary Boot Loader). Если PBL по тем или иным причинам не может загрузить SBL 1, или выставлен специальный сигнал, то он переводит устройство в режим EDL. Выставить специальный сигнал можно посредством замыкания, так называемых, test points – специальных точек на плате устройства. Для этого придётся частично разобрать устройство. В ряде случаев перевести устройство в режим EDL можно специальной командой непосредственно из ОС Android или других режимов, таких как recovery, fastboot и т.д. После перевода устройства в режим EDL оно становится доступным в системе как COM-порт, через который и производится взаимодействие в режиме EDL. 

"

Звучит довольно сложно, однако не так сложно, как может показаться на первый взгляд. Давайте разберемся, как все же перевести устройство в режим EDL. 

Так как перевести устройство в режим EDL? Слышал, что есть какой-то волшебный кабель…

Часто в сети можно наткнуться на информацию о каком-то волшебном кабеле для переключения в режим EDL. Существует ли такой кабель? Кабель, конечно, существует, но он не волшебный. Дело в том, что в ряде случаев в SBL 1 предусмотрена специальная ветка кода, которая переводит устройство в режим EDL, если оно подключается по шине USB с замкнутыми контактами GND и D+, то есть черным и зеленым проводами. Для таких случаев есть специальный кабель с кнопкой, которая при нажатии замыкает контакты GND и D+.

"

Для перевода в режим EDL необходимо зажать кнопку и воткнуть кабель в выключенное устройство. Устройство переходит в режим EDL, затем кнопка отпускается, и кабель начинает работать как обычный USB-кабель. Если оставить контакты GND и D+ замкнутыми, то дальнейшее взаимодействие с устройством по USB по понятным причинам будет невозможно, поэтому-то замыкание контактов и реализовано в виде кнопки. 

"

Итак, с тем, что кабель существует, мы разобрались. Теперь посмотрим, насколько он волшебный. Как уже упоминалось выше, для того чтобы кабель сработал в SBL 1, должна быть специальная ветка кода, которая есть не всегда. До 2018 года она довольно часто присутствовала у многих производителей. В частности, все устройства Xiaomi можно было перевести в режим EDL таким способом. Производители таких кабелей даже часто называли их Xiaomi EDL cable. Однако, команда исследователей Aleph Security в своем блоге продемонстрировала, что это является серьезной уязвимостью в безопасности для устройств Nokia 5/6, и в более свежих прошивках Nokia 5/6 убрали возможность перевода в режим EDL посредством специального кабеля. После этого ряд других производителей также задумался над безопасностью своих устройств и убрал из кода SBL 1 соответствующую ветку кода. Таким образом, кабель работает только на старых Qualcomm-устройствах, и даже если в сети есть информация о том, что некое устройство переводится в режим EDL специальным кабелем, это может быть не актуально для свежих версий программного обеспечения. 

Хорошо, что использование специального кабеля — далеко не единственный метод перевода устройства в режим EDL. Как упоминалось, есть несколько альтернатив. Начнем с наиболее простых. 

Я могу переключить устройство в EDL командой adb?

Да, некоторые устройства можно перевести в режим EDL специальной adb командой «adb reboot edl» или fastboot командой «fastboot oem edl». По универсальности ситуация схожая с подходом со специальным кабелем. Данный метод перевода в режим EDL был признан уязвимостью CVE-2017-13174 для устройств Nexus 6/6P и перестал работать на устройствах с обновлением от декабря 2017 и выше. С этого момента большинство производителей также убрали возможность переводить устройство в режим EDL посредством специальной adb/fastboot команды. 

Наверняка можно перейти в EDL какими-нибудь кнопками?

Иногда производители устройств предусматривают специальные режимы, через которые можно переключиться в EDL. Например, на ряде устройств китайской компании ZTE есть специальный FTM режим (Factory Test Mode), попасть в который можно, зажав кнопку питания и кнопку «громкость вниз». В FTM режиме становится доступным взаимодействие с устройством по adb, и можно выполнить команду «adb reboot edl». Если возможность перевода в режим EDL посредством adb команды убрали из обычного режима работы Android-устройства, это не значит, что она не сработает из специального режима. Такие режимы есть не у всех производителей, и не все они позволяют перевести устройство в EDL. 

"

Для перевода некоторых устройств в режим EDL достаточно просто зажать определенную кнопку и подключить устройство по USB. В частности, для перевода OnePlus1/X/2/3/3T/5 с версией ПО OxygenOS 5.0 и ниже было достаточно подключить выключенное устройство по USB с зажатой кнопкой громкости вниз. Этот метод также не особо универсальный, но зато крайне простой в реализации. На многих кнопочных Qualcomm-телефонах для перевода в режим EDL достаточно зажать кнопку «*» и подключить устройство по USB. Такой метод работает на многих KaiOS Qualcomm-устройствах, в частности, на Jio Phone 1. 

Если эти методы не подошли, то я готов разобрать телефон. Что делать дальше?

Перейдем к рассмотрению более сложных, но и более универсальных методов. На многих Qualcomm-устройствах на плату выведены специальные точки test points. Если на выключенном устройстве замкнуть test points и подключить его по USB, то оно переключится в режим EDL. После подключения устройства test points необходимо разомкнуть. 

"

Какие именно точки на плате являются test points, часто можно найти в нашем фотобанке контактных точек Qualcomm-устройств или в интернете по ключевым словам: <название устройства>; testpoints, testpoint, 9008, EDL. 

Если не удалось найти расположение test points ни в нашем фотобанке, ни в интернете, то можно попробовать найти их опробованием похожих на них точек. При таком поиске test points следует замыкать контакты через резистор 75-100 Ом, чтобы уменьшить риск повреждения устройства. Стоит отметить, что иногда test points— это не две точки на плате устройства, а одна, которую необходимо замкнуть на землю (GND).

Должен же быть мега-подход?

Самым универсальным и самым трудоемким методом является замыкание контактов eMMC. Если замкнуть на землю один из следующих контактов eMMC–CMD, D0 или CLK, то устройство не сможет нормально загрузиться и перейдет в режим EDL. В отличии от test points, эти контакты всегда можно найти на плате устройства. К сожалению, зачастую довольно трудно до них добраться: часто они скрыты под защитным металлическим коробом.

"

Могу ли я убить устройство во время перевода?

Все описанные ранее методы перевода в режим EDL с помощью специального кабеля, режима или команды абсолютно безопасны и не могут убить устройство. Единственное —необходимо быть аккуратным при замыкании контактов и поиске test points. Тут уже есть небольшой риск, но при соблюдении всех мер предосторожности он невелик. Причем, самые опасные манипуляции связаны даже не с замыканием контактов, а с отклеиванием задней крышки и снятии металлического короба. Тут стоит отметить, что на многих устройствах нужные точки доступны без них. 

Есть еще один метод перевода устройства в режим EDL, но он переводит устройство в неработоспособное состояние. Таким образом, перед его использованием необходимо удостовериться в возможности вернуть устройство в исходное состояние. Непосредственно способ довольно прост – очистить/повредить раздел SBL 1. Сделать это можно, например, fastboot командой «fastboot erase sbl 1». После данной процедуры устройство не сможет нормально загружаться и при подключении по USB будет переходить в режим EDL. Для восстановления исходного состояния будет необходимо прошить в устройство корректный раздел SBL 1. Сделать это через режим fastboot не получится, т.к. устройство не сможет в него загрузиться. При наличии исходного SBL 1 его можно будет прошить через режим EDL, но для этого будет необходимо также иметь специальный prog firehose файл (далее в тексте – программер, как принятый в русскоязычной среде термин) для данной модели устройства. 

"

Наилучший метод для конкретного устройства не всегда известен заранее, поэтому рекомендуется сначала пробовать самые простые, и если ни один из них не сработает, двигаться к более сложным, но зато более универсальным. На сохранности данных перебор методов никак не скажется. 

Я перевел устройство в режим EDL, теперь могу начать извлечение? 

Нет. После перевода устройства в режим EDL необходимо загрузить в устройство специальный программер. Дело в том, что EDL реализован в основном загрузчике (PBL), код которого содержится непосредственно в SoC. Так как объем данного кода существенно ограничен, в нем реализован небольшой загрузчик, который позволяет по протоколу Sahara загрузить в устройство программер. Непосредственно функции чтения/записи реализованы именно в программере. Таким образом, только после загрузки в оперативную память устройства программера можно будет начать извлечение данных по протоколу Firehose.

Большинство устройств на Qualcomm проверяют электронную подпись программера. Поэтому взять файл от другого устройства (даже с таким же процессором) не получится. Да и производители не спешат делиться этими файлами со всем миром. Специалистами «Оксиджен Софтвер» было найдено в Сети порядка 500 таких файлов под различные Qualcomm-устройства.  

"

Для каких-то устройств найти эти файлы проще, для каких-то сложнее. В частности, программеры есть почти под все Xiaomi-устройства. У компании Xiaomi есть официальная утилита Mi Flash Tool, которая позволяет восстанавливать устройства через режим EDL. Из данной утилиты можно достать программеры для Xiaomi-устройств. Но далеко не для всех устройств можно найти программеры. Например, нам пока не встречались программеры для смартфонов Sony. Компания Sony реализовала свой альтернативный протокол для восстановления своих устройств. У компании Samsung также есть свой протокол для восстановления своих устройств, тем не менее, в сеть просочились программеры для устройств Galaxy S7,S8.

Я нашел программер для модели Х. Это может помочь?

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

Так, значит, все криминалистические продукты умеют одно и то же? И разница только в наборе этих программеров?

Вовсе нет. В большинстве случаев, если производитель ПО заявляет, что оно поддерживает работу с EDL, это означает, что ПО умеет загружать в устройство подписанный для этой модели программер и использовать его команды для извлечения физического дампа. Однако это решение только части проблем. Проблемы извлечения дампов из устройств без наличия подходящего программера и дешифрования дампа в этих продуктах не решены.

Что делать, если нет программера? 

В некоторых SoC Qualcomm допущена критическая уязвимость в PBL, которая позволяет загрузить в устройство неподписанный программер. Так как уязвимость содержится в PBL, её невозможно исправить обновлением ПО. Уязвимость исправлена только в свежих SoC. На основании этой уязвимости в ПО «Мобильный Криминалист» реализован эксплойт, позволяющий загрузить в MSM8909, MSM8916, MSM8939, MSM8952 устройства неподписанный программер и начать извлечение. Соответственно, для любой модели устройства с процессором из перечисленного списка может быть выполнено извлечение дампа даже при отсутствии подписанного программера.

"

Говорят, что у одной компании есть уникальный эксплойт для извлечения из EDL. Это так? 

Это преувеличение. Конкретно в данном случае все решения опираются на вышеупомянутую уязвимость. Свидетельством этого является список процессоров, для которых поддерживается режим EDL вне зависимости от наличия программера.

Что делать с зашифрованными телефонами?

Хороший вопрос. Память большинства современных устройств зашифрована, а шифрованный дамп сам по себе бесполезен.

Начиная с Android 7.0, память устройства по умолчанию зашифрована ("из коробки"), причем, если позволяет SoC, то с использованием аппаратного ключа. Компания Qualcomm одна из первых включила в свои SoC возможность шифрования аппаратным ключом и, начиная с 2014 года, все Qualcomm SoC для Android-смартфонов его поддерживают. На некоторых устройствах, которые не прошли сертификацию Google, встречается использование «старой» схемы шифрования без аппаратного ключа, но это, в основном, noname-устройства китайского производства. Получается, что подавляющее большинство современных Qualcomm-устройств зашифрованы с использованием аппаратного ключа. Для расшифровывания данных необходим аппаратный ключ и пароль от экрана блокировки устройства (если он был задан). 

Сейчас используются два принципиально различных подхода. Оба подхода основаны на уязвимости, описанной командой исследователей Aleph Security, которая позволяет обойти контроль целостности при загрузке Qualcomm-устройства. В первом варианте делается модификация раздела boot, отвечающего за загрузку ОС Android, и устройство включается в, казалось бы, обычном режиме, но с дополнительной возможностью коммуникации, например, включенным adbсroot привилегиями. Так как система полностью загружена, то пользовательский раздел смонтирован в расшифрованном виде как dm-0. Расшифровывание производится автоматически самой операционной системой. Это достаточно универсальный подход, но он не работает в случае включенной на телефоне опции «безопасный запуск» (Secure Startup). Если данная опция включена, то, чтобы система загрузилась, на старте нужно ввести пароль от блокировки экрана. Если он неизвестен, то дальше экрана ввода не пройти, систему не загрузить, файлы не расшифровать и не передать. 

Стоит отметить, что даже если устройство защищено паролем, но выключена опция Secure Startup, то данный подход продолжает работать. Все дело в том, что если опция Secure Startup выключена, то при шифровании используется парольная фраза по умолчанию «default_password», позволяя системе полностью загрузиться и смонтировать dm-0 еще до момента ввода пароля. При включенной опции Secure Startup при шифровании используется пароль, заданный пользователем, и до его ввода система не загружается. Включать ли Secure Startup, остается на усмотрение пользователя, однако некоторые производители зачем-то прячут его глубоко в настройках, а также различными способами усложняют процедуру его включения. 

"

А как работает ПО «Мобильный Криминалист»? 

Подход нашей компании более сложный и основан на модификации TrustZone. Дело в том, что аппаратный ключ, используемый при шифровании пользовательских данных, доступен в контексте TrustZone. Наш подход использует уязвимость для загрузки устройства с модифицированным TrustZone. Таким образом, мы получаем возможность выполнить свой код в контексте TrustZone и извлечь аппаратный ключ.

"

Затем, если опция Secure Startup выключена, мы сразу производим расшифровывание с паролем по умолчанию. В "плохом" случае (Secure Startup включен) есть возможность подбирать пароль вне устройства с привлечением внешних вычислительных мощностей, так как аппаратный ключ уже извлечен. Благодаря такой возможности этот подход является более сильным в сравнении с предыдущим, который в «плохом» случае не может ничего сделать. 

Реализация TrustZone – прерогатива производителя устройства, а не Google или Qualcomm, поэтому существует несколько вариантов хранения ключа шифрования. С другой стороны, Google предлагает стандартизированный набор API, которые должны быть реализованы внутри TrustZone. Qualcomm, в свою очередь, предлагает производителям эталонную реализацию TrustZone для своих SoC (для каждого поколения свою), а вот вносить ли в нее изменения, оставлено на усмотрение производителя. Большинство производителей почти без изменений используют реализацию TrustZone от Qualcomm, и только крупные производители типа Samsung используют что-то другое. Все это необходимо учитывать, поэтому для каждого типа используется свой эксплойт (вариант использования уязвимости). Таким образом, в нашем подходе используется цепочка уязвимостей для загрузки неподписанного программера, а затем для эксплуатации TrustZone.

Заметим, что в Qualcomm реализация TrustZone содержит ошибку в реализации криптографии, позволяющую в некотором количестве случаев расшифровать физический образ без знания пароля, а только при наличии аппаратного ключа. Уязвимость срабатывает для 2-4% случаев вне зависимости от длины пароля. То есть, даже если включена опция Secure Startup, иногда можно расшифровать физический образ, не зная пароля. 

То есть, «поддержка извлечения через EDL из MSM8937 устройств» от разных поставщиков решений может означать не одно и то же?

Конечно. Например, кто-то может подразумевать под этим только извлечение физического дампа, который зашифрован и сам по себе бесполезен. Кто-то вообще поддерживает извлечение из одной модели, для которой был найден программер. Другие же могут предложить извлечение расшифрованных данных, но только в случае, если выключена опция Secure Startup. 

Когда будет поддержка новых чипсетов?

Сложно сказать. Может, и будет, но точно не с текущим подходом. Начиная с MSM8998, уязвимость, которая позволяет обойти контроль целостности во время загрузки устройства, больше не работает. Это связанно с тем, что компания Qualcomm пересмотрела схему процесса загрузки. В частности, в новой схеме программер теперь выполняется в менее привилегированном режиме, из-за чего становится невозможным использовать «старый» метод для обхода безопасной загрузки. 

Есть ли опасность, что метод для старых чипсетов перестанет работать?

Нет. Повторимся, что уязвимость присутствует на аппаратном уровне и не может быть исправлена обновлениями прошивки. Описанные в статье уязвимости содержатся в PBL, код которого записан непосредственно в SoC и не может быть обновлен, а также в программерах. Электронную подпись программера проверяет PBL, таким образом, у производителей нет возможности заблокировать возможность использования старого программера. 

О чем я должен помнить, работая с Qualcomm-устройствами?

Подводя итог, можно сделать следующие выводы:

  • перевод Qualcomm-устройства в режим EDL позволяет извлечь и расшифровать его физический образ, в некоторых случаях даже при активированном режиме Secure Startup;
  • все модели устройств по-разному переводятся в режим EDL, не существует единой комбинации кнопок или волшебного кабеля, которые были бы способны перевести в этот режим абсолютно любой смартфон;
  • данный режим безопасен для работоспособности телефона и целостности информации, которую он в себе хранит;
  • все программные продукты, в функционале которых заявлена поддержка Qualcomm-устройств, в реальности предлагают разный объем функционала;
  • в ПО «Мобильный Криминалист» представлен один из самых мощных методов извлечения информации из смартфонов на чипсетах Qualcomm. Данный программный инструмент позволит вам извлечь физический образ устройства, расшифровать его (даже в случае наличия аппаратного шифрования), а также обойти активированный режим Secure Startup.