Введение


Мобильные устройства — смартфоны, планшеты и прочие мобильные устройства — становятся неотъемлемой частью жизни людей. Почти у 67% людей в мире есть хотя бы один смартфон; к 2025 году прогнозируется 5,8 миллиардов активных мобильных устройств [1].


По данным IDC [2], среди всех проданных в третьем квартале 2018 года мобильных устройств 86,8% были оборудованы ОС Android. Количество пользователей использующих ОС Android более 1.4 миллиардов. По данным Securelist [3], за 2018 год было обнаружено 5,3 миллионов вредоносных программных пакетов для ОС семейства Android. Поэтому специалисту, в области компьютерной криминалистики, приходится для каждого устройства использовать разные методы извлечения копии памяти.


В настоящее время способа однообразного получения копии памяти с устройств под управлением ОС Android не существует. В связи с этим, специалисту в области компьютерной криминалистики приходится использовать множество различных методов, где он и сталкивается с технически-ми проблемами. В первую очередь проблемы связанны с отсутствием драйвера или с неисправностью USB разъема, используемых в традиционных методах для извлечения данных. Однако для получения и передачи копии памяти можно использовать беспроводные каналы связи [4].


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


В разделе 2 будет описывается архитектура системы получения копии оперативной памяти, связи между подсистемами и модулями.


В разделе 3 будет описывается реализация системы получения копии оперативной памяти.


Раздел 1: Исследование способов получения копии памяти в устройствах под управлением ОС Android через беспроводные каналы связи


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


Сценарии использования копии оперативной памяти


На сегодняшний день, операционная система Android присутствует на разных устройствах благодаря ядру Linux и виртуальной машине Dalvik. В данной работе рассматриваются устройства, работающие на самой распространенной аппаратной платформе ARM и x86.


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


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


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


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


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


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


Для анализа копии оперативной используется Volatility Framework [7]. Volatility Framework — это набор инструментов для получения и анализа копии оперативной памяти разных операционных систем, в том числе и Android. С помощью данных инструментов можно получить необходимую информацию, содержащуюся в образе оперативной памяти. Для получения копии оперативной памяти в Volatility Framework используется модуль ядра LiME. Для извлечения копии оперативной памяти через LiME необходим исходный код ядра Linux исследуемого устройства.


Анализ средств и методов запуска исполняемых файлов через беспроводные соединения для ОС Android


Для установки приложений, как и в любых UNIX подобных операционных системах используются пакеты. В Android эти пакеты имеют расширение .apk. Такие пакеты хранятся в памяти устройства даже после установки и удаляются только при удалении приложения. Пакет .apk содержит в себе скомпилированный Java-код, а также файл AndroidManifest.xml который объявляет разрешения необходимые для работы приложения.


Существуют два типа приложений: системные и пользовательские. Системные приложения в отличии от пользовательских имеют больше привилегий поэтому их изменение или удаления возможно лишь при наличии прав суперпользователя. Пакеты пользовательских приложений находятся в директории “/data/app”. Пакеты системных приложений находятся в директории “/system/app”.


Начиная с версии Android 5.0, вместо виртуальной машины Dalvik используется виртуальная машина Android Runtime. В отличие от Dalvik, Android Runtime компилирует приложение не во время запуска, а при установке. Тем самым повышается скорость запуска программы и увеличивается время работы от аккумулятора. Для обеспечения обратной совместимости Android Runtime использует то же байт-код, что и Dalvik.


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


Обычно права суперпользователя на устройствах недоступны. Из-за большого разнообразия устройств не существует однообразного способа получения прав суперпользователя. Поэтому для получения прав суперпользователя используются разные инструменты. Получение прав суперпользователя необходимо для получения копии памяти с устройств Android.
Для запуска исполняемых файлов необходимы некоторые привилегии в системе, а также набор Unix команд. Изначально в Android присутствует некоторый минимальных набор команд, которых обычно недостаточно для получения копии памяти. Поэтому используют BusyBox, который включает в себя расширенный набор команд. Утилиты, входящие в состав BusyBox позволяют работать в файловой системе, запускать приложения, отображать системную информацию и многое другое. Так же существует возможность создавать shell-скрипты.


Shell-скрипты являются исполняемыми файлами, которые содержат в себе сценарий выполнения набора команд. В отличии от приложения, shell-скрипты не требуют установки и компиляции. В случае если нужно что-нибудь исправить, то достаточно внести изменения в файл shell-скрипта.
Поскольку запуск исполняемых файлов производится через беспроводную связь, то рассмотрим два способа запуска исполняемых файлов с помощью ADB и SSH.


