Https problem on android

Содержание
  1. Эпидемия на смартфонах Android: приложения отказываются работать и запускаться, включая Gmail, банки и Google Pay
  2. Особенно массово затронуты смартфоны Samsung
  3. Проблемы ОС Android и способы их решения
  4. Константин Иванов
  5. 1. Проблемы с аккумулятором
  6. 2. Проблемы с производительностью
  7. 3. Проблемы с подключением
  8. 4. Проблемы с агрессивным энергосбережением
  9. 5. Проблемы с Google Play Store
  10. В 2021 году многие сайты перестанут открываться на старых версиях Android
  11. Проблемы безопасности Android-приложений: классификация и анализ
  12. 1. Устройство ОС Android
  13. 2. Проблемы безопасности
  14. 2.1. Уязвимости ядра Linux и его модулей
  15. 2.2. Уязвимости модификаций и компонентов производителей устройств
  16. 2.3. Уязвимости модулей в машинных кодах
  17. 2.4. Уязвимости механизмов межкомпонентного взаимодействия
  18. 2.5. Уязвимости в самих приложениях
  19. 2.6. Уязвимости во встроенных сервисах и библиотеках
  20. 2.7. Интернет-источники
  21. 2.8. Уязвимости аппаратуры и связанных с ней модулей и протоколов
  22. 3. Инструменты для анализа Android-приложений
  23. Статический анализ
  24. Динамические и смешанные инструменты анализа
  25. 4. Идеальная система полносистемного анализа платформы Android
  26. 1. Поддержка загрузки прошивок от производителей различных устройств
  27. 2. Возможность исполнения отдельных кусков машинного кода на реальном устройстве
  28. 3. Проброс данных от датчиков оборудования реальных устройств в эмулятор
  29. 4. Совместный анализ на уровне Java-кода и машинного кода
  30. 5. Поддержка анализа межкомпонентного взаимодействия
  31. 6. Защита от статических эвристик обнаружения
  32. 7. Минимальные изменения прошивок Android
  33. 8. Поддержка полносистемного анализа помеченных данных с отслеживанием потоков управления
  34. 9. Поддержка символьного исполнения и частичного исполнения с конкретными значениями с использованием данных, полученных из статического анализа кода (concolic execution — смешанное исполнение)
  35. Заключение

Эпидемия на смартфонах Android: приложения отказываются работать и запускаться, включая Gmail, банки и Google Pay

Особенно массово затронуты смартфоны Samsung

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

Приложения не открываются, выдают ошибки и так далее. Причём среди них такие важные, как Gmail, многочисленные банковские приложения, Google Pay и многие другие.

Жалобы на странное поведение приложений присутствуют в изобилии в социальной сети Twitter и на новостном социальном ресурсе Reddit, а также подтверждаются DownDetector.

Интересно, что особенно много жалоб на сбои наблюдается среди пользователей смартфонов Samsung, в том числе флагманских серий Galaxy S20, Galaxy S21, Galaxy Note20, а также популярных Galaxy A50 и A70.

На официальной страничке Google о доступности сервисов Google Workspace сообщается, что компания о проблеме знает и решает её. Google уже подтвердила, что проблема связана с системным приложением WebView, отвечающим за открытие веб-страниц в приложениях, которое и приводит некоторые приложения на Android к краху.

В сети в качестве временного решения энтузиасты предлагают удалить обновления WebView, фактически откатив приложение к заводским настройкам. Это можно сделать как через Google Play Store, так и из списка установленных приложений в настройках смартфона. Удалять само приложение не надо, только обновления. Это решение работает не в 100% случаев, но у многих пользователей.

Источник

Проблемы ОС Android и способы их решения

Константин Иванов

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

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

1. Проблемы с аккумулятором

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

Возможное решение

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

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

2. Проблемы с производительностью

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

Возможное решение

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

Причиной проблем с производительностью может быть и вредоносное приложение. Загрузите устройство в безопасном режиме (то, как это сделать, различается в зависимости от устройства) и посмотрите, сохраняется ли проблема. Если нет, виновато действительно приложение, и тогда есть два способа решения. Первый – удалить последние установленные приложения. Второй – сбросить устройство к заводским настройкам – это, конечно, крайний случай, поскольку вы потеряете всю свою информацию. Так что, собираясь сбросить устройство, проверьте, все ли нужные файлы вы сохранили.

