Android tampered что это

Tampering Detection in Android

Dec 22, 2016 · 4 min read

Tampering detection is a preventive measure used in mobile applications to help ensuring that a third party hasn’t recompiled and published your application under their account or store without your consent.

In this article we will look at two different approaches do detect and mitigate the tampering of Android applications.

Check if application has been renamed

When you create a new Android Application you’re asked to give it a package name, which in Java is really your reverse domain along with the application name. If we were creating a new Hello World application here, we would probably end up having a package name called info.androidsecurity.helloworld .

I n an existing application we can use getApplicationContext().getPackageName() to return the package name for that application.

With that, we can now check that if our application was renamed to anything else, we’d have the chance to do something about it, or at the very least inform the user that they may not be running the original version of it.

To do that, we can store the name of our package within our application, and then check that every time the application is run.

Verdict & Effectiveness

We have very quickly added simple tampering detection to our app. Depending on the approach we take when tampering is detected, we can as much as get alerted about tampering in real-time.

Adding this kind of tampering detection adds very small footprint to your code, and will help stopping hackers who aren’t absolutely determined they should break into your code.

That is because the approach above uses string comparison and things can get decompiled and modified fairly easily.

Usually it’s a good idea to store information like PACKAGE_NAME in a different class, encrypted or on a remote server. In this case however if a hacker went through the trouble of decompiling our app, they could very easily just delete the bit of logic that checks for the package name.

Check if application has been published without your consent.

It’s very common to have Android applications republished on alternate markets or their APK s made available for download.

For a hacker, it’s much easier to tamper with an APK than to download it directly from a store via their devices. Here’s how to check if a user is trying to run your APK directly without downloading it from a store:

If the installer is null , the user didn’t download this app via conventional methods and most likely got the APK straight from an alternate resource. We would have expected it to be something like com.android.vending or com.amazon.venezia for Google and Amazon respectively.

But what happens if the value of installer is not null?

Alternate stores will return their own package name when a user downloads your app from them, so just checking that the installer is null won’t always work. The next thing we can do with this code is also check that the installer is one we published our app to.

This will give you the option to act upon the fact that the users has not downloaded your app from one of the stores you chose to trust.

Verdict & Effectiveness

With this second level of tampering detection in our app, we make it even harder for hackers to recompile it.

Just like the other approach, we are using string comparison and again things can get decompiled and modified fairly easily.

Bonus

Since we’ve created a way to check whether the application was downloaded as an APK or from an alternate store, it’s only right that we get those two approaches together into one that will check for everything. We can create a method like this in our utility class.

And now you just need to call the method isHacked from your onCreate method in your initial Activity to check that your application was renamed or relocated.

You can see all the code samples shown here in this repository.

Источник

Android tampered что это

Краткое описание:
Управление Android устройством через браузер.

THE FIRST AND ONLY VNC SERVER WITHOUT ROOT REQUIREMENT VMLite VNC Server allows you to remotely view and control your android phone or tablet from a desktop computer or from another mobile device using the popular VNC protocol.

This app works on rooted and non-rooted android devices. However, for non-rooted devices, every time after turning the device completely off and on, you will have to connect your device to a Windows PC or Mac using a USB cable, then run a free desktop program, VMLite Android App Controller, to start the server on your device. Once the server is started, you can disconnect your device. If you don’t turn your device off (but just let it «sleep»), then the server will continue running for months, if desired.

You can download our desktop program using this link:

If you can’t start the server on your device, e.g., S3, Nexus 7/10, try to change to Camera Device(PTP), instead of Media Device(MTP).

