Как узнать класс защиты файла в iOS

Как узнать класс защиты файла в iOS

В данной статье рассказывается как узнать класс защиты файла в iOS

Автор: satishb3

Как видно из рисунка ниже, каждый файл в iOS зашифрован уникальным ключом. Содержимое файла шифруется файловым ключом; файловый ключ шифруется ключом класса защиты (ключом класса защиты данных). Зашифрованный файловый ключ сохраняется в метаданных файла. Метаданные файла, в свою очередь, шифруются ключом файловой системы (ключ EMF). Ключ файловой системы генерируется на основе аппаратного ключа UID. Ключ UID вшивается в устройство при производстве, является уникальным для каждого устройства и никакой код, выполняющийся на CPU, не может прочитать UID.

Если бы файл шифровался одним лишь ключом файловой системы, то мы могли бы извлечь файл из ram-памяти с помощью специальных утилит (например, msft_guy automated custom ramdisk) даже с устройств, защищенных паролем. Механизм защиты данных служит для предотвращения подобных атак. Защита данных на устройствах с iOS достигается за счет специальных ключей шифрования, которые генерируются на основе пароля и UID. Поэтому, если файл защищен определенным классом защиты, и пользователь установил пароль на свое устройство, то нарушитель даже с помощью специальных утилит не сможет получить доступ к файлу, пока он не узнает пароля. Проще говоря, механизм защиты данных добавляет дополнительный уровень безопасности, зашифровывая файлы ключом, полученным на основе пароля.

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

Пример: Если файл имеет класс защиты NSFileProtectionComplete, то файл будет зашифрован на ключе первого класса защиты (Class 1 protection class key). Ключ первого класса защиты доступен только после разблокировки устройства. По умолчанию файлы имеют класс защиты NSFileProtectionNone; ключ класса защиты NSFileProtectionNone доступен даже при заблокированном устройстве. Список доступных классов защиты данных для файлов приведен ниже в таблице.

Key id

Класс защиты

Описание

1

NSProtectionComplete

Файл доступен только после разблокировки устройства

2

NSFileProtectionCompleteUnlessOpen

Файл доступен после разблокировки устройства или файл доступен, если его дескриптор оставался открытым до блокировки устройства

3

NSFileProtectionCompleteUntilFirstUserAuthentication

Файл доступен после первой разблокировки и до перезагрузки устройства

4

NSProtectionNone

Файл доступен, даже если устройство заблокировано

5

NSFileProtectionRecovery

Недокументировано

Я написал программу (FileDP), которая на вход получает файл, а на выходе возвращает название класса защиты исходного файла. Знание класса защиты позволяет определить и ключ класса защиты, которым зашифрован файл. Программа может помочь при анализе безопасности iOS-приложений, а также показать, имеют ли конфиденциальные файлы надлежащий класс защиты или нет.

Извлечение класса защиты файла

  1. Скачайте FileDP.
  2. Скопируйте FileDP на iPhone по SSH с помощью cyberduck или winscp.
  3. Откройте терминал или putty и по SSH подключитесь к iPhone.
  4. В SSH терминале воспользуйтесь следующей командой, чтобы дать право на выполнение файла FileDP:

chmod 777 FileDP

5. Используйте следующую команду, чтобы получить класс защиты конкретного файла или всех файлов в папке:

./FileDP [F/D] [FilePath/DirecotryPath]

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

Пример: Файл настроек Facebook – com.Facebook.Facebook.plist – содержит в себе токены аутентификации пользователя и cookies. Как видно из следующей картинки, файл имеет класс защиты NSFileProtectionNone.

Ваш провайдер знает о вас больше, чем ваша девушка?

Присоединяйтесь и узнайте, как это остановить!