Брандмаузер Android


Отправлено 26 Декабрь 2014 — 19:20
Заметил такую особенность.
С недавних пор при включении брандмаузера на планшете samsung GT-P3100 перестаёт работать мобильный интернет (GPRS, 3G, HSDPA+). При отключении брандмаузера интернет работает.
Через WI-FI подобных случаев не наблюдается.
Версия антивируса Dr.Web 9.02.1(2)
#2
sergeyko
Отправлено 26 Декабрь 2014 — 20:16
![]()
[offtopic]
Брандмушкет.
[/offtopic]
Извините!
Sergey Komarov
R&D www.drweb.com
#3
l.e.e.

Отправлено 27 Декабрь 2014 — 12:07
А почему не устанавливается Версия антивируса Dr.Web 9.02.1(2), а только Версия антивируса Dr.Web 9.02.1(1) . Это от аппарата зависит ?
Сиюминутное Ригпа бессущностно и ясно.
#4
Mikem
![]()
Отправлено 30 Декабрь 2014 — 10:05
С недавних пор при включении брандмаузера на планшете samsung GT-P3100 перестаёт работать мобильный интернет (GPRS, 3G, HSDPA+). При отключении брандмаузера интернет работает.
Посмотрите, пожалуйста, настройки ограничения мобильного трафика: не исчерпан ли лимит? Также проверьте настройки Брандмауера, вдруг для приложения запрещено использование Мобильного Интернета?
#5
>I

Отправлено 25 Ноябрь 2016 — 18:45
при запущенном Dr.Web Security Space (брандмаузер и монитор Spider Guard) на андроид перестал подключаться Metatrader 5. После отключения брандмаузера и монитора Spider Guard соединение восстанавливается.
#6
Mikhail Golubev
Mikhail Golubev

Отправлено 29 Ноябрь 2016 — 11:27
при запущенном Dr.Web Security Space (брандмаузер и монитор Spider Guard) на андроид перестал подключаться Metatrader 5. После отключения брандмаузера и монитора Spider Guard соединение восстанавливается.
![]()
Лучше бы конечно новую тему — 2 года это срок. И нужно больше информации. Проблема касается только этого приложения или всех? В брандмауэре есть правила для этого приложения? Ограничение на мобильный трафик выставлено? Мобильный трафик или Wi-Fi? И не очень понятно, к чему вы упомянули SpIder Guard.
#7
>I

Отправлено 01 Декабрь 2016 — 16:53
Лучше бы конечно новую тему — 2 года это срок. И нужно больше информации. Проблема касается только этого приложения или всех? В брандмауэре есть правила для этого приложения? Ограничение на мобильный трафик выставлено? Мобильный трафик или Wi-Fi? И не очень понятно, к чему вы упомянули SpIder Guard
1. Касается только этого приложения.
2. В брандмауэре правил индивидуальных нет. Разрешены соединения по WI-FI и мобильному интернету. Запрещены входящие как у всех приложений.
3. Трафик не ограничен. Не соединяется как по мобильному интернету, так и по WI-FI.
4. При включенном SpIder Guard приложение так же не работает. Причем включен он в паре с брандмаузером или отдельно — не имеет значения.
#8
Mikhail Golubev
Mikhail Golubev

Отправлено 07 Декабрь 2016 — 18:16
Запрещены входящие как у всех приложений — это что вы имели в виду?
Я правильно понял, что состояние Брандмауэра — включён/выключен — не играет никакой роли?
#9
>I

Отправлено 10 Декабрь 2016 — 10:09
Запрещены входящие как у всех приложений — это что вы имели в виду?
Я правильно понял, что состояние Брандмауэра — включён/выключен — не играет никакой роли?
В настройках есть галочка с запретом на входящие, так вот она не установлена.
Если брандамаузер выключен вместе SpIder Guard, то всё работает.
#10
Mikhail Golubev
Mikhail Golubev

Отправлено 12 Декабрь 2016 — 11:09
Флажок Разрешить входящие в меню на экране с информацией о трафике приложения позволяет исключить входящие соединения из проверки брандмауэром. Так что это немного другое.
Я пытаюсь понять играет ли Брандмауер (включен/выключен) в вашей ситуации какую-то роль или нет. По вашему описанию выходит что нет. Играет роль только SpIDer Guard (включён/выключен). Это так?
#11
>I

