Тише воды, ниже травы. Что и как сливают гуглофоны

Ни для кого не секрет, что наши с тобой телефоны знают о нас слишком много. Порой даже больше, чем мы сами. И пока твой гаджет с тобой, трудно найти хоть минутку, когда никакая информация о твоих действиях не попадет в сеть. Допустим, ты установил кастомную прошивку и не устанавливал GApps. Думаешь, твои данные в безопасности? Сейчас проверим!

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

Первый способ использовал ZTE, выпустив в свет недорогой Blade L4 с прошивкой от «Билайна» в качестве единственного варианта. Помимо кучи бесполезного софта от собственно «Билайна», в «подарок» шли GApps в полном наборе (само собой, без возможности удаления) и антивирус, который отказывался работать без симки «Билайна». Второй способ использует китайская компания Xiaomi, известная своей бюджетной линейкой Redmi и довольно интересной прошивкой MIUI, в которой от оригинального «Андроида» почти ничего не осталось. То же самое делает Meizu, выпускающая свои телефоны с прошивкой Flyme.

 

И если с телефонами самой Google все более-менее ясно — информацию о том, какие данные они собирают, компания публикует открыто и даже позволяет забрать дамп этих данных себе, — то что собирают о нас китайские смартфоны? А какую информацию о тебе сливает AOSP или тот же LineageOS, если из них выпилить (или просто не устанавливать) сервисы и приложения Google? Попробуем разобраться.

 

Подопытные прошивки

Для начала определимся с кандидатами на тестирование. У нас их будет четыре:

  • Pixel Experience — сборка AOSP с полным комплектом приложений и сервисов Google. Это кастом, но кастом, максимально приближенный к прошивке, которую Google устанавливает на свои «Пиксели». Для нас это будет своего рода образец, который показывает, что сливает в сеть сама Google;
  • LineageOS 16 — кастомная прошивка на базе AOSP без приложений и сервисов Google. На этой прошивке мы проверим утверждение, что, если ты хочешь, чтобы за тобой не следили, надо поставить кастом без GApps;
  • MIUI 10.2.3.0 Global Stable — прошивка от Xiaomi. По сути, это уже не совсем Android, а взрывная смесь из китайских сервисов, собственной системы контроля разрешений, Google Play и его компании и тонны не удаляемого штатными средствами софта, который, впрочем, по умолчанию почти никакой угрозы не несет;
  • Flyme 6.8.4.3R beta — прошивка Flyme от Meizu. К сожалению, официальная версия так и не вышла из состояния беты, но в неофициальной (пусть и более новой) сборке были выпилены все сервисы от Meizu, стало быть, и тестировать нам будет нечего. Так что придется довольствоваться этой версией.
 

Кто и что знает о нас

В главных ролях:

  • корпорация добра по имени Google;
  • Xiaomi / Meizu / другой вендор.

Из заявления об отсутствии конфиденциальности мы знаем, что Большой Брат Google собирает и хранит массу информации. Это:

  • твоя история поиска, и не только в фирменном поисковике, но и в YouTube, который, как ты знаешь, тоже принадлежит Google. По умолчанию сбор этой информации включен и никак не афишируется, но ты можешь отключить ее сбор на странице настроек аккаунта;
  • полная история твоего местоположения, добываемая со смартфона. За это отвечает неубиваемая служба GoogleLocationService, работающая даже в том случае, если GApps’ы установлены в варианте pico. Особенность ее состоит в том, что для определения местоположения используется не только GPS, но и сотовые вышки и сети Wi-Fi. Вся эта информация хранится локально, но при наличии подключения к интернету сливается на серверы Google;
  • информация о приложениях на твоем устройстве и об их версиях. Эти данные сливаются Play Market’ом и нужны, надеюсь, только для статистики. На основании этой статистики заполняется раздел «Вам может понравиться» в Play Market’е;
  • все твои контакты. За их сбор отвечает служба синхронизации, включенная по умолчанию;
  • записи всех голосовых запросов;

  • полная и развернутая статистика твоих действий с телефоном и поиском. Найти ее можно тут.

     

Как видно из скриншота, Google собирает даже конкретное время запуска приложения на конкретном устройстве. Как ты уже догадался, эта функция тоже включена по умолчанию.

Ладно еще Linux, но Windows-то тут откуда?

 

Ладно еще Linux, но Windows-то тут откуда?