FEATURES:
— no need to root your android devices
— supports WIFI and USB connections. Coming soon: 3G/Internet/P2P access from any firewalls w/o any configuration.
— supports WIFI hotspot in case there is no WIFI and no USB connection. You can turn on your android device’s Tethering and portable hotspot, so your PC or another device can connect.
— works on API level 7 and above, including Eclair, Froyo, Gingerbread, ICS and Jelly Beans, up to Android 4.2.
— supports ARM and X86 devices.
— supports typical VNC clients, TightVNC, Real VNC, etc.
— supports Java enabled browsers. You can connect to the android device from a browser using a Java applet
— supports HTML5 compatible browsers, you can connect to your android device without any other installations
— supports auto rotation and remote rotation
— supports navigation bar at bottom with special key, Home, Back, Menu, etc.
— supports reverse connections to vnc viewers running in listening modes
— supports VNC password
— supports scale and rotation
— two-way clipboard support (text only)
— full mouse and keyboard control
— supports special keys, such as Home, Back, Menu, Search, Power, etc.
— supports long press keys, e.g., you can press and hold the search key
— supports mouse wheel
— supports swipe/fling gestures
— auto turn on screen when you press any key from VNC client
— supports start on boot for rooted devices

Читайте также:  Как выбрать китайские андроид

— pinch/zoom gestures from hot keys — firewall friendly, 3G/Internet access, peer to peer access — performance improvement — touch aware clients on mobile devices — RDP server — audio redirect support — peer to peer voice/text chat — remote phone calls

ПЕРВЫЙ И ЕДИНСТВЕННЫЙ VNC-СЕРВЕР БЕЗ ОБЯЗАТЕЛЬНОГО НАЛИЧИЯ ROOT VMLite VNC-Сервер позволяет удаленно просматривать и контролировать ваш телефон или планшет с настольного компьютера или другого мобильного устройства, используя популярный VNC-протокол.

Это приложение работает на Root-ованных и не Root-ованных android устройствах. Однако, для не Root-ованных устройств, каждый раз после полного перезапуска устройства, придётся подключать устройство к ПК с ОС Windows или Mac с помощью кабеля USB, затем запускать Бесплатную программу для компьютера, VMLite Android Приложение-Контроллер, чтобы запустить сервер на вашем устройстве. После того, как сервер запущен, вы можете отключить устройство. Если вы не выключите устройство (тобишь включите спящий режим), то сервер будет продолжать работать в течение месяца, если это необходимо.

Вы можете скачать нашу программу, используя эту ссылку:

Если вы не можете запустить сервер на вашем устройстве, например, Samsung Galaxy S3, Asus Nexus 7/10, попытайтесь изменить режим подключения на «Съёмный диск» в параметрах подключения, вместо подключения как медиа устойство

ОСОБЕННОСТИ:
— нет необходимости Root-овать ваше устройства на базе android
— поддерживает Wi-Fi и USB соединение.
— Скоро 3G/Интернет/P2P доступ из любого брандмауэра w/o любой конфигурации.
— поддержка Wi-Fi hotspot в случае отсутствия Wi-Fi и USB-соединение. Вы можете включить своё android-устройство как модем или точку доступа, что позволяет подключать другие устройства.
— работает на уровне API, 7 и выше, в том числе Eclair, Froyo, Gingerbread, ICS и Jelly Bean, вплоть до Android 4.2.
— поддержка ARM и X86 устройств.
— поддерживает типичные VNC-клиенты, TightVNC, Real VNC, и др.
— поддерживает браузеры с поддержкой Java. Вы можете подключиться к android устройству из браузера с помощью Java-applet
— поддержка HTML5 совместимых — браузеров, вы можете подключиться к вашему android устройству без каких-либо других установок
— поддержка автоматического поворота и дистанционного вращения.
— поддержка нижней навигационной панели при помощи специального ключа, Домой, Назад, Меню, и др.
— поддержка обратного подключения к vnc-клиенту, запущенный в режим прослушивания
— поддержка VNC пароля
— поддержка масштабирования и вращения
— двусторонняя поддержка буфера обмена (только текст)
— полное управление клавиатурой и мышью
— поддержка специальных клавиш, » Домой», » Назад», » Поиск», «Питание» и др.
— поддерживает длительное нажатие клавиш, например, вы можете нажать и удерживать клавишу поиска
— поддержка колеса мыши
— поддерживает жесты
— автоматическое включение экрана при нажатии любой клавиши от клиента VNC
— поддерживает запуск при загрузке Root устройств

