Android Live 🤖
5.25K subscribers
52 photos
2 videos
805 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
​​Безопасность современных Android-смартфонов
#security

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

Мы, как разработчики приложений, тоже можем обезопасить те данные, которые хранятся внутри приложения. Есть отличный цикл статей, который рассказывает о безопасности в современной разработке. Коротко, по делу и актуально.

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

🔸немного о том, как работает биометрия, и как её лучше использовать.

🔸чуть позже нас ждёт ещё четыре статьи: про нативный код, сертификаты и изменения безопасности в Android 11.
​​EvadeMe
#library #security

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

🔸подключен ли телефон к компьютеру по USB или Wifi;
🔸установлены ли на устройстве приложения для проверки трафика;
🔸выполняется ли подключение через VPN;
🔸является ли устройство эмулятором;
🔸есть ли root-доступ.

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

Автор собрал весь набор методов и сделал небольшую библиотеку под названием EvadeMe. Возможно, какие-то из них будут вам полезны, почитать подробнее можно тут.
​​Best practices для безопасности приложений
#security

Уверен, что мы все старательно подходим к безопасности написанных нами приложений, особенно когда они связаны с персональными данными наших пользователей.
Но не все знают о ресурсе от Google, где описаны годные практики, связанные с безопасностью. И главное, что туда регулярно добавляются свежие подходы. Давайте пройдёмся по некоторым из ним.

👉 опасайтесь неявных Intents. Напомню, что это такие Intents, которые позволяют показать диалог выбора приложения через который можно открыть предлагаемый файл. Типичный сценарий — это sharing файлов, когда мы выбираем нужное нам приложение из кучи вариантов. Важно осторожно относиться к ним, потому что «подписаться» на передаваемые файлы могут любые приложения.

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

👉 используйте Internal Storage. Для сохранения приватной информации нельзя использовать внешнее хранилище, к которому есть доступ других приложений. Кроме того, внутреннее хранилище удалится, если пользователь захочет удалить ваше приложение.

👉 помните про приватный режим SharedPreferences. Кстати, стоит уже обратить внимание на свежий Jetpack DataStore, который скоро придёт на замену префам.

👉 проверьте ContentProvider. Если у вас есть этот компонент, то проверьте, надо ли вам отдавать данные наружу. Если нет, то пропишите флаг android:exported="false», что скроет ваши данные внутри приложения.

👉 используйте SSL-соединения. Все запросы, которые вы делаете на сервер должны выполняться через https. Кроме того, подумайте о конфигурации trust manager для сетевых запросов. Чуть больше можно почитать тут.

👉 используйте WebView с осторожностью. Важно запретить пользователю уйти куда-то вне вашего контента WebView. Помните также о Chrome Tabs, если вам нужно просто показать контент из сети, но внутри приложения.

👉 проверьте набор Permissions. Важно, чтобы ваше приложение не запрашивало тех разрешений, которые ему не понадобятся для работы. Хорошим советов тут будет использовать Intent вместо разрешений, если возможно. К примеру, есть Intent для добавления контакта в телефонную книгу, и он избавит вас от запроса WRITE_CONTACTS. Очень часто разработчики запрашивают разрешение на запись файлов, хотя им достаточно только считывать их.

👉 обновляйте зависимости. Для себя я выделил правило обновления большинства зависимостей приложения сразу после релиза. Это даст время на тестирование и поимку багов, связанных с этими обновлениями. Но всё же от обновлений больше пользы, чем вреда, ведь разработчики активно исправляют баги, в том числе и безопасности, в своих библиотеках.

Если хотите добавить ещё каких-то правил или обсудить описанные, то обязательно пишите в чат или мне.
​​Подмена Runtime Permissions
#security #subscribers

Тут @vitach скинул свою статью, где описывает, как подменить Runtime Permissions на свежих версиях Android.

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

Идея заключается в наложении поверх этой системной Activity своей с флагом android:windowIsTranslucent=true, который позволяет делать Activityс прозрачным фоном, а также добавить парочку флагов, чтобы убрать фокус:

