7 декабря 2022 г.

Об утечке ключей подписи Samsung и LG

Используя последние обновления,
вы в безопасности. А мы - Google, мы врать не станем


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

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

    Так что внесу чуть ясности в эту историю.

  • Под раздачей, из популярных, Samsung, LG и Mediatek. Есть ещё несколько ноунеймов, но они мне интересны. Впрочем, с Mediatek тоже не очень понятно, т. к. есть один конкретный семпл (в смысле я знаю про один) и я не знаю, для чего он. У меня никогда не было устройств на MTK
  • Ключи Samsung утекли ещё несколько лет назад. Как минимум в гугловом багтрекере  можно найти пример вредоносного приложения, подписанной ключом Samsung, аж из 2016 года: https://www.virustotal.com/gui/file/b1f191b1ee463679c7c2fa7db5a224b6759c5474b73a59be3e133a6825b2a284/details
  • Samsung утверждает, что знал об утечке и выпускал некое обновление безопасности, исправляющее эту проблему.
    Samsung takes the security of Galaxy devices seriously. We have issued security patches since 2016 upon being made aware of the issue, and there have been no known security incidents regarding this potential vulnerability. We always recommend that users keep their devices up-to-date with the latest software updates.

        Что имеется в виду под этим - не понятно (ничего? Как в политике — много слов при отсутствии смысла), потому что актуальные на сегодня прошивки устройств Galaxy по-прежнему содержат приложения, подписанные скомпрометированными ключами.
        Когда-то, работая в другой фирме, я читал доклад, где говорил, что Samsung умеет делать железо (лишь с частными оговорками), но совершенно не умеет делать прошивки. За этот посыл, который был подкреплён набором фактов (как тестировщик, я накопил вагон примеров), мой доклад был удалён. Ну что же. Я не отказываюсь от своих слов до сих пор
  • Этими ключами подписаны примерно все приложения Samsung, установленные на их телефонах: Samsung Pay, Bixby, Samsung Account и другие. Можете сами оценить: https://www.apkmirror.com/?post_type=app_release&searchtype=app&sortby=date&sort=desc&s=34df0e7a9f1cf1892e45c056b4973cd81ccf148a4050d11aea4ac5a65f900a42 И будьте внимательны, там 100 страниц приложений
  • Google утверждает, что все OEM партнёры были уведомлены и сообщили, что начали процесс миграции. Но эта миграция, если она и правда началась, займёт месяцы. Ниже опишу, почему.
  • Google Play имеем техническую возможность обнаруживать и удалять вредоносные приложения. Но возможность не означает, что это будет применено. Сам Google говорит в духе: не бойтесь, вы можете нам доверять, если у вас последние обновления, то вы под защитой. И тут как раз как в КДПВ: а мы Гугул, мы врать не будем

 

Миграция

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

    Несколько лет назад (в 2018), Google выкатил механизм для ротации подписей. Так называемая signature scheme v3. Последняя на сегодня уже 4. Разумеется, 4  тоже поддерживает ротацию.