— щепотка/zoom жесты горячие клавиши — понятное брандмауэра, 3G/Интернет, peer-to-peer доступа — повышение производительности — touch клиенты с поддержкой мобильных устройств — RDP server — аудио переориентировать поддержку — peer to peer voice/текст чата — удаленных телефонных звонков

Источник

Применение методологии OWASP Mobile TOP 10 для тестирования Android приложений

Согласно BetaNews, из 30 лучших приложений с более чем 500 000 установок 94% содержат по меньшей мере три уязвимости среднего риска, а 77% содержат хотя бы две уязвимости с высоким уровнем риска. Из 30 приложений 17% были уязвимы для атак MITM, подвергая все данные перехвату злоумышленниками.

Кроме того, 44% приложений содержат конфиденциальные данные с жесткими требованиями к шифрованию, включая пароли или ключи API, а 66% используют функциональные возможности, которые могут поставить под угрозу конфиденциальность пользователей.

Именно поэтому мобильные устройства являются предметом многих дискуссий по вопросам безопасности. Принимая все это во внимание, мы в ByteCodeрешили рассмотреть методологию OWASP Mobile TOP10 с целью продемонстрировать процесс проведения анализа мобильных приложений на уязвимости.

OWASP Mobile TOP 10 — одна из основных методологий тестирования приложений на уязвимости. В таблице 1 описаны 10 уязвимостей, которые применяются для характеристики уровня безопасности приложения. [2,7,11]

Таблица 1: Уязвимости и их описание

Уязвимость Описание
М1 Обход архитектурных ограничений (Improper Platform Usage) Эта уязвимость охватывает злоупотребление особенностями платформы, обхода ограничений или неиспользования систем контроля управления безопасности платформы. Характерно как для платформы Android, для iOS (обход ограничений Touch ID и Keychain) и других мобильных ОС. Затрагивает системы контроля безопасности, которые являются частью мобильной операционной системы.
М2 Небезопасное хранение данных (Insecure Data Storage) Эта уязвимость представляет собой комбинацию M2 + M4 Mobile Top Ten 2014. К ней относятся небезопасное хранение и непреднамеренные утечки данных.
М3 Небезопасная передача данных (Insecure Communication) Недостаточное подтверждение достоверности источников связи, неверные версии SSL, недостаточная проверка согласования, передача конфиденциальных данных в открытом виде (cleartext) и т.д.
М4 Небезопасная аутентификация (Insecure Authentication) Эта уязвимость относится к аутентификации конечного пользователя или неверное управление сеансами. Включает следующие пункты:
  • Отсутствие требований проверки идентификации пользователя;
  • Отсутствие проверки контроля сеанса;
  • Недостатки управления сессиями.

