Українська Укр English Eng
ДонНТУ   Портал магистров

Реферат по теме выпускной работы

Содержание

Введение

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

Таким образом, возникает необходимость повышения эффективности средств и методов защиты пользовательских данных в мобильных приложениях.

1. Актуальность темы

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

Исследование существующих мобильных приложений командой Digital Security выявили ряд уязвимостей и векторов атак на клиентские банковские приложения.

Кроме того, каждая мобильная ОС имеет свою специфику, в каждой из них можно обнаружить большое количество как новых, так и хорошо известных уязвимостей [1].

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

2. Цель и задачи исследования, планируемые результаты

Цель исследования — повышение эффективности методов и средств защиты пользовательских данных в мобильных приложениях для операционной системы Android.

Объект исследования — методы и средства защиты пользовательских данных.


Основные задачи исследования:

  1. Изучение архитектуры целевой операционной системы (Android) и встроенных средств защиты.
  2. Изучение и анализ уязвимостей и векторов атаки.
  3. Повышение эффективности существующих средств и методов средств защиты.
  4. Оценка эффективности разработанных средств обеспечения безопасности пользовательских данных.
  5. Разработка альтернативных вариантов основных этапов унифицированного процесса синтеза автоматов Мура и оценка их эффективности.

В рамках магистерской работы запланировано:

  1. Исследование существующих средств и методов защиты в операционной системе Android.
  2. Исследование существующих уязвимостей в мобильных приложениях в ОС Android.
  3. Разработка собственного модуля для обеспечения безопасности.
  4. Разработка прототипа с использованием собственного модуля.
  5. Оценка эффективности средств защиты, использованных при разработке прототипа.

3. Обзор исследований и разработок

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

3.1 Обзор международных источников


Существует несколько распространенных средств защиты мобильных приложений:

  1. Описание встроенных средств защиты на официальном сайте Google [2].
  2. Рекомендации по использованию встроенных средств защиты [3]
  3. Библиотека, реализующая простой доступ к шифрованию в ОС Android [4]

В книге Android Security Internals (Внутренние устройства безопасности Android) [5] детально описаны внутренняя структура безопасности ОС Android, рассматривая реализацию основных компонентов и подсистем, связанных с безопасностью, таких как Binder IPC, разрешения, криптографические поставщики и администрирование устройств.

3.2 Обзор национальных источников


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

В книге Android для разработчиков [6] представлены передовые технологии разработки мобильных приложений для профессиональных программистов. В каждая из глав описано разрабатываемое приложение. Затем приводится обзор технологий, применяемых в процессе его разработки.

3.3 Обзор локальных источников

В Донецком национальном техническом университете не найдено дипломных работ, описывающих безопасность в ОС Android.

4. Архитектура операционной системы Android

Android – свободный и открытый проект. Большинство исходного кода распространяется под свободной лицензией Apache 2.0. Проект начал развиваться с 2003 году, а уже в 2005 компания-разработчик была куплена компанией Google. Первая стабильная версия появилась в 2008 году [7].

Распространено мнение «Android is Linux» (Android это Linux). Это связано с тем, что Android основан на ядре Linux, однако значительно отличается от большинства других Linux-систем.

Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но - за несколькими исключениями - вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.

Кроме того, само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть фреймворка Binder), wakelocks (управление спящим режимом) и low memory killer.

В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем - она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.

Структура операционной системы Android представлена на рисунке 1.1.


Рисунок 1.1 – Структура операционной системы Android


4.1 Приложения в системе Android


Многие операционные системы делятся на собственно операционную систему и приложения, установленные поверх, ничего друг о друге не знающие и не умеющие взаимодействовать. Система компонентов и intent’ов Android позволяет приложениям, по-прежнему абсолютно ничего друг о друге не зная, составлять для пользователя один интегрированный системный user experience — установленные приложения реализуют части одной большой системы, они составляют из себя систему. И это, с одной стороны, происходит прозрачно для пользователя, с другой — представляет неограниченные возможности для кастомизации [8].

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

Основная единица в Unix-подобных системах - процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения - это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы - другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).

Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части - на уровне Unix - оперируют понятием процесса, на более высоком уровне - уровне Android Framework - основной единицей является приложение. Приложение - не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.

У приложений Android нет функции main(), нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически. Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.

Для реализации взаимосвязи между компонентами необходимо, чтобы приложения имели возможность общаться друг с другом и с системными сервисами - другими словами, нужен очень продвинутый и быстрый механизм IPC. Для этого используется механизм Binder.