Кроме того, для тебя создается специальный рекламный профиль. Посмотреть и изменить его можно по этой ссылке.

Впрочем, рассказывать, что именно собирает о нас с тобой Большой Брат, можно очень долго. Думаю, что и этого, весьма скудного набора будет достаточно, чтобы ты понял, чем пахнет такое положение вещей.

Перечень информации, которую собирает Xiaomi, также весьма обширен (оригинальная орфография сохранена):

  • Информация, которую вы предоставляете нам или отправить (включая контактные данные): мы можем собрать любую персональную информацию, которую вы предоставляете нам, например, ваше имя, номер мобильного телефона, адрес электронной почты, адрес доставки, Ми реквизитов (например, связанные с безопасностью информации, ФИО, дата рождения, пол), заказа, счета-фактуры, материалы или информацию, Вы можете синхронизировать через облачные Ми или другими приложениями (например, фотографии, списки контактов), информация в отношении создания учетной записи и участия в форуме MIUI на xiaomi или другой платформы, номера телефонов, которые вы вводите в «контакты» или отправить сообщение, обратную связь, и любую другую информацию, которую вы нам предоставляете.
  • Устройства или SIM-обзоры информация: информация, связанная с вашим устройством. Например, номер IMEI, imsi номер, MAC-адрес, на MIUI, версия андроид, номер детали и название модели, оператора сети.
  • Сведения о вас, которые могут быть назначены нами: мы можем собирать и использовать информацию, такую как Ми ID учетной записи.
  • Информацию о местоположении (только за конкретные услуги/функции): различную информацию о вашем местоположении. Например, код страны, код города, код мобильной сети, мобильные личности, долготы и широты, языковые настройки.
  • Журнал сведений: информацию, относящуюся к использованию некоторых функций, приложений и веб-сайтов. Например, cookie-файлы и другие анонимные технологий идентификатор, IP адреса, временную историю Сообщений, стандартные системные журналы.
  • Другая информация: экологические характеристики значение (ОКП) (т. е. значение, генерируемое Ми номер счета, телефона, ID устройства, подключен Wi-Fi Интернет ID и местоположение значения).

Мы также можем собирать другие виды информации, которые не связаны с физическим лицом и которое является анонимным. Например, модели устройства и версии системы количество пользователей Xiaomi в устройстве мобильного телефона могут быть получены при использовании определенной услуги. Подобные сведения собираются для того, чтобы улучшить услуги, которые мы предоставляем Вам. Тип и объем собранной информации будет зависеть от того, как вы используете, соглашение или участвовать в наших продуктах и/или услугах.

Это цитата из официальной политики конфиденциальности (для тех, кто не понял, я специально сделал перевод на человеческий русский), которая, по сути, гарантирует нам полное ее отсутствие. В свете этого старая советская фраза «Нам нужен мир, и по возможности — весь» обретает чуть другую формулировку: «Нам нужны твои данные, и по возможности — все». Звучит печально? Что ж, готовься к худшему.

 

Тестовый стенд

Тестовый стенд будет не один, а сразу три:

  • ZTE Blade L4 2015 года выпуска;
  • Xiaomi Redmi Note 4X 2017 года выпуска;
  • Xiaomi Redmi 4X.

С инструментами тоже все просто: Fiddler, Wireshark и tcpdump. Fiddler с Wireshark’ом мы поставим на большую машину, а tcpdump — на телефон со свежеустановленной прошивкой. Алгоритм действий будет следующим:

  1. Устанавливаем чистую прошивку (по возможности без GApps).
  2. Без активации гуглоаккаунта устанавливаем tcpdump и (по возможности и необходимости) корневой сертификат Fiddler’а.
  3. Подключаемся к Wi-Fi-сети, которая раздается с ноута (там сидят Wireshark и Fiddler).
  4. Сидим в засаде полчаса.
  5. Тыкаем менюшки, всячески симулируя действия пользователя, но ничего не меняем.
  6. Отключаем все, что можем отключить без прав root, и еще раз проходим пункты 4–5.

 

WWW

Если ты обладатель i-девайса, обрати внимание на недавнюю статью о безопасности яблокофонов.

 

Снифаем трафик с живой системы

Я поднял точку доступа с ноутбука с Ubuntu 18.04 на борту, настроил на ней шлюз и повесил Wireshark. Конечно же, толку от него мало, если трафик идет по HTTPS, но в большинстве случаев сам факт установления соединения на некоторый адрес уже достаточное доказательство. Дальнейшая настройка проста как два рубля: настраиваем hostapd на хостовой машине, вешаем Wireshark там же, на телефоне импортируем корневой сертификат Fiddler’а и настраиваем прокси. Всё!

 

