• Альтернативные потоки данных в NTFS или как спрятать блокнот. Альтернативные файловые потоки NTFS

    Вы слышали что-нибудь о потоках NTFS ? Весьма интересная функциональность файловой системы, которой можно найти практическое применение. Сегодня поговорим о том, что это и как этим можно пользоваться.

    Для начала немного теории .
    Поддержка альтернативных потоков данных была добавлена в NTFS для совместимости с файловой системой HFS от Macintosh, которая использовала поток ресурсов для хранения иконок и другой информации о файле. Они присутствуют в NTFS еще с самых ранних версий Windows NT . Суть технологии в том, что у файла на NTFS может быть несколько потоков, содержащих данные. Проводник и большинство популярных файловых менеджеров ограничены работой лишь сглавным потоком (не имеющим имени), представляющим собой основное содержимое файла. Потоки могут использоваться для хранения метаданных файла, таким образом они использовались в Windows 2000 , насколько мне известно.

    В Windows 7 альтернативные потоки NTFS , наличествующие у файла, штатными средствами не увидеть. И напрасно: адски хитрые вирусы, например, могут писать себя в потоки какого-нибудь вполне безобидного файла. Удалив файл с потоками, содержащими объёмные данные можно обнаружить, что места освободилось значительно больше, чем занимал файл по мнению Проводника .
    Для просмотра имеющихся потоков мы будем пользоваться консольной утилитой , созданной небезызвестным Марком Руссиновичем.

    Как создать альтернативный поток NTFS

    Некоторые консольные команды позволяют создать и отобразить содержимое потока NTFS , например команда echo может позволить создать альтернативный поток для текстового файла. Чтобы было понятно, как это работает, рассмотрим пример. Введите следующее в командой строке:
    echo Hello Happy Bulldozer > hello.txt
    echo Hello World > hello.txt:test

    А теперь откройте файл hello.txt в Блокноте:

    Текст Hello World остался "за кадром", находясь в потоке с именем test . Если указать в имени открываемого файла и имя потока, открыть файл в потоке не получится: двоеточие - недопустимый символ для названия файла. Однако, можно воспользоваться командной строкой, которая несколько лояльней и позволит выполнить вот такую команду:
    more < hello.txt:test

    Просмотр потоков NTFS , как я писал выше, можно выполнить через утилиту streams.exe
    streams.exe hello.txt


    Я полагаю, тут всё понятно.

    Альтернативные потоки NTFS и Блокнот

    Продвинутые программы вроде справятся без особых усилий и отобразят вам содержимое потока:

    Стандартный Блокнот будет приписывать расширение txt к имени потока. Если вы хотите использовать его, потоки именовать надо следующим образом:
    echo Hello World > hello.txt:test.txt
    Тогда выполненная из cmd.exe команда даст положительный результат:
    notepad hello.txt:test.txt

    Альтернативные потоки NTFS и файлы различных типов

    У вас может сложится мнение, что область применения альтернативных потоков NTFS не простирается дальше текстовых файлов. Это не так. В следующем примере я добавил к файлу hello.txt поток, содержащий данные архива 7z:

    Отмечу, что потоки можно создавать не только для файлов, но и для папок и даже для разделов жесткого диска.

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

    ИТ-директора тратят немало времени и ресурсов на проекты, связанные с системами аналитической обработки информации по продажам и других стандартных бизнес-данных. При этом для руководителей создаются информационные панели, отображающие показатели результативности компании и помогающие строить прогнозы на будущее. Такие системы приносят немалую пользу бизнесу, но на самом деле открывающиеся благодаря им возможности – это лишь малая часть того, что можно сделать с доступными организации данными, уверен Кришна Натан, ИТ-директор компании S&P Global (ранее McGraw Hill Financial), занимающейся ведением кредитных рейтингов, а также предоставляющей консалтинговые и аналитические услуги для фондового рынка. Под руководством Натана спроектирована и внедрена новая общекорпоративная система обработки данных, претворяется в жизнь стратегия, направленная на ускорение роста бизнеса и создание новых предложений для заказчиков.

    В некоторых компаниях начинают собирать дополнительные данные – их называют альтернативными, нетрадиционными или ортогональными. Пока что это новое направление, но ИТ-директорам стоит знакомиться с соответствующими технологиями уже сегодня. Ведь совсем скоро альтернативные данные станут обязательным инструментом многих компаний.

    Однако не спешите нанимать на работу очередных дорогостоящих специалистов. Давайте разберемся, о чем, собственно, идет речь.

    Что такое «альтернативные данные»

    Натан дает такое определение альтернативных данных: это данные, которые поступают из нетрадиционных источников, и их анализ позволяет извлечь полезные сведения в дополнение к тем, что вы получаете обычным образом.

    Допустим, у вас торговая сеть и вы намерены открыть новый магазин в другом городе. Обычно подобное решение основывается на результативности ваших магазинов в конкретном городе и других мегаполисах.

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

    S&P Global также поставляет аналитические услуги для товарных бирж, и ИТ-директору приходится постоянно думать, как с помощью альтернативных источников данных предложить заказчикам дополнительные сведения, как объединять различные сведения, чтобы дать клиентам информацию, которую бы они больше нигде получить не смогли.

    Скажем, у S&P Global есть сведения о том, что нефтеперерабатывающий завод в Роттердаме может производить 100 тыс. баррелей нефтепродуктов в день. Но из-за дефицита поставок перерабатывает примерно 70 тыс. баррелей, то есть доступны свободные мощности еще на 30 тыс. Что произойдет после того, как в порт вошел нефтяной танкер с 30 тыс. баррелей? «Если отчет о доступной мощности завода – недельной давности, то мы не будем знать, что только что произошла разгрузка нефти, – поясняет Натан. – То есть традиционные данные устарели. И здесь пригодится такой источник альтернативных данных, как спутниковая съемка. Если проанализируем снимки со спутника наряду с другими источниками, то получим более точную картину запасов и производства почти в реальном времени».

    Альтернативные данные и ИТ-директор

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

    Для быстрого запуска проекта в области альтернативных данных можно воспользоваться уже готовым решением. Так поступили в S&P Global, когда Platts, дочернее предприятие компании, приобрело cFlow – инструментарий для интерпретации спутниковой съемки. CFlow предлагает средства наглядного представления данных, позволяющие следить за изменениями торговых потоков по маршрутам следования судов, предоставляет сведения об объеме и характере груза танкеров.

    Убеждайте руководство компании в том, что уже пришло время инвестировать в альтернативные данные – в покупку имеющихся решений или создание собственных. Какие-то из ваших проектов в области альтернативных данных принесут плоды, но многие не сработают. Ну а если альтернативные данные принесут действительно ценные сведения, пользуйтесь этим, чтобы получать средства на новые проекты.

    – Martha Heller. What is ‘alternative data’ and how can you use it? CIO. JAN 3, 2017

    Операционные системы Windows наделены двумя малоизвестными функциями сокрытия данных: потоки данных NTFS (известные также как альтернативные потоки данных) и доступ к списку ресурсов на базе разрешений Access-based Enumeration (ABE). Альтернативные потоки данных дают возможность добавлять к файлу скрытую информацию, такую как сведения о файле. Скорее всего, вам не придется задействовать скрытые потоки данных, однако злоумышленники могут использовать эту технологию против вас, так что следует иметь представление о ней и о том, как она может работать.

    Что же касается метода ABE, он может пополнить ваш арсенал. Этот метод позволяет делать невидимыми папки и файлы совместно используемых ресурсов для тех пользователей, которые не имеют разрешения на доступ к ним.

    Вот что необходимо знать об этих средствах.

    Реки, питающие море данных

    Альтернативные потоки данных - это функция файловой системы NTFS. Некогда ими была наделена система Windows NT 3.1 с тем, чтобы дать возможность пользователям NT и Macintosh обмениваться файлами.

    Файл NTFS состоит из потоков данных. Это стандартный поток данных $DATA, и, возможно, один или несколько альтернативных потоков данных. Всякий пользователь, обладающий необходимыми разрешениями на работу с файлом, видит существующий поток данных $DATA, может открыть его, а также считывать и записывать данные в этот поток.

    Альтернативный поток данных - это дополнительная информация либо файлы, которые пользователь или приложение могут присоединять к файлу NTFS. О существовании альтернативного потока данных знает лишь тот пользователь, который создал его. Обычно пользователи не знают о том, присоединен ли к файлу альтернативный поток данных; дело в том, что ни содержимое этого потока, ни его имя не являются видимыми. К тому же нет возможности увидеть изменение в размере файла.

    Существует множество способов использования альтернативных потоков данных. В системе Windows эти потоки применяются для хранения сводных данных документов, созданных приложениями, которые не входят в комплект Microsoft Office, таких как простые текстовые файлы (.txt). Сводные данные, например заголовок, тема и данные об авторе, можно ввести на вкладке Summary диалогового окна Properties соответствующего файла. Эти сводные данные хранятся в альтернативном потоке данных SummaryInformation.

    Приложения Windows, такие как Encrypting File System (EFS) и Windows Explorer, используют альтернативные потоки данных для присоединения касающихся тех или иных файлов данных к файлам, которые хранятся на накопителях, отформатированных под систему NTFS. Программа EFS с помощью альтернативных потоков данных присоединяет к зашифрованным файлам сведения о кодировании и декодировании, что обеспечивает возможность децентрализованного шифрования и дешифрации средствами этой программы.

    Реализованное в пакете Windows XP Service Pack 2 (SP2) приложение Microsoft Internet Explorer (IE) использует альтернативный поток данных Security.Zone для обеспечения классификации по зонам безопасности файлов, записанных на томе NTFS. В результате IE имеет возможность блокировки предполагающих расширение объема прав пользователя атак, которые могут иметь место в ситуациях, когда пользователь загружает вредоносный код из ненадежной по критериям безопасности зоны Internet и сохраняет этот код на локальном жестком диске. IE относит локально сохраненный контент к зоне безопасности Local Machine, которая предусматривает предоставление большего объема прав, нежели зона безопасности Internet. Пакет XP SP2 всегда проверяет поток данных Security.Zone перед тем как разрешить загруженному коду предпринимать какие-либо действия на локальной системе.

    Канал для внедрения вредоносного кода

    Заслуживающими внимания и опасными альтернативные потоки данных становятся по той причине, что их имена и содержимое не отображаются в окне программы Windows Explorer. Поэтому организаторы разного рода атак считают такие потоки удобным средством сокрытия данных или злонамеренного кода, попавшего в систему. Примером использования этих потоков может служить червь VBS.Potok@mm. Хакеры использовали альтернативный поток данных для присоединения к существующему.ini-файлу ODBC нескольких сценариев на языке Visual Basic (VB).

    При активизации червь создает учетную запись с административными полномочиями и рассылает себя по адресам, которые сам же и обнаруживает в адресной книге Microsoft Outlook.

    Еще одна опасность кроется в том, что дисковое пространство, выделенное для альтернативных потоков данных, не отображается в данных о размерах (файлов) и о незанятом дисковом пространстве программы Windows Explorer. Хакер может использовать альтернативные потоки данных для заполнения дискового пространства файлового сервера, и администратору останется только ломать голову, пытаясь докопаться до причины проблемы. Кроме того, надо сказать, что утилита командной строки Dir не принимает во внимание альтернативные потоки данных при подсчете данных о размерах (файлов и папок). На сегодня существует лишь одно средство Microsoft, способное учитывать альтернативные потоки данных при подсчете размеров: это утилита Chkdsk.

    Добавление нового потока

    Любой человек, обладающий правом записи в файл NTFS, может воспользоваться обычными командами операционной системы для присоединения к файлу альтернативного потока данных. К примеру, следующая команда создает альтернативный поток данных mystream, присоединяет mystream к файлу с именем file.txt и сохраняет в потоке mystream фразу "top secret".

    echo top secret > file.txt: mystream

    Просмотреть содержимое потока mystream можно с помощью команды

    Как уже отмечалось выше, к альтернативным потокам данных можно добавлять исполняемые файлы. Так, существует возможность добавить скрытую копию калькулятора Windows (calc.exe) к файлу file.txt. Для этого нужно просто ввести команду

    type calc.exe > file.txt: calc.exe

    Для запуска скрытого калькулятора введите команду

    start .file.txt: calc.exe

    Вы сами можете убедиться, что альтернативные потоки данных и их содержимое не отображаются в инструментальных средствах Microsoft. Откройте программу Windows Explorer и просмотрите в ней свойства файла file.txt. Фактически размер файла составляет 112 Кбайт (столько места занимает встроенный файл calc.exe) - но программа покажет размер файла равным 0 Кбайт: в потоке данных $DATA нет сведений о встроенном файле, а приложение Windows Explorer не имеет возможности считывать информацию из альтернативного потока данных.

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

    Выявление изменений

    Если у вас возникает ощущение, что хакерам удалось обойти заслон установленных разрешений, воспользуйтесь одним из разработанных к настоящему времени инструментальных средств обнаружения содержимого альтернативных потоков данных. Программы для проверки целостности системы, такие, как Tripwire Enterprise и Tripwire for Servers, позволяют выявлять все изменения в файловой системе NTFS, имевшие место в системе Windows, включая добавление или изменение содержимого потока данных.

    Предлагаемая Sysinternal программа Streams - это бесплатно распространяемая утилита командной строки, определяющая имена присоединенных к файлам альтернативных потоков данных. На экране 1 показано, как использовать утилиту Streams для просмотра имени потока данных calc.exe, который мы ранее добавили к файлу file.txt. Эту утилиту можно загрузить по адресу http://www.sysinternals.com/utilities/streams.html .

    Еще один простой способ обнаружения альтернативного потока данных - с помощью Windows Explorer скопировать подозрительный файл на накопитель с файловой системой, отличной от NTFS (скажем, на накопитель FAT). Другие файловые системы не оснащены средствами для работы с альтернативными потоками данных. Поэтому если вы попытаетесь скопировать файл NTFS с присоединенными альтернативными потоками данных для размещения его в другой файловой системе, NTFS выдаст предупреждение, аналогичное показанному на экране 2. Но имейте в виду, что если вы будете копировать этот файл в окне командной строки с помощью команды Copy, Windows скопирует его в отличную от NTFS файловую систему и без предупреждения удалит поток данных.

    Сокрытие совместно используемых ресурсов с помощью ABE

    ABE - это дополнительная функция уровня совместного использования файлов, которую Microsoft впервые реализовала в пакете Windows Server 2003 SP1. Ее можно использовать в любом общем каталоге Windows вне зависимости от того, в какой файловой системе хранятся совместно используемые данные. ABE позволяет администраторам скрывать хранящиеся на общедоступных ресурсах папки и файлы от тех пользователей, которые не имеют соответствующих разрешений на доступ к ним на уровне NTFS. Иными словами, речь идет об обеспечении безопасности на уровне папок.

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

    Впрочем, использование ABE имеет и свои минусы. Перед тем как возвратить подключившемуся к общему ресурсу клиенту список содержащихся в папке объектов, сервер должен проверить все списки управления доступом к этим объектам: только после этого он может определить, какие данные следует возвращать. В результате может отмечаться существенное снижение производительности системы, особенно при обращении к общим ресурсам, содержащим множество объектов.

    Средства ABE целесообразно применять, к примеру, для настройки общедоступных ресурсов в домашних каталогах пользователей. Вместо того чтобы создавать скрытый общедоступный ресурс для домашнего каталога каждого пользователя, можно создать один общий ресурс, содержащий домашние каталоги всех пользователей в папке корневого домашнего каталога. Пользователи будут подключаться к этому корневому каталогу, и вы сможете с помощью ABE, а также разрешений NTFS контролировать видимость домашних каталогов всех пользователей.

    Активизация функции ABE

    В этой функции применяется новый флаг уровня общедоступного ресурса SHI1005_FLAGS_ENFORCE_NAMESPACE_ ACCESS; на момент, когда пишутся эти строки, он реализован лишь в пакетах Windows 2003 SP1 и Release 2 (R2). Данный флаг означает, что вы применяете функцию ABE к одной из папок.

    Для установки флага можно использовать расширения свойств папки Windows Explorer или средство командной строки abecmd.exe. Microsoft распространяет расширение ABE Explorer и abecmd.exe в установочном пакете ABE, который является дополнительным модулем для платформы Windows Server 2003 SP1. Установочный пакет можно загрузить с узла Microsoft по адресу http://www.microsoft.com/downloads/details.aspx?FamilyId=04A563D 9-78D9-4342-A485-B030AC442084 . Поскольку ABE - это серверное расширение, его можно использовать вне зависимости от того, какая версия Windows установлена на клиенте.

    После установки средств ABE на сервере можно установить этот флаг для той или иной папки. Щелкните на папке правой клавишей мыши, выберите пункт Properties, перейдите на вкладку Access-based Enumeration и установите флаг Enable access-based enumeration on this shared folder, как показано на экране 3. Чтобы применить функцию ABE ко всем общедоступным ресурсам системы, установите флаг Apply this folder"s setting to all existing shared folders on this computer.

    Второй способ - использовать средство командной строки abecmd.exe. Чтобы применить функцию ABE к общедоступному ресурсу shareddocs, введите следующую команду:

    abecmd /enable shareddocs

    Для активизации функции ABE на всех доступных ресурсах можно использовать параметр /all, а для отключения ABE - параметр /disable.

    Управление доступом

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

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

    Жан Де Клерк (declercq @hp .com ) - сотрудник Security Office компании Hewlett -Packard . Занимается управлением идентификацией и средствами безопасности продуктов Microsoft. Автор книги Windows Server 2003 Security Infrastructures (издательство Digital Press).

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

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

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

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

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

    В файловой системе NTFS каждый файл (или каталог) представлен как набор отдельных элементов, называемых атрибутами . Такие элементы, как имя файла, параметры безопасности и даже данные - все это атрибуты файла. Каждый атрибут идентифицирован кодом типа атрибута и, необязательно, именем атрибута. Так, например, имя файла содержится в атрибуте Filename , содержимое – в атрибуте DATA , сведения о владельце и правах доступа – в атрибуте Security Descriptor и т.д. Содержимое каждого файла (атрибут $DATA) представляет собой набор потоков , в которых хранятся данные. Для каждого файла или каталога в NTFS существует, как минимум один, основной поток, в котором, собственно и хранятся данные. Однако, кроме основного потока, с файлом или каталогом могут быть связаны и альтернативные (A lternate D ata S tream - 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 ChromeSetup.exe Путь к файлу можно не задавать, предварительно выполнив команду перехода в каталог загружаемых файлов текущего пользователя (при стандартном расположении служебных пользовательских папок):

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

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

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

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

    В последнее время, в связи с удешевлением аппаратных средств (в долларовом эквиваленте) все большее число пользователей компьютера получает в распоряжении ресурсы вполне достаточные для работы операционной системы Microsoft Windows NT (i200MMX + 32-64 Mb). Ненадежность и непредсказуемость Windows 95/98, а также неспособность ее к управлению на должном уровне ресурсами современных компьютеров приводит многих пользователей к мысли о переходе на NT.

    При этом многие неискушенные пользователи не находят для себя ничего кардинально нового. И действительно, установив Internet Explorer 4 и не пользуясь многочисленными возможностями NT по применению политики безопасности и защиты, самыми большими отличиями от Windows 98 может показаться наличие двух папок “Автозагрузка” в пусковом меню (текущего пользователя и общей для всех пользователей) и отсутствие апплета Add/Remove Hardware в Панели управления. А если еще и не форматировать диск файловой системой NTFS, то разницы можно больше и не найти.

    Но эта статья как раз и описывает некоторые отличия NTFS от FAT, VFAT, FAT16 и FAT32. Общеизвестные отличия: способность к самовосстановлению, отложенная запись, максимальный размер тома и файла на нем до 16 Экзабайт (1 Экзабайт = 1000000 Гбайт), возможность сжатия отдельных файлов и папок, установки разрешений и аудита достаточно широко освещены в литературе и документации к Windows NT. Но существуют еще малоизвестные и малоиспользуемые возможности NTFS: жесткие ссылки (hardlinks) и множественные потоки данных (multiply data flows или forks). Далее пойдет речь именно о них.

    Множественные потоки данных . Этот термин знаком пользователям Macintosh. В этой системе файл может иметь два потока (forks): поток данных и поток ресурсов. В потоке данных хранятся данные файла - этот поток и копируется как единственный при переносе файла с Macintosh на PC. Второй поток файла - поток ресурсов, содержащий данные операционной системы – меню, значки, шрифты, в общем, все то, что принято называть ресурсами. Когда Windows NT Server обслуживает клиентов Macintosh и предоставляет им дисковое пространство для хранения файлов, необходимо чтобы файловая система сервера поддерживала формат файлов клиента. Это является одной из причин появления множественных потоков данных в NTFS.

    Каким образом это реализовано? Любая информация о файле, начиная с его имени, разрешений и заканчивая собственно данными, хранящимися в файле, с точки зрения NTFS представляет собой атрибут, хранящийся в собственном потоке (stream). Разработчики NTFS посчитали, что можно не ограничиваться одним потоком для данных – безымянным, и добавили возможность создания нескольких, помимо основного, именованных потоков. Для создания множественных потоков можно применить функцию Win32 API, но можно поступить и проще.

    Со времен Кернигана и Ричи – разработчиков языка C и операционной системы UNIX у многих операционных систем существует возможность обобщения операций ввода – вывода. С этой точки зрения, любая операция ввода – вывода может рассматриваться как операция ввода из потока или вывода в поток независимо оттого, что является источником данных (консоль, т.е. клавиатура, файл или порт) и приемником (опять же консоль, в данном случае уже экран монитора, принтер или файл). Существует и возможность перенаправить ввод – вывод программы с экрана на принтер и вводить команды не с клавиатуры, а из файла. В наше время повсеместного использования графического пользовательского интерфейса эти возможности применяются очень редко, поэтому поясним сказанное примером.

    Команда операционных систем Microsoft echo используется для вывода информации на экран в текстовом режиме:

    C:>echo Hello, World!

    Команда echo в качестве устройства вывода информации использует экран монитора. Вывод этой команды можно перенаправить с консоли в файл (для этого используется символ “ > ”):

    C:>echo Hello, World! > file

    Как видите, команда echo в данном случае на экран ничего не вывела. Но в файле file можно обнаружить строку “Hello, World!”. Аналогично вывод команды echo можно перенаправить и на принтер:

    C:>echo Hello, World! > lpt1

    На экране опять ничего, но на листе бумаги в принтере можно обнаружить все ту же строку “Hello, world!”, если конечно принтер подсоединен к порту lpt1. Таким образом, вывод любой программы текстового режима можно перенаправить на любое устройство, поддерживающее потоковый ввод информации или в файл, за исключением тех программ, которые в текстовом режиме используют для вывода информации непосредственную модификацию видеопамяти и другие нестандартные, с точки зрения классического C, возможности.

    Аналогично можно перенаправить и ввод программы. Команда more операционных систем Microsoft используется для буферизации вывода команд, выводящих информации больше, чем умещается на экран. Но эту команду можно использовать и для иллюстрации перенаправления ввода:

    C:>more Hello, World!

    В файле file находилась строка “Hello, World!”, которая была направлена на экран.

    Точно также, с помощью перенаправления ввода - вывода можно создавать и читать множественные потоки данных:

    C:>echo string1 > file:fork1

    Записью file:fork1 определяется в файле file поток с именем fork1 (поскольку он еще не существует, то создается новый с этим именем) и перенаправляем в него вывод команды echo. При этом размер файла при просмотре его свойств не изменяется, и стандартными средствами Windows NT, не зная имени потока его существования нельзя определить. Но, зная его имя, можно с помощью команды more определить и его содержимое:

    Таким образом, можно создавать и читать содержимое потоков данных файла. Количество потоков, создаваемых в одном файле ограничено только наличием свободного пространства на диске. Аналогично можно создавать потоки данных в каталогах, но для просмотра содержимого потока придется применить другое средство вывода потока на экран, так как команда more при этом выдает следующую ошибку:

    Если ничего подходящего найти не удалось, то можно написать в любом компиляторе C++ такую программу:

    while (cin.get(ch)) cout.put(ch);

    Скомпоновать эту программу лучше как консольное Win32 приложение, и использовать как средство для изучения потоков каталогов.

    Windows NT не предоставляет стандартных средств для получения информации о множественных потоках данных. Но что делать, если все же необходима такая информация? В этом случае можно воспользоваться программой streams Марка Руссиновича (Mark Russinovich), которую вместе с исходным кодом можно взять на www.sysinternals.com . В этой программе для получения информации о множественных потоках данных используются недокументированные функции Windows NT. Вот информация, полученная с помощью программы streams о файле file:

    NTFS Streams Enumerator v1.0

    Systems Internals - http://www.sysinternals.com

    Здесь можно видеть как название потока данных, так и его размер в байтах (дополнительные 3 символа это пробел после символа “ > ”, возврат каретки и перевод строки, добавляемые командой echo). К сожалению, streams не позволяет определить множественные потоки данных в каталогах.

    Для чего можно применять множественные потоки данных? Помимо применения, найденного для них фирмой Apple, можно сказать о самом простом средстве для скрытия информации, например, для запоминания даты установки программы shareware. На заре технологии OLE Microsoft предполагала использовать потоки данных для хранения информации о внедренных объектах, но видимо обеспечить потоки данных на FAT оказалось сложнее, чем создать длинные имена файлов и от этой идеи пришлось отказаться. Создание “файла ресурсов” для скрипта с хранением в нем всех надписей, выводимых на разных языках, также может быть интересной возможность применения потоков. Помимо приведенных, существует еще множество интересных применений для множественных потоков данных, чтобы не обходить их своим вниманием.

    Жесткие ссылки . Пользователям различных клонов UNIX хорошо знакомо это понятие. В отличии от файловой системы FAT, в которой принято, что у каждого файла может быть только одно имя, в UNIX такого ограничения нет – каждый файл может иметь несколько имен и его данные не могут быть удалены, пока счетчик имен файла не равен 0. В UNIX существуют также символьные ссылки – аналог ярлыков (shortcut) в Windows, но следящих за перемещением объекта, на который они ссылаются.

    Windows NT ограниченно соответствует стандарту POSIX (Portable Operating System Interface for Computing Environments). Один из примеров ограниченности – поддержка жестких ссылок и отсутствие поддержки символьных. Видимо, было решено, что ярлыки являются достойным аналогом символьных ссылок.

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

    Для изготовления жесткой ссылки необходима программа для подсистемы POSIX Windows NT. Такая программа вместе с исходными текстами находится на компакт-диске “Ресурсы Windows NT”. По аналогии с UNIX эта программа называется ln. Синтаксис этой команды:

    C:>Ln file hardlink1

    С помощью этой команды мы создаем для файла file второе имя или жесткую ссылку hardlink1 и, изменяя содержимое файла file можно изменить содержимое hardlink1, точнее это один и тот же файл, но с двумя именами. Аналогично можно менять и другие атрибуты файла. Количество имен у файла не ограничено, но при копировании имени файла ссылка разрывается и создается еще один файл. Существует возможность создания ссылки в другом каталоге:

    C:>Ln file ../temp/hardlink2

    В этом случае необходимо указывать не абсолютное, а относительное имя каталога.

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