Альтернативные потоки NTFS, или как Widows определяет, что файл был загружен из Интернет.Большинство пользователей современных операционных систем семейства Windows сталкивались с ситуацией, когда файл справки в формате CHM (Compiled Help Module) открывается лишь частично – можно просматривать только оглавление без содержимого его пунктов: При выборе ссылки не открывается соответствующий раздел в правой части окна. Обычно, это происходит с файлами, которые были загружены из Интернет (не в составе архива, например). Кроме этого, при попытке открыть файл CHM, содержащийся в общей сетевой папке, используя путь в формате UNC (Universal Naming Convention), например \\server\h\help.chm его разделы не отображаются. Другими словами, нормально просматривать файлы .chm можно только в тех случаях, если они не были получены по сети. Схожая картина наблюдается, когда вы пытаетесь открыть исполняемый файл, который был загружен из сети. Вы увидите предупреждение системы безопасности: Причем, этот же файл, извлеченный из архива который также был загружен из сети Internet, на данном компьютере может открываться без каких-либо проблем. Фактически, вся разница состоит лишь в том, что открываемый файл был создан локально, в процессе разархивирования, а не загружен по сети. Другими словами, Windows имеет возможность определить сетевое происхождение файла, и отреагировать на него с использованием определенных настроек системы безопасности. Механизм определения сетевого происхождения файлов.При выполнении функций записи данных в файл, они помещаются в основной поток данных. Когда мы открываем, например, блокнотом текстовый файл, то получаем доступ именно к данным основного потока. Данные же альтернативных потоков, при использовании стандартного доступа, не отображаются, как впрочем, нет даже никаких признаков их наличия. Тем не менее, данные альтернативных потоков, связанные с конкретным файлом или каталогом, могут быть доступны с помощью специальных программ или при использовании особого синтаксиса в командной строке 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 в любую другую файловую систему, альтернативные потоки отбрасываются. |
|