LineageOS 16

LineageOS — прошивка, основанная на коде CyanogenMod, который в свое время был эталоном среди свободных прошивок. «Циан» породил множество форков, из которых LineageOS, наверное, самый известный.

Сразу после загрузки нам предлагают согласиться на отправку анонимной статистики. Однако даже после согласия прошивка молчит. Не появилась она и после получаса сидения в засаде. На подключение к Wi-Fi-сети прошивка среагировала лишь проверкой соединения и затихла.

Вывод: LineageOS если и передает что-то, то делает это не сразу.

 

MIUI

С самого начала прошивка вела себя неспокойно. Запросы лились рекой на следующие серверы:

  • connect.rom.miui.com;
  • android.clients.google.com;
  • www.gstatic.com;
  • mtalk.google.com;
  • data.mistat.intl.xiaomi.com;
  • storage.googleapis.com;
  • redirector.gvt1.com;
  • www.youtube.com;
  • dl.google.com;
  • api.sec.miui.com;
  • r8—sn-cxauxaxjvh-hn9e7.gvt1.com.

Первый HTTP-запрос был на connect.rom.miui.com/generate_204, нужный для проверки соединения. Замечу, что запросы туда идут почти каждые полторы-две минуты, несмотря на отсутствие обрывов и стабильно низкие пинги.

Как только соединение было проверено, телефон связался с адресом data.mistat.intl.xiaomi.com/mistats/v2 и передал ему почти 2 Кбайт данных. Судя по всему, это что-то вроде телеметрии.

Капля из океана собираемых данных

 

Капля из океана собираемых данных

Затем еще два увесистых пакета с данными улетели на другой хост этой подсети (161.117.71.187), но, к сожалению, они оказались закодированы. Оба эти адреса находятся в Сингапуре.

Следующий интересный запрос ушел на relocationapi.micloud.xiaomi.net/mic/relocation/v3/user/record. Он содержал название моей страны и подпись, назначаемую, как я увидел в дальнейшем, каждому пакету для защиты от подделки. Следующим запросом туда же улетел некий статус, а затем еще несколько пакетов данных.

Следующая дверь, куда телефон постучал, была по адресу api.device.xiaomi.net. Сам запрос оказался пустым, но содержал кукисы, в которых лежала вся информация о моем телефоне, в том числе и уникальный серийный номер. В ответ на него телефон получил некий serviceToken, который отныне светится во всех HTTP-запросах, и не только на этот адрес. Следом туда же ушел мой User ID и Device ID.

Дальше мы видим то, что я ожидал увидеть в самом начале: обращение к рекламной сети. И не какой-то, а своей. Адрес хоста — globalapi.ad.xiaomi.com. На сервер уходит версия рекламного SDK и наш User ID из прошлого запроса. В ответ мы получаем список ключевых слов, согласно которым отныне будет загружаться реклама, и время хранения этой информации в кеше (указан как TTL).

Из-за популярности устройств линеек Mi и особенно Redmi в Xiaomi стекается уйма информации. Для балансировки нагрузки компания развернула приличную по размерам сеть по всему миру. Мой телефон прикрепили к индийскому серверу, и отныне вся информация идет туда.

Download Provider должен Download, а не Upload!

 

Download Provider должен Download, а не Upload!

Часть информации ушла через Download Provider (com.android.providers.downloads), которому ни один здравомыслящий человек доступ в сеть не запретит. Кстати, те же фокусы (то есть такие же пакеты, только с другими значениями channel и package_name) проворачивает менеджер тем (com.android.thememanager) и календарь (com.android.calendar). В среднем такие запросы идут каждые 30–40 секунд на разные адреса и с разными значениями channel и package_name.

Но настоящее шпионство только начинается: в один прекрасный момент мы получаем от resolver.gslb.mi-idc.com не только наш внешний IP-адрес (хотя непонятно, зачем он нужен телефону), но и страну, город, название провайдера, наш реальный IP-адрес (если мы сидим за прозрачным прокси), домен, куда нужно сливать статистику (мне пришел s.mi1.cc), используемый TTL, некий tid и по два аварийных адреса для использования через Wi-Fi и мобильную сеть соответственно (обращений к ним я не зафиксировал, но, если основные серверы Xiaomi навернутся, возможно, что-то и найдется).

