Цифровая слежка в кармане: аудит 11 популярных российских Android-приложений
Привет, Хабр!
Продолжаю серию аудитов. В прошлый раз я разобрал семь яндексовских приложений — и там было на что посмотреть: буфер обмена, WebRTC-утечки, распознавание ключевых слов в аудиопотоке. На этот раз расширяю выборку и меняю фокус.
Одиннадцать приложений. Банки, госсервисы, маркетплейсы, навигация, магазин приложений. Все — из топа российского Android-рынка. Методология — статический анализ (SAST) плюс пассивный перехват logcat. Трафик не вскрывался, SSL Pinning не обходился, в Secure Folder не залезал.
237 уязвимостей суммарно (включая расширенную проверку). Шесть приложений с ключами подписи образца прошлого века. ВК с 11 трекерами и рейтингом риска 98/100. И Госключ — единственный из одиннадцати, кто делает всё правильно.
Методология: что делал и чего не делал
Инструменты: MobSF (статика, SAST), apktool, jadx, androguard, самописные парсеры для трекеров и криптографических паттернов.
Что анализировалось: DEX-байткод, манифест, нативные библиотеки, сертификаты подписи, Network Security Config. Параллельно — пассивный logcat при первом холодном запуске: какие домены контактирует приложение до того, как вы успели что-то разрешить.
Что НЕ делалось: SSL Pinning не обходился, трафик не расшифровывался, root-привилегии не использовались. Это принципиально: статика + logcat — то, что доступно без вмешательства в работу приложения.
Важная оговорка: обфускация занижает числа. Там, где jadx видит 3097 обращений к крипто-функциям, реальных уязвимостей может быть меньше — часть это дубли из-за инлайнинга. Абсолютные цифры — ориентир, не приговор.
Как считается риск слежки 0–100. Взвешенная сумма шести компонентов, веса в сумме дают 100:
Компонент |
Максимум |
Как считается |
|---|---|---|
Трекеры |
25 |
число SDK × 3 + log10(refs+1) × 3 |
VPN-детекция |
25 |
по уровню: HIGH 25 / MEDIUM 15 / LOW 7 / NONE 0 |
Скрытый сбор |
20 |
доля активных категорий из 8, плюс по +2 за каждую чувствительную (звонки, SMS, микрофон, буфер, контакты) |
Fingerprinting |
15 |
доля активных категорий из 6 |
Геолокация |
10 |
log10(refs+1) × 4 |
Удалённое управление |
5 |
log10(refs+1) × 2 |
Логарифм стоит там, где число обращений может уходить в сотни тысяч и иначе перекашивает итог. Формула детерминированная и считается из JSON-отчёта анализатора — субъективной оценки в балле нет.
Что считается «уязвимостью». Каждая пронумерованная находка в отчёте (SBER-01, VTB-16 и так далее), от информационных до критичных. Уровень присваивается по CVSS 3.1: КРИТ 8.1–9.0, ВЫС 6.5–7.9, СРЕД 4.3–5.9, НИЗ 3.1–3.9, ИНФО ниже 3. Итоговые 237 распределены так: 14 критичных, 66 высоких, 94 средних, 37 низких, 26 информационных. Так что «237 уязвимостей» не равно «237 дыр, через которые вас завтра обчистят» — больше половины это средний уровень и ниже.
Госуслуги: APK взят с зеркала RuStore, не из Google Play. Это официальный пакет ru.rostel версии 27.0.1.9810-rustore.
Рейтинг риска слежки
# |
Приложение |
Версия |
Трекеров |
Слабый ключ |
VPN-детекция |
Крипто-слабости |
Риск |
|---|---|---|---|---|---|---|---|
1 |
VK |
8.195 |
11 |
RSA-1024 ✗ |
HIGH |
3097 |
98.0 |
2 |
Т-Банк |
8.2.3 |
6 |
RSA-2048 |
HIGH |
4931 |
96.6 |
3 |
Сбербанк |
17.11.0 |
7 |
RSA-1024 ✗ |
HIGH |
705 |
96.0 |
4 |
Госуслуги |
27.0.1 |
8 |
RSA-1024 ✗ |
HIGH |
1634 |
95.2 |
5 |
Авито |
232.0 |
11 |
RSA-1024 ✗ |
HIGH |
875 |
94.3 |
6 |
ВТБ |
20.16.0 |
5 |
RSA-2048 |
MEDIUM |
3988 |
89.5 |
7 |
2ГИС |
7.28.0 |
9 |
RSA-4096 |
MEDIUM |
1737 |
83.3 |
8 |
RuStore |
1.109.1 |
8 |
RSA-2048 |
MEDIUM |
798 |
81.0 |
9 |
Яндекс Пэй |
0.241.0 |
5 |
DSA-1024 ✗ |
LOW |
5139 |
77.3 |
10 |
Ozon Bank |
19.33.1 |
6 |
RSA-1024 ✗ |
LOW |
157 |
71.6 |
11 |
Госключ |
2.20.0 |
2 |
RSA-2048 |
NONE |
210 |
42.4 |
✗ — ключ подписи ниже 2048 бит, считается слабым по NIST SP 800-57 и Android CDD
Топ-находки
1. Слабые ключи подписи: шесть приложений живут в 2010 году
Шесть из одиннадцати приложений подписаны ключами, которые не соответствуют современным стандартам:
RSA-1024: VK, Сбербанк, Госуслуги, Авито, Ozon Bank
DSA-1024: Яндекс Пэй
NIST SP 800-57 — это рекомендация, не требование, и с 2013 года там значится нижняя граница в 2048 бит. Публично задокументированной факторизации ключа такой длины вне лабораторных условий на сегодня нет — это гипотетический риск на горизонте роста вычислительных мощностей, а не подтверждённая уязвимость. Отдельный вопрос — компрометация ключа: она не зависит от его длины и происходит не через подбор, а через утечку хранилища или процесса подписи. Тут риск для RSA-1024 и RSA-4096 одинаковый. Единственное, для чего конкретно важна длина, — устойчивость именно к подбору: 1024 бита оставляют меньше запаса на будущее, чем 2048+.
Для банковского приложения с 50+ млн пользователей — Сбербанк, я о тебе — это не «академическая угроза». RSA-2048 — минимум, RSA-4096 (как у 2ГИС) — хорошая практика.
Яндекс Пэй — отдельный случай: DSA-1024 в платёжном приложении. DSA вообще редко встречается в мобильных приложениях, а DSA-1024 — тем более.
2. Трекерная экосистема: HMS Huawei везде, VK-экосистема расширяется
HMS Huawei присутствует в 10 из 11 приложений. Единственное исключение — VK (там HMS тоже есть, 30 458 ссылок, просто доля меньше). В Госключе — 22 293 ссылки на HMS. Это государственное приложение для хранения ЭЦП.
Разберём по лидерам:
VK (11 трекеров, максимум в выборке):
VK_SDK: 2 350 342 ссылки — да, это число правильное
AppMetrica_io: 49 909
HMS_Huawei: 30 458
MailRu: 25 863
MyTracker: 7390
Firebase + Crashlytics + Facebook + RuStore
Авито (11 трекеров, равный максимум):
AppMetrica_io: 46 904
Firebase_Core: 30 382
VK_SDK: 20 668
Facebook: 17 463
HMS_Huawei: 12 988
Adjust + MyTracker + Crashlytics + RuStore
Госуслуги (8 трекеров):
HMS_Huawei: 78 571 — рекорд по этому трекеру в выборке
AppMetrica_io: 50 539
Firebase_Core: 33 937
VK_SDK: 9 088
То есть государственный портал Госуслуги передаёт аналитику в экосистему VK (9088 ссылок на VK_SDK), Яндекс (AppMetrica), Google (Firebase) и Huawei (HMS). Это не обязательно передача персональных данных — SDK может использоваться только для части функций, — но ссылки в коде означают, что SDK присутствует и инициализирован.
VK-экосистема: VK_SDK есть в Авито, Т-Банке, 2ГИС, Сбербанке, Госуслугах, Ozon Bank, RuStore. То есть VK через собственный SDK получает аналитические сигналы из семи приложений на вашем устройстве — плюс, разумеется, из своего основного.
3. VPN-детекция через WebRTC: классика жанра
Пять приложений имеют статус HIGH по VPN-детекции: VK, Т-Банк, Сбербанк, Госуслуги, Авито.
Механизм — тот же WebRTC ICE Candidate leak, который я описывал в прошлой статье. WebRTC при установке peer-to-peer соединения опрашивает все сетевые интерфейсы устройства, включая те, что находятся за VPN-туннелем. Результат: ваш реальный IP попадает в ICE Candidate list, который приложение может прочитать и отправить на сервер.
Для банковских приложений VPN-детекция — стандартная антифрод-мера. Разница в способе: проверить факт включённого VPN через TYPE_VPN — это одно, а вытащить реальный IP через WebRTC мимо туннеля — другое. Второй способ возвращает ровно тот адрес, который пользователь намеренно прятал. И вот тут я не берусь однозначно сказать, где кончается антифрод и начинается слежка.
2ГИС, RuStore и Яндекс Пэй — MEDIUM. Госключ и Ozon Bank — LOW/NONE.
Как считается уровень. Анализатор ищет в smali восемь литералов: IceCandidate, getNetworkInterfaces, tun0, ppp0, TYPE_VPN, DnsResolver, isProxy, /proc/net/tcp — и суммирует число строк-совпадений. Дальше жёсткие пороги: 15 и больше — HIGH, 6–14 — MEDIUM, 1–5 — LOW, ноль — NONE. Порог в 15 отсекает единичное упоминание внутри чужого SDK от систематического использования в нескольких местах кода. Руками уровень не правится.
4. Runtime: что происходит при первом запуске
До того как вы нажали хоть одну кнопку:
Приложение |
Домены при запуске |
|---|---|
VK |
firebase, crashlytics, rustore |
Т-Банк |
sentry |
Сбербанк |
crashlytics, firebase, metrica, rustore |
ВТБ |
metrica, firebase |
Яндекс Пэй |
firebase, metrica, startup.mobile.yandex, appmetrica.yandex, crashlytics |
2ГИС |
firebase, crashlytics, metrica, rustore |
RuStore |
metrica, rustore, firebase |
Ozon Bank |
sentry, firebase |
Госключ |
rustore, crashlytics, firebase |
Авито и Госуслуги — logcat был недоступен (Secure Folder или приложение не запустилось в тестовой среде).
Сразу оговорюсь, что сам по себе список доменов почти ни о чём не говорит — важно, кому они принадлежат и зачем вызываются:
firebase— Google: push-уведомления (FCM), Remote Config, аналитика. Инфраструктура, без которой push на Android просто не работает.crashlytics— Google: сбор крашей и стектрейсов. Нормальная практика, к слежке отношения не имеет.sentry— сторонний error tracking, функционально то же самое, что Crashlytics.rustore— регистрация push-токена в магазине VK. Тоже инфраструктура.metrica/appmetrica.yandex.net— AppMetrica, продуктовая аналитика Яндекса: события, сессии, идентификаторы устройства.startup.mobile.yandex— конфигурационный запрос, с которого поднимается стек яндексовых SDK.
То есть в девяти случаях из тринадцати это Firebase, Crashlytics и push, и предъявлять тут нечего. Интересен один кейс: Яндекс Пэй тянет пять доменов, из них appmetrica и startup.mobile.yandex — до того, как пользователь увидел экран с политикой конфиденциальности. Не «слежка», но аналитика, стартующая раньше согласия.
Интересно, что Госключ тоже обращается к firebase и crashlytics при запуске — это Firebase Crashlytics для мониторинга сбоев, стандартная практика. При этом трекеров у него всего два (HMS + Firebase_Core), что объясняет общий низкий риск.
Банки: сравнение четырёх игроков
Т-Банк |
Сбербанк |
ВТБ |
Ozon Bank |
|
|---|---|---|---|---|
Ключ подписи |
RSA-2048 |
RSA-1024 ✗ |
RSA-2048 |
RSA-1024 ✗ |
Трекеров |
6 |
7 |
5 |
6 |
VPN-детекция |
HIGH |
HIGH |
MEDIUM |
LOW |
Крипто-слабости |
4 931 |
705 |
3 988 |
157 |
Опасн. разрешений |
23 |
17 |
20 |
9 |
Риск слежки |
96.6 |
96.0 |
89.5 |
71.6 |
Т-Банк — 255 МБ приложение с 4931 обращением к слабым крипто-функциям. Больше всего опасных разрешений в выборке (23). HMS Huawei доминирует — 25 685 ссылок против VK_SDK (6 653). Зачем банковскому приложению настолько плотная интеграция с Huawei Mobile Services — вопрос без очевидного ответа.
Сбербанк: RSA-1024 у крупнейшего банка страны — это хочется выделить отдельно. Это не исторический артефакт в каком-то стороннем SDK, это ключ, которым подписывается APK. Для обновления достаточно сгенерировать новый ключ при следующем релизе.
ВТБ выглядит чуть лучше конкурентов по риску (89.5), при этом Amplitude присутствует в 15 ссылках — единственный банк в выборке, использующий этот американский аналитический сервис.
Ozon Bank — 71.6, лучший результат среди банков. RSA-1024 — единственный существенный минус, криптографических слабостей меньше всего в банковской четвёрке (157).
Госключ: эталон, который удивил
Давайте честно: я шёл в этот аудит с предположением, что Госключ окажется в середине рейтинга. Государственные приложения в России не особо ассоциируются с образцовой приватностью.
Результат: 42.4/100. Лучший показатель в выборке с огромным отрывом. Разрыв со вторым снизу (Ozon Bank, 71.6) — почти 30 пунктов.
Что Госключ делает правильно:
RSA-2048 — ключ подписи соответствует современным стандартам
2 трекера — только HMS_Huawei и Firebase_Core. Никакого VK_SDK, никакой рекламной атрибуции
VPN-детекция: NONE — не пытается определить, использует ли пользователь VPN
7 опасных разрешений — минимум в выборке среди нетривиальных приложений
210 крипто-слабостей — сопоставимо с Ozon Bank (157), в разы меньше, чем у банков
Контекст важен: Госключ хранит электронные цифровые подписи, работает с ЕСИА. Тут малая поверхность атаки не для галочки — чем меньше приложение умеет, тем меньше у него можно отнять.
При первом запуске — обращается к rustore, crashlytics, firebase. Никаких appmetrica, startup.mobile.yandex или VK-доменов.
Это не реклама Госключа и не сравнение с другими аспектами его безопасности (серверная сторона, PKI-инфраструктура — за пределами этого аудита). Но в рамках статики + logcat — чистый результат.
Отдельные интересные находки
RuStore (81.0): магазин приложений от VK с 360 000 ссылками на VK_SDK — в 150 раз больше, чем у следующего компонента (MailRu: 24 632). Учитывая происхождение приложения, ожидаемо — но разница на два порядка всё равно удивляет. VPN-детекция MEDIUM.
2ГИС: единственное приложение в выборке с RSA-4096 — это правильно. При этом 9 трекеров и HMS как лидер (70 823 ссылки). AppsFlyer присутствует с 16 070 ссылками — рекламная атрибуция для навигатора.
Яндекс Пэй: DSA-1024 — редкость в 2026 году. Плюс 5139 крипто-слабостей — максимум в выборке. При этом VPN-детекция LOW. Приложение явно делает ставку не на обнаружение VPN, а на другие механизмы антифрода.
Авито: 346 МБ, 11 трекеров, RSA-1024. Facebook SDK с 17 463 ссылками в российском маркетплейсе — это не блокируется на уровне DNS без потери функциональности, если Facebook SDK используется для авторизации.
Расширенная проверка: оверлеи, dropper-цепочка и разбор полёта по VK
После первичного прогона я углубился в три специфических вектора: критичные разрешения манифеста, конфигурацию NSC и SSL-bypass в smali, а также провёл дополнительную SAST-проверку хранилища, буфера обмена, фоновой геолокации и нативных библиотек. +34 новых находки, итог — 237 уязвимостей. Разберу самое интересное.
Эпидемия SYSTEM_ALERT_WINDOW в финансовых приложениях
SYSTEM_ALERT_WINDOW — разрешение на отрисовку поверх других приложений — присутствует у шести из одиннадцати: Сбербанк, ВТБ, Т-Банк, Яндекс Пэй, Авито, VK.
Приложение с этим разрешением может рисовать слой поверх чужого UI — то есть держит в руках половину механики Tapjacking/Overlay Attack. Сразу уточню маппинг, потому что в первой редакции я поставил его неправильно: CWE-1021 описывает приложение-жертву, которое не защищает свои экраны от перекрытия (filterTouchesWhenObscured). Приложению, которое само владеет оверлейным правом, корректнее ставить CWE-250 — исполнение с избыточными привилегиями.
И это не уязвимость сама по себе. Это постоянно доступная возможность, которая становится оружием, если в процесс попадает чужой код — скомпрометированный SDK, supply-chain, взломанный релиз. Ради мини-баннера держать её всё время включённой — сомнительный размен, но отдельно взятое SYSTEM_ALERT_WINDOW я бы находкой не назвал. Настораживает связка: у Сбербанка и ВТБ оно идёт вместе с правами на установку пакетов и тихое обновление (см. ниже).
Dropper-цепочка в банках: REQUEST_INSTALL_PACKAGES + UPDATE_PACKAGES_WITHOUT_USER_ACTION
Это наиболее неожиданная находка. Три банка — Сбербанк, ВТБ, Т-Банк — содержат пару:
REQUEST_INSTALL_PACKAGES— право быть установщиком сессииUPDATE_PACKAGES_WITHOUT_USER_ACTION— право устанавливать обновления без диалога подтверждения (Android 12+, API 31)
У Сбербанка и ВТБ добавлен ещё MANAGE_EXTERNAL_STORAGE — доступ ко всему внешнему хранилищу. В совокупности это полный dropper-профиль: читаем APK из Downloads, устанавливаем без уведомления пользователя.
Законное применение тут есть — обновление собственных мини-апп модулей внутри супераппа. Но для этого достаточно PackageInstaller с явным scope на собственный пакет, а не широкий REQUEST_INSTALL_PACKAGES. Комбинация трёх прав в банковском приложении без публичной документации — то, что стоило бы прямо объяснить командам безопасности этих банков.
NSC: пять приложений без явной политики TLS
NetworkSecurityConfig отсутствует у Сбербанка, Яндекс Пэй, Авито, 2ГИС и RuStore.
Что это значит и чего не значит. Не значит, что приложение доверяет пользовательским сертификатам: начиная с Android 7 (targetSdk 24) платформа user CA по умолчанию не доверяет, а у всех пяти targetSdk 36–37. Перехватить трафик, просто подсунув свой корневой сертификат, там не выйдет.
Значит другое: нет декларативного certificate pinning, нет запрета cleartext для конкретных доменов, нет per-domain политики — всё это остаётся на совести кода, и статически проверить уже нечего. Для банка я бы такую конфигурацию не назвал критичной, скорее непрозрачной: защита может быть реализована в рантайме через OkHttp CertificatePinner, а может не быть реализована вовсе, и снаружи эти два случая неразличимы.
VK: ложная тревога, которую стоит разобрать
В первой редакции статьи здесь был раздел про «единственный реальный MitM-вектор без root». Анализатор нашёл у VK в network_security_config.xml директиву <certificates src="user"/> и один TrustAllManager в smali — и я сделал вывод, что трафик снимается обычным прокси с установленным пользовательским CA.
Вывод неверный, и я благодарен читателям, которые на это указали. Разбираю, потому что случай поучительный.
Декодированный NSC из релизного APK выглядит так:
E: network-security-config E: debug-overrides E: trust-anchors E: certificates src="system" E: certificates src="user" <-- вот он E: base-config E: trust-anchors E: certificates src="system" E: certificates @res/raw/russian_trusted_root_ca E: certificates @res/raw/russian_trusted_sub_ca E: certificates @res/raw/russian_trusted_sub_ca_2024 E: certificates @res/raw/vk_self_signed E: domain-config cleartextTrafficPermitted=true E: domain 127.0.0.1, localhost E: domain mobileid.megafon.ru, idgw.mobileid.mts.ru E: domain he-mc.tele2.ru, he-mc.t2.ru, beeline.ru
<certificates src="user"/> лежит внутри <debug-overrides>, а не в <base-config>. Секция debug-overrides применяется только при android:debuggable="true"; в релизной сборке VK этот атрибут отсутствует, то есть false. Android такую секцию просто игнорирует. Перехват через пользовательский CA не работает — ровно так, как и должно быть у нормально собранного приложения.
Ошибка была в анализаторе: он искал факт наличия директивы, не разбирая, в какой секции она лежит. Это классический ложноположительный результат статики, и правило «src="user" найден → доверяет user CA» теперь проверяет родительский элемент.
Что из этого раздела остаётся правдой:
cleartextTrafficPermitted=trueприсутствует, но ограничен семью адресами: localhost и хосты Mobile ID у МегаФона, МТС, Tele2 и Билайна. Это авторизация по SIM, где оператор технически требует HTTP. Не дыра, но точка, где трафик идёт открытым.<pin-set>в конфиге нет — декларативного pinning у VK тоже не заведено.В
base-configдобавлены российские корневые CA (Минцифры) и собственный self-signed сертификат VK. Это осознанное расширение доверия за пределы системного хранилища. Практический смысл — работа при перевыпуске сертификатов внутри РФ; риск в том, что доверенных корней становится больше, чем заложено в системе.TrustAllManagerдействительно есть: обфусцированный классxsna/zyk0, исходноProxyTrustManager.kt, с пустымcheckServerTrustedи аннотацией@SuppressLint("TrustAllX509TrustManager"). Это собственный код VK, не чужая библиотека. Но он не глобальный TrustManager, а одно из звеньевCompositeTrustManager— доказать статикой, что оно включается в продакшене, я не могу. Так что честная формулировка: настораживающий класс в коде, а не подтверждённый вектор атаки.
Незащищённые exported-компоненты и утечка device_id
RuStore лидирует по открытым exported-компонентам: 22 сервиса, 3 провайдера, 5 ресиверов — без android:permission. Это значит, что любое стороннее приложение на устройстве может запустить эти компоненты напрямую через Intent.
В нескольких ContentProvider с именами, характерными для AppMetrica PreloadInfo и VK push-интеграции, присутствует паттерн доступа к device_id — потенциально эксплуатируемый без привилегий. Это «информационная» утечка уровня fingerprinting, но она работает горизонтально — между приложениями на одном устройстве.
Итог по профилю разрешений
Единственное приложение с адекватным профилем разрешений — Госключ: запрашивает ровно то, что нужно для работы с ГОСТ КЭП. Остальные — в диапазоне от «избыточный» до «агрессивный». Лидеры агрессии: Сбербанк (4 критичных разрешения), ВТБ (4), RuStore (4).
Выводы
237 уязвимостей на 11 приложений (+34 по итогам расширенной проверки). 6 слабых ключей подписи. 10 из 11 приложений с HMS Huawei. VK_SDK в 7 приложениях.
Три вещи, которые можно сделать прямо сейчас:
1. DNS-фильтрация. AdGuard Home или NextDNS. Блокирует домены трекеров без SSL Pinning и root. Не панацея, но снижает шум.
2. Рабочий профиль. Shelter / Island. Финансовые приложения с высоким риском — в изолированный профиль без доступа к контактам и основному буферу обмена.
3. Разрешения. Банки не нуждаются в фоновой геолокации. ВТБ с 20 опасными разрешениями и Т-Банк с 23 — есть что отозвать.
Ключи подписи менять сложнее: смена ключа означает переустановку приложения пользователями. Но RSA-1024 у Сбербанка и Госуслуг в 2026 году — это то, что рано или поздно придётся переделывать, и чем позже, тем дороже.
Отчёты
Полные PDF с таблицами уязвимостей, CWE-кодами, CVSS-скорингом и разбором механизмов слежки:
Пользовательский отчёт — сводка, основные выводы
Технический аудит — SAST-данные, детальные таблицы, скоринг
Дисклеймер
Данный аудит — статический анализ APK + пассивный logcat. Трафик не расшифровывался, SSL Pinning не обходился, серверная часть не анализировалась.
Обфускация занижает абсолютные числа: цифры крипто-слабостей и ссылок на трекеры — это то, что видно jadx и androguard. Реальная картина может отличаться в обе стороны.
Наличие кода трекера в APK не означает автоматической передачи данных — SDK может быть включён, но не инициализирован при определённых условиях. Logcat при первом запуске показывает то, что инициализируется в базовом сценарии.
Госуслуги — версия с зеркала RuStore (ru.rostel 27.0.1.9810-rustore), не Google Play.
Полные таблицы уязвимостей с CWE-кодами и CVSS-скорингом — в PDF-отчётах.
Методология: OWASP MASTG + MobSF + SAST.
Комментарии (42)