Для первого способа достаточно выполнить на устройстве команду “setprop service.adb.tcp.port 5555; stop adbd;start adbd”. Далее на компьютере запустить командную строку и подключиться к устройству с помощью команды “adb connect X”, где “X” IP адрес устройства в сети и порт со значением 5555. Чтобы запустить исполняемый файл — используется команда “adb shell am start -n com.package.name/com.package.name.ActivityName”, если это приложение. Если же исполняемым файлом является shell-скрипт, то запуск осуществляется с помощь команды “adb shell ./name”, где name — имя сценария.


Для второго способа используется протокол SSH. В отличие от предыдущего способа, данный способ требует наличия на компьютере SSH клиента, а на устройстве SSH сервера. В операционной системе Windows можно использовать программу PuTTY, а в Linux Openssh. После подключения устройства к компьютеру мы получаем доступ к командной оболочке Shell. Команды для запуска исполняемых файлов такие же, как и в первом способе.


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


Программные средства получения копии оперативной памяти


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


  • получение копии памяти из пространства пользователя и ядра;
  • получения копии памяти только из пространства пользователя.

К программным средствам получения копии памяти пространства пользователя и ядра относятся AMExtractor и LiME. Программные средства Mem и Memfetch могут получить лишь копию памяти только из пользовательского пространства.


Рассмотрим подробнее вышеперечисленные программные средства получения копии оперативной памяти с устройств под управление операционной системы Android:


  • Mem: утилита с открытым исходным кодом, используемое для получения данных оперативной памяти процесса [8];
  • Memfetch: утилита с открытым исходным кодом для получения адресного пространства оперативной памяти процесса с использованием устройств /proc/$pid/map и /proc/$pid/mem [9];
  • LiME: модуль для ядра Linux с открытым исходным кодом для получения данных, хранящихся в оперативной памяти в пространстве пользователя и ядра [10];
  • AMExtractor: утилита с открытым исходным кодом, использующее псевдоустройство /dev/kmem для загрузки в память ядра [11].

Программы Mem и Memfetch могут использоваться без предвари-тельной настройки, но они не способны получить данные из области памяти ядра и для своей работы требуют права суперпользователя.


Несмотря на широкое применения и универсальность, модуль LiME требует правильной конфигурации и исходный код ядра Linux для каждого отдельного устройства.
Для работы AMExtractor необходима информация о типе используемой ядром модели виртуальной адресации памяти и права суперпользователя.


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


Такие программные средства как Oxygen, UFED и MSAB XRY — дороги и доступны только для коммерческого использования. Программы такого уровня способны: получать копию памяти с заблокированного устройства, получать права суперпользователя, формировать криминалистические отчеты и многое другое.


Инструмент ANDROPHSY является первым инструментом с открытым исходным кодом, который поддерживает все этапы криминалистического исследования Android устройств [12]. Архитектура ANDROPHSY состоит из четырех основных модулей: модуль обработки, модуль сбора, модуль анализа и модуль формирования отчетностей. Получения данных производится с помощью инструмента dd и службы ADB. Для соединения между компьютером и исследуемым устройством используется USB ка-бель, а данные передаются через протокол TCP.


Подтверждение актуальности данной работы является наличие недостатков в ANDROPHSY. К ним можно отнести работоспособность только в среде Linux, отсутствие функций получения и анализа копии оперативной памяти устройства и отсутствие подключения к устройству через Wi-Fi или Bluetooth для извлечения данных.


Исходя из проведенного анализа была построена сравнительная таблица (см. рисунок 1). В таблице 1 символом “+” обозначаются средства, удовлетворяющие требованиям, а символом “-” — обратное.



Рисунок 1 — Программные средства для получения копии оперативной памяти


По результатам сравнения было принято решение использовать AMExtractor для снятия образа оперативной памяти, вследствие получения полной копии оперативной памяти, a также отсутствие необходимости в наличия исходного кода ядра и поддержки загрузки модулей.


Программные средства для передачи данных


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


Однако, при проведении расследования Android устройства может случится так, что из него невозможно извлечь данные с помощью USB со-единения. Причинами этого могут быть неисправный кабель или поврежденный разъем. В этих случаях, эксперту для исследования будет доступна только внешняя карта памяти, которая встречается далеко не во всех устройствах. Иногда устройство содержит только внутреннюю па-мять. Содержимое этой памяти, а также оперативной памяти, можно без-опасно извлечь через USB соединение. Альтернативой проводного соединения является беспроводная связь. Из всех протоколов беспроводной связи операционная система Android поддерживает самые популярные: Wi-Fi и Bluetooth.


