maxsimus » 09 янв 2024, 16:18
Затыкаем рот Windows 10
Windows 10 очень любит Интернет. Обновления, синхронизации, телеметрия и ещё куча разной другой очень нужной ЕЙ информации постоянно гуляет через наши сетевые соединения. В «стандартном» сценарии использования, когда Windows 10 управляет домашним или рабочим компьютером, это, в общем-то, терпимо, хотя и не очень приятно.
Однако жизнь сложная штука и не ограничивается только стандартными вариантами. Существуют ситуации, когда подобная сетевая активность операционной системы (ОС) нежелательна и даже вредна. За примерами далеко ходить не надо. Попробуйте подключить к Интернету давно не используемый резервный компьютер, собранный на старом железе. Пока софт на нём не обновится, использовать его будет практически невозможно, всё будет дико тормозить и еле шевелиться. А если вам в этот момент нужно срочно что-то сделать?
Для того чтобы подобного не происходило, необходимо «заткнуть рот Windows», то есть сделать так, чтобы она самостоятельно перестала «стучаться» в Интернет, устанавливать обновления и заниматься прочими непотребствами. Вот именно этим мы с вами и займёмся.
Если бы операционная система (ОС) разрабатывалась для удовлетворения нужд потребителей, то эту статью писать бы не пришлось. В ОС были бы стандартные механизмы настройки, с помощью которых можно было бы отключить весь ненужный функционал, но, к сожалению, это не так.
Проблема в том, что компьютер, управляемый Windows 10, нам не принадлежит. ОС содержит неудаляемые приложения, она может самостоятельно отменять действия пользователя, удалять или инсталлировать программы, а также делать другие вещи, идущие вразрез с мнением пользователя, будь он даже администратор системы.
Интеграция с облачными сервисами в Windows 10 реализована так жёстко, что безболезненно отключить её просто невозможно. При любой попытке деактивации хотя бы части этого функционала в ОС обязательно что-нибудь да сломается. Поэтому дальнейший материал, так сказать, для профессионального использования. Не рекомендуется применять его на ваших компьютерах без предварительного тестирования и отладки.
Знай своего врага в лицо
Первым шагом в нашей войне с «паразитной» сетевой активностью ОС будет исследование этой самой активности. Для этого мы соберём простейший лабораторный стенд, состоящий из двух виртуальных машин (ВМ).Здесь Windows 10 будет выходить в Интернет через промежуточный Linux-шлюз, который будет оказывать ей услуги NAT и DNS-сервера.
Исследовать «паразитный» сетевой трафик будем как на Linux-шлюзе, так и на самой Windows 10. На шлюзе это будем делать с помощью сниффера tcpdump и логов DNS-сервера, а на Windows 10 мы воспользуемся утилитой Process Monitor из пакета Sysinternals.
Настройку Linux-шлюза опустим из-за банальности, а про Process Monitor скажем пару слов. Для наших целей сделаем следующие шаги:
Отключим захват всех событий, кроме тех, что связаны с сетью. Для этого главный тулбар настроим следующим образом:Настроим сброс отфильтрованных событий, чтобы не было переполнения памяти.
Для этого в Menu > Filter и активируем опцию «Drop filtered events».
Настроим главный экран, что бы он отображал только то, что нам нужно.
Открываем Options > Select columns и ставим галки только напротив пунктов: «Process name», «Command Line» и «Path»
В результате всех этих экзерциций при анализе сетевого трафика мы сможем увидеть процесс, инициирующий соединение, сетевой адрес назначения, и имена сетевых служб, запускаемых через специализированный процесс svchost.exe.
Первый замер
Наш первый замер будет самый простой. Мы дождёмся чуда, когда Windows перестанет передавать что-либо в Интернет, после чего пробежимся по стандартным настройкам ОС и посмотрим, какой трафик при этом будет генерироваться.
Смотрите, как здорово. В Интернет передаётся информация практически о каждом нашем клике. Приватность? Не, не слышал… Что ж, мы научились детектировать «паразитный» трафик. Теперь будем разбираться, как его блокировать.
Вариант блокировки № 1 – Windows Firewall
Наиболее логичным вариантом блокировки выглядит использование штатного межсетевого экрана — Windows Firewall. По логике вещей мы должны каким-то образом идентифицировать паразитный трафик и затем его заблокировать. Сделать это можно двумя способами:
Оставить разрешённым весь исходящий трафик и при этом блокировать только тот, что мы сочтём паразитным.
Запретить весь исходящий трафик, а затем разрешить только тот, что сочтём нужным (не паразитным).
Но поскольку мы работаем в недоверенной системе, то нам нужно убедиться, что Windows Firewall в принципе на это способен. В частности, нам нужно удостовериться, что:
Windows Firewall может разрешать или запрещать системный траффик ОС.
Windows Firewall может разрешать или запрещать траффик с гранулярностью до системных служб.
Windows Firewall самостоятельно не отменит сделанные нами правила или другим образом не проявит излишнюю самостоятельность.
▍ Тест для Windows Firewall № 1. Может ли он блокировать системный трафик?
Идея эксперимента очень проста. Мы запретим любую сетевую активность и посмотрим, какой трафик будет проходить через этот запрет. Для этого в настройках Windows Firewall установим по умолчанию блокировку всего исходящего и входящего трафика, после чего удалим все правила исключения. Данные со шлюза говорят о том, что «паразитный» Интернет-трафик отсутствует, и фиксируются только ARP-запросы.
Получается, Windows Firewall может действительно заблокировать весь Интернет-трафик. Звучит обнадёживающе.
▍ Тест для Windows Firewall № 2. Может ли он управлять трафиком конкретной сетевой службы?
В этом эксперименте мы должны убедиться, что Windows Firewall может управлять трафиком с гранулярностью до сервиса. Для этого попробуем разрешить трафик для системного DNS-клиента (имя этой службы – Dnscache). С помощью мастера настройки создадим исходящее правило, разрешающее весь трафик, и укажем, чтобы оно применялось к данной службе.
Смотрим, что там на шлюзе.
словно человек, изнывающий от жажды при виде бутылки чистой воды, Windows 10 после разрешения работы DNS-клиента сразу же бросилась пытаться что-нибудь передать или получить из Интернета, ведь она не была в онлайне уже несколько минут. Мало ли что там могло произойти!
Windows Firewall прошёл и это испытание. Остался последний шаг.
▍ Тест для Windows Firewall № 3. Будет ли Windows Firewall самостоятельно исправлять правила, созданные пользователем?
Одним из генераторов «паразитного» трафика является встроенный антивирус Windows Defender. Он качает обновления баз, а также передаёт в облачный сервис (который судя по групповым политикам, называется SpyNet) принадлежащие вам файлы. В качестве теста попробуем заблокировать эту сетевую активность.
Для схемы с разрешённым по умолчанию исходящим трафиком создадим правило блокировки Windows Defender. Для этого в правиле блокировки укажем путь к блокируемой программе: «C:\Program Files\Windows Defender\MpCmdRun.exe»
В момент записи правила сразу же срабатывает Windows Defender с обнаружением угрозы (WDBlockFirewallRule) и удаляет сделанное нами правило.
Таким образом, последний тест Windows Firewall провалил. Конечно, правила удалил не Windows Firewall, а другой компонент ОС, тем не менее мы в очередной раз убедились, что наш компьютер нам не принадлежит.
▍ Итог по Windows Firewall
Несмотря на все выкрутасы, использование Windows Firewall для блокировки паразитного трафика возможно. Единственной доступной в данном случае схемой будет блокировка по умолчанию всего исходящего трафика с созданием разрешающих правил для трафика, который мы сочтём нужным. Тем не менее осадочек остался, и использовать Windows Firewall дальше мы не будем.
Вариант блокировки № 2 – рекомендации Microsoft
Корпорацию Microsoft наверно так задолбали с наездами по поводу не в меру ретивой сетевой активности Windows, что она выпустила гайд «Manage connections from Windows 10 and Windows 11 operating system components to Microsoft services» о том, как немного притормозить её пыл. В гайде приведены инструкции, как с помощью групповых политик или манипуляций с реестром отключить часть сетевых возможностей ОС. Также Microsoft предлагает удалить некоторые встроенные приложения. Реализация гайда приведена под спойлерами ниже.
REG-файл уровня пользователя user.reg
REG-файл уровня компьютер comp.reg
PowerShell-скрипт, удаляющий ВСЕ встроенные приложения
Применим все эти файлы, перезагрузимся и посмотрим, что станет с трафиком.
Важно! Перед применением REG-файлов необходимо отключить самозащиту Windows Defender (Tamper protection). О том, как это сделать, будет в конце статьи.
«Паразитный» трафик уменьшился в разы, но, ожидаемо, не пропал полностью. Анализ фонового трафика находящейся в простое ВМ выявил следующих «болтунов»:
MS Edge;
Сервис Delivery Optimization (DoSvc);
Сервис AppX Deployment Service (AppXSVC);
Сервис Windows Update (wuauserv).
С большей частью болтунов можно разобраться, указав в свойствах сетевого подключения, что оно лимитированное (mettered). Для проводных (Ethernet) соединений сделать это можно с помощью скрипта под спойлером.
PowerShell-скрипт, устанавливающий признак лимитированного соединения
После применения этого скрипта объём передаваемого трафика снизится ещё больше (~1Mb/час), а единственным болтуном останется MS Edge. Если вы планируете использовать этот браузер в дальнейшем, то на этом можно и успокоиться. Для тех же, кто хочет полной приватности, необходимо победить финального босса — MS Edge.
Чтобы прикрыть ему рот, необходимо с помощью штатных средств (Menu > Settings) настроить браузер таким образом, чтобы он использовал облачные службы, синхронизировался и выполнял прочую сетевую активность по минимуму. Если требуется настроить несколько машин, то можно только на одной настроить пользовательский профиль в браузере, а потом копировать его на все другие машины. Профиль хранится в "%LOCALAPPDATA%\Microsoft\Edge\User Data".
После настройки браузера необходимо отключить службы Edge, отвечающие за обновления, и удалить задания из системного планировщика. Сделать всё это можно следующим скриптом:
PowerShell-скрипт, отключающий службы обновления MS Edge
После всех этих манипуляций с MS Edge система полностью прекратит генерировать фоновый Интернет-трафик (при измерении в режиме простоя). Важно отметить, что любой неосторожный запуск MS Edge приведёт к тому, что он снова будет втихаря стучаться в Интернет. Так что будьте осторожны.
▍ Отключение Windows Defender
Данный шаг является опциональным, поскольку болтливость встроенного антивируса существенно ограничится REG-файлами, приведёнными выше. Однако, в условиях, когда антивирус не обновляется, он теряет всякую актуальность и жрёт ресурсы впустую. Чтобы его отключить, нужно сделать следующее:
Руками, с помощью GUI в настройках антивируса необходимо отключить опцию «Tamper protection» (Settings > Update & Security > Windows Security > Virus & Threat protection > Virus & Threat protection settings > Tamper protection off).
Затем следует применить следующий REG-файл.
REG-файл, отключающий Windows Defender
Загрузить REG-файлы уровня пользователя user.reg и уровня компьютера comp.reg.
Запустить скрипт, удаляющий встроенные приложения.
Запустить скрипт, устанавливающий признак лимитированного соединения.
Провести настройку браузера MS Edge.
Запустить скрипт, отключающий механизмы обновления MS Edge.
Как уже отмечалось выше, любые попытки отключения сетевых возможностей ОС Windows 10 приводят к проблемам. Данный способ не исключение.
практика показала, что после проведения всех этих манипуляций некоторые программы, например, Mozilla Firefox, отказываются инсталлироваться. Тем не менее ранее установленные программы, тот же Firefox, продолжают работать. Всё это говорит о том, что стратегия «затыкания рта Windows» должна быть такой:
Полностью обновить ОС.
Инсталляция и настройка требуемых сторонних программ.
Отключение «паразитного» сетевого трафика.