Хакер #305. Многошаговые SQL-инъекции
Разработчики Google объявили, что с августа 2021 года все новые приложения, загружаемые в Google Play Store, должны будут использовать новый формат Android App Bundles (AAB), вместо привычного APK (Android PacKage), который используется в Android с 2008 года. В компании объясняют, что AAB более универсальный, «пакетный» формат, который позволит уменьшить объем приложений и адаптировать их для разных устройств.
Формат AAB появился в 2018 году, и его основная идея заключается в том, что Android-девайсы имеют множество различных аппаратных и языковых комбинаций, которые должны поддерживать приложения, а доставка всего этого кода на каждое отдельное устройство — пустая трата места. Дело в том, что Android поддерживает более 150 языков, четыре архитектуры ЦП (ARMv7, ARMv8, x86 и x86_64) и различные разрешения экрана, и все связанные с этим данные, сосредоточенные в одном APK, существенно увеличивают «вес» последнего.
В свою очередь Android App Bundle превращает приложения в набор «разделенных APK», которые могут раздаваться из Google Play Store для каждого отдельного устройства. В сущности, такие «разделенные APK» не являются полноценными приложениями. Это лишь части приложений, каждая из которых сосредоточена на определенной области, а вместе они образуют приложение. К примеру, если у вас есть устройство на базе ARMv8 с высоким разрешением, работающее на английском языке, и Google Play Store предоставит вам набор «разделенных APK», которые поддерживают только устройство с такими параметрами. А если у вашего друга есть телефон на базе ARM v7 с низким разрешением, который использует английский и русский, он получит другой набор APK, ориентированный именно на такой девайс.
Таким образом, каждый пользователь получит только тот код, который нужен его устройству. По словам разработчиков Google, это поможет сократить «вес» приложений примерно на 15%.
Также разработчики приложений смогут использовать App Bundle для управлениями функциями своих продуктов. К примеру, какие-то функции могут доставляться только на те устройства, которые их поддерживают, или будут доступны пользователям лишь по запросу.
Многие отмечают, что переход на AAB также гарантирует Google больший контроль над всей экосистемой Android. Дело в том, что пакеты Android App Bundle должны обрабатываться инфраструктурой магазина приложений. Хотя AAB — это формат с открытым исходным кодом, и у Google есть опенсорсное приложение bundletool, многим компаниям все же потребуется создать собственную инфраструктуру и оплатить все связанные с этим расходы.
Хотя открытый исходный код App Bundles позволяет легко поддерживать их, альтернативным магазинам приложений придется взять на себя много работы и ответственности, и, вероятно, новый формат станет активно применяться только в Google Play Store.
Кроме того, журналисты ArsTechnica отмечают, переход на AAB связан с еще один немаловажным аспектом. Так, одним из основных компонентов безопасности APK является подписание приложений. По сути, речь идет о цифровом сертификате, принадлежащем разработчику приложения, который удостоверяет, что тот создал это приложение. Подпись не актуальна при первой установке, но во время всех последующих обновлений подписи должны совпадать. Это означает, что только владелец сертификата (исходный разработчик приложения) может обновить приложение. То есть никакая случайная третья сторона не может создать APK под названием Google-Pay.apk, который перезапишет реальное приложение Google Pay Store и похитит всю информацию пользователя.
Однако если вся система сборки приложения должна размещаться в облаке, ключи подписи разработчиков тоже должны размещаться в облаке, а это перекладывает ответственность за приложение с разработчика на Google.
«Google называет это “Google Play App Signing”, и компания серьезно обещает, что вы по-прежнему будете владеть приложением и иметь к нему доступ. Но это немного похоже на передачу документов на ваш дом третьему лицу. Google контролирует Play Store, а значит, компании уже принадлежит улица и ваша подъездная дорожка, а теперь [Google] будет иметь еще больший контроль над вашим приложением», — отмечает издание.
Дело в том, что если инфраструктура магазина приложений будет скомпрометирована, третья сторона сможет получить доступ к ключам разработчиков и начать распространять вредоносные обновления. Также встает вопрос доверия владельцу магазина приложений. Ведь теперь он владеет ключом подписи и может изменить любое приложение без ведома автора, если захочет. Например, правительство может вынудить владельца магазина приложений изменить чье-то приложение по всему усмотрению.
Чтобы развеять опасения по этому поводу, специалисты Google пошли на ряд уступок. Так, разработчики смогут хранить локальную копию ключа подписи, который они загрузили на серверы Google, что позволит им выпускать валидные обновления, которые можно устанавливать поверх версий из Google Play Store.
Также разработчики смогут загрузить подписанные Distribution APK через консоль разработчика Google Play. Эти файлы представляют собой обычные универсальные APK, которые можно использовать для загрузки в другие магазины. Для тех, кто боится, что Google может изменить приложение без согласия разработчика, предусмотрена новая необязательная функция «прозрачности кода», которая позволит разработчикам проверять, соответствуют ли хэши тому коду, который они загрузили в магазин ранее.