Отправлено 14 Декабрь 2016 — 19:54
Я пытаюсь понять играет ли Брандмауер (включен/выключен) в вашей ситуации какую-то роль или нет. По вашему описанию выходит что нет. Играет роль только SpIDer Guard (включён/выключен). Это так?
Играют роль оба компонента. Причем когда оба выключены, то программа работает в штатном режиме.
#12
Mikhail Golubev
Mikhail Golubev

Отправлено 15 Декабрь 2016 — 17:45
#13
>I

Отправлено 19 Декабрь 2016 — 19:03
обновитесь до 11-ой версии, пожалуйста. Сообщите, если ситуация проявляется
Обновился. Ситуация аналогичная. МТ5 использует сертификаты, возможно с ними возникают вопросы.
#14
Whispersmith
Whispersmith
![]()
Отправлено 20 Декабрь 2016 — 15:36
Здравствуйте!
Попробуйте, пожалуйста, следующее и отпишитесь о результате:
1. SpIder Guard включен, Брандмауэр включен. соединение по Wi-Fi. Приложение работает? Что конкретно не работает в приложении?
2. SpIder Guard включен, Брандмауэр включен. соединение по мобильному интернету.Приложение работает? Что конкретно не работает в приложении?
3. SpIder Guard включен, Брандмауэр выключен. соединение по Wi-Fi. Приложение работает?
4. SpIder Guard включен, Брандмауэр выключен. соединение по мобильному интернету. Приложение работает?
Был использован Samsung GT-P7500 с Android 4.0, всё работает: трафик от приложения идет(видно, когда включен Брандмауэр), какие-то числа в приложении меняются и в журнале приложения пишется об установленных соединениях (простите, не знаю специфики работы с фондовыми рынками) Работает как и с использованием wi-fi, так и с мобильным интернетом, как с включенным Брандмауэром, так и с выключенным. Вы уверены, что проблема в нашем Брандмауэре? В отзывах к приложению много комментариев о потере серверов и проблемах с подключениями.
#15
>I