FLAG_NOT_FOCUSABLE — убирает возможность взаимодействия с методом ввода;
FLAG_NOT_TOUCH_MODAL — отправляет события touch за пределы нашего окна;
FLAG_NOT_TOUCHABLE — убирает возможность получать события касания.

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

Баг работает на версиях Android >= 7.1.1, так как до этой версии показывался диалог с предупреждением о перекрытии окна.

Ссылка на код тут, а статья с описанием тут. Ну и читайте внимальнее те разрешения, которые даёте установленным приложениям.🙄
​​Исследование поведения подключённых библиотек
#gradle #security

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

Есть пара советов, которые помогут исследовать сторонние библиотеки:

0️⃣ Merged manifest view. Функциональность позволяет сделать общий AndroidManifest из всех подключённых в проект библиотек. Таким образом вы сможете посмотреть, какие дополнительные сервисы, разрешения, Activity и т.д. вносят ваши зависимости.
Для этого нужно кликнуть Merged Manifest внизу открытого AndroidManifest-файла. Обязательно посмотрите, нет ли каких-то скрытых запросов разрешений, и если нет возможности отказаться от библиотеки, то выключите их при помощи этого кода:
<uses-permission android:name="SOME_PERMISSION"
tools:node="remove"/>


1️⃣ Просмотр зависимостей модуля. Эта штука поможет вам настроить транзитивные зависимости, а также проанализировать то, какие дополнительные штуки включает добавленная библиотека. Подробнее почитать можно тут.

2️⃣ Аудит доступа к данным. Достаточно новая фича, которая позволяет посмотреть использование приватных данных вашим приложением. Делается это при помощи AppOpsManager.OnOpNotedCallback, куда приходят методы с пометкой приватного доступа, например «share with friends».
Я сам на практике не использовал, но выглядит интересно. Кроме того, можно зарегистрировать свой атрибут для приватной операции, который также будет попадать в этот callback. Детали тут.

А какие ещё методы исследования библиотек вы знаете?
​​Раздел безопасности в Google Play
#security #googleplay

Google сделали преанонс safety section в Google Play, который поможет пользователям понять, какую информацию собирает приложение, безопасны ли эти данные, а также дополнительную информацию о безопасности этого приложения.

Теперь разработчики должны предоставить причины использования тех или иных данных и объяснить пользователю для чего они потребуются. Кроме этого, добавили ряд дополнительных характеристик, например:

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

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

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

А что думаете вы по этому поводу?
​​Security By Design
#security

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

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

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

Выглядит интересно, добавляю в закладки, чтобы пройти его и обязательно поделюсь полезными советами с вами. Но вы тоже посмотрите, ведь любой может найти для себя полезные советы.

Курс бесплатный, ссылка на описание тут, а пройти его можно тут.
​​Развитие механизмов безопасности Android
#security

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

Если вам интересно, как изменилась безопасность системы Android с самых первых версий, то вот отличная статья.

Можно наблюдать, как эволюционировала безопасность Android от версии к версии и как это повлияло на дальнейшее развитие системы. Так что если вы увлекаетесь безопасностью, да и вообще людите историю операционных систем — welcome. 😎
​​Уязвимости в приложениях Samsung
#security

Любопытное исследование, которое рассказывает о списке уязвимостей в предустановленных приложениях на телефонах Samsung.

Автор провёл несколько недель в поиске уязвимостей в родных приложениях Samsung и нашёл несколько интересных деталей о том, как можно подменить установку этих приложений, как дать доступ к контактам, SMS или файлам.

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

Ссылка на первую и вторую часть статьи.
​​Превью ссылок в Android
#security #library

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

Если вы делаете подобные приложения, то есть отличная статья, которая расскажет, как реализовать подобную фичу. Однако, не всё так просто, и спасибо за это бдительному подписчику. 🤝

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

