Альтернативные потоки NTFS, или как Widows определяет, что файл был загружен из Интернет.



    Большинство пользователей современных операционных систем семейства Windows сталкивались с ситуацией, когда файл справки в формате CHM (Compiled Help Module) открывается лишь частично – можно просматривать только оглавление без содержимого его пунктов:

”Для


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

Кроме этого, при попытке открыть файл CHM, содержащийся в общей сетевой папке, используя путь в формате UNC (Universal Naming Convention), например \\server\h\help.chm его разделы не отображаются. Другими словами, нормально просматривать файлы .chm можно только в тех случаях, если они не были получены по сети.

Схожая картина наблюдается, когда вы пытаетесь открыть исполняемый файл, который был загружен из сети. Вы увидите предупреждение системы безопасности:

”Предупреждение


Причем, этот же файл, извлеченный из архива который также был загружен из сети Internet, на данном компьютере может открываться без каких-либо проблем. Фактически, вся разница состоит лишь в том, что открываемый файл был создан локально, в процессе разархивирования, а не загружен по сети. Другими словами, Windows имеет возможность определить сетевое происхождение файла, и отреагировать на него с использованием определенных настроек системы безопасности.





Механизм определения сетевого происхождения файлов.

В файловой системе NTFS каждый файл (или каталог) представлен как набор отдельных элементов, называемых атрибутами. Такие элементы, как имя файла, параметры безопасности и даже данные - все это атрибуты файла. Каждый атрибут идентифицирован кодом типа атрибута и, необязательно, именем атрибута. Так, например, имя файла содержится в атрибуте Filename, содержимое – в атрибуте DATA, сведения о владельце и правах доступа – в атрибуте Security Descriptor и т.д. Содержимое каждого файла (атрибут $DATA) представляет собой набор потоков, в которых хранятся данные. Для каждого файла или каталога в NTFS существует, как минимум один, основной поток, в котором, собственно и хранятся данные. Однако, кроме основного потока, с файлом или каталогом могут быть связаны и альтернативные (Alternate Data Stream - ADS), которые также могут содержать некоторые данные, никак не связанные с данными основного потока. Основной поток файла не имеет имени и обозначается как $DATA:"". Альтернативные же потоки обязательно имеют имя, например - $DATA:"StreamData" - альтернативный поток с именем StreamData

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

Например, запись в файл test.txt текста командой echo:

echo Main stream Data > test.txt - записать текст ” Main stream Data” в файл test.txt,что означает запись в основной неименованный поток.

Но можно изменить команду:

echo Alternate stream Data > test.txt:stream1 - записать текст ” Alternate stream Data” в альтернативный поток с именем stream1 файла test.txt

Теперь можно открыть, например, блокнотом каждый из потоков:

notepad test.txt - откроется содержимое основного потока с текстом ” Main stream Data”

notepad test.txt:stream1 - откроется содержимое альтернативного потока с текстом ”Alternate stream Data”

Альтернативные потоки, будучи невидимыми для стандартных средств работы с объектами файловой системы, тем не менее, очень часто используются для хранения дополнительных сведений о файлах и другой служебной информации. Так, например, при скачивании файлов из Интернет, браузеры добавляют к ним альтернативный поток с именем Zone.Identifier, который можно открыть блокнотом, как и в примере выше

notepad %USERPROFILE%\Downloads\ChromeSetup.exe:Zone.Identifier - открыть в блокноте альтернативный поток с именем Zone.Identifier для инсталляционного файла браузера Google Chrome с именем ChromeSetup.exe Путь к файлу можно не задавать, предварительно выполнив команду перехода в каталог загружаемых файлов текущего пользователя ( при стандартном расположении служебных пользовательских папок):

cd %USERPROFILE%\Downloads - перейти в каталог загружаемых файлов.

notepad ChromeSetup.exe:Zone.Identifier - открыть альтернативный поток с именем Zone.Identifier для инсталляционного файла браузера Google Chrome с именем ChromeSetup.exe в текущем каталоге.



”Содержимое


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

[ZoneTransfer] - признак секции с описанием зоны передачи данных
ZoneId=3 - идентификатор зоны.

