В одной из предыдущих статей мы упоминали, что Windows при попытке открыть скачанный из Интернета исполняемый файл выдает предупреждение системы безопасности о попытке запуска потенциально опасного содержимого (подробности в статье Как отключить предупреждение системы безопасности в Windows). Каким же образом система определяет, что файл был скачан из Интернета? Попробуем разобраться.
Все исполняемые файлы, загруженные из Интернета с помощью браузера получают особую отметку. Это правило поддерживается не только браузером Internet Explorer, но и большинством популярных браузеров, например Mozilla Firefox и Google Chrome. При копировании, переименовании или перемещении файла на другой раздел с файловой системной 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.
Чтобы вручную удалить данную метку (альтернативный поток) у файла, достаточно нажать кнопку Разблокировать в свойствах файла.
Убедимся, что альтернативной поток у данного файла теперь отсутствует:
Вообще говоря, в Windows отсутствуют вменяемые средства работы с альтернативными потоками данных. И, если, к примеру, возникнет задача убрать этот признак сразу у множества файлов, лучше всего будет воспользоваться сторонней консольной утилитой Марка Русиновича — streams.
К примеру, чтобы рекурсивно удалить альтернативные потоки у всех exe-файлов в каталоге c:\Download\, выполните команду:
c:\TOOLS\streams.exe -s -d c:\Download\*.exe
В консоли видно, что альтернативный поток у файла удален: Deleted :Zone.Identifier:$DATA
При наличии 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
Сохраняем изменения. Убеждаемся, что файлу назначен альтернативный поток.
Можно ли в альтернативный поток добавить метку, которая наоборот не позволяет браузерам загружать файл в интернет? То есть, если я хочу чтобы конкретный файл не был выложен в сеть. Если да, то что прописать в альт. поток?
Через NTFS потоки такое не получится. Как минимум учтите тот факт, что метки будут хранится только на файловой системе NTFS, скопировав данный файл на любой web сервер (на 99% из них не используется файловая система NTFS).
Единственный вариант — шифрование. Храните свои файлы в зашированном архиве и обновляйте его. Либо что-то придумывать с сертификатами (возможно что-то можно придумать с EFS шифрованием) и обменом ключами.
Спасибо автору и сайту за краткие полезные статьи.
даже на answers.microsoft.com «Независимый консультант» всякого рода предположения 3 дня высказывал и все неверные, а у вас за неск минут прочитал развернутый ответ и перепроверил на практике.
При вводе команды Get-Content "FILENAME" -Stream Zone.Identifier в PowerShell возникает следующая ошибка:
Get-Content : Не удается открыть дополнительный поток данных "Zone.Identifier", связанный с файлом "D:\Загрузки\SteamSetup.exe".