3. Проблемы с подключением

Приобретая новое устройство, вы можете неожиданно столкнуться с проблемами подключения по Wi-Fi and Bluetooth. Есть ряд проблем, связанных с конкретными устройствами, но ниже описаны общие решения – те, которые стоит попробовать в первую очередь.

Возможное решение

Проблемы с Wi-Fi

  • Выключите устройство и роутер по меньшей мере на 10 секунд, затем включите и повторите попытку подключения.
  • Зайдите в Настройки – Энергосбережение и убедитесь, что эта опция отключена.
  • Используйте Wi-Fi Analyzer и проверьте, насколько забит ваш канал, поищите лучший вариант.
  • «Забудьте» подключение, для этого зайдите в Настройки – Wi-Fi, долгий тап по нужной сети и выберите «Забыть». Затем подключитесь снова.
  • Проверьте, не устарел ли ваш роутер.
  • Проверьте ПО на самом устройстве, убедитесь, что оно не устарело.
  • Зайдите в Wi-Fi – Настройки – Дополнительно и проверьте, разрешен ли доступ MAC адресу вашего устройства в MAC фильтре роутера.

Проблемы Bluetooth

  • Если они связаны с подключением к машине, сверьтесь с инструкцией производителя и обновите подключение
  • Проверьте, не пропустили ли вы необходимый шаг в процессе подключения
  • Зайдя в Настройки – Bluetooth, проверьте, не нуждается ли что-то в зарядке
  • Зайдя в Настройки – Bluetooth, удалите все предшествующие настройки подключения устройств и проведите «спаривание» с чистого листа.
  • Если возникла проблема с множественным подключением устройств, ее может устранить только будущее обновление.

4. Проблемы с агрессивным энергосбережением

В каждом Android смартфоне есть тот или иной режим энергосбережения, а если ваше устройство имеет на борту Android 6.0 Marshmallow или выше, в нем также имеется и режим Doze. Это очень полезно, когда вам требуется выжать максимум из аккумулятора, но вместе с тем может возникнуть проблема пропуска уведомлений.

Возможное решение

Если вы с этим столкнулись и уведомления от приложений, таких как Gmail, Whatsapp, Facebook, приходят с задержкой или вообще не поступают, вам стоит перенести эти приложения в разделе Батарея в список не подлежащих оптимизации. На некоторых устройствах это будет меню Настройки – Настройки батареи (три вертикальные точки) – Оптимизация батареи, открываете «Все приложения» в выпадающем меню, идете в нужное приложение и тапаете «Не оптимизировать». Если этот список не будет особенно расширяться, вы не увидите никаких заметных последствий для времени жизни батареи.

5. Проблемы с Google Play Store

Практически на любом Android смартфоне за пределами Китая предустановлен Google Play Store, и именно там мы добываем нужные нам приложения. Однако бывают ситуации, в которых Google Play Store перестает работать как надо.

Возможное решение

Универсального способа решить проблему с Google Play Store не существует. Но вам стоит в первую очередь убедиться, что дело именно в вашем устройстве, а не в сервисах Google. После этого возможны несколько шагов: принудительное закрытие приложение, очистка кэша Play Store, проверка того, какие приложения или сервисы, будучи отключенными, повлияли на работу магазина приложений, и многое другое. Наконец, можно попробовать вернуть Google Play Store к более старой версии (Настройки – Приложения – Google Play Store – Удалить обновления), а потом снова обновить приложение.

Источник

В 2021 году многие сайты перестанут открываться на старых версиях Android

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

Один из ведущих мировых центров сертификации Let’s Encrypt, который предоставляет сертификаты для TLS-шифрования примерно 30% всех доменов, объявил, что перейдёт на использование своего корневого сертификата. Когда центр Let’s Encrypt был основан, он подал заявку на включение собственного корневого сертификата ISRG Root X1 во все браузеры и операционные системы. Все сертификаты на сегодняшний день имеют перекрёстную подпись благодаря DST Root X3 от IdenTrust, который уже много лет используется в Windows, macOS, Android и большинстве других платформ. Договор Let’s Encrypt с IdenTrust истекает 1 сентября 2021 года, и центр не планирует продлевать соглашение о перекрёстном подписании сертификата.

Читайте также:  Академия вайфу полная версия андроид

