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

В одной из предыдущих статей мы упоминали, что Windows при попытке открыть скачанный из Интернета исполняемый файл выдает предупреждение системы безопасности о попытке запуска потенциально опасного содержимого (подробности в статье Как отключить предупреждение системы безопасности в Windows). Каким же образом система определяет, что файл был скачан из Интернета? Попробуем разобраться.

Открыть файл – предупреждение системы безопасности

Совет. В Windows 8 блокировать файлы, скачанные из Интернета также может фильтр SmartScreen.

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

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

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

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

dir /r

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

Откроем содержимое альтернативного потока в блокноте:

Notepad.exe install_flash_player_16_active_x.exe:Zone.Identifier

ZoneTransfer-ZoneId-3Мы видим, что данный поток представляет собой файл с секцией [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 (Опасные сайты)

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

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

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

Альтернативный NTFS поток удален

Совет. Чтобы система не назначала метки загруженным файлам, можно сохранять файлы из Интернета на файловой системе, отличной от 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 потоках.

c:\TOOLS\streams.exe -s -d c:\Download\*.exe
При наличии 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Сохраняем изменения. Убеждаемся, что файлу назначен альтернативный поток.

assign-Zone.Identifier


Предыдущая статья Следующая статья


Комментариев: 3 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)