alexzen
12.09.2026 15:15Насколько безопасна альтернатива пользоваться вышеуказанными сервисами из браузера или установка их как PWA приложений с ограничением всех прав?

select26
12.09.2026 15:15По NIST SP 800-57, RSA-1024 и DSA-1024 официально устарели ещё в 2013 году. Android продолжает принимать такие подписи для обратной совместимости, но это означает: теоретически скомпрометированный ключ может быть использован для подписи поддельного обновления, которое пройдёт верификацию как легитимное.
NIST - это, конечно, хорошо. Но это не требования, а рекомендации.
И неизвестен пока ни один случай подбора (НЕ ВЗЛОМА, тем более) RSA-1024 ключа не в лабораторных условиях.
Все эти байки основаны на старой картинке, где растущая прогнозируемая вычислительная мощь в будущем должна позволить подобрать ключ. Пока никто подобрать не смог и математически уязвимость не найдена.
Я лично использую 1024 битные ключи - работа с ними на порядок (я знаю что означает это слово) снижает нагрузку на процессор при криптографических операция и на большом скейле это очень заметно.Но RSA-1024 у Сбербанка и Госуслуг в 2026 году — это технический долг, который когда-то придётся платить.
Я думаю что профессионалы просто адекватно оценивают риск и рационально используют ресурсы. Ваш, кстати, телефон тоже не очень счастлив будет работать с длинным ключом. Особенно его батарея.
А так, да:
скомпрометированный ключ может быть использован для подписи поддельного обновления, которое пройдёт верификацию как легитимное
Только какое отношение компроментация ключа имеет к его длине? И как увеличение длины ключа защищает от его компроментации?
Мне кажется автор не очень понимает эту предметную область.
amhbr
12.09.2026 15:15Вы просто не понимаете смысл подобных статей :). Всё ж, обязательно должно быть плохо.