Это означает, что все браузеры и операционные системы без корневого сертификата Let’s Encrypt больше не смогут отображать сайты, которые его используют. В сообщении говорится, что в число уязвимых попадут устройства под управлением Android 7.1.1 или более ранней версии операционной системы. А это третья часть всех смартфонов, планшетов и прочих гаджетов на Android.

Несмотря на то, что соглашение истекает 1 сентября 2021 года, Let’s Encrypt прекратит использовать кросс-подписи по умолчанию, начиная с 11 января 2021 года. Сайты и службы по-прежнему будут иметь возможность создавать сертификаты с перекрёстной подписью, но только до сентября следующего года. Единственный обходной путь для устаревших Android-устройств — установить браузер Firefox, который использует собственное хранилище сертификатов, включая ISRG. Однако это никак не поможет нормальной работе остальных приложений.

Источник

Проблемы безопасности Android-приложений: классификация и анализ

Использование смартфонов в повседневной жизни не ограничивается голосовыми звонками и СМС. Возможность загружать и выполнять программы, а также мобильный доступ в Интернет привели к появлению громадного числа мобильных приложений. Функциональность современного смартфона составляют браузеры, клиентские программы социальных сетей, офисные приложения и всевозможные сервисы, работающие в Сети. Android-устройства заняли бóльшую часть рынка смартфонов за счет открытой архитектуры платформы Android и удобного API разработчика. На данный момент Android является наиболее популярной мобильной ОС с долей рынка более 75%. Количество приложений, загруженных из магазина Google Play, в 2016 году составило 65 миллиардов [1].

Параллельно наблюдается и бурный рост числа вредоносных приложений: в 2015 году их было обнаружено 2,3 миллиона [3]. Кроме того, около 60% Android-устройств работают на версиях ОС с известными уязвимостями, и они потенциально могут быть атакованы злоумышленниками [6]. Эти угрозы, в свою очередь, привели к развитию средств защиты. Официальный магазин Google Play ввел фильтрацию приложений с помощью песочницы Google Bouncer. Антивирусные компании стали выпускать свои продукты под Android (хотя, как показано в [8], многие из них сами по себе содержат опасные уязвимости). Число научных публикаций по данной теме также возросло: одна из обзорных работ 2015 года о решениях безопасности для Android [2] насчитывает более 40 проектов и упоминает далеко не все известные на данный момент исследования. В связи с тем, что мобильные устройства являются источником и хранилищем большого количества конфиденциальных данных, проблема безопасности ОС Android и ее приложений стоит особо остро.

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

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

1. Устройство ОС Android

В основе ОС Android лежит ядро Linux с некоторыми архитектурными изменениями, которые были сделаны инженерами Google. Приложения для операционной системы Android разрабатываются на языке Java. Начиная с версии Android 1.5 был представлен набор инструментов Android NDK, который позволяет разрабатывать модули приложений на языках С и С++ и компилировать их в машинный код [4]. Приложения поставляются в виде файлов специального формата APK, который является ZIP-архивом с определенной структурой каталогов и файлов. APK-файл приложения содержит:

  • манифест;
  • модули, скомпилированные в машинный код (разделяемые библиотеки .so);
  • различные ресурсы приложения;
  • DEX-файл;
  • прочие необходимые файлы.

Начиная с версии Android 4.4 поддерживаются две среды выполнения приложений: Dalvik VM и ART. Следует отметить, что процесс подготовки APK-файла не изменился, изменился только процесс установки приложений в новой среде выполнения ART. Начиная с версии 5.0 среда выполнения ART стала использоваться по умолчанию вместо Dalvik VM.

Среда выполнения Java-программ Dalvik VM на Android сильно отличается от «обычной» Java VM. Во-первых, при компиляции Java-программы она компилируется в байт-код виртуальной машины Dalvik, который сильно отличается от байт-кода виртуальной машины HotSpot. Виртуальная машина Dalvik является регистровой, что делает ее выполнение на RISC-архитектурах, часто используемых в мобильных устройствах, более эффективным. Также при разработке Dalvik учитывались ограничения памяти в мобильных устройствах. Начиная с версии Android 2.2 среда выполнения Dalvik содержит JIT-компилятор, который компилирует «горячие» куски кода Java-программ в машинный код [5].