Я уже хотел было заканчивать обзор этой прошивки, но заметил во втором дампе запрос к gstatic.com/android/config_update/11052018-sms-metadata.txt, в ответ на который нам пришел текстовый файл со следующим содержимым:

SIGNATURE:uE3dCcZfnDvXnxsV+uHVOmnzZS03kIcda4t2tA4tKY0w6vvx5vngBO6GTb/8j5+3ZvjqBBkx5f8rsiopC/7QgBQhDBBQMJj9i0oWycA/PzRiPGGpXySdyNobw5GKb8KB2GjFW5VXgC1GMuRkWHeCfGGV9zlXbueQeIschm+gayIA18g9D7Gs9cVzbzWo7VSL3ppbiJHD9FIf7VWeJjh8MhdYruWnHducGiztDKtXPNnWjgNKIlWYu5w3TiK3AtFinLUNE2ht15Z+nvRwcGVEmzeY8JKjDK3nRyhYrSWY3uDe5J9hUF9ViXSIWkDS5QP9aEx8wLv0+6EFSibpyZUK9Q==
VERSION:19
REQUIRED_HASH:NONE

Это метаданные к коротким кодам SMS.

Это было все, что я накопал из незашифрованного трафика, но осталось еще много SSL- и TLS-трафика, с которым разобраться не получилось. Прошивка волшебным образом игнорировала выставленные настройки прокси, так что пришлось ограничиться исследованием того, что можно было достать «голыми руками».

Что до отключения этой грандиозной шпионской машины, то в ней встроено слишком много инструментов для сбора данных. Отключить все это штатными средствами не удастся, а удаление «приложений-стукачей» целиком превратит твой телефон в обычную звонилку, толку от которой никакого.

 

Pixel Experience

Pixel Experience is an AOSP/CAF based ROM, with Google apps included and all Pixel goodies.

Эта цитата вполне точно передает сущность прошивки. По сути, Pixel Experience — не что иное, как AOSP с лаунчером из смартфона Pixel плюс все приложения из пакета GApps.

Уже спустя пять минут использования прошивка отправила в сеть 80 тысяч пакетов, и я понял, что на анализ всего этого у меня уйдет вечность. Я просто составлю список адресов, а ты решай сам, готов ли отправить неопределенное (а на самом деле вполне определенное — 62 Мбайт) количество своих данных в Google.

IP-АДРЕС ХОСТНЕЙМ
172.217.16.36 www.google.com
216.58.209.3 connectivitycheck.gstatic.com
216.239.35.12 time.android.com
74.125.131.188 mtalk.google.com
108.177.126.95 ns1.google.com
74.125.143.94  
209.85.234.188  
108.177.119.147 ns1.google.com
108.177.126.139 ns1.google.com
108.177.126.94 ns1.google.com
108.177.126.97 ns1.google.com
108.177.127.95 ns1.google.com
172.217.218.104  
172.217.218.91  
172.217.218.94  
172.217.218.95  
173.194.69.100  
173.194.69.190  
173.194.79.94  
173.194.79.95  
209.85.234.188  
216.239.35.12 time4.google.com
216.58.209.3  
224.0.0.22 igmp.mcast.net
224.0.0.251 sns.dns.icann.org
23.222.51.182 a23-222-51-182.deploy.static.akamaitechnologies.com
74.125.128.188  
74.125.131.188  
74.125.143.94  
74.125.143.95  
86.57.206.210 210-206-57-86.beltelecom.by
8.8.8.8 google-public-dns-a.google.com
99.86.4.37 server-99-86-4-37.fra6.r.cloudfront.net

Лично у меня самое большое удивление вызвало обращение к поддомену Белтелекома, к которому я прикреплен чуть менее чем никак. И еще интереснее, почему гугловская прошивка стучит на Cloudfront.

Возможно, тебя заинтересовало, почему я оставил пустые ячейки в таблице, хотя адреса все нормально резолвятся. Я сделал это специально: все они являются поддоменами 1e100.net, принадлежащими Google, и предназначены они только для сбора информации с обширного парка устройств под управлением Android. Пустыми я оставил эти ячейки, чтобы ты видел масштаб: 16 адресов *.1e100.net против 17 всех остальных. Да и нам сейчас не важно, к какому именно штату принадлежит этот адрес (все они имеют имена вида eg-in-f94.1e100.netec-in-f188.1e100.net), важен сам факт соединения с этими адресами и передачи данных. Забегая вперед, скажу, что ни одна прошивка из протестированных сегодня не стала использовать выставленные настройки прокси. Вместо этого браузеры послушно ходили через прокси, а все остальное так и шло безо всякого досмотра содержимого пакетов.

