Как расшифровать данные на смартфоне



Шифрование данных на наших устройствах: как это работает?

Константин Иванов

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

Что такое шифрование?

В самом общем смысле шифрование – это изменение способа представления информации таким образом, что она оказывается скрытой, и единственный способ получить ее в изначальном виде – это некий четкий набор инструкций.

Способов зашифровать информацию множество, в особенности если она хранится в цифровом виде на компьютере или телефоне. Если вам когда-либо приходил файл zip или документ Microsoft Office, для просмотра которого требовался пароль, это означает, что он был зашифрован. Данные, которые вы хотели получить, были помещены в контейнер (который можно представить как папку на вашем смартфоне или компьютере), а контейнер был защищен паролем. Можно распространить этот метод и на целый диск или раздел. Для доступа к любой информации внутри зашифрованного раздела вам потребуется открыть его при помощи пароля.

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

Но приложению известно, что 1 означает «А», что ни одно число больше 33 не подходит, а также приложение имеет доступ к словарю операционной системы для проверки написания, поскольку последовательность 11 может означать как «АА», так и «АК», в зависимости от того слова, которое вы печатали. Когда кто-то другой использует приложение, чтобы прочитать то, что вы написали, написанное выглядит нормальным образом.

Теперь представьте другую ситуацию. Порядок чисел был изменен на обратный, 13 было добавлено между 11 и 15, пробел между словами был убран, а в каждый небольшой интервал между буквами была вставлена случайная нечитаемая последовательность символов. Этот файл нельзя будет прочитать без использования приложения, в отличие от первого примера, с которым при наличии желания и терпения можно справиться. Так работает алгоритм шифрования. Он помогает программе превратить информацию любого вида в мешанину, которую легко расшифровать при помощи алгоритма и очень сложно и затратно по времени – без него.

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

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

Шифрование и Android

Android поддерживает шифрование на уровне файла и контейнера (полнодисковое шифрование). Как платформа для приложений он также может поддерживать сторонние методы шифрования, такие как безопасные папки или зашифрованная переписка в мессенджерах и почте. Это означает, что чипсет устройства содержит компонент, который установлен, чтобы помочь на лету зашифровывать и расшифровывать данные. Действительный ключ к расшифровке файлов хранится на устройстве, и каждое действие пользователя – пароль, отпечаток пальца, доверенное устройство и др. – которое используется для получения доступа к зашифрованным данным, обращается к Secure Element (отдельному микропроцессору наподобие тех, что используются в пластиковых картах). Начиная с Android 6.0 Marshmallow, все функции шифрования могут выполняться с использованием этого Secure Element и закрытого ключа, токенов (одноразовых или многоразовых электронных ключей), которые применяются для шифрования и расшифровки данных. Это означает, что без предоставления процессору действующего токена данные останутся зашифрованными.

В ваших настройках Android вы также можете сделать так, что система будет оставаться зашифрованной каждый раз при загрузке телефона, до тех пор, пока не будет введен пароль. Когда данные в вашем телефоне зашифрованы, это уже обеспечивает безопасность, но приостановка процесса загрузки до момента, пока не введен пароль, предотвращает доступ к файлам и служит дополнительным уровнем защиты. В любом случае ваш пароль (или PIN-код, или графический ключ, или отпечаток пальца) обращается к данным посредством Secure Element , и у вас нет никакой возможности получить закрытый ключ шифрования – единственный необходимый для того, чтобы узнать, что было сделано с данными и как вернуть их в прежний вид.

Ваша переписка и действия в браузере также могут подвергаться шифрованию. Вероятно, вы обращали внимание на то, что в вашем браузере многие сайты имеют адрес, начинающийся с HTTPS вместо HTTP. HTTP означает Hypertext Transfer Protocol (протокол передачи текста), и это протокол (спасибо, кэп!), который используется, чтобы отправлять и получать данные в сети Интернет. В свою очередь, HTTPS означает «HTTP over SSL» (Secure Sockets Layer, уровень защищенных сокетов), он добавляет в протокол стандарт шифрования. Все данные, которые вы вводите в браузере, изменяются при помощи открытого ключа, который вы скачиваете с сайта, попадая на него, и только закрытый ключ – который имеется на веб-сервере – может их расшифровать.

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