Стандартные библиотеки Java были либо заменены на доработанные библиотеки из пакета Apache Harmony либо написаны заново. При компиляции Java-программы получается файл формата DEX (Dalvik Executable), который содержит байт-код для виртуальной машины Dalvik. Формат файла был разработан с целью сокращения объема занимаемой памяти и существенно отличается от стандартного формата JAR. Для вызова модулей, реализованных в машинном коде, из Java-программ используется интерфейс JNI. Стоит отметить, что имеется возможность подгружать машинные модули динамически по сети с помощью компонента DexClassLoader.

2. Проблемы безопасности

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

  1. Вначале происходит системный вызов fork для создания потомка от процесса Zygote (см. рис. 1).
  2. В этом новом процессе открывается файл запускаемого приложения (системный вызов open).
  3. Происходит чтение информации о файлах классов (classes.dex) и ресурсов из файла приложения. Происходит открытие сокетов для IPC.
  4. Выполняется системный вызов mmap для отображения файлов приложения в память.
  5. Среда выполнения производит настройку необходимого окружения и выполняет приложение (интерпретирует байт-код Dalvik или передает управление функциям в исполняемом коде в случае ART [7]).

На уровне ядра ОС Android каждое приложение является отдельным процессом с уникальными значениями user/group ID, которые даются ему при установке. Таким образом, каждая программа работает в своей песочнице. Начиная с версии 4.3 в дополнение к этой политике безопасности добавилось использование компонента мандатного контроля доступа SELinux [10].

Рис. 1. Запуск нового приложения в ОС Android

По умолчанию приложение ограничено в своих возможностях и не может сделать ничего, чтобы негативно повлиять на другое приложение или пользователя: ни прочитать пользовательские данные, ни модифицировать системные приложения; отсутствует доступ к сети. Для получения доступа к различным ресурсам приложение обращается к сервисам ОС Android. Разрешения на доступ задаются статически в файле манифеста приложения и выдаются приложению во время его работы по мере необходимости. Система запрашивает у пользователя согласие на выдачу этих разрешений во время установки или во время обновления приложения. Ответственность за выдачу доступа приложению лежит на пользователе, он самостоятельно решает, какому приложению давать разрешения на определенные действия, а какому не давать, — во время его установки. Использование такого подхода, при котором все разрешения выдаются разом при установке приложения, привело к тому, что пользователи стали раздавать полномочия приложениям, не задумываясь о последствиях. В свою очередь, приложения стали запрашивать все больше разрешений по мере расширения их функциональности. В Android 6 Marshmallow данная система заменена на другую: приложение запрашивает доступ к ресурсам у пользователя во время его работы, а пользователь может либо разрешить доступ, либо запретить его [11].

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

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

Компоненты под названием Service [9] производят фоновую обработку. Когда Activity нужно выполнить какую-то операцию, например загрузку файла или проигрывание музыки, и продолжить работу, когда пользователь перешел в другое приложение или свернул текущее, приложение запускает сервис, цель которого — выполнение этой операции. Разработчики могут использовать Service в качестве приложения-демона, стартующего во время загрузки системы. Компонент Service, как правило, поддерживает RPC (Remote Procedure Call), поэтому другие компоненты системы могут обращаться к нему.

Компонент Content provider сохраняет и обменивается данными, используя интерфейс реляционных баз данных. Каждый Content provider содержит уникальный URI для данных и обрабатывает запросы к нему в виде очередей SQL (Select, Insert, Delete).

Читайте также:  Андроид асус zc451tg как прошить

Компоненты Broadcast receiver выступают в роли ящиков для сообщений от других приложений.

Проблемы безопасности, возникающие в ОС Android, рассматривались в работах [2, 12, 13], но классификация проблем по категориям дана только в статье [2]. Эта классификация достаточно подробная и охватывает многие проблемы безопасности, но у нее есть ряд существенных недостатков: некоторые категории охватывают широкую область уязвимостей, в то время как другие достаточно специализированы; приведенные категории уязвимостей никак не соотносятся с программными уровнями архитектуры ОС Android; не охвачены уязвимости из интернет-источников, а также слабо охвачены уязвимости в протоколах и аппаратуре (п. 2.7 и 2.8 в нашей классификации). Предлагаемая ниже классификация уязвимостей устраняет эти недочеты.

2.1. Уязвимости ядра Linux и его модулей

