Инструкция (EN, 11 мин) по интеграции passkey с помощью Jetpack Credential Manager API. Passkeys - это новое поколение стандарта индустрии по авторизации без пароля.
#security
#security
Как эволюционировали уязвимости в приложениях для Android (12 мин) - историческая ретроспектива уязвимостей мобильных приложений под Android
#security
#security
Firebase имеет возможность проверять и помогать защищать ваше приложение с помощью Firebase App Check, включающая несколько инструментов:
👉 DeviceCheck для Apple платформы
👉 Play Integrity для Google Play
Нас будет интересовать Play Integrity, которая дает возможность проверять что ваше приложение не было атаковано и в нем ничего не заменили. В статье (5 мин) будет гайд
#firebase #googleplay #security
👉 DeviceCheck для Apple платформы
👉 Play Integrity для Google Play
Нас будет интересовать Play Integrity, которая дает возможность проверять что ваше приложение не было атаковано и в нем ничего не заменили. В статье (5 мин) будет гайд
#firebase #googleplay #security
Jetpack Credential Manager выходит в Beta, а это значит что уже API финализировано. Библиотека позволяет встроить механизм авторизации без паролей с помощью биометрии - passkeys
Android 14 имеет расширенную поддержку и может работать с несколькими менеджерами паролей.
#jetpack #security #android14
Android 14 имеет расширенную поддержку и может работать с несколькими менеджерами паролей.
#jetpack #security #android14
Google Play Protect будет предлагать пользователю проверить приложение, которые система никогда не проверяла ранее. Анализ будет выполняться н устройстве с отправкой частей на сервера. Раскатка фичи будет происходить постепенно на всех пользователей.
Источник тут
#googleplay #security
Источник тут
#googleplay #security
This media is not supported in your browser
VIEW IN TELEGRAM
Google активно продвигает технологию Passkeys - более простая для пользователей и надежнее по безопасности, позволит отказаться от двухфакторной авторизации (за которую платить приходится)
Если вы хотите узнать как интегрировать ее в Android приложение, то Google выпустила курс на эту тему
#security
Если вы хотите узнать как интегрировать ее в Android приложение, то Google выпустила курс на эту тему
#security
1 ноября станет доступен публичный релиз Credential Manager для упрощения авторизации в приложениях и на сайтах, а также делая её надёжнее. Это станет доступно благодаря поддержки Passkeys в версии 1.2.0
#security #jetpack
#security #jetpack
Руководство по миграции с FIDO2 на Jetpack Credential Manager
Почему стоит мигрировать? Потому что Jetpack Credential Manager
🔐 Поддержка Passkey
🔐 Несколько методов авторизации
🔐 Поддержка сторонних менеджеров паролей
🔐Единый UI/UX авторизации для пользователей
#security #jetpack
Почему стоит мигрировать? Потому что Jetpack Credential Manager
🔐 Поддержка Passkey
🔐 Несколько методов авторизации
🔐 Поддержка сторонних менеджеров паролей
🔐Единый UI/UX авторизации для пользователей
#security #jetpack
Обзор и сравнение актуальных инструментов шифрования в Android (12 мин)
1️⃣ В лоб - самостоятельное шифрование примитивами из Android SDK (AES Encryption)
2️⃣ EncryptedFile и EncryptedSharedPreferences из Jetpack
Помимо сравнения автор рассказывает, как они в команде решают проблемы с шифрованием на Android-устройствах
#security
1️⃣ В лоб - самостоятельное шифрование примитивами из Android SDK (AES Encryption)
2️⃣ EncryptedFile и EncryptedSharedPreferences из Jetpack
Помимо сравнения автор рассказывает, как они в команде решают проблемы с шифрованием на Android-устройствах
#security
Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений (11 мин)
Новый тип атак - подмена библиотек в репозитории из-за некоректных настроек и логики работы Maven и Gradle. Все подробности атаки в статье
#security
Новый тип атак - подмена библиотек в репозитории из-за некоректных настроек и логики работы Maven и Gradle. Все подробности атаки в статье
#security
Forwarded from Kotlin Adept Notes (Alex Panov)
Нашли серьезную уязвимость в Jetpack Navigation Compose, которая позволяет открыть любой экран в приложении, даже если там нет явных диплинков ⚠️
Эксплуатируется она максимально просто, достаточно знать имя пакета и название маршрута в графе навигации:
Как защититься
1. Разумеется лучший вариант не использовать данную навигацию, можете посмотреть мой пост со сравнением библиотек навигации для Compose и выбрать подходящую
2. Если в приложении не используются диплинки, можно частично решить проблему перетерев data в определенном intent:
#Security #Compose
@kotlin_adept
Эксплуатируется она максимально просто, достаточно знать имя пакета и название маршрута в графе навигации:
Intent().apply {
setClassName("your.package", "your.package.MainActivity")
data = Uri.parse("android-app://androidx.navigation/YOUR_DESTINATION")
startActivity(this)
}
Как защититься
1. Разумеется лучший вариант не использовать данную навигацию, можете посмотреть мой пост со сравнением библиотек навигации для Compose и выбрать подходящую
2. Если в приложении не используются диплинки, можно частично решить проблему перетерев data в определенном intent:
val intentData = intent.dataString
if (intentData != null && intentData.startsWith("android-app://androidx.navigation")) {
intent.setData(null)
}
#Security #Compose
@kotlin_adept
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная цель библиотеки — предоставить действительные (actionable) данные о состоянии безопасности устройства и его компонентов, в частности:
👉 Версии обновляемых компонентов (updateable system components).
👉 Наличие применённых исправлений безопасности (security patches / applied fixes).
👉 Общий “security state” — то есть агрегированное представление безопасности системы.
То есть, библиотека даёт вам API, чтобы “спросить у Android”: насколько актуальна система, есть ли уязвимости, какие компоненты нуждаются в обновлении.
Она не заменяет шифрование/криптографию (как, скажем, security-crypto), но с дополняет стек безопасности: помогает принимать решения на основании состояния платформы.
#android #androidjetpack #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
Копался в behavior changes для Android 17 и наткнулся на очередное закручивание гаек вокруг запуска Activity из фона.
На этот раз Google расширил BAL (Background Activity Launch) ограничения на
IntentSenderIntentSender - это обёртка над PendingIntent, позволяющая передать право запуска Intent другому приложению или системе. Именно через него работают уведомления, виджеты, shortcuts и межпроцессные вызовы.
Так вот, константа
MODE_BACKGROUND_ACTIVITY_START_ALLOWED теперь deprecated. Если где-то передаёте её через ActivityOptions при работе с PendingIntent — нужно мигрировать на MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE. Разница в том, что теперь Activity из фона запустится только если вызывающее приложение видимо пользователю.val options = ActivityOptions.makeBasic().apply {
pendingIntentBackgroundActivityStartMode =
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE
}Найти проблемные места просто — Google обновил lint и StrictMode под новые требования. Запускаете lint, ищете использования
MODE_BACKGROUND_ACTIVITY_START_ALLOWED и получаете полный список того, что нужно поправить.Формально это касается только
targetSdk 17+, но лучше не тянуть — сами знаете, как работают дедлайны в Play Console.🔗 Источник developer.android.com
#Android17 #androiddev #security #activity
Please open Telegram to view this post
VIEW IN TELEGRAM
Решил обновить compileSdk до Android 37, а там, оказывается, удалили старый Fingerprint API, который был до BiometricPrompt. Чем он им помешал? Ведь теперь обеспечивать поддержку старых версий Android сложнее, но это отдельный разговор.
В ходе миграции я узнал, что обновления библиотеки androidx.biometric — сущий хаос:
👉 Самая свежая версия — 1.4.0, и она только в альфе.
👉 Версия 1.3.0 вообще не делалась.
👉 Версия 1.2.0 не получила стабильного релиза, остановившись на альфе.
👉 Самая свежая стабильная версия — 1.1.0, которая вышла в 2021 году!
#Android #AndroidDev #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
Подключаешь аналитику, рекламный или нативный SDK и приложение сразу получает разрешение
INTERNET. Android тут всё или ничего: один permission, весь процесс. Куда ходит каждая библиотека внутри отследить из коробки нельзя.Poseidon даёт allowlist в манифесте:
<poseidon mode="monitor">
<!-- или enforce, если хочешь блокировать -->
<allow host="api.mybackend.com"/>
<allow host="*.cdn.example.com"/>
</poseidon>
Работает на трёх уровнях: JVM HTTP-клиенты (OkHttp, Volley, HttpURLConnection), нативный C/C++, Go и raw-syscall через seccomp. В Logcat видишь решение по каждому запросу каждой библиотеки отдельно.
monitor — самый полезный режим для начала: просто смотришь, куда ходят все твои SDK, ничего не блокируешь.#Android #Security #SDK
Please open Telegram to view this post
VIEW IN TELEGRAM
🔐 GrapheneOS ответила на дело о стёртом телефоне и между строк призналась, что стирать было не обязательно
Продолжение вчерашней истории про активиста, чей Pixel обнулился прямо в руках офицера.
Публичная часть ответа предсказуемая. Команда заявила, что ОС полностью легальна, ослаблять свои механизмы защиты они не обязаны, а законы, которые потребовали бы это сделать, были бы неконституционными. Отдельно уточнили, что помочь американским силовикам восстановить данные с того телефона не могут физически: железо и софт спроектированы так, чтобы обойти шифрование было нельзя.
Интереснее то, что параллельно опубликовал GrapheneOS Foundation. Фонд выкатил разбор своих защит от извлечения данных из заблокированных устройств и довольно прозрачно намекает: телефон на GrapheneOS переживает досмотр и без duress-пароля. А следом идёт прямая оговорка, что стирание данных в некоторых случаях может повлечь юридические последствия 💥 То есть ровно тезис вчерашнего поста, только теперь его пишут сами авторы фичи.
Что предлагается вместо? Ключевая штука это авто-ребут: таймер стартует при блокировке и перезагружает аппарат, если до нуля его так и не разблокировали. По умолчанию 18 часов, настраивается в диапазоне от 10 минут до 72 часов, разблокировка любого профиля таймер сбрасывает. Реализован в
Вывод для инженера скучный и рабочий: лучшая защита на границе не та, что эффектно уничтожает данные, а та, что спрячет их и не даёт повода для уголовной статьи 🎯
#Android #GrapheneOS #Pixel #Security
Продолжение вчерашней истории про активиста, чей Pixel обнулился прямо в руках офицера.
Публичная часть ответа предсказуемая. Команда заявила, что ОС полностью легальна, ослаблять свои механизмы защиты они не обязаны, а законы, которые потребовали бы это сделать, были бы неконституционными. Отдельно уточнили, что помочь американским силовикам восстановить данные с того телефона не могут физически: железо и софт спроектированы так, чтобы обойти шифрование было нельзя.
Интереснее то, что параллельно опубликовал GrapheneOS Foundation. Фонд выкатил разбор своих защит от извлечения данных из заблокированных устройств и довольно прозрачно намекает: телефон на GrapheneOS переживает досмотр и без duress-пароля. А следом идёт прямая оговорка, что стирание данных в некоторых случаях может повлечь юридические последствия 💥 То есть ровно тезис вчерашнего поста, только теперь его пишут сами авторы фичи.
Что предлагается вместо? Ключевая штука это авто-ребут: таймер стартует при блокировке и перезагружает аппарат, если до нуля его так и не разблокировали. По умолчанию 18 часов, настраивается в диапазоне от 10 минут до 72 часов, разблокировка любого профиля таймер сбрасывает. Реализован в
init, так что уронить system_server и сорвать перезагрузку не выйдет. Цель в том, чтобы вернуть телефон в состояние Before First Unlock, где ключей в памяти нет и коммерческие форензик-комбайны резко теряют в эффективности. Ничего не уничтожено, вменять нечего, данные просто лежат зашифрованными.С 2025 Google завезла авто-рестарт через Play services. Только фиксированные 72 часа и без единой настройки.
Вывод для инженера скучный и рабочий: лучшая защита на границе не та, что эффектно уничтожает данные, а та, что спрячет их и не даёт повода для уголовной статьи 🎯
#Android #GrapheneOS #Pixel #Security
1. Encrypted Client Hello: сеть больше не видит, на какой домен вы переходите
HTTPS шифрует содержимое запроса. Но в самом начале TLS-рукопожатия телефон всё ещё сообщает серверу имя сайта в открытом виде. Это поле называется SNI (Server Name Indication). Оператору, офисному прокси и тому, кто слушает Wi-Fi, тело письма не видно, а адрес получателя виден. По нему собирают профиль и целят фишинг.
ECH (Encrypted Client Hello) как раз шифрует это имя с первого запроса. Вместе с Private DNS наблюдатель видит IP, но не домен. Работает только если сетевой стек приложения поддерживает ECH и сервер отдаёт конфиг в HTTPS-записи DNS. Иначе клиент шлёт заглушку GREASE, защиты нет.
Google просит обновиться на OkHttp 5.5.0 и включить ECH. В Network Security Config XML появился
<domainEncryption> для всей базы или для конкретного домена. HttpEngine / WebView должны подтянуть платформенные API сами.2. Local Network Protection форсируется
Для приложений с targetSdk 37 локальная сеть будет закрыта по умолчанию. Раньше любое приложение с
INTERNET могло просканировать домашнюю Wi-Fi и увидеть устройства. Теперь же потребуется запросить новое runtime permission ACCESS_LOCAL_NETWORK. Без него TCP-соединения в LAN уходят в таймаут, UDP возвращает EPERM. Касается сокетов, OkHttp, Cronet, mDNS, .local.Легаси-формат с
INTERNET и при target < 37 или на старых версиях ОС останется работать как было.3. Certificate Transparency по умолчанию
Публичные сертификаты должны быть в открытых CT-логах. Если центр сертификации скомпрометировали и выпустили фейковый сертификат «как у банка», это станет сложнее спрятать. Для обычного приложения это «просто заработало», пока вы не используете собственный CA или кривой прокси.
4. 2G выключает оператор, и это про SMS-бластеры
С Android 12 пользователь мог выключить 2G вручную (рекомендую сделать). В 17 это может сделать оператор по умолчанию для своих абонентов. К API приложения это не относится, но объясняет, зачем фича вообще есть. В 2G есть уязвимости, но никто не собирается их латать из-за устаревания стандарта.
Из четырёх пунктов прямо сейчас ломает продукт только локальная сеть. ECH даёт пользу, когда обновили клиент и бэкенд. Остальное фоном.
🔗 Источник - блог Google
#Android #Android17 #Security #Privacy
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел первый стабильный androidx.security:security-state:1.1.0 (1.0 дошел только до Beta) и security-state-provider:1.0.0
Библиотека отвечает на вопрос на каком patch level сейчас живут разные куски ОС и закрыт ли конкретный CVE.
После Mainline / APEX одного
Build.VERSION.SECURITY_PATCH мало. Система, vendor, ядро и модули обновляются отдельно. В API 35 платформенный SecurityStateManager уже умеет проверять это. AndroidX даёт compat API и дополнения для проверки установленных пачтей безопасности, закрыты ли известные уязвимости и доступны для них фиксы уже на целевом устройстве.val state = SecurityPatchState(context)
val systemSpl =
state.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)
// bulletinJson скачиваете самостоятельно
state.loadVulnerabilityReport(bulletinJson)
val patched = state.areCvesPatched(listOf("CVE-2024-0031"))
val upToDate = state.isDeviceFullyUpdated()
val pending = state.queryAllAvailableUpdates(timeoutMillis = 5_000)
Кому это реально нужно? MDM, банки, приложения с высокими требованиями безопасности. В обычное приложение тащить незачем.
#Android #AndroidDev #Jetpack #Security
Please open Telegram to view this post
VIEW IN TELEGRAM