Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Windows

Как Windows определяет, что файл скачан из Интернета : Windows

22.11.2024 16:59


09.12.2021 21:04
Windows при попытке открыть скачанный из Интернета исполняемый файл выдает предупреждение системы безопасности о попытке запуска потенциально опасного содержимого




Все исполняемые файлы, загруженные из Интернета с помощью браузера получают особую отметку. Это правило поддерживается не только браузером Internet Explorer, но и большинством популярных браузеров, например Mozilla Firefox и Google Chrome. При копировании, переименовании или перемещении файла на другой раздел с файловой системной NTFS, предупреждение все равно остается.

Данная отметка представляет собой альтернативный поток NTFS, принадлежащий файлу.

Суть альтернативных потоков данных NTFS (ADS — Alternate Data Streams). – возможность для каждого NTFS файла создать несколько дополнительных потоков данных (метаданных). По умолчанию все данные файла хранятся в основном потоке, однако есть возможность создать для файла один или несколько дополнительных потов данных, причем их размер даже может превышать размер основного файла. Подавляющее большинство приложений (в том числе проводник) работают только со стандартным потоком и не могут читать данные из альтернативных потоков NTFS.

Чтобы убедится, что скачанному из Интернета файлу назначена особая метка (альтернативный поток NTFS), в окне командной строке выведем список файлов в каталоге с дистрибутивами командой:

Код:
dir /r



Как мы видим, исполняемым файлам в этом каталоге назначен альтернативный поток Zone.Identifier, к примеру: install_flash_player_16_active_x.exe:Zone.Identifier

Откроем содержимое альтернативного потока в блокноте:
Код:
Notepad.exe install_flash_player_16_active_x.exe:Zone.Identifier


Мы видим, что данный поток представляет собой файл с секцией [ZoneTransfer], в которой указан идентификатор зоны передачи ZoneId (те самые зоны безопасности, которые присутствуют в настройках IE). ID зоны передачи может содержать одно из 5 значений от 0 до 4.
ZoneId=0: Local machine (Локальный компьютер)
ZoneId=1: Local intranet (Местная сеть)
ZoneId=2: Trusted sites (Надежные сайты)
ZoneId=3: Internet (Интернет)
ZoneId=4: Restricted sites (Опасные сайты)


При загрузке файла из определенной зоны безопасности, браузер ставит им метку этой зоны. При запуске файлов, у которых в альтернативном NTFS потоке атрибут ZoneId равен 3 или 4, система на основании метки зоны распознает, что файл получен из Интернета или недоверенного источника. Windows проверяет наличие данной метки у исполняемых файлов начиная с Windows XP SP2.

Чтобы вручную удалить данную метку (альтернативный поток) у файла, достаточно нажать кнопку Разблокировать в свойствах файла.


Разблокировать файл из интернетаУбедимся, что альтернативной поток у данного файла теперь отсутствует:


Чтобы система не назначала метки загруженным файлам, можно сохранять файлы из Интернета на файловой системе, отличной от NTFS. Например, FAT, exFat и пр.
Вообще говоря, в Windows отсутствуют вменяемые средства работы с альтернативными потоками данных. И, если, к примеру, возникнет задача убрать этот признак сразу у множества файлов, лучше всего будет воспользоваться сторонней консольной утилитой Марка Русиновича — streams.

К примеру, чтобы рекурсивно удалить альтернативные потоки у всех exe-файлов в каталоге c:\Download\, выполните команду:
Код:
c:\TOOLS\streams.exe -s -d c:\Download\*.exe
В консоли видно, что альтернативный поток у файла удален:
Цитата:
Deleted :Zone.Identifier:$DATA
Утилита streams удаляет все альтернативные потоки у заданных файлов и не позволяет таргетировать конкретный поток. Поэтому не выполняйте команду streams в формате streams.exe -s -d c:\*.exe, т.к. это может привезти к нарушению работы системы вследствие удаления у системных файлов важной информации, содержащейся в альтернативных NTFS потоках.


При наличии PowerShell 3.0, вывести список файлов в каталоге (рекурсивно) с потоком Zone.Identifier можно такой командой:
Код:
Get-ChildItem -Recurse | Get-Item -Stream Zone.Identifier -ErrorAction SilentlyContinue | Select-Object FileName
Сам атрибут снимается так:
Код:
Remove-Item .\installfile.exe -Stream Zone.Identifier
В Windows PowerShell 4.0 снять метку Zone.Identifier можно с помощью отдельного командлета:
Код:
Unblock-File installfile.exe
Данную метку можно для произвольного файла установить вручную, для этого выполним команду
Код:
notepad.exe install_flash_player_16_active_x.exe:Zone.Identifier
Т.к. поток отсутствует, система предложит создать новый файл. Соглашаемся и в окно блокнота копируем текст:
Код:
[ZoneTransfer]
ZoneId=3


Ручное назначение потока Zone.IdentifierСохраняем изменения. Убеждаемся, что файлу назначен альтернативный поток.
Часовой пояс GMT +3, время: 16:59.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.