К данной категории проблем относятся уязвимости, которые присущи всем ОС, основанным на той же версии ядра Linux, что и ОС Android. Эксплойты, использующие уязвимости в ядре, могут получить данные пользователя или права администратора системы. Повысив привилегии процесса до прав администратора системы, вредоносная программа может отключить систему безопасности Android, вставить в существующие программы вредоносный код и установить руткит. К тому же производители различных устройств добавляют в ядро модули для своих устройств; в этих модулях также могут быть уязвимости. Примеры уязвимостей повышения привилегий описаны в [14, 15, 16, 64]. Также стоит отметить, что совсем недавно была обнаружена уязвимость в компоненте ashmem для межпроцессного взаимодействия в Android [62].

2.2. Уязвимости модификаций и компонентов производителей устройств

В последнее время производители различных мобильных устройств стали выпускать свои модифицированные прошивки Android. Эти прошивки могут содержать различные приложения и сервисы, разработанные производителем устройства, которые чаще всего нельзя удалить. Например, в октябре 2016 года был обнаружен скрытый бэкдор в прошивках Foxconn [63]. Анализ этих сервисов, приведенный в статьях [17], показывает, что в них содержится от 65 до 85% уязвимостей, обнаруженных во всей системе. К тому же стоит отметить, что уязвимости, которые были обнаружены и исправлены в основной ветке Android, могут долгое время оставаться в ветках производителей устройств [18, 19].

2.3. Уязвимости модулей в машинных кодах

Android-приложения поддерживают запуск машинного кода через интерфейс JNI. Это порождает еще одну категорию уязвимостей, связанную с широко известными уязвимостями утечек памяти в низкоуровневых языках (например, в С и С++ ) [20]. Поскольку на уровне процессов ОС Android нет никаких ограничений, кроме накладываемых ядром Linux, сторонние библиотеки в машинных кодах могут использовать разрешения, выданные всему приложению, для совершения вредоносной активности (см. также следующую категорию уязвимостей, п. 2.4). Также модули приложения в машинных кодах используются авторами вредоносных приложений, чтобы обойти инструменты анализа и мониторинга уровня Android. Эти модули также могут использовать техники противодействия анализу, используемые в обычных программах.

2.4. Уязвимости механизмов межкомпонентного взаимодействия

К данной категории относятся уязвимости, связанные с взаимодействием между различными компонентами приложений. Так как на уровне операционной системы приложение ограничено песочницей процесса, ему необходим механизм доступа к компонентам ОС Android для взаимодействия с ними. Это происходит через устройство /dev/Binder и различные другие сервисы ОС Android. Как уже говорилось выше, параметры этого доступа задаются в файле манифеста, в виде XML-файла с разрешениями. Анализ, приведенный в статьях [12, 21, 22, 23, 24, 25], указывает на недочеты этой системы ограничений и показывает пути их обхода. Так, например, приложение может воспользоваться правами доступа другого приложения и получить с помощью него данные через ICC. Также могут быть уязвимости, связанные со сторонними библиотеками. Сторонние библиотеки, используемые в приложении, получают тот же набор ограничений, что и само приложение. Поэтому сторонние библиотеки могут использовать разрешения, выданные всему приложению, для совершения вредоносной активности. Приложения к тому же могут перехватывать системные события, пересылаемые через широковещательный запрос, и сохранять информацию о входящих звонках и СМС.

2.5. Уязвимости в самих приложениях

Каждое приложение сохраняет какие-то данные о пользователе. Эти данные должны быть защищены должным образом, чтобы к ним не могли получить доступ другие приложения, — но такая защита предусмотрена не всегда. Например, Skype в одной из версий приложения сохранял базу данных контактов в открытом виде на диске. Таким образом, контакты можно было прочитать любым другим приложением, у которого есть доступ к диску [26]. Также приложения могут использовать криптографические библиотеки с ошибками [27] или же какие-то собственные реализации. К тому же не все приложения производят хорошую аутентификацию и авторизацию пользователя. Кроме этого, приложения могут позволять SQL-инъекции и подвержены атакам XSS. Также стоит отметить, что большинство разрабатываемых приложений написаны на Java без использования какой-либо защиты для бинарного кода, а байт-код Java, как известно, легко поддается дизассемблированию и анализу. Стоит отметить, что к этой категории уязвимостей относится также известный список Mobile OWASP-10. Многие подобные уязвимости описаны в [28, 29].

2.6. Уязвимости во встроенных сервисах и библиотеках