johnick1234 Автор
12.09.2026 15:15По существу — вы правы, и не в мелочи. Признаю прямо: в тексте была логическая ошибка, а не просто резкая формулировка.
Про компрометацию vs длину ключа — вы абсолютно правы, это разные вещи. Длина ключа защищает от подбора (факторизации). Компрометация — это утечка приватного ключа из хранилища, кража у подписывающего процесса, инсайдер и так далее — способ получить ключ, который вообще не зависит от того, сколько в нём бит. RSA-4096, украденный из плохо защищённого CI/CD, компрометируется ровно так же легко, как RSA-1024. Я смешал в одном предложении два разных риска — это ошибка формулировки, а не разница мнений, и я её поправил в статье.
Про NIST — тоже справедливо. Это рекомендация, не стандарт с обязательной силой, и я подал её как строгую границу.
Про отсутствие практической факторизации RSA-1024 вне лабораторий — согласен, тут я говорил о теоретическом риске на растущих вычислительных мощностях, а не о задокументированном взломе, и это стоило явно разграничить.
Где не соглашусь — с «а так это нормальная инженерная практика для банка». Разница в контексте: вы используете RSA-1024 сознательно, зная профиль риска, ради производительности на своём масштабе, и это осознанный trade-off. У подписи APK производительность приватного ключа при подписании не имеет значения вообще — ключ используется один раз при релизе, не миллион раз в секунду на проде. Аргумент «телефон не будет рад длинному ключу» тут не работает: смартфон верифицирует подпись публичным ключом при установке, это происходит один раз, нагрузка на батарею неотличима от нуля что для RSA-1024, что для RSA-2048. Разница в производительности релевантна для TLS-хендшейков на высоконагруженном сервере — не для APK Signature Scheme.
Так что реальный аргумент за RSA-2048+ для подписи приложения — не «сегодня взломают», а «переход бесплатный по производительности и оставляет запас на будущее, зачем экономить там, где экономия ничего не даёт». Формулировка про «технический долг» в статье уже поправлена на менее драматичную версию — по существу спасибо за то, что заставили точнее развести компрометацию и длину ключа, это реальная правка, не защита лица.