HTTP-запросов было всего семь. Из них три вернули код 204 (No Content), остальные четыре скачали черные списки номеров, с которых рассылается спам. Видимо, особо известные спамеры отфильтровываются уже на уровне прошивки.

Итого из 33 хостов, куда ходил телефон без моего ведома, 28 принадлежат Google, один — Amazon, а остальные — кому придется. То есть абсолютное большинство данных берет себе Google.

После всех этих интересностей я взялся тыкать разные приложения. Почти ни на какие новые для нас узлы трафик не шел (кроме 108.177.127.84). А список старых сократился почти в шесть раз: все еще держалось соединение с 108.177.119.95, 108.177.126.147, 108.177.127.95, 173.194.69.100 и 173.194.79.95. В целом ничего странного.

После отключения всего софта производства Google, кроме лаунчера (за неимением альтернативы), результат налицо: единственное соединение осталось с 108.177.127.95. Это сервер DNS-over-TCP.

Вывод: за что боролись, на то и напоролись. Предустановленные сервисы и приложения Google повели себя ровно так, как описано в пользовательском соглашении, — сливали статистику, обновляли данные и выполняли синхронизацию. К сожалению (или счастью), при отключении или удалении сервисов Google мы получаем обычный AOSP.

Flyme

Думаю, каждый читатель слышал про эту прошивку. Многие знают о плавности ее работы, приятном интерфейсе и, конечно же, о большой и вонючей куче неудаляемых китайских сервисов. Еще на стадии первого запуска прошивка просит нас принять обширное пользовательское соглашение. Я постарался прочитать всего этого литературного монстра (которого, кстати, я нашел читабельным только на английском), чтобы ты, дорогой читатель, не занимался тратой своего времени. Вкусности начинаются со второй трети текста.

 

 

 

После установки прошивки и соглашения с этим монструозным списком требований отдать неизвестно куда все свои данные кажется, что хуже уже быть не может. Но нет! Спустя полчаса сидения за окошком сниффера мы переходим ко второй части, когда начинаем тыкать приложения. Весь предустановленный софт за исключением диктофона потребовал разрешить пользоваться интернетом под разными предлогами, а половина из них еще и просила доступ к контактам. Даже клавиатура отказалась работать без выдачи этих разрешений. Для нее пришлось сделать исключение, так как без статического адреса мы не смогли бы исследовать трафик по причине его отсутствия.

 

Прошивка сделала DNS-запросы к следующим хостам:

  • connect.rom.miui.com;
  • ni.qingmang.mobi;
  • api-baas.flyme.cn;
  • uxip-res.meizu.com;
  • umap.meizu.com;
  • u.meizu.com;
  • servicecut.meizu.com;
  • input.shouji.sogou.com;
  • uc-res.mzres.com;
  • api-push.meizu.com;
  • findphone.meizu.com;
  • upush.meizu.com;
  • safe.res.meizu.com;
  • safe.meizu.com;
  • apilocate.amap.com;
  • uxip-config.meizu.com;
  • safe.mzres.com;
  • pmir.3g.qq.com;
  • www.baidu.com;
  • umid.orion.meizu.com;
  • p.meizu.com;
  • apiinit.amap.com;
  • scan.call.f.360.cn;
  • uxip.meizu.com;
  • mazu.3g.qq.com;
  • restapi.amap.com;
  • p-ns.meizu.com;
  • map-api.cn-hangzhou.oss-pub.aliyun-inc.com;
  • hades.meizu.com;
  • stats.lineageos.org;
  • aider.meizu.com;
  • roam.meizu.com;
  • aider-res.meizu.com;
  • g.meizu.com.

В этот список не попали адреса Google, такие как адрес NTP-сервера и connectivitycheck.gstatic.com, но это не имеет значения в данный момент. Среди остальных адресов мы можем видеть findphone.meizu.com, который, очевидно, отвечает за службу поиска телефона. И никого не волнует, что она не включена на телефоне. Запрос-то ушел, хоть пока и только по DNS. Следующий очень интересный адрес — apilocate.amap.com, который, как понятно из названия, хочет узнать местоположение. Но давай-ка мы не будем делать преждевременных выводов, а лучше глянем, что же ушло по HTTP.

