[Перевод] Есть идея: защита данных на Android с помощью eCryptfs
Защита данных на мобильных устройствах заботит всех. Пользователей, создателей операционных систем, разработчиков приложений. Для многих смартфон стал центром персональной цифровой вселенной. Здесь личная жизнь и работа. Переписка и номера телефонов, клиенты социальных сетей и сведения о банковских счетах. В телефоне удобно хранить пароли, вести дневники, делать заметки. О личных фото и видео можно и не говорить, равно как и о материалах, которые несут на себе печать коммерческой тайны. Чем важнее данные, чем больший интерес они представляют для посторонних, тем серьёзнее силы, которые могут бросить на то, чтобы заполучить желаемое.
Сегодня мы расскажем о новом подходе к созданию системы защиты данных на Android, в основе которого лежит файловая система eCryptfs.
Существующие решения
Начнём с того, что уже сделано в сфере защиты информации на Android. Существующие решения работают на различных уровнях системы.
Уровни Android, на которых могут работать решения, обеспечивающие безопасное хранение данных
Начнём с уровня ядра Linux, первого в нашей схеме. Сюда относится методика полного шифрования диска (Full Disc Encryption, FDE). ОС Android поддерживает FDE, начиная с версии 3.0. Полное шифрование диска — это кодирование всех пользовательских данных на устройстве с использованием зашифрованного ключа. После того, как данные зашифрованы, всё, что создаёт пользователь, перед записью на диск, так же шифруется. При чтении, перед передачей данных процессу, который их затребовал, они расшифровываются. Среднему разработчику можно об этом механизме и не знать. Если пользователи его применяют, в частности, используют экран блокировки с паролем, это защищает их данные от несанкционированного копирования.
Под вторым номером в нашей схеме находится уровень Android Framework. Для того чтобы реализовать систему шифрования данных, которая расположится на этом уровне, нужны root-права. Работать такая система будет на основе механизма перехвата управления. Приложение, которое планируется подобным способом защитить, может передавать, читать, записывать данные, пользуясь стандартными средствами, вызовы которых проходят через систему безопасности.
Уровень приложения, третий номер в нашей схеме. Большинство существующих решений в области шифрования и безопасности можно отнести именно сюда. Это — немалое количество библиотек для разработчиков приложений. Среди них, например, OpenSSL, secureSqlite и другие.
Знакомство с eCryptfs
eCryptfs — это POSIX-совместимая криптографическая многоуровневая файловая система для Linux. Она хранит криптографические метаданные в заголовках файлов, таким образом, зашифрованные файлы можно копировать с одной системы на другую. Скопированный файл будет зашифрован с использованием подходящего ключа из набора ключей (keyring) ядра Linux. При этом нет необходимости хранить и обрабатывать какие-либо дополнительные данные, помимо тех, которые уже хранятся в файле.
Файловая система eCryptfs широко распространена и проверена временем. Например, на ней основано шифрование домашнего каталога в Ubuntu, она же применяется в ChromeOS и встроена в некоторые сетевые системы хранения данных.
Архитектура решения, основанного на eCryptfs
При использовании eCryptfs шифрование и дешифрование данных выполняется автоматически. Вот схема архитектуры предлагаемого решения.
Архитектура решения на базе eCryptfs
Обратите внимание на то, что если в ядре Linux имеется модуль eCryptfs, взаимодействие с ним можно организовать с помощью службы (Service). Служба принимает команды от приложений, которые пользуются шифрованием, и отправляет запросы к VOLD (Volume Daemon), который, в свою очередь, выполняет действия с данными.
Вот какие запросы, касающиеся работы с безопасными директориями, выполняются к VOLD:
- Создать.
- Заблокировать. При этом VOLD размонтирует папку.
- Разблокировать. VOLD смонтирует папку, затем приложение может работать с данными в точке монтирования. Ядро будет автоматически шифровать и расшифровывать информацию.
- Удалить.
- Восстановить.
- Сменить пароли.
Предлагаемую подсистему защиты данных можно добавить в вышеописанную схему в виде дополнительного уровня, находящегося над драйвером устройства хранения данных.
Место предлагаемого решения в структуре Android
Сделай сам
Если идея использования eCryptfs вам понравилась, хотим предложить схему её реализации.
Изменения, которые нужно внести в систему
Красные прямоугольники на рисунке — это новые блоки, которые нужно добавить в систему для организации безопасного хранения данных с использованием eCryptfs. Светло-серый цвет блока указывает на то, что соответствующий компонент требует настройки. А именно, общая схема работ по интеграции eCryptfs в Android такова:
- Обеспечить поддержку eCryptfs ядром Linux.
- Добавить в VOLD утилиты для поддержки eCryptfs и интерфейса eCryptfs.
- Добавить основную службу, в том числе — библиотеку, которой смогут пользоваться приложения.
- Добавить политики SELinux, которые позволят решению работать в новой системе.
Патчи для интеграции eCryptfs в ядро Linux на Android можно найти здесь.
Выводы
Подсистема шифрования, основанная на eCryptfs хороша тем, что работает на уровне ядра Linux. После её реализации и интеграции в Android, ей смогут пользоваться любые приложения, при этом за шифрование будет отвечать ядро.
Безопасности много не бывает. Если вы, например, работаете над прошивкой для Android-устройства с повышенным уровнем защиты данных, над этакой «цифровой крепостью», вполне возможно, что eCryptfs сможет стать одной из неприступных стен этой самой крепости.