Maslukhin
12.09.2026 15:15Вот такие фразы сразу выдают нецрогенерацию.
это технический долг, который когда-то придётся платить.
Нейрогенерация ставит под сомнение верность выводов из статьи.
Лучше пишите сами.

johnick1234 Автор
12.09.2026 15:15Справедливо — фраза действительно штамп, из тех, что LLM вставляет не думая. Я писал текст с помощью модели и не выловил все такие места при вычитке, это на мне.
По сути вопроса — тут готов не согласиться. Стиль и достоверность фактов — разные вещи. Если находка построена на конкретном счётчике обращений в smali, конкретном классе, конкретном XML-атрибуте — она не становится ложной от того, что абзац вокруг неё звучит как канцелярит. По ходу этой ветки комментариев несколько реальных ошибок уже нашли и поправили (ложноположительный MitM-вектор у VK, неверный CWE-маппинг для SYSTEM_ALERT_WINDOW, неточная формулировка про VPN-блокировку) — и нашли их не по фразам «технический долг», а по проверке конкретных технических утверждений. Это и есть правильный способ ловить ошибки в таком материале, а не поиск AI-tells в языке.
Штампы почищу при следующей правке — они правда мешают читать. Но выводы там, где они держатся на конкретных данных из smali/манифеста/NSC, эта чистка не изменит; там, где выводы были неверны, они уже поправлены отдельно, по фактам, а не по стилю.