HTTP

Первый же HTTP-запрос ушел на u.meizu.com и отправил POST’ом следующую информацию:

  • deviceType (имя и модель устройства. У меня — «Redmi-Note4x»);
  • версия Firmware;
  • версия прошивки;
  • IMEI устройства (!);
  • ID и серийный номер устройства;
  • имя сервиса, отправившего информацию (в этом случае — com.meizu.battery) и его версия.

Обращаю твое внимание, что данные подписаны, а это значит, что ты не сможешь просто взять и вырезать их через прокси. Эти данные потенциально позволяют производителю определить, используешь ли ты смартфон Meizu или установил прошивку на сторонний девайс.

 

Следующим пакетом на тот же адрес (u.meizu.com) уходит точно такой же отчет, но доносчиком значится уже фирменный лаунчер (com.meizu.flyme.launcher). Показательно, что эти данные отправляются будто бы в службу обновления фирменных сервисов, только мне, например, не совсем понятно, зачем IMEI, ID и серийный номер устройства нужны при обновлении. Но, как говорится, жираф большой, ему видней.

И действительно, в ответ на этот запрос приходит JSON, поля которого вполне подходят под заявленную цель. Среди полей есть название приложения (на китайском, несмотря на выставленную при первой настройке английскую локализацию), имя пакета, тип обновления (обязательное или нет), последняя доступная на сервере версия, время ее выпуска и release notes к ней, URL обновления, размер и хеш загружаемого файла, условия обновления и флаг тихой установки. Ты, конечно, спросишь, а что же тут не так? А не так вот что: этот запрос идет по чистому HTTP безо всяких вам SSL/TLS, что создает благоприятные условия для подмены такого трафика. И если учесть то, что обновление может быть установлено незамедлительно (флаг needsUpdate) и в тихом режиме (флаг silentUpgrade), а для проверки целостности используется только размер файла и его хеш, устройства с Flyme на борту очень легко могут стать мишенями ботнетов. Более того, твои личные данные, в том числе IMEI, ID устройства и его серийный номер, могут быть легко украдены при условии нахождения с тобой в одной сети.

Далее система получает список активити приложений, которым по умолчанию не нужно спрашивать разрешение на рисование поверх экрана блокировки. По умолчанию это экран стандартного лаунчера и некий com.tencent.mobileqq.activity.QQLSActivity. С этим именем пакета (com.tencent.mobileqq) в Play Market’е размещен довольно популярный мессенджер Tencent QQ, прочно засевший в списках антивирусных продуктов как adware.

Дальше идет обрывок ответа на запрос, принадлежность которого Wireshark не смог опознать. Как, впрочем, не поймал и его начало. Там был JSON следующего содержания:

{
  "apkName":"com.DBGame.DiabloLOL",
  "category2Id":1004,
  "category2Name":"å¨ä½åé©",
  "categoryId":2,
  "categoryName":"游æä¸åº",
  "cnName":"ç«æ´äººèç",
  "createTime":1484690841000,
  "devName":"äºç±äºå¨ç§æ",
  "id":185417,
  "installCount":1028899,
  "stars":113710,
  "tagName":"横ç,æ ¼æ"
},{
  "apkName":"com.m37.yhjyj.mz",
  "category2Id":1001,
  "category2Name":"è§è²æ®æ¼",
  "categoryId":2,
  "categoryName":"游æä¸åº",
  "cnName":"æ°¸æ纪å…",
  "createTime":1484690855000,
  "devName":"ç¨æ·494550072",
  "id":795971,
  "installCount":1015194,
  "stars":58590,
  "tagName":"å³æ¶,大ä½,éå¹»,ç»å…¸"
},{
  "apkName":"com.netease.my.mz",
  "category2Id":9025,
  "category2Name":"其ä»æ¸¸æ",
  "categoryId":2,
  "categoryName":"游æä¸åº",
  "cnName":"梦幻西游",
  "createTime":1484690857000,
  "devName":"Netease_Game",
  "id":910997,
  "installCount":986444,
  "stars":601440,
  "tagName":"ç…é,ä»ä¾,Qç,大ä½,ç»å…¸"
},{
  "apkName":"wb.gc.xmxx.zxb",
  "category2Id":1000,
  "category2Name":"ä¼é²çæº",
  "categoryId":2,
  "categoryName":"游æä¸åº",
  "cnNam

 

Налицо перечисление приложений (поле apkName, несомненно, содержит имя пакета целевого приложения) с указанием его категории (видимо, это должны были быть китайские иероглифы, но ASCII не отображает их правильно), времени создания, ID в какой-то внутренней системе, количества установок и, предположительно, рейтинга (поле stars). Адрес отправителя (183.61.122.111) наш любимый Google Public DNS опознал как soa.dns.guangzhou.gd.cn. К сожалению, на этом наш интересный пакет оборвался, но на некоторые мысли он однозначно наводит. Реклама? Скрытая установка адвари? Имена пакетов выглядят нечеловекочитаемыми, так что назначение этих программ остается неизвестным. И, что неудивительно, ни одной из них нет в Google Play.

Затем проснулся агент геолокации (на это указывает заголовок User-Agent: AMAP_Location_SDK_Android 2.4.0), который отправил 261 байт бинарных данных на apilocate.amap.com/mobile/binary.

Я уже думал прекращать просматривать однотипные пакеты, в которых уходила моя драгоценная информация, но вдруг наткнулся на один пакет, непохожий на остальные. Его содержимое:

PLQ?çØ^ER@,jôq`²#
P«ÿëGÏË¿>é
KÙÌmeizu.com/pack/ramcleaner/whitelist/update.db_1560182405.zip","ver":1560182405},
{"type":"patch","url":"http://safe.res.meizu.com/pack/ramcleaner/whitelist/update.db_1560268805.zip","ver":1560268805}]},
"appinfo":{"packs":[{"type":"full","url":"http://safe.res.meizu.com/pack/app/appinfo.db_1560268805_full.zip","ver":1560268805}]},
"harassmentBlocking":{"packs":[{"type":"full","url":"http://safe.res.meizu.com/pack/harassmentblocking/update.db_1560268805_full.zip","ver":1560268805}]},
"qrcodeUrl":{"packs":[{"type":"full","url":"http://safe.res.meizu.com/pack/qrcodeurl/qrcodeurl.db_1560268805_full.zip","ver":1560268805}]},
"trashclean":{"packs":[{"type":"full","url":"http://safe.res.meizu.com/pack/trash/trashclean.db_1560268805_full.zip","ver":1560268805}]}
}

Пройдемся по этим архивам по порядку:

  • update.db_1560182405.zip содержит единственный файл update.db. В нем перечислены сервисы Meizu с одним значением из двух (1 или 2). К сожалению, это оказалась не нормальная БД, а простой текст, так что у меня даже нет названий этих столбцов. Но если внимательно прочитать URL, по которому скачивается этот файл, то можно увидеть строку ramcleaner, указывающую, что этот файл лишь конфиг для встроенного таск-киллера. Значит, цифры, скорее всего, означают приоритеты процессов;
  • appinfo.db_1560268805_full.zip — JSON-файл, по структуре подозрительно похожий на тот безымянный кусок, что мы рассматривали парой абзацев выше. Ничего нового тут не оказалось;
  • update.db_1560268805_full.zip — список из 18 номеров спаеров (harassment blocking, упомянутый в URL, переводится как «предотвращение беспокойства»). Все номера китайские. Это все, что нужно знать об эффективности защиты, если даже на страну с населением 1,4 миллиарда человек есть список только из 18 спамеров;
  • qrcodeurl.db_1560268805_full.zip — девять строк JSON’а, содержащие вредоносные адреса, которые, как понятно из URL, распространяют через QR-коды.

И в последнем архиве trashclean.db_1560268805_full.zip, как становится ясно из того же источника, содержатся параметры очистки мусора в памяти устройства. Этот конфиг позволяет не потерять «критически важные» данные сервисов, названия которых явно выдают их принадлежность к Meizu. В общем, почти ничего криминального.

 

WWW

Я скачал эти архивы и сделал их копию на Mega на случай проблем с доступом по указанным ссылкам.

Спустя пару минут телефон скачал архив с JSON, содержащий весьма обширный (более 1700 строк) список разрешений для этих приложений и комментарии к ним на китайском. Сам архив можно взять по ссылке выше, он называется newupdate.db_1560268805_full.zip.

Внезапно пришел увесистый пакет (22,5 Кбайт), содержащий JSON-конфиг для какого-то приложения. По всей видимости, этот конфиг содержит список программ и активити, действия с которыми нужно перехватывать.

Сразу скажу, что я сначала собрал дампы трафика всех прошивок и только потом анализировал их, поэтому, когда такая засада обнаружилась, я уже не имел возможности выяснить что-либо конкретнее. Исходя из содержимого пакетов, я выдвинул две версии, что это может быть.

Первая версия: перед нами конфиг бэкдора, и вот почему я так решил.

  1. URL (safe.meizu.com/service/corrstartapp/getrule) как бы намекает, что оттуда прилетят какие-то правила или фильтры.
  2. Названия полей в этом JSON’е слишком уж похожи на поля конфига ратника. Пример:

    {"1":"runType===activity|||callerPkg===*|||calleePkg===*|||calleeClass===com.igexin.sdk.GActivity|||processName===*|||action===*|||data===*|||extras===*|||interception===true"}
    

Версия вторая: это что-то вроде базы для антивируса или блокировщика назойливой рекламы. Она более подкреплена доказательствами, так как упомянутый com.igexin.sdk.GActivity принадлежит к давно известному adware SDK. Судя по всему, встроенный антивирус перехватывает, а затем блокирует вызовы этого SDK.

Далее телефон пытается загрузить libJni_wgs2gcj.so (снова же по обычному HTTP) с amap-api.cn-hangzhou.oss-pub.aliyun-inc.com/sdkcoor/android/arm64-v8a/libJni_wgs2gcj.so. Я не мастер реверса бинарников, но я посмотрел hex-дамп этого файла и увидел интересные строки, указывающие на обфускацию. Но зачем не столь уж секретной библиотеке обфускация? А может, ее содержимое не совсем соответствует названию? Есть только один способ выяснить ее реальную функциональность: погуглить. 🙂Гугление выдает информацию, что это чистой воды троян, причем попал он в антивирусные базы еще в далеком августе 2017 года.

Обфускация?

 

Обфускация?

И чтобы ты не радовался, что хоть какие-то данные еще остались у тебя, вот последний логический гвоздь в крышку гроба твоей надежды:

{
  "priority_directory": [
    "DingTalk",
    "tencent/MobileQQ/shortvideo",
    "tencent/MicroMsg/WeiXin",
    "tencent/MicroMsg/Download",
    "Pictures/Screenshots",
    "Download",
    "Movies/Screenrecords",
    "iqiyi",
    "iqiyi_live",
    "iqiyi_p2p",
    "UCDownloads",
    "kugou",
    "kugoumusic",
    "kgmusic",
    "QQLive",
    "qqmusic",
    "Sina/weibo/weibo",
    "Sina/weibo/weibo_filter",
    "DCIM"
  ]
}

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

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

После максимальной очистки

После очистки, то есть отключения всех фирменных приложений Meizu и принудительного убийства всех сервисов, пакетов стало на порядок меньше: 477 против 7661. Появился новый хост (log.avlyun.com), на который телефон передал 4,2 Кбайт данных по TLS. В HTTP-трафике почти чисто, проснулся только калькулятор (com.meizu.flyme.calculator) и отправил статистику. Возможно, это связано с тем, что за прошедший перед этим час прошивка уже успела отправить все, что хотела, и сейчас решила заслуженно отдохнуть.

Мой вердикт лучше всего опишет белорусская фраза «Не чапай, бо лясне». Просто не трогай эту прошивку, и тебя минует участь подопытного кролика, за которым день и ночь пристально следят страшные дяди и тети. Видя, что передается в открытую, я никак не могу назвать этого шпиона прошивкой для настоящего хакера.

 

Выводы

Сегодня мы затронули только верхушку айсберга кастомных прошивок. Естественно, я выбрал для этого обзора только самых вкусных представителей этого большого семейства, но, как ты понял, если прошивку разрабатывает вендор (а в особенности — китайский), то про собственную приватность можешь забыть. Мой выбор — LineageOS, и я всячески тебе его советую в качестве достойной альтернативы MIUI и Flyme. 

Источник — xakep.ru

2 комментария на “Тише воды, ниже травы. Что и как сливают гуглофоны
  1. MegaZoid:

    CrDroid тоже можно смело ставить — это вылизанный LineageOS!

  2. Koryushka:

    Ничего там нет вылизанного — не надо вводить в заблуждение неокрепшие массы. CrDroid — очередная винда с рюшечками от зверя, аудит которой не делал никто

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*