М5 Слабая криптостойкость (Insufficient Cryptography) Применение криптостойких алгоритмов для передачи sensitive информации. Использование криптоалгоритмов может быть недостаточным в частных случаях. Эта категория описывает варианты ненадлежащего использования криптографических элементов, слабой или недостаточной криптостойкости.
Всё, что связано с TLS или SSL относится к категории M3. Если приложение не использует криптографические средства при необходимости, это относится к категории М2.
М6 Небезопасная авторизация (Insecure Authorization) Эта уязвимость описывает недостатки авторизации (проверка (валидация) на стороне клиента, принудительный просмотр и т.д.). Такие события отличаются от проблем аутентификации (например, устройства регистрации, идентификации пользователей и т.д.).
Если приложение не проходит проверку подлинности пользователей при необходимости (например, предоставление анонимного доступа к некоторым ресурсам или службам, при отсутстви проверки подлинности и запрета несанкционированного доступа), это является ошибкой проверки подлинности, а не сбоем авторизации.
М7 Контроль содержимого клиентских приложений (Client Code Quality) Эта категория рассматривает контроль за входными данными. Проблемы реализации технологий кода в клиент-сайд приложениях, отличающиеся от написания кода и реализации в сервер-сайд приложениях. К этому относится: переполнение буфера, format string уязвимости, а также другие ошибки на уровне кода, где решением является необходимость переписать код, который работает на мобильном устройстве.
М8 Модификация данных (Code Tampering) Эта категория описывает изменение исполняемых файлов, локальных ресурсов, перехват вызовов сторонних процессов, подмена runtime методов и динамическую модификацию памяти.
После установки приложения, его код остается резидентнымв памяти устройства. Это позволяет зловредному приложению изменять код, содержимое памяти, изменять или заменять системные методы API, изменять данные и ресурсы приложения. Это может обеспечить злоумышленнику возможность манипулирования сторонними приложениями для совершения нелегитимных действий, кражи данных или извлечения иной финансовой выгоды.
М9 Анализ исходного кода (Reverse Engineering) Эта уязвимость включает в себя анализ бинарных файлов для определения исходного кода, библиотек, алгоритмов и т.д. Программное обеспечение, такое как IDA Pro, Hopper, otool и другие инструменты реверс-инжиниринга могут дать представление о внутренней работе приложения. Это может быть использовано для поиска уязвимостей приложения, извлечения критичной информации, такой как бэкенд-сервера, ключей шифрования или интеллектуальной собственности.
М10 Скрытый функционал (Extraneous Functionality) Часто разработчики включают в код приложений скрытые функциональные возможности, бэкдоры или другие механизмы, функциональность которых предназначена для общего использования. Под эту категорию подходит известное определение security through obscurity. Разработчик может случайно оставить пароль в качестве комментария в гибридном приложении. Либо это может быть отключение двухфакторной аутентификации во время тестирования.

Для тестирования приложения «PasswordManager-1.3-release.apk», в соответствии с OWASP Mobile TOP 10, мы не применяли онлайновые и файлообменные ресурсы, а только использовали набор программ, описание которых приведено в Таблице 2. [6 — 10]

Таблица 2: Используемые программы

Название Описание
1 Apktool Программа для распаковки apk-файлов. Используется для локализации программного обеспечения, анализа структуры приложения и др.
2 adb Это инструмент, который устанавливается вместе с Android-SDK и позволяет управлять устройствами под управлением ОS Android. Работает по принципу клиент-сервер. Использует 5037 порт.
3 dex2jar Это инструмент, который используется для преобразования измененного APK-файла в jar-файл.
4 Drozer Это фреймворк, который содержит инструменты, позволяющие искать уязвимости мобильных устройств и программ. Он функционирует как приложение и взаимодействует с виртуальной машиной Dalvik, другими приложениями и операционной системой.
5 VCG scanner Это инструмент для статического анализа исходного кода и может анализировать следующие языки программирования: С/С++, Java, C #, VB и PL/SQL.
6 JD-GUI Это инструмент, который используется вместе с dex2jar. Он обеспечивает открытие декомпилированного исходного кода.
7 Genymotion Программное обеспечение, которое предназначено для создания тестовых виртуальных машин под управлением OS Android.
8 Pidcat Программа для отображения логов работы программы и операционной системы.

Сначала производим декомпиляцию программы «PasswordManager-1.3-release.apk» с помощью инструмента Apktool (см. Рис.1). Декомпиляция программой Apktool не позволяет получить исходный код в понятной форме, но позволяет получить доступ к другим ресурсам программы, которые расскажут об архитектуре, библиотеках, которые использует программа и др.

Рис. 1. Декомпиляция «PasswordManager-1.3-release.apk».

Рис. 2. Структура «PasswordManager-1.3-release.apk».

На рис. 2. показана структура apk-файла программы, а именно:

  • файл AndroidManifest.xml — описывает разрешения, компоненты, версию SDK, которую рекомендуется использовать и другие настройки приложения;
  • файл apktool.yml — содержит служебную информацию, необходимую Аpktool, для повторной компиляции;
  • директория lib – сохраняются библиотеки, которые дополнительно загружены в программное приложение разработчиком. В данном случае, используется библиотека с расширением .so;
  • директория original — сохраняются служебные файлы программного приложения;
  • директория res — содержит файловые, графические и другие ресурсы программного приложения;
  • smali — сохраняются файлы исходного кода в виде байт-кода.