Для того, чтобы вести зашифрованную переписку, обычно требуется скачать приложение из Google Play. Такие приложения, как Signal или WhatsApp, предлагают шифрование, которое называют сквозным, это означает, что приложение назначает ключи отдельным контактам или группам и сообщение может прочитать только то лицо, которому оно адресовано. BlackBerry Messenger многие считают безопасным, но поскольку в нем имеется лишь один общий ключ, который есть на всех устройствах BlackBerry, эта безопасность представляется несколько спорной. BBM Protected доступен для групп, которым требуется более высокий уровень шифрования или сквозное шифрование. iMessage от Apple также имеет сквозное шифрование, но только в случае, если все участники переписки – счастливые обладатели iPhone.

Эти приложения вы используете, как использовали бы любой другой мессенджер: вы добавляете контакт и обмениваетесь с ним сообщениями. Разница лишь в том, что эти сообщения могут быть зашифрованы, так что только две стороны – участники переписки – могут их прочитать.

Шифрование – это хорошо или плохо?

Некоторые товарищи в некоторых правительствах утверждают, что технологии шифрования, доступные конечному пользователю, то есть нам с вами, это опасно, поскольку из-за этого невозможно отслеживать все коммуникации лиц, которыми могут интересоваться всевозможные органы. Этот аргумент может звучать убедительно, когда нам говорят о том, как террористы месяцами общались в Facebook или WhatsApp. Однако сама по себе технология шифрования не опасна, а вот без нее не могло бы считаться безопасным ни одно наше действие в сети, а мы не могли бы быть уверены, что наше общение носит личный характер. Любая чувствительная информация на наших смартфонах могла бы быть легко получена тем, у кого были бы нужные инструменты и достаточная мотивация.

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

Источник

Извлечение аппаратного ключа полнодисковой защиты в телефонах Android на процессорах Qualcomm

Эксплоит опубликован на Github

Компания Google начала внедрять полное шифрование диска (Full Disk Encryption, FDE) по умолчанию с версии Android 5.0 Lollipop. В первое время, когда шифрование реализовали в устройствах Nexus 6, многие пользователи жаловались на снижение производительности при чтении и записи данных на накопитель, но с версии Android 6.0 эту проблему вроде бы решили.

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

При включенном шифровании любая информация на телефоне автоматически на лету шифруется ключом AES перед записью на носитель. И наоборот, при считывании информации она автоматически расшифровываются этим ключом.

На устройствах iOS 9 этот ключ является производной функцией от пользовательского пароля и уникального 256-битного аппаратного ключа, зашитого в смартфон на заводе. Взломать шифрование такого уровня с помощью брутфорса не может даже ФБР, как известно из недавней истории со смартфоном стрелка из Сан-Бернардино, из-за которого ФБР и Apple дошли до суда. В итоге ФБР всё-таки сумело взломать телефон с помощью неизвестной 0day-уязвимости. Как можно понять из слов главы госструктуры, за обход защиты ФБР пришлось заплатить хакерам более миллиона долларов.


Полное шифрование диска в iOS

Таким образом, брутфорс FDE возможен только с использованием конкретного аппаратного устройства. Это значительно затрудняет проведение атаки. В обычном случае можно было бы создать миллион копий и распараллелить брутфорс в облачном сервисе, что позволяет очень быстро подобрать 99% реальных паролей. Но в данном случае приходится ограничиваться единственным устройством, на котором Apple добавляет ещё и дополнительные помехи — задержки между попытками ввода пароля, ограничение на максимальное количество попыток и т.д. Вот почему для спецслужб исключительно важно найти способ извлечения аппаратного UID, тогда брутфорс пароля становится банальной технической задачей.

Полное шифрование диска в Android 5.0+ реализовано несколько иначе, чем в iOS 9, и подробно описано в блоге Николая Еленкова и в официальной документации Android.

Здесь ключ шифрования тоже является производной функцией от обычно слабого пользовательского пароля, но также от случайным образом сгенерированного 128-битного мастер-ключа (Device Encryption Key — DEK) и случайно сгенерированной 128-битной соли. Поле генерации DEK защищается с помощью тщательно продуманной схемы, в которой используются введённые пользователем значения — пинкод/пароль/паттерн (графический ключ) для входа. Затем зашифрованный DEK помещается в специальное зашифрованное хранилище под названием crypto footer. Все эти уровни шифрования нужно преодолеть, прежде чем расшифровать DEK, а затем любую информацию, записанную на накопителе.

