Oops... your message was not sent

Your message has been successfully sent

тематические истории, основанные на опыте компании JetRuby
Мобильная разработка

Защита данных в Android приложении

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

От слов — к делу. Каждое Android приложение исполнятся в собственной песочнице, изолирующей его данные от других элементов системы. Однако эта особенность архитектуры ОС не в состоянии обеспечить стопроцентную защиту информации. Практически любое устройство предоставляет возможность получения root доступа, позволяющего управлять всеми данными приложения. А некоторые типы данных (и их совсем не мало) даже не требуют root прав.

Защита данных пользователя

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

зда

OS Android предоставляет стандартные средства хранения пользовательских данных:

  • Shared Preferences — инструмент для хранения небольших объемов информации, таких как настройки приложения;
  • Account Manager — инструмент для безопасного хранения данных об аккаунтах пользователей (логин, email, пароль);
  • Sqlite — база данных для хранения остальных данных приложения.

Все эти средства сохраняют информацию в файлах. При помощи root доступа вы можете с легкостью добраться до их содержимого. Именно поэтому строго-настрого не рекомендуется хранить важные пользовательские данные, такие как пароли, в открытом виде.

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

Начиная с версии 5.0, в Android активно внедряется шифрование всех хранящихся на устройстве пользовательских данных. Перед записью на диск они шифруются, а перед чтением — дешифруются. Впрочем, при открытости исходных кодов системы и легкости смены прошивки, подобные меры сложно назвать надежной защитой. Нельзя быть полностью уверенным в том, что шифрование применят по отношению ко всем выпускаемым моделям устройств и прошивкам. Кроме того, по данным Google лишь менее 40% пользователей юзает версию Android 5 или выше. Вот такая арифметика. Вот такая защита данных на Android приложениях. Однако не стоит расстраиваться раньше времени.

В Android предусмотрены средства для защиты данных в запущенном приложении:

  • принудительная задача пароля блокировки устройства перед показом важной информации;
  • отключение возможности сделать скриншот приложения;
  • отключение показов скриншота приложения в диспетчере задач;
  • требование ввести пароль блокировки перед важными действиями.

Однако для максимальной защиты данных от злоумышленников необходимо пользоваться не только встроенными инструментами, но и внедрять дополнительные уровни безопасности. Хорошим решением может стать шифрование базы данных. Существует несколько способов, позволяющих зашифровать sqlite — стандартную базу данных Android. А в сторонних базах, таких как realm, встроен собственный механизм шифрования. В качестве ключа можно использовать специально задаваемый пользователем пароль или pin-код. Таким образом, в приложении хранятся данные в зашифрованном виде, ключ от которых есть только у пользователя.

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

гк

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

Защита данных приложения

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

Как же все это предотвратить? Для защиты данных приложения применяется ProGuard — инструмент, позволяющий сжимать данные, удалять неиспользуемые части библиотек, а также переименовывать методы и переменные. Созданный с помощью ProGuard файл намного сложнее декомпилировать и вытащить из него полезную информацию. Плюс он занимает меньше места.

Еще один способ спрятать информацию от посторонних глаз — поместить ее в нативный код. Прелесть этого «места хранения» в том, что оно не очевидно. И в сочетании с шифрованием может обеспечить вполне надежную защиту. Минус же заключается в том, что использование такой методики потребует наличия скомпилированных пакетов для каждой из поддерживаемых архитектур. А это значительно увеличит вес установочного файла или потребует создания отдельного файла для каждой платформы.

Вывод

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

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

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

department
Статью подготовил
Отдел мобильной разработки
Профессиональная разработка нативных приложений под Android и iOS, а также реализация гибридных кроссплатформенных решений и мобильных сайтов.
New Articles