Решение — сделать прослойку между пользователем и ресурсом в виде своего сервера. Это гораздо безопаснее, и защитит ваших пользователей от недоброжелательного контента. Telegram, кстати, именно так и делает, а, например Viber — грузит без прослойки. 😞

Так что будьте внимательны к этой фиче, ведь она не такая простая, как может показаться на первый взгляд. Да и к сообщениям со ссылками, тоже, будьте внимательны. 🤞
​​Privacy Dashboard
#security #android

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

Для разработчиков это означает то, что они должны будут проверить свои приложения на предмет реальной нужды использования тех или иных данных от пользователя. В том числе и использование сторонними библиотеками.
Чуть раньше было представлено Data access auditing API, которое поможет понять что и когда используется.

Думаю, что для большинства приложений всё останется так, как и есть сейчас, ведь уже давно мы запрашиваем только те разрешения, которые действительно нужны.
​​Тулзы для анализа Android-приложений
#android #security

Тут ребята из Digital Security делятся целым набором инструментов для проверки Android-приложений. Про многие из них не слышал, уверен, что и вам будет интересно взять что-то себе на вооружение:

💡прокси — для анализа трафика используется три инструмента: BurpSuite, MitmProxy и OWASP ZAP. Рекомендуется начать работу с BurpSuite как с наиболее простого и понятного инструмента.

💡статический анализJADX для анализа классов и ресурсов, Apktool для работы с текущими ресурсами и ассетами, ByteCode Viewer — если первая тулза не справляется с декомпиляцией классов, Androguard удобен для построения графов классов.

💡динамический анализFrida для подключения на лету к приложению и внедрению в него своего кода, Objection и Medusa как доволнительный набор инструментов для Frida.

Ещё больше инструментов и скриншотов можно найти в статье у ребят. Обязательно в закладки!
🔥10👍2
​​Вход в приложение
#security #android

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

И кажется, что задача супер простая: добавь сверху экран, который будет появляться при старте приложения, сохрани пароль на устройстве и сверяй с тем, что ввёл пользователь. Но на практике — большинство приложений в большей или меньшей степени реализуют вход некорректно: неправильно хранят пароль, не используют CryptoObject , дают возможность обойти экран входа и т.д.

Я поискал за вас и даю сразу несколько статей и уроков, которые с огромной вероятностью помогут вам корректно реализовать вход в приложение:

1️⃣ Тут автор рассказывает про пример некорректной авторизации в приложение и про свойства CryptoObject, setUserAuthenticationRequired и о том, как эксплуатировать эти хаки.

2️⃣ Отличное видео, где по шагам описывается процесс создания биометрической авторизации в приложение: разницу между различными классами для авторизации, как затащить alpha-версию библиотеки для входа (удивился, что она до сих пор в alpha) и наконец-то сделать корректный вход по отпечатку.

3️⃣ Библиотека PINkman, которая позволяет добавить вход по пину в приложение: можете не тащить всю либу в проект, но внутри — много крутых идей по корректному хранению пароля в системе. А можете и затащить, если не хочется разбираться.

4️⃣ Статья, где автор описывает ещё одно хитрое свойство — setUserAuthenticationValidityDurationSeconds, которое также может быть использовано как уязвимость для входа.

5️⃣ Ну и напоследок — больше информации про составляющие качественной криптографии в Android: KeyStore, MasterKeys, Blocking, Padding и другие страшные слова.

Конечно, идеальной защиты не существует и от "паяльника" в руках злоумышленника врядли поможет какой-то из методов защиты. Но для всех остальных случаев ваша защита способна защитить приложение и приватные данные пользователя.
🔥17👍64😁1
​​Обзор уязвимостей Positive Hack Days
#security

Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴

Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное.

Тут и exported=true для WebViewActivity, и проблемы в дебаг-панели, и вход без PIN-кода в приложение через виджет... в общем, есть на что обратить внимание. 👌
🔥171👍1
Как вкатиться в безопасность в Android?
#security

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

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

Крайне рекомендую добавить в закладки и поставить себе целью на 24 год прокачаться в этой интереснейшей области 😇.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7👌3