Ox2A
12.09.2026 15:15Понятно, что все эти организации исполняют всякие директивы, но тем не менее слишком стараясь их исполнять, они себе в ногу стреляют. Вот, захотелось мне посмотреть любопытный мне девайс на озоне. Но озон решил мне этого не показывать, я не прошел какую-то ему одному ведомую проверку. Первый эмоциональный импульс прошел, включилась кора головного мозга со своими вопросами типа: "А оно точно мне нужно?". Понял, что совершенно не обязательно. Вот и сэкономил деньги.

BugM
12.09.2026 15:15Обычная аналитика, которая у всех. Во всяких Тиктоках и Фейсбуках собирается побольше инфы. Важно не количество SDK, а что собирается.
Разрешения тоже нормальные. Автообновление это мастхев фича для российского приложения в 2026.
SYSTEM_ALERT_WINDOWдля всяких быстрых оплат. СБП и прочие QR коды все пытаются сделать удобнее.VPN это в законе прописано. Но судя по тому что у меня все с VPN уже заработало, если и детектят то без огонька.
237 уязвимостей
Тут ваша ллмка просто придумала что-то.
А вот переподписать чем-то посерьезнее действительно стоит. Это единственное что правда без вопросов.

dom1n1k
12.09.2026 15:15Для обычной аналитики достаточно иметь один-два, ну три трекера. Для чего объективно могут понадобиться 5-10 трекеров, кроме торговли данными налево?

