Почему ежемесячные обновления безопасности Android — это фарс
Привет. Меня зовут Иван, и я апдейт-диссидент. После этого должны были послышаться вялые хлопки, но их нет. Скорее всего потому, что многим не понятно слово, которым я себя обозвал. Если вы из их числа, не пытайтесь искать определение этого термина в интернете, потому что его там нет. Я сам придумал так себя называть в тот момент, когда понял, что обновления — это один из самых больших разводов в истории человечества наряду со шведским столом и брошенной наспех бывшему однокласснику, встретившемуся на улице, фразой “созвонимся”.
Обновлений не существует. Вот доказательства
Я уже как-то высказывал своё мнение относительно новых версий Android. Тогда я доходчиво объяснил, что особенного смысла в том, чтобы гоняться за свежими обновлениями операционной системы нет по нескольким причинам. Во-первых, они могут попросту испортить то, что и так исправно работало, суля больше проблем, чем пользы. Во-вторых, пожалуй, все нововведения апдейтов можно получить из стороннего софта, с которого Google и другие компании вроде Apple нагло списывают новые функции для своих ОС. С тех пор моя позиция не изменилась, а лишь усугубилась, ведь есть ещё обновления безопасности.
Зачем нужны обновления
Обновления безопасности — это потрясающе удобная для Google штука. Мало того, что компания может каждый месяц отчитываться о проделанной работе по поддержанию актуальности миллионов Android-смартфонов, по сути, не реализовав никаких нововведений, так ещё сами апдейты, о которых идёт речь, имеют довольно сомнительную природу и содержание. Во всяком случае, у меня они вызывают ощущение какой-то подделки.
Каждый месяц Google выпускает обновления безопасности и объявляет, что исправила n-ное количество уязвимостей. Обычно это некруглое, но довольно существенное число. Чаще всего в пределах от 20 до 30. Классно, подумают многие. Google заботится о своих пользователях и неустанно корпеет над Android, устраняя накопившиеся баги и бреши в системе безопасности. Но, постойте-ка. У вас никогда не возникало вопроса, откуда каждый месяц в Android, который получает новую версию раз в год, берётся такое количество уязвимостей?
Обновления-пустышки
Это может прозвучать надуманно и даже глупо, но меня не покидает мысль о том, что большая часть обновлений безопасности, которые выпускает Google, — это пустышки. В конце концов, нет ничего сложного в том, чтобы выпустить апдейт, который просто меняет билд операционной системы, но при этом не содержит в себе ровным счётом никаких изменений. Некоторые производители так и делали, пока всё это не стало достоянием общественности.
Читайте также: Google выпустила полезное обновление Google Play. Что изменилось
Возможно, уязвимости содержатся в самих обновлениях безопасности? Дескать, одно лечим, другое калечим. Но какой тогда вообще в них смысл, если каждый новый апдейт исправляет 20-30 багов, а на их место приносит ещё 20 или 30. Не проще ли в таком случае вообще откатить билд операционной системы к исходному и больше его не обновлять, чтобы не делать в ней новые дыры, подвергающие пользователей опасности? Другого объяснения тому, откуда в Android появляются новые уязвимости, я не нахожу.
Android небезопасен
Наверное, возможен и другой вариант. Допустим, что в Android действительно есть все эти уязвимости, однако их так много, что каждый месяц разработчики Google исправляют по 20-30 брешей и не могут остановиться, потому что им нет конца и края. Но тогда у меня для вас плохие новости, друзья. Если Android буквально изрешечена уязвимостями и багами, нам с вами не сдобровать. Ведь в таком случае любой хакер сможет копнуть чуть глубже, найти брешь и, воспользовавшись ей, взломать наши смартфоны. А если это так, то Google уже проиграла.
Источник
Как создавать патчи, основанные на доверчивой политике безопасности Android
Приветствую тебя, уважаемый читатель!
Offtop
В этом топике я хотел бы рассказать о том, как можно получать доступ к тому, что принадлежит нам, но косвенно.
Любой софт — это чья-то собственность: кто-то сидел и шевелил своими мозгами, чтобы произвести на свет очередное «чудо».
Но вне наших девайсов речи о софте не может и быть. Понятие «софт», в таком случае, будет означать не более чем «мягкость».
Это очевидно.
Именно поэтому мы имеем право вытворять с любым программным кодом, выполняющимся на нашем устройстве, все, что пожелает душа…
Intro
Думаю, начать стоит с самого начала. Все началось с моего обнаружения пользовательской зависимости окружающих к небезызвестной игре 2048. Мне, конечно же, стало интересно, чем эта игра так захватывает людей, поэтому я решил сам ее попробовать. Через несколько минут я понял ее суть и мне эта игра тоже стала интересна.
Должен признаться, более 5000 очков мне набирать не удавалось никак, а до 2048 было еще слишком долго…
Тем временем окружающие «игроки» с легкостью набивали по 10-16тыс очков, а некоторым удавалось даже достигать 2048 в клетке.
Что ж, спустя некоторое время у меня возникла идея тупо взломать эту игру, чтобы не «убивать» время на ее прохождение( она слишком долгая в прохождении, но от этого не менее затягивающая ). А еще спустя пару дней, об этом же меня попросили и мои знакомые.
Это означало одно: пора браться за дело…
Что было в начале?
Этот взлом не начался с чего-то необычного. Все было по шаблону: я вытащил APK-пакет приложения, произвел первичную декомпиляцию, с использованием apktool.jar, затем вторичную( для получения Java кода из Smali ), используя тулзу jd-gui. Ничего необычного. Далее я долгое долгое время бороздил по Java-классам в надежде отыскать хоть что-то полезное и интересное. Помимо «тонн» рекламных и гугловских библиотек я ничего не замечал. В конце концов удалось наткнуться на внутренности данного приложения, т.е то, где все интересное и происходит:
Но, как ты можешь видеть, рыться во всем этом, видимо, обфусцированном коде, мало кому захочется: оригинальные названия классов, методов и переменных представляют из себя лишь краткий набор букв. Исследование на данном этапе зашло в тупик…
Я решил бросить это дело и заняться чем-то более полезным. Но спустя несколько дней я решил вновь вернуться к данной теме.
Начало конца
Я вдруг решил просто покопаться в данных, хранимых приложением. Это могли быть данные обо всем, начиная с цвета клеток поля и заканчивая текущим количеством очков. Структура данных приложения такова:
Теперь по порядку:
- Папка /cache пуста, а поэтому особого интереса не представляет
- В /files, на первый взгляд, хранится мусор, но это только на первый взгляд
- Папка /lib содержит графическую библиотеку Cocos2D, что, в общем-то, нам тоже не интересно.
- Ну и /shared_prefs содержит текущие значения SharedPreferences приложения
Из этого мы делаем вывод, что интерес представляют только две папки: files и shared_prefs.
Что ж, смотрим, что там внутри них.
В первом случае нас интересует файл save.plist, а во втором — единственный файл Cocos2dxPrefsFile.xml.
Их названия говорят за себя. Дабы не растягивать текст, сразу предоставлю информацию об обоих файлах:
1) save.plist
Как несложно догадаться, этот файл отвечает за сохранение состояния игры перед выходом. В сохранение состояния входит: описание клеток игрового поля, количество Undo и текущий рейтинг игрока.
2) Cocos2dxPrefsFile.xml
Здесь приложение хранит данные о максимально достигнутом когда-либо количестве очков.
Одна из особенностей заключается в том, что эти файлы представлены в удобочитаемом формате XML:
2) Файл save.plist
( каждый тег dict хранит данные об определенной клетке в определенный момент времени )
Теперь, зная это и имея на устройстве ROOT права, можно с легкостью подстроить игру под себя.
Но рут доступ есть далеко не у всех.
Именно поэтому следует создать патч для этого приложения, который был бы доступен широкой аудитории.
Создание патча
Для начала немного теории.
Все ANDROID-приложения обладают собственной песочницей, доступ к которой может быть получен только этим приложением( или рут-пользователем ). Песочница представляет из себя папку, находящуюся в сердце OS — /data/data/*. Вместо звездочки может стоять имя пакета приложения. Например, имя пакета игры 2048 — com.estoty.game2048, как ты мог уже догадаться из слайдов выше. Следовательно, доступ к папке /data/data/com.estoty.game2048 есть только у игры( и у рута ), а, следовательно, и доступ ко всем вкусностям, перечисленным выше.
Казалось бы, что нам остается?
Вероятно, тебе приходит на ум создание собственного приложения с одноименным пакетом. Но при компиляции и установке нашего приложения-фейка мы получим ошибку INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES , говорящую о том, что ключ, которым была подписана игра, не соответствует ключу, которым подписано наше приложение-фейк.
Значит, нам остается одно: пересобрать игру в APK и подписать его нашим ключом с помощью тулзы
JARSIGNER, а затем и наше приложение-фейк тем же ключом! Плюс, зная то, что при переустановке приложений Android не удаляет данные игры( т.е ее песочницу ), мы можем подменить данные игры на свои данные, опираясь на добрую и доверчивую политику безопасности OS Android, а затем запустить оригинальную игру, которая бы уже использовала наши фейковые данные.
Но а вдруг игра перезапишет данные при переустановке? Что ж, сейчас и это проверим!
Начнем с подписки игры нашим ключом( сертификатом ). Для этого ее нужно стандартно разобрать( декомпилировать, если угодно ), а затем собрать снова и уже после этого подписать своим ключом. Предполагается, что ты знаком с этим процессом. Если же нет, то он неплохо расписан, например, вот здесь.
jarsigner -keystore default.keystore -storepass *** -keypass *** 2048.apk default
Итак, имеем APK пакет приложения, подписанный нашим дефолтным ключом.
Далее мы создаем новое Android-приложение, с именем, названием пакета и сертификатом(ключом), идентичным игре 2048.
Теперь между нашим приложением-патчем и игрой 2048 нет каких-либо отличий на системном уровне ( то есть для Android, это два идентичных приложения, которые могут друг друга переустановить, заменять ),
Теперь нам следует подумать о том, как будет работать патч.
Разумеется, все можно сделать просто: писать статические данные в файлы Cocos2dxPrefsFile.xml и save.plist, которые, например, устанавливают большое количество очков и большие числа на игровом поле. Но это не круто. Я предлагаю сделать патч динамичным, т.е таким, чтобы он мог в любое время без перекомпиляции( пересборки ) устанавливать нужные нам значения рейтинга, клеток поля и т.д.
Если поплевать на дизайн и оформление, а сосредоточиться только лишь на функциональности патча, то получится примерно следующее:
В патч включены самые «полезные» фичи:
у пользователей будет возможность менять свой лучший рекорд, менять текущий и устанавливать цифры в каждой клетке игрового поля!
Это более чем достаточно.
Коддд
P.S Предполагается, что ты имеешь базовые представления об устройстве Android-приложений. Поэтому комментариев к коду практически нет.
Итак, с манифестом приложения мы ничего более делать не будем — имя пакета уже было установлено при создании нового проекта, а имя приложения, в общем-то, менять необязательно. Никаким особым функционалом патч обладать не будет, так что специфичные user-permissions нам тоже ни к чему.
По нажатию на единственную кнопку будет вызываться функция Patch :
Устанавливаем новый рекорд:
И формируем игровое поле, как возжелаем( как ты помнишь, тут все в формате XML. Прошу прошения за небрежность формата ниже. ):
Компилируем. Подписываем( сертифицируем ) тем же ключом, что и игру 2048.
Проверяем работоспособность
Супер, игра, подписанная неродным ключом, работает.
2) Устанавливаем патч( Android автоматически переустановит приложение, заменит его на патч, данные приложения, при этом, сохранятся ):
adb install -r patch.apk
и эксплуатируем его:
3) Переустанавливаем нашу игру:
Отлично. Патч полностью работоспособен!
В данный момент мы все действия проводили в консоли( для скорости ), но на деле же все куда проще: достаточно закинуть и игру, и патч на карту памяти своего девайса, например, далее установить игру, затем патч и затем снова игру. В таком случае система Android тебя каждый раз будет предупреждать, что приложение будет переустановлено. Вы, разумеется, соглашаетесь.
Вот так можно использовать политику безопасности Android, наложенную на пакеты приложений, для создания патчей.
Outro
На самом деле, подобная брешь не является виною только Android. Я думаю, тут также виноваты и разработчики приложений, которые не проверяют целостность данных, не шифруют их и используют их в своем приложении с полной доверенностью источнику…
Что ж, вот мы и рассмотрели еще один аспект безопасности, который следует учитывать при разработке своих приложений под OS Android.
Источник
Патчи андроида что это
При выборе устройства, немаловажную роль играет репутация производителя: период поддержки устройств, даже не совсем новых, является не последним критерием, и признаком хорошего тона. При этом производитель устраняет уязвимости, и возможно повышает производительность устройства, что делает его в глазах пользователя не только надежным, но иногда и единственным приемлемым выбором (как в случае всеми известной компании).
Однако, многие из вас слышали о ситуации, когда устройство под управлением android перестало обновляться, а это значит, что оно стало более уязвимо для атак хакеров, но не спешите отчаиваться — замена устаревшего устройства на другое — не всегда единственный выход.
К тому же, даже если ваше устройство показывает последние обновления патчей безопасности, это не всегда означает, что так и есть, что было подтверждено в исследовании https://xakep.ru/2018/04/16/android-patches/
Так или иначе, сами пользователи иногда модифицируют прошивку своих устройств, чтобы получить последние обновления безопасности https://forum.xda-deve…-updates-twrp-t3523026
Им в этом помогают энтузиасты, создающие и обновляющие кастом прошивки для их девайсов, которые не сложно установить, следуя инструкции (при наличии компьютера и навыков конечно)
И в третьих, в новейшей Q OS от Google сделали автоматическое обновление патчей безопасности android 10 прямо через play market.
https://www.xda-develo…security-update-issue/
Может быть кто то имеет устройство в котором это реализовано и он сможет поделиться своим опытом.
Было бы не плохо, создать инструкцию, или даже универсальный автоматизированный скрипт, для интеграции обновлений android security path level через magisk или twrp.
Поэтому кто хочет, может участвовать.
Сообщение отредактировал konstantinqq — 08.02.20, 22:21
(Зарезервировано на всякий случай)
Тема про ручное или полу автоматическое обновление системы безопасности андроид, то есть в конечном итоге должны появиться гайды и инструкции как обновить, а так де конечно отзывы, тех кто обновил и у кого может быть, не получилось.
Сообщение отредактировал konstantinqq — 08.02.20, 22:06
кто знает как на миюи обновить патч безопасности андроид?
Вроде бы где то писали что обновы безопасности на 10 андроиде будут сами приходит через маркет, а на деле в миюи как я понял это не реализовано, так вот, как обновить android security path level?
Если уж вопрос был удален, то что и о создании темы говорить?
Но есть и плюс — можно свободно обсуждать, если это касается темы.
Поэтому начну — был у меня mi 9 с миюи и 10 андроидом, но обновлениями безопасности занимался там не плей маркет, а сяоми, из за чего рассчитывать на своевременные обновления патчей безопасности не приходилось)
Вообще, как вы считаете, стоит ли беспокоиться что безопасность андроида давно не обновлялась?
Сообщение отредактировал konstantinqq — 08.02.20, 20:30
Ага, гугл сам там патчит, и Ромы кастомные на дату сборки обычно гугловские патчи содержат, а вендор и кернел должны сами производители или маинтайнеры обновлять
Так что вообще не вижу проблемы, если у кого-то какой-то кастом не обновлялся давно, то есть интсоукция по сборке gsi образов для любой прошивки в теме одноимённой на форуме
Инструкция есть в теме Разработка GSI
На базе скрипта от phhusson
А вот откуда можно скачать патчи, но как интегрировать, все ещё не нашел инструкцию. Особенно чтобы без потери данных например через тврп или магиск.
Всплывают нюансы, и как во всем этом разобраться?
Таким образом вижу примерно такое развитие событий, может быть кто то напишет инструкцию, или ее придется писать кому то другому:
Ну для начала, нужно узнать о совместимости патчей безопасности с установленным андроидом, как я понял, описанное в той теме относится к GSI системам.
Вот.
После того как стало известно о совместимости патча, как я понял, нужно пересобрать из исходников, и поэтому нужно знать где их взять, как создать патч, чтобы без сброса данных, ну и тому подобное.
Сообщение отредактировал konstantinqq — 08.02.20, 21:49
Если честно, понятия не имею)
Может быть по шаблону, подобно тому, как их делает сам производитель.
Ну то есть анализируется вендор, систем, и данные которые касаются патча безопасности.
При этом, существует пользовательская база, где пользователи условно выбирают алгоритм патча — ну к примеру для патча родного миюи или для патча ми еу кастома, и далее скрипт скачивает из репозитория нужные файлы, собирает прошивку, и вот она, только прошей через тврп.
Все.
Ps голосование такое потому что если 2018 и старше — значит производители перестали поддерживать телефон.
Сообщение отредактировал konstantinqq — 08.02.20, 22:35
fsct2k,
Про уязвимости можно больше официальной инфы найти, например пример того, как стоковое устройство без модификаций оказывается под полным контролем хакера, который получает полные системные права.
И это лишь об известных уязвимостях. Но ведь каждый год находят новые критические уязвимости. Складывается ощущение, что их там специально оставляют. И кто вовремя вышедшую заплатку не поставит, сталкивается с повышенным риском взлома.
А вот про уязвимости обхода magisk что можно найти? Рут то магиск менеджер выдаёт, причем можно запретить всем новым запросам поручение рут прав, и для приложения это будет означать почти полное их отсутствие. Ну может оно узнать допустим что телефон рутован, но без выданных прав что оно может? Хотите сказать что магиск куплен и в него встроен бекдор? Это уже похоже на правду.
Другое дело что андроид сама по себе уязвимая система — дай любой программе доступ к файлам, и вот уже можно все не системные файлы передавать кому угодно на оригинальном устройстве, без рутов и прочего.
Про разблокированный загрузчик тоже могу не много сказать — о том что нет способов на 4пда (я не встречал для новых устройств) без Рута модифицировать системные разделы, т. Е. Чтобы разблокированный загрузчик стал подспорьем ко взлому телефона, надо иметь бекдор позволяющий получить полные права на просмотр и изменение. А бекдоры как раз и устраняются патчами безопасности.
Сам по себе разблокированный загрузчик лишь снимает один слой защиты от изменения системных файлов, а именно проверку при загрузке. И то не всегда (ARB например или кирпич по схожим причинам на redmi note 8 pro даже разработчики кастом ромов бессильны обойти без авторизованного производителем edl аккаунта, хотя казалось бы, китайский телефон на МТК).
После размышлений могу и про TWRP оставить комментарий:
Чтобы сделать его применение безопасным, надо от него отделаться — то есть после установки всего необходимого, зашифровать раздел с данными сложным паролем, и удалить или запоролить TWRP, чтобы если кто найдет потерянный телефон не смог стянуть с него данные.
Судя по тому, что подобной темы на 4пда не было, и по текущей популярности этой темы — безопасность удел тех, кому есть что терять. Остальных же, похоже это мало волнует, на уровне «купи айфон» или используй антивирус на флагмане известной фирмы. Справедливо некоторые говорят «кому вы нужны со своими котиками».
Сообщение отредактировал konstantinqq — 20.02.20, 14:42
Источник