Binder - это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия. Binder использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl) на «виртуальном устройстве» /dev/binder.

Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.

Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по .aidl-файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.

Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.

Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов - например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.

Основной вид компонентов приложений под Android — это activity. Activity — это один «экран» приложения. Например, в приложении для электронной почты (email client) могут быть такие activity, как Inbox Activity (список входящих писем), Email Activity (чтение одного письма), Compose Activity (написание письма) и Settings Activity (настройки).

Передача данных между частями приложения осуществляется за счет Intent’ов. Intent — это сообщение, которое указывает системе, что нужно «сделать» (например, открыть данный URL, написать письмо на данный адрес, позвонить на данный номер телефона или сделать фотографию).

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

Такую функциональность нельзя реализовывать, просто запуская отдельный поток — это было бы для системы чёрным ящиком; в том числе, процесс был бы завершён при завершении всех activity, независимо от состояния таких фоновых операций. Вместо этого Android предлагает использовать ещё один вид компонентов — сервис.

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

Кроме activity и сервисов, у приложений под Android есть два других вида компонента — это broadcast receiver’ы и content provider’ы.

Broadcast receiver — компонент, позволяющий приложению принимать broadcast’ы, специальный вид сообщений от системы или других приложений. Исходно broadcast’ы, как следует из названия, в основном использовались для рассылки широковещательных сообщений всем подписавшимся приложениям — например, система посылает сообщение AIRPLANE_MODE_CHANGED при включении или отключении самолётного режима.

Content provider — компонент, позволяющий приложению предоставлять другим приложениям доступ к данным, которыми оно управляет. Пример данных, доступ к которым можно получить таким образом — список контактов пользователя.

При этом приложение может хранить сами данные каким угодно образом, в том числе на устройстве в виде файлов, в настоящей базе данных (SQLite) или запрашивать их с сервера по сети. В этом смысле content provider — это унифицированный интерфейс для доступа к данным, независимо от формы их хранения. Схема взаимодействия с использованием Content Provider представлена на рисунке 1.2.


Рисунок 1.2 – Схема взаимодействия с использованием Content Provider (анимация: 4 кадра, задержка 500 мс, 10 циклов повторения, 133 КБ)


4.2 Компоненты защиты ОС Android


Операционная система Android обладает рядом встроенных функций, которые позволяют уменьшить частоту и влияние ошибок, связанных с безопасностью. Система спроектирована таким образом, чтобы при использовании стандартных средств избежать сложных решений, связанных с безопасностью [3].

Можно выделить следующие базовые средства защиты:

  • изолированная среда выполнения приложений (Android Application Sandbox), обеспечивающая выполнение кода и работу с данными отдельно от других приложений;
  • фреймворк приложений с надежной реализацией основного функционала защиты такого, как криптография, права доступа, защищенное межпроцессное взаимодействие (IPC);
  • такие технологии как ASLR, NX, ProPolice, safe_iop, OpenBSD dlmalloc, OpenBSD calloc и Linux mmap_min_addr, пришедшие из операционной системы Linux;
  • шифрование файловой системы;
  • разрешений предоставляемые пользователем (User-granted permissions), ограничивающая доступ к системным функциям телефона;
  • разрешения, указанные в приложении, для управления данными на основе каждого приложения.

Используя перечисленные средства защиты и их сочетание при написании приложения можно значительно уменьшить вероятность взлома приложения.

Выводы

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

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

Список источников

  1. Безопасность мобильных банковских приложений [Электронный ресурс] // Inforation Security. – Режим доступа: http://itsec.ru/articles... – Загл. с экрана.
  2. Security [Электронный ресурс] // Android Source. – Режим доступа: https://source.android.com/security – Загл. с экрана.
  3. Security tips [Электронный ресурс] // Android Developers. – Режим доступа: https://developer.android.com/training... – Загл. с экрана.
  4. AeroGear Android Security [Электронный ресурс] // Github. – Режим доступа: https://github.com/aerogear... – Загл. с экрана.
  5. Elenkov, N. Android Security Internals / N. Elenkov, 2014, - 432 с.
  6. Дейтел, П. Android для разработчиков / П. Дейтел, Х. Дейтел, А. Уолд, 2016, - 512 с.
  7. Как работает Android, часть 1 [Электронный ресурс] // Habrahabr. – Режим доступа: https://habrahabr.ru/company... – Загл. с экрана.
  8. Как работает Android, часть 3 [Электронный ресурс] // Habrahabr. – Режим доступа: https://habrahabr.ru/company... – Загл. с экрана.