Отправлено 20 Декабрь 2016 — 18:06
Здравствуйте!
Попробуйте, пожалуйста, следующее и отпишитесь о результате:
1. SpIder Guard включен, Брандмауэр включен. соединение по Wi-Fi. Приложение работает? Что конкретно не работает в приложении?
2. SpIder Guard включен, Брандмауэр включен. соединение по мобильному интернету.Приложение работает? Что конкретно не работает в приложении?
3. SpIder Guard включен, Брандмауэр выключен. соединение по Wi-Fi. Приложение работает?
4. SpIder Guard включен, Брандмауэр выключен. соединение по мобильному интернету. Приложение работает?
Был использован Samsung GT-P7500 с Android 4.0, всё работает: трафик от приложения идет(видно, когда включен Брандмауэр), какие-то числа в приложении меняются и в журнале приложения пишется об установленных соединениях (простите, не знаю специфики работы с фондовыми рынками) Работает как и с использованием wi-fi, так и с мобильным интернетом, как с включенным Брандмауэром, так и с выключенным. Вы уверены, что проблема в нашем Брандмауэре? В отзывах к приложению много комментариев о потере серверов и проблемах с подключениями.
Пробовал все варианты. В МТ5 используются два вида подключения: обычный (с ним работает) и расширенная авторизация — с сертификатом SSL. Вот второй способ не работает.
Ссылка на описание расширенной авторизации с сертификатом:
#16
Whispersmith
Whispersmith
![]()
Отправлено 21 Декабрь 2016 — 17:01
Пробовал все варианты.
Пробовали, но почему-то ответов на заданные вам вопросы нет.
От вас жду ответов и затем логи после воспроизведения ситуации, когда у вас не работает приложение.(логи можно в личные сообщения кинуть, если вам так удобнее будет)
#17
German AW
![]()
Отправлено 25 Декабрь 2016 — 22:15
Заметил у себя следующую особенность. Аппарат Sony Z3 Dual D6633. При включенной системе экономии заряда Stamina и включенном брандмауэре любые приложения не имеют доступа в интернет как по wi-fi, так и по gprs. Стоит отключить что-то одно, доступ в инет восстанавливается. это фича или баг?
Android 6.0.1, Dr.web 11
Сообщение было изменено German AW: 25 Декабрь 2016 — 22:20
Intel Xeon E1270v2 (3.5GHz), 8Gb Ddr3, Intel SSD 330 120Gb, Windows 11 Pro x64 (build 22H2), Dr.Web 12 SS
Jumper EZbook Pro, Intel Apollo N3450 (1.1GHz), 6Gb DDR3, Toshiba SSD 64Gb, Windows 11 Pro x64 (build 22H2),
Dr.Web 12 SSXiaomi Mi 11 Lite 5G, Android 12, MIUI 13
#18
German AW
![]()
Отправлено 25 Декабрь 2016 — 22:27
Все, понял в чем причина. Нужно добавить Dr.Web в список приложений, игнорирующих режим Stamina, тогда все работает. Вопрос закрыт.
Intel Xeon E1270v2 (3.5GHz), 8Gb Ddr3, Intel SSD 330 120Gb, Windows 11 Pro x64 (build 22H2), Dr.Web 12 SS
Jumper EZbook Pro, Intel Apollo N3450 (1.1GHz), 6Gb DDR3, Toshiba SSD 64Gb, Windows 11 Pro x64 (build 22H2),
Dr.Web 12 SSXiaomi Mi 11 Lite 5G, Android 12, MIUI 13
#19
German AW
![]()
Отправлено 16 Январь 2017 — 22:28
Еще вопрос назрел. При включеном брандмауэре не раздается интернет посредством точки доступа, открытой на смартфоне. Ноут подключается к точке по wifi, но пишет «без доступа к сети». Долго ломал голову, в чем проблема, пока не догадался отключить брандмауэр на телефоне. Это так и должно быть или баг?
Сообщение было изменено German AW: 16 Январь 2017 — 22:28
Intel Xeon E1270v2 (3.5GHz), 8Gb Ddr3, Intel SSD 330 120Gb, Windows 11 Pro x64 (build 22H2), Dr.Web 12 SS
Jumper EZbook Pro, Intel Apollo N3450 (1.1GHz), 6Gb DDR3, Toshiba SSD 64Gb, Windows 11 Pro x64 (build 22H2),
Dr.Web 12 SSXiaomi Mi 11 Lite 5G, Android 12, MIUI 13
#20
maxic
Keep yourself alive

Отправлено 17 Январь 2017 — 08:27
German AW, это такая известная особенность. С самого начала.
Брандмауэр блокирует интернет для некоторых приложений на VSmart Joy 4


Отправлено 09 Март 2021 — 14:30
Всем привет. На первых порах после установки брандмауэр работал нормально. Спустя некоторое время я заметил, что не могу перейти по браузеру никуда и не могу скачивать приложения с Google Play. Менял «Ограничить мобильный Интернет» на большее число. Временно это исправляло ситуацию, но спустя пару дней снова заблокировало интернет. Firefox пишет «Адрес не найден». WhatsApp и Telegram при этом могут отправлять сообщения. В настройках всем приложениям разрешен интернет и wi-fi. «Ограничить мобильный Интернет» отключен (стоит на высоком значении если что).
Прикрепленные файлы:
#2
mglebov

Отправлено 09 Март 2021 — 14:59
Роутер Xiaomi Wi-Fi Xiaomi Router AC1200 EU (DVB4330GL)

Роутер Xiaomi AC1200 подходит для повседневного использования: подключения к интернету на скорости до 1 Гбит/с с поддержкой IPTV и двухдиапазонным соединением Wi-Fi. На частоте 2.4 ГГц доступна скорость до 300 Мбит/с, на частоте 5 ГГц — до 867 Мбит/с. Поддерживается одновременная работа в двух диапазонах со скоростью сети до 1167 Мбит/с. Скорость до 1 ГГц доступна при проводном подключении.
Нет в наличии
2 290 руб 0 руб
Можно заказать по телефону:
Роутер Xiaomi AC1200 подходит для повседневного использования: подключения к интернету на скорости до 1 Гбит/с с поддержкой IPTV и двухдиапазонным соединением Wi-Fi. На частоте 2.4 ГГц доступна скорость до 300 Мбит/с, на частоте 5 ГГц — до 867 Мбит/с. Поддерживается одновременная работа в двух диапазонах со скоростью сети до 1167 Мбит/с. Скорость до 1 ГГц доступна при проводном подключении.