BugM
12.09.2026 15:15А где вы нашли 10-11?
У всех ВК+Аппметрика. Это логично. У ВК треш с названиями и пакетами. VK_SDK + MailRu + MyTracker это все один ВК и ничего больше.
Firebase это гугловый SDK. HMS_Huawei это SDK хуавейных сервисов. Рустор аналогично. Без них всех нынче никуда. Пуши это такая штука что она нужна надежная, а сторы нынче все сомнительные.
Фейсбук правда вызывает вопросы. Его стоило бы удалить.
И все.

johnick1234 Автор
12.09.2026 15:15Разберу по пунктам, потому что вы во многом правы.
Трекеры: вы правы про VK-экосистему, но не полностью. VK SDK, Mail.ru, MyTracker технически действительно один бенефициар — это семейство SDK от VK Group, я их в статье считал по отдельности как «разные трекеры», хотя правильнее было объединить в один пункт «данные уходят в VK». Firebase/HMS/RuStore как push-инфраструктура — тоже справедливое замечание, без надёжного пуша сейчас никуда. Если пересчитать честно: инфраструктура (Firebase/HMS/RuStore) отдельно, VK-группа отдельно как один получатель, и дальше смотреть, что осталось — у большинства банков остаётся 1-3 реальных стороннихе рекламных SDK (AppsFlyer, Facebook, отдельно Яндекс AppMetrica). Это заметно меньше, чем «6-9 трекеров» звучит в лоб. Facebook у Авито и правда торчит без объяснимой причины — тут мы согласны полностью.
237 уязвимостей — тут не соглашусь. Это не придумано моделью — механическая сумма пронумерованных находок (
SBER-01,VTB-16и так далее) по 11 отчётам, я эту цифру специально перепроверял построчным подсчётом заголовков. Другой вопрос — качество этих находок неоднородное: где-то за формулировкой стоит конкретный счётчик обращений или конкретный класс в коде, а где-то вывод построен на отсутствии данных («нельзя исключить», «возможно, вызывается нативно»). Второе методологически слабее первого, и такие находки не стоило подавать с той же интонацией, что и подтверждённые. Это справедливая претензия к весу отдельных пунктов, а не к тому, что цифра высосана из пальца.SYSTEM_ALERT_WINDOW для СБП/QR — тут вы не совсем правы, но и я неправ был. Ни в одном отчёте нет подтверждения, что это разрешение реально используется под платёжный оверлей или QR — я эту гипотезу выдвигал, но статикой она не доказывается, доказывается только сам факт наличия permission. Так что версия «это для СБП» — ровно такая же непроверенная гипотеза, как и моя версия про оверлей-атаку, только с обратным знаком. Настораживает не оверлей сам по себе, а связка
SYSTEM_ALERT_WINDOW+REQUEST_INSTALL_PACKAGES+UPDATE_PACKAGES_WITHOUT_USER_ACTIONу Сбера/ВТБ/Т-Банка — это уже конкретная цепочка «скачать APK → поставить без диалога», а не абстрактный риск оверлея.Автообновление — согласен, само по себе не находка, я об этом и не писал как о находке. Проблема не в факте автообновления, а в конкретном разрешении
UPDATE_PACKAGES_WITHOUT_USER_ACTION— оно добавлено в Android 12 именно для магазинов приложений (у RuStore я его отдельно оценил как низкий риск ровно по этой причине). У банка, который не магазин, это разрешение — тихое обновление без диалога согласия, и вместе сREQUEST_INSTALL_PACKAGESэто и есть та самая цепочка дроппера. Если в статье это читалось как «автообновление — плохо» — плохо сформулировал, извиняюсь.VPN-детекция — тут вы правы почти полностью. Все формулировки в отчётах про «детектирует» и «может ограничивать функциональность» — именно так, с сослагательным наклонением. Статика фиксирует только наличие кода, который умеет распознавать VPN (WebRTC ICE leak,
TYPE_VPN,isProxy, чтение/proc/net/tcp) — реально ли это включено и как используется в проде, статическим анализом не проверяется в принципе. Если у вас всё через VPN работает штатно — вполне возможно, что детекция есть, а решение на её основе ничего не блокирует, либо блокирует что-то узкое (антифрод-скоринг, а не полный отказ в доступе). Я формулировал это осторожно в отчётах, но в тексте статьи местами подача жёстче, чем позволяют факты — это на мне.Итог: переподписать ключами посерьёзнее — да, единственное, с чем вообще нет предмета для спора. Остальное — где-то вы правы и я меняю подачу, где-то моя формулировка была точнее исходной находки, чем звучит в вашем пересказе. Спасибо, что разбираете по существу, а не общими словами