Что же нужно сделать для ротации (перехода на новую подпись без необходимости переустановки приложения):

  1. Выпустить обновление приложений, которые подписаны новой подписью, но в цепочке указано, какая подпись была прошлой. Тогда Android сможет установить обновление. И выложить это в Store (и в Play Store, и в Samsung Store)
  2. Выпустить обновление прошивки, где все приложения также обновлены через схемы 3 или 4

    Казалось бы, всё просто, бери и делай. Но вот подводные камни:

  • схема 3 поддерживается только в Android 9 и выше. И казалось бы, ну плевать на 8.1 и ниже, сколько их там — процентов 5-7? Это сарказм, если что, потому что это очень огромное число реальных людей. Но Google обновил документацию по v3 (имею в виду, раньше этого замечания не было), где прямо сказал, что не надо использовать ротацию до Android 11: https://source.android.com/docs/security/features/apksigning/v3. То есть под ударом пользователи Android 10 и ниже, если я правильно понимаю посыл. Буду надеяться, что неправильно и имеется в виду, что Play Market сам готов к ротации стал только с выходом 11. Но тогда почему не убрали заметку обратно? То есть задним числом статью обновили один раз, чего бы не обновить второй раз? Решите сами, что имеет в виду Google:

     APK key rotation is not recommended before the release of Android 11. 

  •  С теми пользователями, кто остался за бортом (живёт на недостаточно новых прошивках) нужно как-то связаться и попросить их удалить старые версии приложений, а затем установить их снова из стора. Но ведь это надо как-то связаться. Допустим, можно выпустить обновление стора, которое само будет вываливать нотификции с этим требованием…
  • …но это поможет только для тех приложений, которые пользователи поставили руками. Это никак не спасёт в ситуации, когда приложение было предустановлено в прошивку изначально, а из Стора лишь получало обновления. Включая, что иронично, сам Стор. На 8.1 и ниже (или, в самом худшем раскладе — на 10 и ниже) нет вообще никакой возможности мягко сделать переход из-за того, что Samsung любит совать в прошивку вообще все свои фирменные приложения. А не мягкий, то есть полное обновление прошивки с обязательной потерей всех данных приложений — они делать не будут однозначно
  • И, наконец, сам Стор должен быть готов к схеме 3. Есть не нулевая вероятность, что ОЕМ производители, у которых есть свой стор, могли забить болт на поддержку этой версии схемы. Ведь v2 же работает, а работает — не трогай. Да и вообще, это нужно выделить бюджет. Кто на это пойдёт?

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

    Почему я уверен, что он не отлажен? Вот выхлоп моей утилиты, которая используется у нас в CI для разных дел:

В 2022 году Samsung ничего не знает о v3 и v4

     Это самая последняя доступная (прямо на момент написания этих строк 7 декабря 2022 года в 13 часов 45 минут по Москве) версия фирменного браузера Samsung. То есть они не просто никогда не проверяли миграцию, они даже не могут её начать, ведь v3 у них просто нет, только v2. Вот потому выше я предположил, что их Стор может вообще быть не готов к новой схеме — ведь они её не используют.

    Исходя из всего этого, я берусь утверждать, что миграция займёт месяцы. Ну, с 2016-го можно и потерпеть ещё полгодика-год, не так ли? А ведь кто-то купил телефоны за 1000+ долларов США.

 

А в чём страх?

    Дело в том, что предустановленные приложения очень часто имеют расширенные права в системе или, даже если специальных прав у них нет, они часто созданы для работы с какими-то очень чувствительными данным. Например, Samsung Pay имеет доступ к вашим банковским картам.
    Имея в руках нужные ключи, злоумышленник может сделать вредоносное приложение, которе будет маскироваться под настоящее приложения Samsung или LG. И, используя методы социальной инженерии, заставить пользователя установить это приложение. Раньше здесь бы не было беды, т. к. приложения бы не были заменены на вредоносные из-за несовпадения подписей. Но теперь - установятся, как родные. И наследуют все права в системе, наследуют все данные, включая банковские и другие чувствительные, которые вы можете доверить Samsung, но не Васяну.

 

Дополнительно

Приложения LG: https://www.apkmirror.com/?post_type=app_release&searchtype=app&sortby=date&sort=desc&s=4274243d7a954ac6482866f0cc67ca1843ca94d68a0ee53f837d6740a8134421

Единственный известный мне случай с Mediatek: https://www.virustotal.com/gui/file/19c84a2386abde0c0dae8661b394e53bf246f6f0f9a12d84cfc7864e4a809697/details

Мой ТГ канальчик, где я пишу про баги (почти всегда - Android), но очень редко и раздражать вас не буду: https://t.me/mydaybug

Комментариев нет:

Отправить комментарий