Стандартный набор библиотек и сервисов, работающих в Android, также содержит уязвимости. Например, недавно была обнаружена уязвимость Stagefright в библиотеке для отображения видео в MMS-сообщениях, которой были подвержены все версии Android, начиная с 2.2 [30]. Позже была обнаружена уязвимость в компоненте MediaServer, которой подвержены все версии Android c 2.3 до 5.1 [31]. В статье [13] показаны уязвимости рантайма Dalvik: запустив большое количество процессов в системе, можно добиться, что последующий процесс запустится с правами администратора.

2.7. Интернет-источники

Android-приложения распространяются через широкое количество источников помимо официального магазина приложений. Поскольку Android-приложения написаны в основном на Java, то они легко поддаются обратной разработке и переупаковке с использованием вредоносного кода [32, 33]. Кроме того, как было показано в статье [34], песочницу анализа приложений Bouncer, используемую в официальном каталоге, легко обойти. Поэтому и в самом официальном магазине содержится большое количество вредоносных программ. Кроме этого, Android поддерживает удаленную установку приложений через Google Play на устройства, связанные с Google-аккаунтом. Таким образом, если взломать учетную запись Google для устройства, можно установить из Google Play вредоносное приложение, которое туда предварительно загрузил злоумышленник. При этом на экране мобильного телефона не требуется каких-либо подтверждений этих действий, поскольку они запрашиваются в окне браузера и приложение устанавливается на телефон в фоновом режиме при получении доступа к Интернету. Также к этой категории уязвимостей относится использование социальной инженерии, когда для продолжения работы предлагают установить приложение из неавторизованного источника [35].

2.8. Уязвимости аппаратуры и связанных с ней модулей и протоколов

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

Примерами таких атак служат атака типа «отказ в обслуживании» на технологию Wi-Fi Direct [36], кража данных кредитных карт с помощью NFC [37], исполнение удаленного кода через Bluetooth [38], установка вредоносного приложения без ведома пользователя через adb с помощью механизма бэкапов [39]. В работе [13] показаны уязвимости, с помощью которых можно повысить привилегии приложения, используя ошибки в реализации протокола adb.

3. Инструменты для анализа Android-приложений

С того момента, как были выпущены первые Android-телефоны, было написано большое количество инструментов для анализа Android-приложений. Наиболее полный обзор этих инструментов содержится в статьях [40, 41, 42, 2]. В первых трех источниках инструменты классифицированы по видам анализа: статический, динамический и их объединение (смешанный). В статье [2] используется классификация инструментов по стадиям развертывания приложения на Android-устройстве. В нашей работе используется классификация по видам анализа.

Статический анализ

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

  • Инструменты, извлекающие метаинформацию из манифеста приложения и предоставляющие информацию о запрашиваемых разрешениях, компонентах Activity, сервисах и зарегистрированных Broadcast receivers. Метаинформация часто используется позже в динамическом анализе для запуска функций приложения.
  • Инструменты для модификации существующего байт-кода приложения с использованием техники инструментирования. Это позволяет, например, добавлять трассирование функциональности в существующие приложения.
  • Инструменты, которые реализуют декомпилятор или дизассемблер байт-кода Dalvik.

Одним из наиболее популярных инструментов обратной разработки является Apktool [43]. Он имеет возможности декодирования ресурсов приложения приблизительно в оригинальную форму, переупаковки приложений обратно в APK/JAR-файлы, отладку байт-кода smali. Для декомпилирования и компилирования в apktool байт-кода Dalvik используется другой широко известный проект smali/backsmali [44]. Также для дизассемблирования байт-кода Dalvik часто применяется инструмент Dedexer [45].

Radare2 [46] — инструмент с открытым исходным кодом для дизассемблирования, анализа, отладки и изменения бинарных файлов Android-приложения.

Один из самых разносторонних инструментов для статического анализа — Androguard [47]. Он может дизассемблировать и декомпилировать приложение обратно в исходный код Java. Получив два APK-файла, он может посчитать коэффициент их похожести для детектирования переупакованных приложений или известных вредоносных приложений. Благодаря своей гибкости он используется в некоторых инструментах смешанного анализа.

