На днях комьюнити принесли «добрую весть»: на GitHub выложили «белую» сборку MAX — мол, тот же мессенджер, только «без опасных разрешений». Ссылки полетели по чатам, кто-то сразу поставил себе APK, кто-то начал спорить про этику модификаций. И вот на этом месте давайте на секунду остановимся. GitHub — это не храм истины, а большой базар кода: там есть полезное, спорное и откровенно токсичное. То, что что-то лежит в публичном репозитории, не делает это безопасным по умолчанию.
Для затравки напомню: вокруг «облегчённой» версии MAX уже появлялись посты и обсуждения, а также репозитории-моды вроде whitemax . Ресурсы то возникают, то пропадают, зеркала множатся, а скриншоты гуляют по соцсетям. Идея модификации «для безопасности» звучит благородно, но на практике она упирается в старую как мир задачу: как нам вообще доверять коду и сборкам, которые мы скачиваем из публичных источников?
GitHub — это витрина, а не гарантия
Почти у каждого из нас была ситуация «ну это же на GitHub, значит норм». Увы, нет. Публичные репозитории неоднократно становились стартовой площадкой supply chain-атак — от подмены зависимостей до компрометации CI. Свежие кейсы? Пожалуйста: истории с массовым сливом секретов через компрометированные GitHub Actions разбирали и исследователи из Unit 42 , и команды, анализировавшие эпизод с tj-actions/changed-files . В параллель шли и истории с масс-компрометацией npm-пакетов, где достаточно одной фишинговой атаки на мейнтейнера, чтобы миллионы получали вредоносный код через «обычное обновление».
Вывод приземлённый: «есть репозиторий» не равно «можно ставить». Особенно когда речь о модах приложений с заявлением «мы убрали всё опасное». Кто «мы», под каким ключом собирали, откуда зависимостям приходят хэши, кто контролирует CI и релизы? Если на эти вопросы нет прямых ответов, у нас не доверие, а вера. Вера — это прекрасно, но не для продакшн-устройств.
Что именно проверять в публичном репозитории
Если хочется подходить не на эмоциях, а по чек-листу, то вот рабочий минимум. Да, он скучный, зато помогает не ловить лишние приключения поздней ночью.
- Релизный процесс. Есть ли «Release»-страницы, теги, changelog? Подписи артефактов? Повторяемые шаги сборки?
- CI/CD. Настроены ли GitHub Actions/другие пайплайны на воспроизводимую сборку из исходников? Пинятся ли версии действий по SHA, а не по «latest»?
- Ключи и подписи. Кто именно подписывает релизы и где лежит публичный ключ? Что с историей ключа: не менялся ли «тихо»?
- Зависимости. Есть ли lock-файлы, фиксированные версии и проверка хэшей? Как управляют Gradle/Maven-артефактами?
- История коммитов и участники. Понятны ли авторы, есть ли ревью, обсуждения в Issues/PR? Репозиторий-«одиночка» без прозрачности — плохой знак.
Казалось бы, банальности, но именно на них чаще всего экономят время. А зря. Классика supply chain-взломов растёт там, где «и так сойдёт».
APK: как проверять до установки
Если разговор про Android, то первая заповедь — никогда не верить APK «на слово». У нас есть инструменты, и они вполне доступны. Начните с проверки подписи и сертификата. Документация Android про apksigner описывает, как верифицировать подпись и посмотреть, кем вообще подписан пакет. Если приложение использует современные схемы подписи (включая v4 ), старые методы «гляну в keytool» могут показать всё что угодно — используйте правильный инструмент.
Дальше изучите манифест: какие разрешения реально запрашивает сборка, какие из них в группе «dangerous», что закладывают в exported-компоненты, интенты, content provider’ы. Удобные инструменты для ревока и инспекции прав вроде App Manager помогут быстро увидеть картину и отозвать лишнее, но помните: «урезанные разрешения» — это не гарантия того, что код внутри не делает чего-то неприятного через другие векторы (веб-вью, сторонние SDK и т.д.).
Воспроизводимые сборки и зачем смотреть на F-Droid
Золотой стандарт доверия к бинарнику — воспроизводимость. Если любой может взять исходники и собрать побитово тот же APK, пространство для «магии» резко сокращается. В экосистеме Android лучше всех эту историю «приземлил» F-Droid: у них отдельная методология по reproducible builds и даже работа по визуализации статуса воспроизводимости на стороне инфраструктуры . Да, добиться 100% повторяемости не всегда просто: влияет Java/Gradle/JVM-окружение, даты, порядок файлов и прочий энтропийный зоопарк. Но если проект хотя бы движется в этом направлении, это плюс к доверию.
Приложения-моды редко обладают таким комфортом: исходники частично «декомпилены», часть ресурсов собирается «на коленке», ключи новые, цепочка сборки непрозрачна. Это не приговор, но красный флажок. Если автор мода заявляет «безопаснее базовой версии», попросите воспроизводимую сборку или хотя бы детальную инструкцию, которая на чужой машине даёт тот же хэш APK. Без этого вся «безопасность» держится на словах.
CI/CD-гигиена: как не подарить доступ злоумышленнику
Даже честнейший автор может попасть в историю, когда вредонос попадает в релиз «через заднюю дверь» — через автоматизацию. Компрометация сторонних GitHub Actions уже приводила к утечкам токенов и «невидимым» модификациям пайплайнов (подробные разборы есть у Unit 42 и в разборе инцидента с tj-actions/changed-files ). Правила простые, но обязательные:
- Пиньте действия по SHA-коммитам, а не по «v1» или «latest».
- Минимизируйте секреты в рантайме, используйте OIDC-федерацию вместо долгоживущих ключей.
- Разделяйте права: сборка, подпись, публикация — разные джобы и разные токены.
- Логируйте и алертите всё, что связано с релизами: публикацию, смену ключей, изменение workflows.
Если в проекте модифицированного MAX нет понятной истории с CI/CD, а релизы выкладываются «руками с локальной машины», то формально вы доверяете не коду, а человеку. Иногда это ок, но пусть это будет осознанным решением, а не «ну это же с GitHub».
«Без опасных разрешений» — это полдела
Любимый тезис вокруг «белых» сборок — «мы вычистили слежку и вырубили разрешения». Звучит громко. На практике Android и так не отдаёт опасные разрешения без явного согласия пользователя, а отзыв прав не эквивалентен аудиту кода. Никакая «чистая» манифестация не отменяет возможность передачи данных через сетевые SDK, трекинг по телеметрии, отпечатки устройства и косвенные каналы. Плюс мод-сборки нередко привносят новые зависимости и патчи, которые ещё никто толком не смотрел.
Не поймите неправильно: у модов есть ниша. Например, там, где «надо пользоваться» по рабочей необходимости, а хочется минимизировать поверхность атаки. Но давайте честно: отсутствие разрешения не доказывает отсутствие нежелательной функциональности. Доказательство начинается с прозрачной сборки, независимого воспроизведения и верифицируемой подписи.
Практический чек-лист: что сделать перед установкой «белого» APK
Ниже — короткая шпаргалка. Это не заменяет аудит, но уже сильно повышает шансы не схватить неприятность.
- Сверьте подпись APK через
apksigner verify --print-certs
и зафиксируйте отпечаток сертификата. Документацию держите под рукой у Android . - Проверьте манифест и разрешения, в том числе exported-активности и провайдеры. Инструменты уровня App Manager помогут оперативно.
- Поищите репро-инструкцию: можно ли собрать тот же хэш на другой машине? Посмотрите практики F-Droid и попробуйте применить их локально.
- Оцените репозиторий: релизные теги, changelog, кто подписывает, как устроен CI/CD, пины зависимостей и Actions.
- Скачивайте только из первоисточника релизов, не с «левых» зеркал и не из перепакованных сборок «с улучшениями» в пабликах.
Если хотя бы по одному пункту вы не нашли внятного ответа, это не «запрет к установке», но точно жёлтая карточка. Иногда правильный выбор — продолжать пользоваться официальной сборкой с жёсткими системными ограничениями и политиками на устройстве, чем ставить «облегчённую» неизвестного происхождения.
Итого: доверие — это процесс, а не ссылка
История с «белым» MAX — хороший повод вспомнить, что безопасность в публичных репозиториях не сводится к лайкам и ретвитам. Доверие строится на повторяемости, прозрачности и верифицируемости: воспроизводимые сборки, вменяемый CI/CD, подписанные релизы, понятная история ключей, нормальная работа с зависимостями. И да, проверка APK — это рутина, которую лучше довести до автоматизма.
Ссылку «вот репа, всё чисто» воспринимайте как приглашение к проверке, а не как индульгенцию. И тогда даже моды «для безопасности» перестанут быть рулеткой: у них появится шанс стать действительно полезным временным костылём, а не новой точкой риска.