Wi-Fi в современных Android устройствах используется для доступа в интернет или для передачи данных. Мобильные устройства на базе An-droid поддерживает большинство стандартов Wi-Fi вплоть до 802.11ac. Скорость передачи данных между устройствами через Wi-Fi превышает скорость передачи данных через Bluetooth [13].


Для соединения устройств через Wi-Fi достаточно подключиться к общей точке доступа. Так как к общей точке доступа могут подключаться другие устройства, важно ограничить им доступ к сети. Наличие поддержки в Android, Wi-Fi Hotspot, позволяет использовать устройство в роли точки доступа.


Беспроводной протокол Bluetooth, доступный на устройствах An-droid, был разработан с целью передачи данных между устройствами, имеющих небольшой аккумулятор. В сравнении с Wi-Fi, скорость передачи файлов через Bluetooth намного меньше. В основе протокола лежит пикосеть, состоящая из главного узла и нескольких подчиненных узлах [14]. Для передачи разных типов данных используются профили. Профиль Bluetooth определяет команды и функциональные возможности, которыми устройства могут обмениваться между собой. Существует не менее 27 профилей Bluetooth.


PAN профиль используется для создания WPAN между двумя устройствами. Профиль HID позволяет подключать мышь, клавиатуру и другие периферийные устройства, поддерживающие этот профиль [14].


В данной работе, исходя из особенностей операционной системы Android, рассматриваются следующие программные средства передачи данных:


  • SSHFS: клиент файловой системы на основе FUSE для монтирования удаленных каталогов через подключение SSH [15];
  • Rsync: утилита с открытым исходным кодом, которая обеспечивает быструю пошаговую передачу данных [16];
  • SCP: утилита и протокол для передачи данных через протокол SSH [17];
  • SFTP: в сравнении с SCP, который позволяет только копировать файлы, SFTP имеет возможность выполнять операции с файлами: например, возобновлять передачу файла после разрыва соединения, удалять файлы на сервере и многие другие операции [18];
  • NetCat: UNIX утилита, которая читает и записывает данные через сетевые соединения, используя протокол TCP или UDP [19].

Утилита Rsync в большинстве случаев используется для синхронизации файлов или каталогов. При синхронизации пересылаются только изменения, используя эффективный алгоритм поиска контрольных сумм. Функционал Rsync позволяет передавать через SSH протокол, сжимать файлы, а также копирование ссылок, файлов устройств, атрибутов владельца, группы и прав.
Большинство средств получения копии памяти используют протокол TCP для передачи данных, чтобы исключить возможность записи данных в память исследуемого устройства.


Для безопасной передачи данных важно чтобы программное средство использовало SSH протокол. Протокол Secure Shell (SSH) — это протокол для безопасного удаленного входа в систему и других безопасных сетевых услуг по небезопасной сети [20].


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


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


Исходя из проведенного анализа была построена таблица(см. Рисунок 2).В таблице символом “+” обозначаются средства, удовлетворяющие требованиям, а символом “-” — обратное.



Рисунок 2 — Существующие программные средства для передачи копии оперативной памяти.


В результате анализа было принято решение использовать для пере-дачи физической копии памяти NetCat, а Rsync для передачи обычных файлов и каталогов, необходимых для криминалистического анализа


