Як Windows визначає, що файл викачаний з Інтернету

В одній з попередніх статей ми згадували, що Windows при спробі відкрити скачаний з Інтернету виконуваний файл видає попередження системи безпеки про спробу запуску потенційно небезпечного вмісту (подробиці в статті Як відключити попередження системи безпеки в Windows). Яким же чином система визначає, що файл був викачаний з Інтернету? спробуємо розібратися.

Порада. У 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: \ 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

Зберігаємо зміни. Переконуємося, що файлу призначений альтернативний потік.