Быстрая и надежная Wi-Fi сеть
Сеть на частоте 2.4 ГГц обеспечивает стабильный сигнал в широком радиусе через стены и другие препятствия — для интернета в каждой комнате. Полоса пропускания 5 ГГц с поддержкой протокола 802.11ас дает более высокую скорость подключения: для надежного соединения в онлайн-играх и просмотра UHD-видео онлайн.
Два усилителя для сетей 2.4 ГГц и 5 ГГц снижают помехи и улучшают чувствительность приемника, увеличивая зону покрытия и улучшая проникающую способность.
На диапазоне 5 ГГц используется интеллектуальный алгоритм исправления ошибок. Он делает сигнал более стабильным и увеличивает зону покрытия Wi-Fi.
Для двух диапазонов создается одна сеть Wi-Fi. Больше не придется выбирать, к какой подключиться: устройства автоматически выберут подходящий вариант. Роутер поддерживает протокол IPv6 для соединения с большим количеством устройств. Для усиления сигнала используются 4 антенны.

Производительный процессор и память
Двухъядерный четырехпоточный процессор с частотой 880 МГц отвечает за стабильную и эффективную работу проводного соединения и Wi-Fi. Для подключения к сети провайдера предусмотрен один гигабитный WAN-порт, а для подключения компьютеров или других устройств — два гигабитных LAN-порта. 128 МБ оперативной памяти хватит для подключения до 128 устройств одновременно.

Приложение и настройка
С помощью приложения Mi Home настраивается доступное время работы для разных устройств, ограничение скорости, автоматическое отключение сети ночью для обновления прошивки и безопасности. Приложение совместимо с IPTV и дает возможность удаленного управления сетью. Доступна настройка подключения без ввода пароля — полезная функция для людей старшего поколения
Ещё немного про телефоны Xiaomi и борьбу с ними. Updated