Список используемой литературы
  1. GSMA Global Mobile Economy Report 2018 [Электронный ресурс]. // GSMA. — Режим доступа к ресурсу: http://www.gsma.com/mobileeconomy/ (дата обращения: 15.04.2019).
  2. International Data Corporation, Worldwide Quarterly Mobile Phone Tracker [Электронный ресурс]. // International Data Corporation — Режим доступа к ресурсу: http://www.idc.com/prodserv/smartphone-os-market-share.jsp (дата обращения: 15.04.2019).
  3. Securelist, Mobile malware evolution 2018 [Электронный ресурс]. // Kaspersky Lab — Режим доступа к ресурсу: https://securelist.ru/mobile-malware-evolution-2018/93451/ (дата обращения: 15.04.2019).
  4. Oleg Davydov. Mobile Phone Forensics Challenges [Электронный ресурс] // Eforensics magazine. — Режим доступа к ресурсу: http://www.tverlingua.by.ru/archive/005/5_3_1.htm (дата обращения: 22.08.2018).
  5. Christian Hilgers. Post-Mortem Memory Analysis of Cold-Booted Android Devices [Электронный ресурс].// IEEE Xplore Digital Library — Режим доступа к ресурсу: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6824082 (дата обращения: 15.09.2018)
  6. Haiyu Yang. A Tool for Volatile Memory Acquisition from Android Devices [Электронный ресурс]. // ResearchGate — Режим доступа к ресурсу: https://www.researchgate.net/publication/308300539_A_Tool_for_Volatile_Memory_Acquisition_from_Android_Devices (дата обращения: 16.09.2018).
  7. About Volatility Framework [Электронный ресурс]. // Volatility Foundation — Режим доступа к ресурсу: https://www.volatilityfoundation.org/about (дата обращения: 16.09.2018).
  8. Описание утилиты Mem [Электронный ресурс]. // GitHub — Режим доступа к ресурсу: https://github.com/MobileForensicsResearch/mem (дата обращения: 23.10.2018).
  9. Описание утилиты LiME [Электронный ресурс]. // GitHub — Режим доступа к ресурсу: https://github.com/volatilityfoundation/volatility/wiki/Android (дата обращения: 23.10.2018).
  10. Описание утилиты Memfetch [Электронный ресурс]. // GitHub — Режим доступа к ресурсу: https://github.com/citypw/lcamtuf-memfetch (дата обращения: 23.10.2018).
  11. Описание утилиты AMExtractor [Электронный ресурс]. // GitHub — Режим доступа к ресурсу: https://github.com/ir193/AMExtractor (дата обращения: 23.10.2018).
  12. Описание утилиты ANDROPHSY [Электронный ресурс]. // GitHub — Режим доступа к ресурсу: https://github.com/scorelab/ANDROPHSY (дата обращения: 23.10.2018).
  13. Android Developer [Электронный ресурс]. // Google Developers — Режим доступа к ресурсу: https://developer.android.com/guide/topics/connectivity/wifip2p.html (дата обращения: 18.11.2018).
  14. Bluetooth overview [Электронный ресурс]. // Google Developers. — Режим доступа к ресурсу: https://developer.android.com/guide/topics/connectivity/bluetooth (дата обращения: 23.11.2018).
  15. SSHFS [Электронный ресурс]. // ArchLinux — Режим доступа к ресурсу: https://wiki.archlinux.org/index.php/SSHFS (дата обращения: 08.11.2018).
  16. Описание утилиты Rsync [Электронный ресурс]. // Rsync — Режим доступа к ресурсу: https://rsync.samba.org/ (дата обращения: 23.11.2018).
  17. Описание утилиты SCP [Электронный ресурс]. // Die.net — Режим доступа к ресурсу: https://linux.die.net/man/1/scp (дата обращения: 08.12.2018).
  18. Описание утилиты SFTP [Электронный ресурс]. // SSH Communications Security — Режим доступа к ресурсу: https://www.ssh.com/ssh/sftp/#sec-SCP-Command-on-Linux/ (дата обращения: 08.12.2018).
  19. Полезные Unix утилиты. Netcat [Электронный ресурс]. // Записки под рукой — Режим доступа к ресурсу: https://handynotes.ru/2010/01/unix-utility-netcat.html (дата обращения: 08.12.2018).
  20. The Secure Shell (SSH) Connection Protocol [Электронный ресурс]. // IETF — Режим доступа к ресурсу: https://tools.ietf.org/html/rfc4254 (дата обращения: 13.12.2018).

P.S Продолжение следует...

Комментарии (3)


  1. Foxek
    30.10.2019 00:54
    +1

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


    • Явно чья-то дипломная работа. Ужасно много воды, общих фраз и непонятно зачем добавленной информации.
    • Описание разделов в начале статьи весьма слабо соответствуют тому, что эти разделы содержат.
    • Есть ряд неточностей связанных с Android ОС, но скорее всего точное ее описание не являлось целью (хоть и обозначено в первом разделе), по этой причине обошлись общими выражениями

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


    1. Foxek
      30.10.2019 00:59
      +1

      Продолжение следует в конце статьи звучит как угроза получить весь ваш диплом частями на Хабре)))
      Уберите лишнее, и все хорошо ляжет в одну статью)


  1. vin2809
    30.10.2019 08:59

    Я, конечно, поддержал автора за проделанную работу, но, тем не менее, полностью согласен с пользователем Foxek.


    От себя могу добавить, что, например, выводы под таблицами (которые почему-то называются рисунками) явно высосаны из пальца...