Для просмотра исходного кода программы используем инструмент dex2jar (см. Рис. 3). Это дало возможность проанализировать исходный код программы статическим анализатором кода VCG-scanner и вручную (см. Рис. 4).

Рис. 3. Получение исходного кода «PasswordManager-1.3-release.apk» при помощи dex2jar

Рис. 4. Структура пакетов и классов «PasswordManager-1.3-release.apk», показанная с помощью dex2jar

M1. Обход архитектурных ограничений (Improper Platform Usage)

Рис. 5. Файл AndroidManifest.xml

Доступ к файлу AndroidManifest.xml даёт следующую информацию о программе:

  • минимально допустимая версия Android — uses-sdk minSdkVersion = «23» (Android 6.0). Эта информация позволяет сразу понять необходимые требования для устройства (или виртуальной машины) на которой будет работать (или тестироваться) программа, а отсюда, с помощью открытых источников, узнать уязвимости целевых операционных систем;
  • перечень активностей: WelcomeActivity (общая), ContentActivity, FormActivity. Эта информация дает представление о компонентах программного приложения, которые обеспечивают взаимодействие пользователя и backend-а программы;
  • сервис: PasswordGeneratorService. Наличие этого сервиса позволяет быстро найти класс, который работает с криптографическими функциями;
  • контент провайдер: UsersProvider (экспортований). Наличие контент провайдера позволяет найти класс, который взаимодействует с внешними ресурсами и базами данных.

M2. Небезопасное хранение данных (Insecure Data Storage)

В программе часть отладочной информации может отображаться в логах системы (см. Рис. 6 и 7). В этом случае сторонняя программа, которая имеет права READ_LOGS (например, logcat или pidcat), может получить доступ к чувствительной информации, тем самым нарушая ее конфиденциальность.

Во время тестирования использовалась программа pidcat (см. Рис. 7). Уязвимость была обнаружена в программном коде (см. Рис. 8) — разработчик оставил функцию Log.d(), которая используется для отладки исходного кода. [6 — 8]

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

Рис. 8. Место в программном коде, которое приводит к утечке данных.

Рекомендации по закрытию уязвимости — удалить или закомментировать строку исходного кода, которая отражает отладочную информацию в логах.

При анализе программы фреймворком Drozer, были найдены экспортируемые компоненты – ContentProvider (см. Рис. 9), это позволяет просмотреть URI программы и получить доступ к локальной базе данных, которую использует программа [9].

С помощью модуля app.provider.query получаем доступ к локальной базе данных программного приложения.

Рис. 9. Экспортируемые URI-ContentProvider и примеры реализации уязвимости.

Анализируя исходный код была найдена вставка в локальную базу данных программы (см. Рис. 10). Найденные данные дают возможность получить несанкционированный доступ к системе.

Рис. 10. Хранение данных в открытом виде в исходном коде.

Рекомендации по исправлению найденной уязвимости:

  • файле в AndroidManifest.xml для данного ContentProvider установить следующие флаги: android: exported = false и android: protectionLevel = «signature»;
  • доступ к ContentProvider необходимо осуществлять с помощью параметризованных запросов: query(), update() и delete().

M3. Небезопасная передача данных (Insecure Communication)

Минимальная версия OS Android, которая определена в программе, не разрешает использовать Proxy. Эта особенность операционной системы позволяет обеспечить защиту от дешифрации трафика на Proxy путем подмены сертификата.
Но в программе реализовано автоматическое переключение с протокола HTTPS на НТТР, если последний не поддерживает шифрование, что может привести к передаче информации открытым каналом передачи.

M4. Небезопасная аутентификация (Insecure Authentication)

В исходном коде нет функционала, который должен обеспечивать аутентификацию на удаленном сервере, который проводит проверку по следующим пунктам:

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

M5. Слабая криптостойкость (Insufficient Cryptography)

С помощью ручного анализа исходного кода приложения был проанализирован класс FastCrypto.java, который осуществляет преобразование массива байт в хэш-сумму алгоритмом MD5 (см. Рис. 11). Алгоритм MD5 на время тестирования уже был признан ненадежным. Его хэш-сумму можно подобрать, как с помощью онлайн-ресурсов, так и с помощью программных инструментов. [13]