Эта информация дает возможность определить происхождение файла по номеру идентификатора ZoneId:

0 - локальный компьютер (Local).
1 - местная локальная сеть (Intranet)
2 - надежные сайты Интернет (Trusted Sites)
3 - Интернет (Internet)
4 - опасные сайты (Restricted Sites)

Такое определение зон, например, соответствует настройкам безопасности обозревателя Internet Explorer:

”Настройка


В данном случае, можно определить, что файл ChromeSetup.exe был получен из Интернет (идентификатор зоны = 3). При запуске такого файла, будет выдано предупреждение системы безопасности о ненадежном источнике. Аналогичным образом работают средства безопасности приложений Microsoft Office, когда предупреждают об опасности открытия файлов, которые были загружены из Интернет. По этой же причине не открывается содержимое файлов справок в формате CHM – содержимое альтернативного потока позволяет классифицировать их как опасные, независимо от реально существующей или несуществующей опасности.

Попробуйте изменить тем же блокнотом, значение ZoneId на 0, что будет соответствовать локальному происхождению файла, и предупреждение системы безопасности исчезнет, как и проблемы с открытием офисных документов или разделов справок в .chm-файлах.

Аналогичное поведение систем безопасности будет и в тех случаях, если удалить содержимое альтернативного потока (сделать его пустым), или вообще удалить сам альтернативный поток.

Начиная с Windows 7 для получения перечня альтернативных потоков файлов можно использовать команду DIR с параметром /R:

dir /r %UserpRofile%\Downloads - отобразить список файлов и альтернативных потоков в каталоге Downloads текущего пользователя.

Для работы с альтернативными потоками в любой версии ОС Windows можно использовать утилиту streams.exe из состава программного пакета Microsoft Sysinternals Suite. Пакет содержит множество небольших программ для диагностики, оптимизации и администрирования, в том числе, и утилиту, позволяющую восполнить недостатки в работе с альтернативными потоками.

Формат командной строки:

streams.exe [-s] [-d]file or directory

Параметры командной строки:

-s - обрабатывать подкаталоги.
-d - удалять альтернативные потоки.
-nobanner - не отображать стартовый баннер и сведения об авторских правах.

Примеры использования:

streams.exe /? - отобразить справку по использованию программы.

streams myfile.txt - отобразить сведения о потоках файла myfile.txt

streams –d myfile.txt - удалить альтернативные потоки файла myfile.txt

streams -d -s D:\Downloads\*.* - удалить альтернативные потоки всех файлов и подкаталогов в каталоге D:\Downloads\

В операционных системах Windows 8 и более поздних, командная оболочка PowerShell также позволяет работать с альтернативными потоками:

Get-Item -Path -Path C:\FirefoxSetup.exe -Stream * - отобразить сведения о потоках файла C:\FirefoxSetup.exe.

Get-Content -Path C:\FirefoxSetup.exe -Stream Zone.Identifier - отобразить содержимое альтернативного потока Zone.Identifier файла C:\FirefoxSetup.exe

Remove-Item -Path C:\FirefoxSetup.exe -Stream * - удалить все альтернативные потоки, связанные с файлом C:\FirefoxSetup.exe

Remove-Item -Path C:\FirefoxSetup.exe -Stream Zone.Identifier - удалить альтернативный поток Stream Zone.Identifier, связанный с файлом C:\FirefoxSetup.exe.

Информация о зонах безопасности широко используется в групповых политиках, и в частности, Диспетчером вложений Windows, выполняющим функции защиты от вредоносного ПО, которое может содержаться в почтовых вложениях или файлах, загруженных из Интернет. На сайте Microsoft размещена подробная статья о способах настройки диспетчера вложений и решения проблем, связанных с ним:
Описание работы диспетчера вложений, который входит в систему Microsoft Windows.


В заключение добавлю, что альтернативные потоки – это свойство файловой системы NTFS, и, например, в FAT32 не поддерживаются. Соответственно, при копировании файлов из NTFS в любую другую файловую систему, альтернативные потоки отбрасываются.







В начало страницы     |     На главную страницу сайта