Как и в случае с iOS 9, в операционной системе Android реализована привязка схемы шифрования к конкретному аппаратному обеспечению, чтобы не допустить брутфорса на копиях операционной системы. Функцию аппаратной привязки выполняет специальное аппаратное хранилище — KeyMaster, которое работает в особом окружении Trusted Execution Environment (TEE), полностью независимом от операционной системы Android. Защищённость ключей в окружении KeyMaster имеет важнейшее значение. Только это защищает систему полного шифрования диска от проведения эффективного брутфорса в параллельных потоках на копиях ОС.

В устройствах Android изолированное окружение никогда не выдаёт свой собственный ключ наружу в «небезопасную» среду. Наоборот, модуль KeyMaster получает из небезопасной среды «блоб ключа» (key blob), расшифровывает хранящийся там ключ — и отдаёт его обратно. Другими словами, работа системы шифрования возможна только непосредственно на аппаратном устройстве, но не в виртуальной среде на другом компьютере.

В общем весь процесс схематично можно изобразить на такой диаграмме, которую приводит Николай Еленков.

Защиту окружения KeyMaster и выполнение команд на выделенном безопасном процессоре обеспечивает защищённая среда, предоставленная производителем оборудования. В Случае с Qualcomm это среда QSEE (Qualcomm Secure Execution Environment). Она допускает к исполнению на выделенном процессоре только отдельные маленькие приложения, которые называются «трастлеты» (trustlets). Один из таких трастлетов — KeyMaster. В исходном коде Android есть инструкции для обращения к приложению KeyMaster. На самом деле трастлет поддерживает всего четыре инструкции:

KeyMaster работает в точности как описано выше: он получает блоб ключа, вычисляет подпись и помещает её в буфер.

И вот теперь мы подошли именно к тому этапу, на котором действует новый эксплоит, который появился в открытом доступе 30 июня (репозиторий на Github). Эксплоит использует недавно найденные уязвимости CVE-2015-6639 и CVE-2016-2431.

Автор эксплоита, специалист по безопасности Гал Беньямини (Gal Beniamini) написал поддельную версию приложения QSEE и с помощью вышеупомянутых уязвимостей сумел загрузить её в защищённое окружение, тем самым осуществив повышение полномочий и взломав защиту окружения QSEE, которое участвует в процессе генерации ключа для шифрования диска.

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

Кстати говоря, для того редкого случая, когда пользователь установил для шифрования по-настоящему сложный пароль с высокой энтропией и его не удаётся подобрать брутфорсом за приемлемое время, есть запасной план. Если взломать шифрование действительно крайне необходимо, то можно найти точно такой же телефон, той же модели, с такими же царапинами и защитным корпусом — и запрограммировать его на отправку пароля, как только жертва введёт его. Этот поддельный аппарат подкладывается жертве вместо оригинального. Чтобы избежать раскрытия и одновременно устранить риск введения жертвой неправильного пароля с первой попытки, телефон должен быть запрограммирован на то, что никакой введённый пароль он не принимает как правильный.

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

Есть интересный момент. Защищённую среду на мобильных устройствах устанавливает не сама компания Qualcomm, а OEM-производители. Они могут сотрудничать с правоохранительными органами той страны, в юрисдикции которой находятся, и выполнять требования судебных запросов. Соответственно, если подобная криптографическая схема будет реализована российским производителем, то информация на смартфоне будет рассекречена по запросу российского суда.

И ещё один интересный момент. Несмотря на то, что Гал Беньямини несколько месяцев обсуждал данные уязвимости с Qualcomm и Google, исправить их не так просто — здесь недостаточно программного апгрейда (для двух уязвимостей патчи для Android вышли в январе и мае), а может понадобиться аппаратный апгрейд. Дело в том, что если злоумышленник получит устройство, то теоретически может откатить программный апгрейд, вернуть аппарат на уязвимую версию и провести атаку.

Как уже говорилось выше, код эксплоита опубликован на Github. Вот схема его работы.

Гал Беньямини написал несколько скриптов на Python, которые упрощают брутфорс после срабатывания эксплоита. В комментариях к его блогозаписи коллеги выразили желание помочь в портировании скрипта на мощнейшую платформу для брутфорса hashcat/oclHashcat.

Беньямини предполагает, что компания Google вместе с OEM-сборщиками выработают новую абсолютно надёжную схему аппаратно-программного шифрования, которую даже теоретически невозможно будет взломать.

Будем надеется, что такую схему реализуют на новом поколении Android-устройств.

Источник

You may also like...

Adblock
detector