InsiderCrush
12.09.2026 15:15Очень полезная статья. Хотя и тяжелая для нетехнических пользователей. Им бы в начало статьи большими буквами гайд, что отключать и у кого. Я первый в очереди на гайд стоял бы :D

MountainGoat
12.09.2026 15:15А мало что вообще можно сделать. Это не Линукс, где всю хрень можно запихать в докер, и пусть там сидит. От некоторых способов слежки помогает Shelter, но его сначала поставить надо, и помогает не всегда, а это тот случай когда одна ошибка - и ты ошибся.
Помогает только отдельный телефон иметь. Благо продажу БУ телефонов пока не запретили, и за 3 к₽ можно купить рабочий аппарат.

Dzzzen
12.09.2026 15:15Как минимум, можно использовать dns-сервер с фильтрацией трекеров, и проверить, какие разрешения можно отозвать. Ну и мод-версии приложений никто не отменял.

PM_Inna_Ka
12.09.2026 15:15Как раз сейчас на другой стороне этого вопроса — строю продукт, который сам просит у пользователя чувствительные данные (фото юзера для генерации новой картинки), и вижу изнутри, как легко случайно натащить лишних SDK/трекеров просто через привычные библиотеки, не задумываясь. После таких аудитов начинаешь параноить по-хорошему — сверяешь каждую зависимость на предмет “а зачем она вообще шлёт что-то на сторону”.
Вопрос по методологии: вы смотрели трекеры именно статическим анализом (по коду/манифесту) или ловили реальный трафик в рантайме тоже? Спрашиваю потому что часть SDK умеет молчать, пока не сработает конкретное условие — статика может часть такого не поймать.
MountainGoat
Вот поэтому нужно всем иметь для российских приложений отдельный телефон. И пусть там вся эта шобла друг за другом следит, а так же файлы и контакты читает. И в домашний вайфай его не включать.
Остаётся важным только вопрос, чтобы лишний доступ к микрофону никто не получил.
Oeaoo
да
DGN
А зачем отдельному телефону вообще микрофон?