Пароли в локальной базе данных в программы хранятся в хэш-значении «без соли» (см. Рис. 12). С помощью Drozer, было получено доступ к базе данных и найдены пароли. После этого, используя онлайн сервис MD5 Decrypter было подобрано пароль (см. Рис. 13).

Рис. 11. Подключение библиотеки и определения алгоритма хеширования.

Рис. 12. Пароль, хеш-сумма которого генерируется алгоритмом MD5.

Рис. 13. Результат подбора хеш-суммы.

Исходный код просканировали программой VCG scanner и нашли, что программа подключает уязвимую библиотеку (см. Рис. 14 и 15), которая используется для генерации блоков ключа. На момент написания статьи, при использовании библиотеки java.util.Random есть возможность найти следующее случайное значение и рекомендуется использовать библиотеку java.security.SecureRandom. [12]

Рис. 14. Найдена уязвимость после сканирования VCG scanner.

Рис. 15. Уязвимая библиотека java.util.Random.

M6. Небезопасная авторизация (Insecure Authorization)

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

M7. Контроль содержимого клиентских приложений (Client Code Quality)

Следующие уязвимости были найдены с помощью VCG scanner (см. Рис. 16). Красным цветом выделены уязвимости контроля за вводом имени файла и использования блоков try/catch. Это может привести к ошибкам при работе программы, загрузке и запуску исполняемого файла. Зеленым цветом выделены уязвимости, связанные с в использование объекта Intent. Согласно OWASP, принятия объекта Intent с другого компонента, без проверки считается уязвимостью.
Рекомендации:

  • использование блоков контроля за исключением try/catch;
  • контроль за входящими параметрами и именами файлов;
  • проверка объектов Intent при их получении.

Рис. 16. Результат сканирования.

M8. Модификация данных (Code Tampering)

С помощью фреймворка Drozer была найдена потенциальная уязвимость SQL-injection (см рис.17). Эта уязвимость может предоставить возможность модифицировать данные, сохраненные в локальной базе данных. Для верификации была предпринята попытка модифицировать данные в базе данных (см. Рис. 18), но на запрос изменения информации был получен ответ — «Not yet implemented» (см. Рис. 18). Это означает, что запрос на модификацию данных не реализовано в программе (см. Рис. 19), поэтому с помощью фреймворка Drozer, на время проведения тестирования, не имеет возможности модифицировать данные. [9]

Рис. 17. Проверка уязвимости базы данных.

Рис. 18. Верификация найденной уязвимости.

Рис. 19. Уязвимое место модификации данных.

M9. Анализ исходного кода (Reverse Engineering)

Исходный код программы не обфуcцирован, что дает возможность анализировать исходный код. Для анализа программного кода использовали программы apktool и dex2jar. После этого были проанализированы архитектура и фукционал, а также проведено статическое сканирования кода (см. Рис. 1 — 5, 8, 10 — 11, 14 — 16, 18) и выявились потенциальные уязвимости, которые описывались выше.

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

M10. Скрытый функционал (Extraneous Functionality)

Скрытый функционал не был найден на время тестирования.

Выводы

Проанализировав возможность применения методологии OWASP Mobile TOP 10 для тестирования на уязвимости мобильных приложений, можем сделать вывод, что оно позволяет наглядно и в цифрах проанализировать количество потенциальных уязвимостей, которые могут привести к нарушению конфиденциальности, целостности и доступности информации, которую программа получает, хранит и обрабатывает. Но в то же время были отмечены некоторые недостатки, а именно некоторые уязвимости можно одновременно отнести к разным категориям, что затрудняет возможность оценки риска найденной уязвимости и способа ее закрытия. Таким образом было проведена наглядная демонстрация использования методологии OWASP Mobile TOP 10 и сделан вывод, что программу нельзя выставлять в релиз. Количество уязвимостей приведено в Таблице 3.

Источник

Читайте также:  Самые сложные головоломки для андроид
Оцените статью