Честно признаться, у меня не было планов писать и публиковать эту статью, но, после того, как за два месяца увидел в ближнем кругу коллег 5 штук свежеприобретённых телефонов от Xiaomi, и недавнюю статью на Geektimes, рекламирующую управление умным домом от Xiaomi, ко мне пришла совесть и, сцуко, потребовала поделиться знанием с остальными.
Для начала небольшая вводная часть для тех кто не в теме. Есть такая компания Xiaomi, которая делает неплохие по начинке телефоны и заливает в них кастомизированный Android. Бизнес модель, как недавно официально было заявлено — «По сути мы раздаём наши смартфоны, не зарабатывая на этом денег. Нас больше заботят долгосрочные источники дохода. Мы могли бы продать 10 миллиардов смартфонов и не заработать на них ни цента». Источник раз и два.
Заглянув в сентябрьскую статью на Security lab и ещё вот в эту жалобу, у меня лично возникло ощущение, что телефон Xiaomi это что-то типа поводка на котором владельца водит Большой брат (утрирую, конечно же).
Это и стало основным мотивом проведения исследования поведения телефона Xiaomi redmi 3S
с прошивкой MIUI Global 8.1 Стабильная 8.1.1.0 (MALMIDI)
Исследование подопытного кролика и обнаружение проблемы
Беру новенький телефон из коробки. Включаю его и прохожу через мастера начальной настройки, предварительно включив запись трафика на Wi-Fi роутере. Ровно через две секунды, после того как телефон подключился к точке доступа, началось скачивание файла размером около 8Мбайт с одного из серверов Xiaomi. Это был обычный zip архив, внутри которого лежала куча всего и, в том числе, файл AnalyticsCore.apk, упомянутый в статье на SecurityLab.
Дальше — больше. В общей сложности, за всё время наблюдения, я насчитал чуть меньше восьми десятков имён серверов в разных доменах. Сразу оговорюсь, что в этом числе нет серверов Google и Facebook, приложения которых также предустановлены. Просто потому что я их считал отдельно. С ними тоже всё «весело».
Большая часть коннектов к серверам Xiaomi шла через HTTPS, поэтому разобраться в деталях ЧТО именно передаётся напрямую возможности не было. Отключение всевозможных логинов, синхронизаций и т.п. к исчезновению этого трафика не привело.
Дополнительно смущало то, что большей частью запросы были небольшими (объём принятого переданного трафика TCP сессий не превышал 1-2Кб), но, т.к. наши сотовые операторы округляют объём трафика вверх (Например, Tele2 до 150Кб), то, при неудачном совпадении, можно «накачать» таким образом существенные объёмы трафика, а в роуминге неожиданно попасть на деньги.
Тех, кого сей факт не смущает могут дальше не читать, т.к. дальше будет описание конкретики изоляции трафика от приложений, вшитых в заводскую прошивку.
Предварительные условия
Первое что необходимо — это рутовать телефон. Как это делается в случае Xiaomi я здесь описывать не буду, отсылаю желающих пройти этот путь к полной версии этой статьи (ссылка в конце).
Второе — это влить в телефон прошивку через кабель и стереть ВСЕ пользовательские данные.
Третье — телефон НЕ ДОЛЖЕН иметь доступа в интернет после залива свежей прошивки.
Update. До момента установки нижеописываемых ограничений, разумеется.
Disclamier. Все дальнейшие манипуляции над телефоном Вы делаете на свой страх и риск.
Ответственность за любой результат лежит на том, кто именно делал описываемые ниже действия.
Небольшая техническая вводная часть
Серверы, к которым обращается телефон, в большинстве своём расположены в облаке Amazon, поэтому обращения к ним происходит по именам, которые ресолвятся через round-robin DNS в разные IP адреса из разных подсетей /16. Блокировать их все по подсетям смысла особого нет — так можно половину интернета отфильтровать, что не есть хорошо. Блокировать по именам — хорошо, но не факт, что имена хостов из L3 доменов не генерируются динамически. Идеально было бы прибить все приложения, которые обращаются к серверам Xiaomi, но, как показала практика, глубина их интеграции в Android такова, что после удаления некоторых из них телефон может просто отказаться загружаться.
Далее. К внешним серверам обращается не один процесс, а многие, при этом задачу усложняет наличие в Android UID sharing, когда под одним UID могут генерировать сетевой трафик разные процессы (приложения). Более того, один из полезных процессов (отвечающий за GPS) надо выпускать во внешний мир, чтобы скачивать небольшие обновления, но при этом он сидел под тем же UID, что и восемь штук процессов, рвущихся к серверам Xiaomi.
Также надо упомянуть про ограниченность инструментария, доступного для решения вышеописанных задач, т.к. большая часть приложений имеющих в названии firewall доступных на Play Market работают через т.н. VPN, т.е. от сливов информации до запуска приложения они не защищают.
Большая часть того, что будет рассказано дальше для профессиональных разработчиков Android есть банальная истина, но всем остальным это позволит понять почему фильтрация построена именно таким образом.
В отличие от обычного Linux, где есть файлы конфигурации и стартовые скрипты, лежащие в /etc, в Android всё сделано несколько иначе. Общее управление сетью осуществляет Connection Manager, который дёргает системный демон netd, который, в свою очередь, вызывает iptables с определёнными параметрами командной строки. Соответственно, вызывать IPtables из скрипта начальной загрузки (init и прочих) особого смысла нет — netd при старте всё равно вызовет iptables, очистит правила и зальёт свои.
Единственный выход оставленный Google — писать необходимые команды конфигурации iptables в скрипте /system/bin/oem-iptables-init.sh. Путь к этому скрипту и его имя жёстко прописаны внутри исходного кода демона netd.
Для фильтрации статических имён хостов можно редактировать файл /etc/hosts, но при этом надо помнить про их количество и возможность их динамической генерации.
Дальше будет рассказ как это всё делалось.
Удаление и заморозка (если нет уверенности) ненужных программ
При помощи бесплатной версии Titanium Backup можно посмотреть соответствие между именем программы, показываемое в системе (Play Market), её кодовым именем (com.google.vending) и, при необходимости, удалить то, что явно не нужно.
Недостаток бесплатной версии — не умеет делать заморозку программ, посему заморозку делаем через ADB shell при помощи package manager. Пример:
root@land:/ # pm disable com.miui.analytics pm disable com.miui.analytics Package com.miui.analytics new state: disabled root@land:/ # pm disable com.miui.systemAdSolution pm disable com.miui.systemAdSolution Package com.miui.systemAdSolution new state: disabled root@land:/ # reboot reboot
Фильтрация сетевых запросов
Disclamier 2.В данной статье описано КАК можно фильтровать «левую» сетевую активность телефона. Что конкретно фильтровать — каждый волен решать сам.
Как это можно делать.
1. Cамое простое — заполнение файла /etc/hosts записями имён серверов c IP адресом 127.0.0.1. Мой набор серверов лежит на Google Drive в папке Files.
Недостаток варианта — невозможность блокировки неизвестных и динамически генерируемых имён хостов и доменов L3/L4.
Update. Несколько раз обнаруживал странное поведение Netfilter/IPtables. После загрузки телефона в таблице действующих правил оказывались не все правила, перечисленные в скрипте. Если перезагрузить телефон ещё раз — все правила оказывались на месте. Прям шайтан-машина, а не телефон. В документации нашёл описание параметра —wait, который вроде бы должен решать эту проблему. Но, для гарантированного решения проблемы, сделал ещё вызов IPtables из скрипта не напрямую, а через несложную функцию, которая проверяет код завершения и, при необходимости, повторно выполняет команду с небольшой задержкой, опять же проверяя результат.
2. пишем команды фильтрация отправки пакетов на подсети /16 и /24 стандартными правилами Netfilter/IPtables в файл oem-iptables-init.sh. Здесь их не описываю, желающие напишут их сами, либо найдут в полной версии статьи.
Update. Недостаток варианта — большая часть серверов расположена в облаке Amazon и имеет переменные (round-robin DNS) IP адреса. Для гарантированной их фильтрации придётся закрыть не один десяток подсетей /16, что не есть хорошо. Можно ненароком забанить и полезные сайты. Но для статичных хостов (если их немного) это решение вполне подходит.
3. Фильтруем DNS запросы к ненужным нам доменам. Это несколько сложнее, поэтому опишу подробнее.
Updated.В составе IPtables, штатно идущем в Android есть модули расширения функционала, которыми мы дальше и воспользуемся. Помня, что DNS запросы отправляет система (UID 0) пишем правило:
$IPTABLES -A oem_out --protocol udp --dport 53 -m owner --uid-owner 0 -m string --algo bm --hex-string '|04|miui|03|com|00|' -m comment --comment "Deny UID 0 DNS queries for miui.com domain" -j DROP # $IPTABLES -A oem_out --protocol udp --dport 53 -m owner --uid-owner 0 -j ACCEPT
Updated. Первая строчка отфильтрует все UDP пакеты, отправленные системой (UID 0) на 53 UDP порт любого IP адреса и содержащие в себе байты 046d69756903636f6d00 (запросы к DNS серверу содержащие в себе .miui.com). IPtables самостоятельно преобразуют строчку |04|miui|03|com|00| в чисто шестнадцатиричый вид 046d69756903636f6d00.
Наличие шестнадцатиричной цифры на первой позиции для параметра —hex-string — обязательно, иначе IPtables не примет команду. Точки-разделители в доменном имени при формировании DNS запроса преобразуются в шестнадцатиричные цифры, означающие количество байт до следующего разделителя. Поэтому последний байт равен нулю (00h).
Вторая строчка пропустит все остальные DNS запросы. Комментарии я указал для удобства, чтобы команда iptables -L -v показывала результаты блокировок нагляднее.
4. Для работы Assited GPS необходимо дать возможность доступа к серверам QualComm процессу с UID 1000. Здесь всё сложнее, т.к. простая фильтрация пакетов по содержимому, как в случае DNS серверов, не сработает — начальные пакеты установления TCP соединения c флагами SYN, ACK ещё НЕ содержат в себе имя хоста, которое обязательно присутствует в HTTP запросе, а пакеты идущие после заголовка HTTP запроса уже могут не содержать в себе имя хоста. В результате фильтр пропустит из всей TCP сессии только часть пакетов, что равносильно её запрету или обрыву.
Поэтому рисуем вот такой костыль для фильтрации запросов седьмого уровня средствами 3-4 уровня:
# разрешаем инициировать установление TCP соединений на 80 порт всем процессам работающим под UID 1000. $IPTABLES -A oem_out -m owner --uid-owner 1000 --protocol tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT #проверяем наличие слова xtrapath в пакетах TCP соединений установленных на 80 порт процессами с UID 1000 и помечаем эти соединения шестнадцатиричным числом 5555. $IPTABLES -A oem_out -m owner --uid-owner 1000 --protocol tcp --dport 80 -m conntrack --ctstate ESTABLISHED -m string --algo bm --string 'xtrapath' -j CONNMARK --set-xmark 0x5555 # убиваем пакеты всех установленных процессами с UID 1000 TCP соединений не имеющих нашей пометки число 5555 $IPTABLES -A oem_out -m owner --uid-owner 1000 --protocol tcp --dport 80 -m conntrack --ctstate ESTABLISHED -m connmark ! --mark 0x5555 -j DROP
5. Фильтруем доступ в интернет по приложениям (у меня Google Chrome имел UID 10060). Разрешаем выход в интернет Google Chrome и запрещаем всем остальным приложениям.
$IPTABLES -A oem_out -m owner --uid-owner 10060 -m comment --comment "Permit Google Chrome internet access" -j ACCEPT # # Block all other processes # $IPTABLES -A oem_out -m owner --uid-owner 0-9999 -m comment --comment "Block all other system processes internet access" -j DROP $IPTABLES -A oem_out -m owner --uid-owner 10000-99999 -m comment --comment "Block all other user processes internet access" -j DROP
Слабым местом этого способа фильтрации является его опора на наличие отметки UID на каждом конкретном пакете при прохождении его через Netfilter/IPtables. Обнаружилось это по непонятным TCP соединениям к серверам Google, пакеты которых не содержали UID. Исследование показало, что эти пакеты инициированы процессом Google Captive portal login. Я решил эту проблему обходным путём — просто выключив эти запросы командами в ADB shell:
root@land:/ # settings put global captive_portal_detection_enabled 0 root@land:/ # reboot
Радует, что (судя по накопленной статистике за несколько суток перехвата Wi-Fi трафика), никаких иных системных процессов отсылающих пакеты без UID в исследовавшемся телефоне нет.
Update. Дальнейшее наблюдение показало как я ошибался. Такие «тихие» процессы есть, но часть из них невинно общается друг с другом через адрес 127.0.0.1, что ненаказуемо.
Всё остальное надо банить.
Поэтому, для их правильной фильтрации, надо добавить в самое начало скрипта ещё две строчки:
$IPTABLES -A oem_out --protocol all --source 127.0.0.0/8 --destination 127.0.0.0/8 -m comment --comment "Accept internal traffic" --jump ACCEPT $IPTABLES -A oem_out --protocol all -m owner ! --uid-owner 0-99999 -m comment --comment "Drop any traffic which does not have UID." --jump DROP
Update. Уже после опубликования статьи для меня окончательно стало ясно, что UID приложений, задаваемый системой при установке приложения, при обновлении и/или переустановке приложений может непредсказуемым образомменяться. Следовательно, доступ в интернет для приложения тоже отвалится и надо будет переписывать правило Netfilter/IPtables заново.
Для решения этой проблемы набросал небольшой кусок скрипта, который читает из хвоста файла наименования приложений, проверяет их наличие в системной базе приложений, и, при наличии, берёт оттуда же UID приложения и динамически (в процессе работы скрипта) формирует правило Netfilter/IPtables.
Строго говоря — чтение параметров из тела скрипта — это тоже костыль. Но меня оправдывает то, что на момент работы скрипта, подмонтировать файловую систему доступную снаружи при обычной работе телефона — невозможно. В папке /dev нет соответствующих файлов устройств. Допускаю, что это может быть особенность прошивки конкретного телефона.
Текст специально сделал максимально подробным, для лучшего понимания.
# Permit intenet access for the packages listed at the end of this file. White list mode. # SU=`/system/bin/which su` # changing reading file behavior (read whole file with \r\n into variable) IFS="" # reading first and second fields of every line of the system packages database into variable PACKAGESDB. # Escalating privileges via su because of filesystem packages database file access limitations. PACKAGESDB=`$SU -c "/system/bin/cut -d' ' -f 1,2 /data/system/packages.list"` # # Reading last lines of current script form the end till "exit 0" line # Filtering empty lines, lines started with # and all symbols after # (comments) in every line. # # 's/#.*//' - remove all in every line after # # '/^#/d' - remove lines staring with # # '/./!d' - remove empty lines # '/exit 0/,$ d' - remove all lines starting line with "exit 0" # 's/ //g' - remove spaces from line # /system/bin/tac $0 | /system/bin/sed -e '/^#/d' -e 's/#.*//' -e '/exit 0/,$ d' -e '/./!d' -e 's/ //g'| while read line; do # Just in case 8-) OUR_PACKAGE_NAME=$line # Strict checking for existence of our package name in the system packages database. Checking first field. PACKAGE_NAME_IN_DB=`echo $PACKAGESDB | /system/bin/cut -f 1 -d' ' | /system/bin/grep -Fx "$line"` if # Checking grep utility exit code. "0" means pattern found test "$?" == "0" then # # Looking for package UID in database. Checking second field. VERY important space after $line. # PACKAGE_UID=`echo $PACKAGESDB | /system/bin/grep "$line " | /system/bin/cut -f 2 -d' '` else # All other exit codes return us to the beginning of the cycle. # echo "Package $OUR_PACKAGE_NAME not found" $IPTABLES -A $CHAIN -m comment --comment "Package name $OUR_PACKAGE_NAME not found. Check package name." --jump LOG continue fi # # Set the package right for Internet access # $IPTABLES -A $CHAIN -m owner --uid-owner $PACKAGE_UID -m comment --comment "Permit $OUR_PACKAGE_NAME Internet access" -j ACCEPT # done ###### . skipped. #### exit 0 #### ####### Do NOT edit before this line ######### # Please add package names and comments after this line for granting them internet access. ##### # Google Play Store and its companion processes # com.google.android.gms # Google Services Framework Internet access com.android.vending # Google Play Market internet access com.android.providers.downloads # Download manager service internet access # # Other Google apps com.google.android.youtube # Youtube application internet access com.google.android.apps.maps # Google Maps application internet access com.google.android.googlequicksearchbox # Google Assistant internet access # # com.android.chrome # Google Chrome browser internet access
После переустановки/обновления приложения нужно всего лишь перезагрузить телефон.
6. Для целей мониторинга работы правил Netfilter/IPtables можно добавить ещё вот такую строчку:
$IPTABLES -A oem_out --source 10.1.30.42 --protocol tcp --jump LOG --log-prefix "IPtables log:" --log-uid
Параметр IP адрес отправителя (—source 10.1.30.42) можно опустить, но в этом случае лог будет завален записями сетевой активности процессов, завёрнутых на адрес 127.0.0.1 файлом hosts. Лог можно читать через команду dmesg (dmesg | grep IPtables) в ADB Shell.
Версию статьи, которая писалась как полная инструкция по решению этой проблемы с Xioami Redmi 3S я выложил на Google Drive. Сюда её выкладывать не рискнул именно из-за объёма.
P.S. Я не разработчик Android-приложений, просто жизнь заставила два месяца поразбираться с сабжевым телефоном. Посему, господа профи, если я где ошибаюсь — поправляйте. Буду признателен.
P.P.S. В качестве средства перехвата использовался Zyxel Keenetic Extra. У него есть возможность перехватывать Wi-Fi трафик и сливать его на флэшку для последующего анализа.
