waqur: (Default)
waqur ([personal profile] waqur) wrote2019-06-06 02:19 pm

Windows 10: как отключить слив персональных данных (инструкция от BSI)

В продолжение темы грамотного собаководства.

Немецкий компьютерный журнал PC Welt недавно опубликовал большую статью на тему телеметрии в Windows 10 и методов её отключения (выпуск #5/2019, стр 38-42).

Журнальная статья ссылается на исследование, которое провела немецкая спецслужба BSI (Федеральное управление по информационной безопасности) по запросу парламентской группы "Die Linke" к федеральному правительству на тему информационной безопасности десятой винды. Исследование называется SiSyPHuS* Win10 и на него уже успели потратить 1.37 млн евро.

Те, кто силён в немецком, смогут самостоятельно осилить оригинал и разобраться (по приведённой ссылке особенно интересна вторая PDFка), а я здесь кратко-конспективно изложу суть этой публикации.


Итак, что удалось выяснить:

1. Отправка данных на сервера Microsoft'а реализована в службе DiagTrack (%SystemRoot%\System32\diagtrack.dll), которая исполняется в контейнере svchost.exe. При этом для обеспечения защиты от перехвата данных на уровне провайдера применяется TLS, с закреплением сертификатов (pinning) на клиентской стороне (в crypt32.dll**).

2. Хотя сбор данных пронизывает практически всю винду, внутренняя коммуникация между сборщиками событий и службой для их обработки и отправки в Microsoft происходит через механизм ETW-событий. Часть событий, которые происходят на раннем этапе загрузки, пишется в файл %ProgramData%\Microsoft\Diagnosis\ETLLogs\ShutdownLogger\AutoLogger-Diagtrack-Listener.etl, далее стартует служба DiagTrack, которая одновременно и обрабатывает этот файл (ETW-сессия Autologger-Diagtrack-Listener-Session), и начинает обработку ETW-событий в реальном времени (ETW-сессия Diagtrack-Listener-Session).

3. Количество ETW-провайдеров (сборщиков событий) на этапе загрузки зависит от уровня телеметрии и составляет 9 для уровня Security, 93-112 для уровней Basic-Full. После того, как загрузка закончилась, сборщиков событий будет 4 на уровне Security, 410-422 на уровнях Basic-Full.

4. Уровень телеметрии, заданный в настройках Windows, влияет на содержимое файла %ProgramData%\Microsoft\Diagnosis\DownloadedSettings\utc.app.json (который задаёт действующие фильтры для потока ETW-событий). Впрочем, вручную опустошать этот файл бесполезно: он защищён, часто обновляется вместе с Windows Update, его содержимое зависит от редакции Windows, региона, номера сборки Windows и т.д.

5. Для начала немцы советуют задать минимальный уровень телеметрии, равный Security. Конечно, это можно сделать только в редакциях Windows 10 LTSC/LTSB, Enterprise, Education, Mobile Enterprise или Server. Пользователи более популярных Home и Pro, как говорится, в пролёте.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection\AllowTelemetry = 0 (REG_DWORD).

6. Затем предлагается отключить запуск службы DiagTrack:
HKLM\SYSTEM\CurrentControlSet\Services\DiagTrack\Start = 4 (REG_DWORD)

7. Затем предлагается запретить запуск ETW-сессии AutoLogger-DiagTrack-Listen (загрузочные события):
HKLM\SYSTEM\CurentControlSet\Control\WMI\Autologger\AutoLogger-DiagTrack-Listener\Start = 0 (REG_DWORD)

8. Нелишним будет также уконтрапупить службу Windows Update, поскольку она сама тоже умеет слать телеметрию, даже на уровне Security:
HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\Start = 4 (REG_DWORD)
Заодно и страховочка будет от такого сценария, что прилетит апдейт и вернёт все ваши изменения в состояние по умолчанию. Хотя этих слов в явной форме нет в отчёте BSI, взамен там можно прочесть такое: "путём использования служб WindowsServerUpdate и SystemCenterConfigurationManager можно получать обновления не из облака, а с сервера в локальной сети" — шутят немцы.

9. А ещё что-то там на сервера Microsoft'а любит сливать Windows Defender (встроенный антивирус), так что нелишним будет отучить его от этой наглости: Update and Security → Windows Defender → Cloud-based protection = Off

10. И напоследок, предлагается настроить встроенный в винду firewall, чтобы тот не пускал службу DiagTrack в интернет. Засада в том, что diagtrack.dll стартует под svchost.exe, а блокировать одну DLLку на файерволле нельзя: или блокируем все процессы svchost.exe (что сделает винду неюзабельной), или ничего не блокируем (что влечёт риск утечки данных). Немцы предлагают выйти из ситуации так: сделать жёсткую связь (fsutil hardlink create) на svchost.exe под другим именем (например utc_myhost.exe), затем изменить правила запуска службы DiagTrack, чтобы в автозагрузке вместо команды "%SystemRoot%\System32\svchost.exe -k utcsvc -p" выполнялась команда "%SystemRoot%\System32\utc_myhost.exe -k utcsvc -p". Ну а в конце наглухо зафайерволлить засранца (utc_myhost.exe) через PowerShell:
New-NetFirewallRule -DisplayName "BlockDiagTrack" -Name "BlockDiagTrack" -Direction Outbound -Program "%SystemRoot%\System32\utc_myhost.exe" -Action block

11. Оставшаяся часть отчёта фокусируется на блокировке на уровне DNS-резолвера доменных имён, используемых для слива телеметрии в Microsoft. Однако с учётом того, что их много, они зависят от вашей страны, и постоянно меняются, я не нахожу эти усилия эффективными. Разве что в качестве второго, вспомогательного, уровня защиты (и то, при условии, что ваш роутер такое умеет).

12. Остальное, как говорится, додумайте сами. Я бы и виндовому недоантивирусу выход в интернет закрыл. Насколько я понимаю, необходимость пункта 10 при наличии пунктов 6 и 8 обусловлена тем, что завтра установщик какого-нибудь SQL Server или Skype может невзначай поменять обратно Start=4 на 2 или 3 для служб DiagTrack и wuauserv. Журнал PC Welt также пишет о том, что надо использовать локальный вход в систему вместо Microsoft Account, отключить Cortana, найти замену Skype и OneDrive и т.д.

Нужны ли после этого всего файлы diagtrack.dll и wuaueng.dll на диске — решать вам. Когда-то давно, лет 10-15 назад я подрабатывал тем, что чистил от вирусов компы под управлением Windows XP, и поскольку часто было недостаточно просто удалить файл с малварью (условно назовём его malware.dll), загрузившись с какого-нибудь линуксового Live CD, т.к. вредонос восстанавливался при следующей загрузке, я применял разные милые трюки типа "создать папку с именем malware.dll и в ней файл с именем NUL". По техническим причинам, выходящим за рамки этого повествования, после подобных манипуляций создать файл malware.dll из Windows уже не получится. Однако со времён Windows XP много воды утекло, в разработке программного обеспечения был достигнут значительный прогресс, поэтому теперь для максимального удобства пользователей все вредоносы сразу встроены прямо в винду. А вот будут ли старые милые трюки по-прежнему эффективными против новых вредоносов, и не закончится ли затея BSoD'ом при следующей загрузке, я предлагаю читателям выяснить самостоятельно. :)

Лично мне проще оставаться на Windows 7.




* Название проекта, насколько я понимаю, содержит элемент самоиронии: немцы намекают на тщетность всех подобных усилий, с учётом того, что Microsoft в любой момент может выпустить принудительное обновление, которое изменит правила игры

** Это для защиты от баловства с SSL trusted root. Без certificate pinning'а, когда в какой-нибудь рашке или иране местная гэбня протолкнёт новый закон насчёт принудительной инсталляции своих сертификатов в доверенный корень на устройства конечных пользователей, эта гэбня сможет слушать всю телеметрию, сможет натолкать юзерам левых "апдейтов" собственной разработки, сможет запрашивать Word'овские и Excel'евские файлы с диска к себе в облако "для поиска вирусов" и т.д. Прямо как NSA. Однако, как известно, что позволено Юпитеру — то не позволено быку. Поэтому имеем certificate pinning. Впрочем, этот самый certificate pinning — он же и ахиллесова пята всей схемы: видите ли, в протоколе TLS 1.0-1.2 сертификаты передаются открытым текстом. Так что можно сделать прозрачный прокси, который прослушивает весь трафик и рубит на стадии инициации те TLS-сессии, где мимо проплывает "хорошо известный" сертификат. Список таковых для максимального удобства разработчиков подобного прокси Microsoft собрала в одном файле: crypt32.dll

catodon: (Default)

[personal profile] catodon 2019-06-06 01:06 pm (UTC)(link)
Ух ты! Я и не знал, что в BSI есть такой проект. Спасибо!
chuka_lis: (Default)

[personal profile] chuka_lis 2019-06-06 05:12 pm (UTC)(link)
че-то грустно.
этот принудительный мониторинг, удручает.
и я так пониаю, для хоум эдишин, без вариантов..
Edited 2019-06-06 17:20 (UTC)
chuka_lis: (Default)

[personal profile] chuka_lis 2019-06-06 06:14 pm (UTC)(link)
интересная аналогия.
и небезосновательная, я думаю.
только радиоактивные трусы можно было не покупать, с айти компаниями все же чуть по другому, современный мир таков, что человек как бы вынужден пользоваться "усовершенствованными" программными пакетами, тк старые или не найти, или они не поддерживаются, или требуются дополнительные навыки-опыт, чтобы выйти из положения, итд.
те, ситуация, когда на рынке почти все трусы - "радиоактивные", а не хочешь- можешь не носить трусов, или соткать себе ткань и пошить сам.
Edited 2019-06-06 18:19 (UTC)
chuka_lis: (Default)

[personal profile] chuka_lis 2019-06-10 05:50 pm (UTC)(link)
потому выходит что не каждому " по плечу", так что ситуация, фактически, где выбор отсутствует.