Более полный список инструментов статического анализа можно найти в статьях, указанных выше. Следует отметить, что статический анализ имеет ряд существенных ограничений, связанных с тем, что имеется лишь абстрактное представление о программе. Например, статический анализ становится намного сложнее, если к программе применены обфусцирующие преобразования. В зависимости от сложности обфускации некоторые (а может, и все) статические подходы могут стать абсолютно бесполезными. Если вызов каждого метода делается только косвенно, вряд ли удастся построить граф вызовов программы. В Android такое преобразование можно сделать, используя Java Reflection API для вызова методов и создания объектов вместо использования обычных вызовов и инструкций создания нового объекта. На рынке решений по защите исходного кода уже представлено несколько продуктов для обфускации файлов Android-приложений, которые могут свести на нет все преимущества статического анализа [48, 49]. Более подробно о техниках противодействия статическому анализу можно почитать в 50.

Читайте также:  Как прошить приставку ростелеком под андроид

Динамические и смешанные инструменты анализа

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

Рис. 2. Уровни архитектуры песочницы Android

Архитектура песочницы Android представляет из себя эмулятор Android (чаще всего QEMU), внутри которого работает ОС Android. Инструментирование производится либо на уровне эмулятора, либо на уровне ОС Android, либо и там и там. Уровень ОС Android также делится на четыре подуровня:

  • приложения,
  • среда разработки приложения,
  • рабочее окружение приложения и библиотеки,
  • ядро и его модули.

Техники, используемые в динамическом анализе приложения:

  • Отслеживание помеченных данных. Такие инструменты используются, чтобы отслеживать потенциальные утечки конфиденциальной информации.
  • Мониторинг системных вызовов. Инструменты могут записывать системные вызовы с помощью инструментирования виртуальных машин, strace или модуля ядра. Это позволяет производить трассировку машинного кода.
  • Трассировка методов (функций). Инструменты могут отслеживать вызовы Java-методов приложения в виртуальной машине Dalvik, вызовы функций в машинных кодах через JNI, системные вызовы и прерывания.

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

4. Идеальная система полносистемного анализа платформы Android

Статьи [40, 41, 42, 2] насчитывают более 40 различных инструментов как для анализа Android-приложений, так и для анализа ОС Android в целом. Как было замечено в статьях [34, 60, 61], существующие инструменты динамического анализа обладают рядом серьезных недостатков. Данные недостатки присущи и стандартному инструменту анализа приложений в магазине Google Play — Google Bouncer, вследствие чего вредоносные приложения могут распространяться через официальный магазин, не будучи обнаруженными.

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

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

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

Список требований к данной системе:

1. Поддержка загрузки прошивок от производителей различных устройств

Существенным недостатком всех существующих инструментов анализа ОС Android и ее приложений является невозможность запуска прошивок от производителей устройств в доступных эмуляторах. Как было показано в п. 2.2, модифицированные прошивки от производителей устройств содержат от 65 до 85% уязвимостей, обнаруженных во всей системе. На данный момент не существует инструментов для анализа, которые позволяли бы запускать прошивки от производителей. Все существующие решения работают на специальной сборке Android для виртуальной платформы GoldFish.

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

По информации из статей [34, 61], существуют способы выявления работы внутри эмулятора. Как правило, выявляется выполнение в эмуляторе QEMU в режиме бинарной трансляции, поскольку именно на нем основано большинство песочниц. Способы основаны на разном поведении определенных участков машинного кода в эмуляторе и на реальном устройстве. Так как изменение механизма бинарной трансляции представляется сложной задачей, исполнение отдельных кусков машинного кода на реальном устройстве было бы хорошим подходом для противостояния данным способам обнаружения эмулятора.

3. Проброс данных от датчиков оборудования реальных устройств в эмулятор

Как было описано в статьях [34, 61], существуют способы определения эмулятора, основанные на данных, получаемых от датчиков оборудования, таких как акселерометр, гироскоп, GPS, датчик света, силы тяжести. Выходные значения этих датчиков основаны на информации, собранной из окружающей среды, и следовательно, реалистичная их эмуляция является сложной задачей. Присутствие такого рода датчиков — основное различие между смартфонами и настольными компьютерами. Увеличивающееся число датчиков на смартфонах дает новые возможности для идентификации мобильных устройств.

4. Совместный анализ на уровне Java-кода и машинного кода

