Каким же образом система определяет, что файл был скачан из Интернета? Попробуем разобраться.
Совет. В Windows 8 блокировать файлы, скачанные из Интернета также может фильтр SmartScreen.
Все исполняемые файлы, загруженные из Интернета с помощью браузера получают особую отметку. Это правило поддерживается не только браузером 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:TOOLSstreams.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
Сохраняем изменения. Убеждаемся, что файлу назначен альтернативный поток.