Затруднением для многих систем анализа Android-приложений является то, что приложения содержат как модули в байт-коде Dalvik, так и модули в машинных кодах. Из существующих решений поддержка анализа всех модулей реализована только в DroidScope [57] и CopperDroid [58, 59]. Идеальная система анализа должна позволять отслеживать потоки данных и управления на уровне пользовательского и системного кода. Для пользовательского кода, когда это возможно, следует поднимать уровень представления до Java-кода, являющегося высокоуровневым языком разработки. Также необходимо обеспечивать «склейку» потоков данных и управления при переходе от машинного кода к Java и наоборот.

5. Поддержка анализа межкомпонентного взаимодействия

В статье о CopperDroid [58] показана реализация поддержки анализа межкомпонентного взаимодействия как внутри Android-приложения, так и между различными приложениями. Это сделано с помощью перехвата данных, проходящих через компонент ядра Binder, так как все взаимодействие проходит через него. Подход, реализованный в CopperDroid, позволяет не производить модификации исходного кода Android, что делает возможность его переноса на новые версии ОС Android и новую среду запуска приложений ART с минимальными изменениями.

6. Защита от статических эвристик обнаружения

Как показано в статьях [[57], 61], большинство песочниц для анализа можно обнаружить, просто проверив значения IMEI, IMSI или номера сборки прошивки у устройства. Также эмулятор может быть обнаружен, если проверить на стандартные значения таблицу маршрутизации. Из существующих решений защита от обнаружения по статическим эвристикам реализована только в проекте ApkAnalyzer [65].

7. Минимальные изменения прошивок Android

Также стоит отметить, что многие решения динамического анализа основаны на инструментировании кода различных компонентов ОС Android, в частности виртуальной машины Dalvik. Это осложняет их дальнейшую поддержку, а также миграцию в новую среду запуска приложений ART. Многие песочницы ограничиваются только анализом кода компонентов Java, тогда как все больше и больше приложений используют компоненты в машинных кодах.

8. Поддержка полносистемного анализа помеченных данных с отслеживанием потоков управления

Стоит отметить, что многие из инструментов динамического анализа используют анализ помеченных данных, используя для этого инструмент TaintDroid [56]. В статье [60] были показаны успешные способы обхода анализа данного инструмента. Причиной успешности данных атак являются следующие факты: 1) TaintDroid отслеживает только потоки данных и не отслеживает потоки управления, 2) TaintDroid отслеживает потоки данных только на уровне виртуальной машины Dalvik и проходящих через интерфейс JNI. Возможные пути разрешения данных недостатков описаны в [60] и дают направление для дальнейших исследований.

9. Поддержка символьного исполнения и частичного исполнения с конкретными значениями с использованием данных, полученных из статического анализа кода (concolic execution — смешанное исполнение)

В статье [51] описана среда анализа, реализующая данный подход. Эта среда сочетает в себе техники статического анализа графа потока управления программы, символьного исполнения программы и исполнения программы с конкретными значениями. Подходы, сочетающие техники символьного исполнения и исполнения программы с конкретными значениями, описаны в статьях [52, 53, 54, 55]. Целью данного метода является наблюдение путей исполнения, которые приводят к секциям программы, содержащим «интересный» код. Под «интересным» кодом понимают такой код, выполнение которого зависит от каких-либо произошедших внешних событий или настроек окружения системы. Например, код классов в Android, динамически подгружаемый с помощью компонента DexClassLoader или вызов «машинных» методов через интерфейс JNI.

Заключение

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

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

Несмотря на такую пессимистичную картину, в последнее время наблюдается ряд позитивных движений в сторону улучшения безопасности Android. В частности, компания Google запустила программу выпуска обновлений безопасности: они выходят каждый месяц и некоторые вендоры все же добавляют их в свои версии прошивки (устройства, поддерживаемые Google, получают эти обновления первыми). Кроме того, пользователи могут самостоятельно установить на свои устройства версию ОС Android CyanogenMod (ныне LineageOS), которая поддерживает эти обновления безопасности. Также пользователь может снизить риски, если ограничится набором популярных приложений только из официального магазина Google Play. Уязвимости типа RCE (удаленное выполнение кода) встречаются все реже, поэтому доставка вредоносных приложений на телефоны чаще происходит через фишинговые сайты, неофициальные магазины приложений или с помощью социальной инженерии. Среднестатистический пользователь ОС Android, соблюдая определенную технику безопасности, может быть спокоен за свой смартфон.

Источник

Оцените статью