Создание скрытого потока в ntfs. Активизация функции ABE. Альтернативные данные и ИТ-директор

Статья написана для журнала "Хакер" в 2004 году. Она вышла в номере 09/04 (69) под названием "Деструктивные потоки".

Захватывая очередную NT-систему и устанавливая в нее свой самодельный шпионский софт, необходимо решать проблему хранения собираемой информации на компьютере жертвы. Обычно лог пишется в простой файл в каталоге с большим количеством файлов, например, в system32.

Возможности NTFS

Это распространенный, но далеко не лучший способ спрятать информацию на локальном компьютере. Есть шанс, что пользователь заметит лишний, постоянно обновляющийся файл, который вдруг неожиданно появился у него в системном каталоге. Дописывать лог к уже существующему файлу? Для начала надо найти такой файл, добавление к которому информации не испортит его содержимого. А как насчет того, чтобы сохранять инфу в такое место, которое не будет видно ни из проводника, ни из командной строки, ни из любого файлового менеджера? Такую возможность нам предоставляет файловая система NTFS. На обычной домашней персоналке ее редко встретишь, так как большинство пользователей по-прежнему предпочитают FAT32, даже те, кто сидит под XP. Но зато в локальной сети какой-либо фирмы, работающей под Win2k/XP, почти наверняка используется NTFS, потому что эта файловая система предоставляет такие возможности, как назначение прав доступа пользователям, шифрование и компрессию файлов. Кроме того, NTFS гораздо более надежна, чем FAT32. Так что метод сокрытия данных, который я опишу, идеально подходит для промышленного шпионажа. С появлением Longhorn, NTFS имеет шанс обосноваться и на дисках домашних компов, так как грядущая файловая система WinFS, основанная на NTFS, обещает дополнительные возможности по упорядочиванию и поиску информации, которые должны привлечь обычных пользователей.

Прикрепи к файлу любые данные

Способ заключается в том, чтобы сохранять данные не в файл, как обычно, а в файловый поток NTFS. Поток можно прикрепить к другому файлу (при этом его размер не меняется, и данные остаются нетронутыми, а значит, утилиты, проверяющие чексуммы файлов, не заметят изменений), к каталогу или к диску. Альтернативные файловые потоки NTFS – это одна из возможностей NTFS, присутствующая в ней еще с самых ранних версий Windows NT. Она заключается в том, что у одного файла может быть несколько потоков, содержащих данные, причем пользователю доступен лишь главный поток, в котором хранится содержимое файла. Нечто похожее есть в файловой системе HFS на Макинтошах. Там потоки (streams) называются разветвлениями (forks). До недавнего времени они использовались как хранилище ресурсов файла или содержали информацию о типе файла. С появлением MacOS X, Apple рекомендовала помещать ресурсы в отдельные файлы, а типы файлов определять по расширениям. Но поддержка разветвлений все равно остается. В Windows потоки обычно используются для хранения какой-либо дополнительной информации о файле. Например, в потоке может содержаться сводка документа. Если система стоит на диске с NTFS, то файл explorer.exe наверняка содержит сводку. В зависимости от содержимого сводки, к файлу могут прикрепляться потоки с именами SummaryInformation, DocumentSummaryInformation и некоторые другие. У себя на компьютере я обнаружил поток с именем $MountMgrRemoteDatabase, прикрепленный к диску C.

О прикрепленных к файлу потоках юзер может узнать лишь в некоторых случаях, например, при копировании файла с прикрепленным потоком на диск с FAT/FAT32. Эти файловые системы их не поддерживают, поэтому система выдаст запрос на подтверждение потери информации в потоках, указав их названия. Разумеется, такая ситуация никогда не возникнет, если поток прикреплен к диску или к системной папке. Необязательно использовать потоки в шпионских целях. Если ты разработчик shareware программ, то ты вполне можешь использовать потоки для хранения информации о регистрации, количестве дней до истечения срока использования, словом, все то, что должно быть скрыто от пользователя твоей проги.

Работа с потоками

В работе с файлами и потоками есть и сходства, и различия. Похожего не так уж много. И файлы, и их потоки создаются и удаляются одними и теми же WinAPI функциями CreateFile и DeleteFile. Чтение и запись реализуются, соответственно, функциями ReadFile и WriteFile. На этом сходства кончаются, дальше идут одни различия. В именах потоков могут содержаться спецсимволы, которые не могут быть частью имени нормального файла: такие как “*”, “?”, “<”, “>” ,“|” и символ кавычки. Вообще, любое имя потока сохраняется в формате Unicode. Еще могут использоваться служебные символы из диапазона 0x01 – 0x20. Нет стандартной функции копирования и переноса потока: MoveFile и CopyFile с потоками не работают. Но никто не мешает написать свои функции. У потоков отсутствуют собственные атрибуты, даты создания и доступа. Они наследуются от файла, к которому прикреплены. Если в самом файле есть какие-либо данные, то их тоже можно представить в виде потока. Имена потоков отображаются как «имя_файла:имя_потока:атрибут». Стандартный атрибут потока, в котором находятся данные, называется $Data. Есть много других атрибутов, имена которых также начинаются со знака “$”. Содержимое файла находится в безымянном потоке (имя_файла::$DATA). С этим свойством файловой системы представлять содержимое файла в виде потока был связан баг в старых версиях Microsoft IIS, когда хакер, который хотел узнать текст какого либо скрипта на уязвимом сервере, просто добавлял к его имени “::$DATA”, и сервер, вместо того чтобы выполнить скрипт, выдавал его исходный код. Работа с потоками похожа на работу с файлами. Взгляни на листинг 1. Это простой пример программы, создающей файл с потоком и записывающей в него информацию. После запуска программы в ее каталоге появится пустой файл «testfile». Увидеть содержимое прикрепленного потока можно, набрав в командной строке «more < testfile:stream». Как видишь, имя потока указывается после имени файла, отделенное от него знаком двоеточия. Самое трудное при работе с потоками – это получить их список для конкретного файла. Стандартной функции нет, и поэтому придется писать ее самому. Напишем небольшую консольную программу, которая бы возвращала список потоков по имени файла. Такая прога есть у ребят из Sysinternals, с открытым кодом, и она работает, но мне не понравился их способ. Они используют вызовы Native API, и поэтому их код большой и трудный для понимания. Мы же напишем свою прогу, которая будет работать из командной строки, с алгоритмом попроще и со стандартными API функциями.

Получаем список потоков

Алгоритм основан на применении функции BackupRead. Она предназначена для резервного копирования файлов. Когда делаешь резервную копию файла, важно сохранить как можно больше данных, включая и файловые потоки. Информация берется из структуры WIN32_STREAM_ID. Оттуда можно достать имя потока, его тип и размер. Нам понадобятся только потоки типа BACKUP_ALTERNATE_DATA. Все функции и структуры описаны в заголовочном файле winnt.h. Для начала надо открыть файл для чтения с помощью CreateFile. В параметре dwFlagsAndAttributes надо указать флаг FILE_FLAG_BACKUP_SEMANTICS, что позволит открывать не только файлы, но и каталоги. Затем запускаем цикл while, который считывает информацию о файле в структуру sid, из которой мы будем доставать информацию о каждом потоке. Перед следующим проходом цикла очищаем структуру и сдвигаем указатель файла к следующему потоку с помощью функции BackupSeek. После того как все потоки найдены, очищаем lpContext, содержащий служебную информацию, и закрываем файл. Исходный код программы приведен в листинге 2. Уже скомпилированную прогу ты можешь взять с нашего диска. Для работы с потоками необязательно писать специальные программы. Можно кое-что сделать прямо из командной строки. Несколько примеров приведено на врезке.

Обнаружение

Прикрепив поток с информацией к чему-нибудь, до его содержимого трудно добраться, не зная его имени. Если поток прикрепить к логическому тому, то в Windows вообще нет стандартных средств, чтобы его обнаружить. Так как в имени потока могут содержаться символы, недопустимые в именах обычных файлов, это создает дополнительные трудности при попытке узнать содержимое потока, пользуясь командной строкой. Содержимое сводки документа обычно хранится в потоке с названием, которое содержит символ с кодом 0x05. Этот символ можно набрать в консоли (Ctrl+E), но если бы это был символ 0x10 или 0x13 (возврат каретки и перевод строки), то набрать их было бы невозможно. Теоретически ты можешь узнать о прикрепленных потоках случайно, используя некоторый софт, который с большой вероятностью есть на твоем компьютере. В WinRAR есть опция, и если она включена, то ты можешь заметить, что размер небольшого файла, помещенного в архив, не только не уменьшается, а даже увеличивается (за счет того, что данные в потоках тоже помещаются в архив). Это может вызвать подозрения. Программа для отслеживания обращений к файловой системе - FileMonitor от тех же Sysinternals - не делает различий между обращениями к файлам или потокам. Соответственно, внимательное изучение лога обращений к диску подозрительной программы (твоего кейлоггера) выдаст и название потока, куда пишется лог, и имя файла, к которому он прикреплен.

Вирусы

В сентябре 2000 года появился первый вирус, использующий для своего распространения альтернативные файловые потоки. W2k.Stream был первым представителем нового типа вирусов - stream companion. Он ищет в своем каталоге файлы.exe, и если находит, то начинает процесс заражения. К файлу прикрепляется дополнительный поток, в который вирус переносит содержимое оригинального файла, а потом копируется тело вируса в основной поток файла. После запуска зараженного файла вирус снова пытается заразить файлы в своем каталоге, а затем запускает программу из дополнительного потока. Действительно, с помощью функции CreateProcess можно запускать процесс из потока. Причем файл с потоком можно спокойно удалить, а процесс останется. Просто сказка для троянов! Несмотря на то, что с момента появления W2K.Stream прошло уже почти четыре года, еще не все антивирусы способны обнаруживать вредоносный код в файловых потоках. Поэтому появление новых червей и вирусов, использующих их, может представлять серьезную опасность.

Другие вирусы, использующие потоки

Кроме W2K.Stream, потоки нашли применение и в других вирусах и червях. Первым червем, использовавшим файловые потоки, являлся I-Worm.Potok. Эта зверушка прикрепляет несколько потоков к файлу odbc.ini в каталоге Windows и хранит там скрипты для рассылки себя по почте. Еще одним вирусом является W2k.Team. Описание этих и других подобных вирусов ты можешь найти на сайте http://www.viruslist.com/

Работа с потоками из консоли

Создание файла с потоком:
type nul > somefile.txt:Stream

Запись в поток:
echo "Something" >> somefile.txt:Stream

Чтение из потока:
more < somefile:Stream

Копирование содержимого существующего файла в поток:
type file1.txt >> somefile.txt:Stream

Копирование содержимого потока в файл:
more < somefile.txt:Stream >> file2.txt

Удаление потоков

Существует мнение о том, что поток можно удалить только вместе с файлом, к которому он прикреплен. Это не так. Если ты знаешь название потока, то ты всегда сможешь удалить его стандартной функцией DeleteFile.

Листинг 1. Пример создания потока.

#include int main() { DWORD dwRet; HANDLE hStream = CreateFile("testfile:stream", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, NULL, NULL); WriteFile(hFile, "This is a stream", 17, &dwRet, NULL); CloseHandle(hStream); return 0; }

Листинг 2. X-Stream: Программа, показывающая список потоков

#include #include #include #include int _tmain(int argc, _TCHAR *argv) { WIN32_STREAM_ID sid; ZeroMemory(&sid, sizeof(WIN32_STREAM_ID)); DWORD dw1,dw2,dwRead; INT numofstreams = 0; //Буфер для имени потока в формате Unicode WCHAR wszStreamName; LPVOID lpContext = NULL; /* * Открываем файл для чтения с параметром * FILE_FLAG_BACKUP_SEMANTICS, что позволяет нам * открывать не только файлы, но и каталоги с дисками. */ HANDLE hFile = CreateFile(argv,GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); if (hFile == INVALID_HANDLE_VALUE) {printf("\nError: Could"t open file, directory or disk %s\n",argv); exit(0); } DWORD dwStreamHeaderSize = (LPBYTE)&sid.cStreamName - (LPBYTE)&sid + sid.dwStreamNameSize; printf("\nStreams information for %s:\n",argv); while (BackupRead(hFile, (LPBYTE) &sid, dwStreamHeaderSize, &dwRead, FALSE, TRUE, &lpContext)) { //Если тип потока неверный, значит прерываем цикл if (sid.dwStreamId == BACKUP_INVALID) break; ZeroMemory(&wszStreamName,sizeof(wszStreamName)); //Получаем имя потока if (!BackupRead(hFile, (LPBYTE) wszStreamName, sid.dwStreamNameSize, &dwRead, FALSE, TRUE, &lpContext)) break; if (sid.dwStreamId == BACKUP_DATA || sid.dwStreamId == BACKUP_ALTERNATE_DATA) { numofstreams++; printf("\n\nStream\t\t#%u",numofstreams); switch (sid.dwStreamId) { case BACKUP_DATA: printf("\nName:\t\t::$DATA"); break; case BACKUP_ALTERNATE_DATA: printf("\nName:\t\t%S",wszStreamName); break; } printf("\nSize:\t\t%u\n",sid.Size); } //Перемещаемся к следующему потоку BackupSeek(hFile, sid.Size.LowPart, sid.Size.HighPart, &dw1, &dw2, &lpContext); //Очищаем структуру перед следующим проходом цикла ZeroMemory(&sid,sizeof(sid)); } //Очищаем lpContext, содержащий служебную информацию //для работы функции BackupRead BackupRead(hFile, NULL, NULL, &dwRead, TRUE, FALSE, &lpContext); //Закрываем файл CloseHandle(hFile); return 0; }

По теме файловых потоков также есть следующее:

  • NTFS Stream Explorer 2.00 Программа для работы с потоками NTFS и

Были представлены в Windows NT 4.0 и были вокруг всех потомков (исключая win-95 потомки: 98, Me). В XP, Vista и Win 7 они все еще существуют. Пока версии Windows поддерживают NTFS, они будут поддерживать файловые потоки. Они будут поддерживать NTFS в течение длительного времени.

Ошибка, которую вы указали, описана на странице, которую вы видите в своем вопросе. Команда type не понимает потоки. Использование:

More < 1013.pdf:Zone.Identifier

Работа с потоками

Microsoft имеет только несколько команд, которые работают с потоками, фактически только < , > работают с потоками, и поэтому могут использоваться только команды, которые могут работать с этими операторами перенаправления. Я написал о том, как вы все еще можете управлять потоками только с этими командами.

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

Когда вы пытаетесь открыть поток файлов с помощью start filename:streamname , и программа говорит что-то вроде "незаконного имени файла" или "файл не найден", и вы уверены, что имя потока верное, то, скорее всего, программа не поддерживают потоки. Я заметил, что Notepad, Wordpad и Word/Excel работают правильно с потоками, хотя Word и Excel считают файлы опасными. Ниже приведены некоторые эксперименты .

ПРИМЕЧАНИЕ: вам кажется, что альтернативные потоки данных нечетны. Они странные, потому что они настолько скрыты, но многие основные файловые системы (HFS, NSS) имеют это, и концепция восходит к началу 80-х годов. Фактически, изначально потоки были добавлены в NTFS для взаимодействия с другими файловыми системами.

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

Речь пойдёт о точках повторной обработки (reparse points), идентификаторах объектов (object id) и о других типах данных, которые может содержать файл помимо своего основного содержимого.

Идентификатор объекта это 64 байта, которые можно прикрепить к файлу или каталогу. Из них первые 16 байт позволяют однозначно идентифицировать файл в пределах тома и обращаться к нему не по имени, а по идентификатору. Остальные 48 байт могут содержать произвольные данные.

Идентификаторы объектов существуют в NTFS со времён Windows 2000. В самой системе они используются для отслеживания расположения файла, на который ссылается ярлык (.lnk). Допустим, файл, на который ссылается ярлык, был перемещён в пределах тома. При запуске ярлыка он всё равно откроется. Специальная служба Windows в случае, если файл не найден, произведёт попытку открыть файл не по его имени, а по заранее созданному и сохранённому идентификатору. Если файл не был удалён и не покидал пределы тома, он откроется, а ярлык снова будет указывать на файл.

Идентификаторы объектов использовались в технологии iSwift Антивируса Касперского 7-ой версии. Вот как описана эта технология: Технология разработана для файловой системы NTFS. В этой системе каждому объекту присваевается NTFS-индентификатор. Этот индентификатор сравнивается с значениями специальной базы данных iSwift. Если значения базы данных с NTFS-индентификатором не совпадают, то объект проверяется или перепроверяется, если он был изменен.

Впрочем, переизбыток созданных идентификаторов вызывал проблемы со сканированием диска стандартной утилитой проверки chkdsk, она происходила слишком долго. В следующих версиях Антивируса Касперского отказались от использования NTFS Object Id.

Reparse Point

В файловой системе NTFS файл или каталог может содержать в себе reparse point, что переводится на русский язык как «точка повторной обработки» . В файл или каталог добавляются специальные данные, файл перестаёт быть обычным файлом и обработать его может только специальный драйвер фильтра файловой системы.

В Windows присутствуют типы reparse point, которые могут быть обработаны самой системой. Например, через точки повторной обработки в Windows реализуются символьные ссылки (symlink) и соединения (junction point), а также точки монтирования томов в каталог (mount points).
Reparse-буфер, присоединяемый к файлу это буфер, имеющий максимальный размер 16 килобайт. Он характеризуется наличием тега, который говорит системе о том, к какому типу принадлежит точка повторной обработки. При использовании reparse-буфера собственного типа ещё необходимо задавать в нём GUID в специальном поле, а в reparse-буферах Microsoft он может отсутствовать.

Какие типы точек повторной обработки существуют? Перечислю технологии, в которых используются reparse point"ы. Это Single Instance Storage (SIS) и Cluster Shared Volumes в Windows Storage Server 2008 R2, Hierarchical Storage Management, Distributed File System (DFS), Windows Home Server Drive Extender. Это технологии Microsoft, здесь не упомянуты технологии сторонних компаний, использующие точки повторной обработки, хотя такие тоже есть.

Extended Attributes

Расширенные атрибуты файла . Про них был . Здесь стоит упомянуть только то, что под Windows эта технология практически не применяется. Из известного мне программного обеспечения только Cygwin использует расширенные атрибуты для хранения POSIX прав доступа. У одного файла на NTFS могут быть или расширенные атрибуты, или буфер точки повторной обработки. Одновременная установка и того и другого невозможна. Максимальный размер всех расширенных атрибутов у одного файла составляет 64 Кб.

Alternate Data Streams

Дополнительные файловые потоки. Про них знает уже, наверное, каждый. Перечислю основные признаки этого вида метаданных: именованность (то есть у файла может быть несколько потоков, и у каждого своё имя), прямой доступ из файловой системы (их можно открывать, используя формат «имя файла, двоеточие, имя потока»), неограниченный размер, возможность запуска процесса прямо из потока (и возможность реализовать через это ).

Использовались в технологии iStream Антивируса Касперского. Используются в самой Windows, например при скачивании файла из интернета к нему прицепляется поток Zone.Identifier, содержащий информацию о том, из какого места получен данный файл. После запуска исполняемого файла пользователь может увидеть сообщение «Не удаётся проверить издателя. Вы действительно хотите запустить эту программу?» .

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

Что-нибудь ещё?

Есть ещё идентификатор безопасности , плюс стандартные атрибуты файла, к которым нет прямого доступа, несмотря на то, что они тоже реализованы как потоки файлов. И они, и расширенные атрибуты, и reparse и object id - всё это потоки файла с точки зрения системы. Напрямую изменять идентификатор безопасности, показанный на следующей картинке как::$SECURITY_DESCRIPTOR смысла нет, пусть его изменением занимается система. К другим типам потоков сама система не даёт прямого доступа. Так что на этом всё.

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

Видимо-невидимо

Читатель блога Виктор не смог запустить скачанный из Интернета скрипт PowerShell. Внимательное чтение моих инструкций позволяло избежать проблемы, но корень ее был вовсе не в строгих политиках безопасности PowerShell.

Виктор скачал из галереи TechNet архив со скриптом PSWindowsUpdate.zip для управления Windows Update, о котором я рассказывал . Однако распакованный скрипт отказывался работать. Когда я подсказал читателю, что в первом пункте моих инструкций говорится о необходимости разблокировать архив, все пошло как по маслу.

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

Честно говоря, сегодняшняя тема не нова, но я решил осветить ее в своем блоге по нескольким причинам:

  • Многие статьи написаны еще во времена Windows XP или Windows 7 и не учитывают встроенных возможностей более новых ОС Microsoft.
  • В одной из запланированных на ближайшее время статей эта тема затрагивается, и мне проще сослаться на материал, за актуальность и правильность которого отвечаю я сам.
  • У блога большая аудитория, и для многих читателей эта тема все равно окажется в новинку:)

Сегодня в программе

Потоки данных NTFS

Windows черпает сведения об источнике файла из альтернативного потока данных (alternate data stream, далее ADS) файловой системы NTFS. В свойствах файла она скромно пишет, что он с другого компьютера, но на деле знает чуть больше, как вы увидите дальше.

С точки зрения NTFS, файл – это набор атрибутов . Содержимое файла – это атрибут данных с именем $DATA. Например, текстовый файл со строчкой “Hello, World!” обладает атрибутом данных “Hello, World!”

В NTFS атрибут $DATA является потоком данных и называется основным или безымянным, потому что… не имеет имени. Формально он выглядит так:

$DATA:""

  • $DATA – имя атрибута
  • : – разделитель
  • "" – имя потока (в данном случае имя отсутствует – между кавычками ничего нет)

Интересные особенности альтернативных потоков данных

В контексте примеров выше я хочу отметить несколько любопытных моментов.

Невидимые изменения

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

Интересно становится, когда файл открыт, скажем, в Notepad++. Этот редактор умеет предупреждать об изменениях файла. И он сделает это, когда вы запишете в файл альтернативный поток, однако содержимое при этом останется прежним!

Запись и просмотр ADS из CMD

ADS можно создавать и отображать из командной строки. Следующие команды записывают скрытый текст во второй ADS с именем MyStream2, а затем отображают его.

Echo Hidden Text > C:\temp\test.txt:MyStream2 more < C:\temp\test.txt:MyStream2

Просмотр ADS в текстовых редакторах

Тот же Notepad++ покажет вам содержимое ADS, если указать название потока в командной строке

"C:\Program Files (x86)\Notepad++\notepad++.exe" C:\temp\test.txt:MyStream1

Результат:

С блокнотом такой фокус пройдет только в том случае, если в конце имени потока есть .txt . Команды ниже добавляют третий ADS и открывают его в блокноте.

Echo Hidden Text > C:\temp\test.txt:MyStream3.txt notepad C:\temp\test.txt:MyStream3.txt

Результат:

Блокировка скачанных файлов

Давайте вернемся к вопросу, который задал мне читатель. Будет ли файл блокироваться зависит в первую очередь от программы, в которой он был скачан, а во вторую — от параметров ОС. Так, все современные браузеры поддерживают блокировку, и она включена в Windows.

Помните, что когда заблокирован архив, все распакованные файлы будут заблокированы «по наследству». Также не забывайте, что ADS — это функция NTFS, т.е. при сохранении или распаковке архива на FAT32 никакой блокировки не происходит.

Просмотр сведений об источнике заблокированного файла

В PowerShell перейдите в папку со скачанным файлом и посмотрите информацию обо всех потоках.

Get-Item .\PSWindowsUpdate.zip -Stream * FileName: C:\Users\Vadim\Downloads\PSWindowsUpdate.zip Stream Length ------ ------ :$DATA 45730 Zone.Identifier 26

Как вы уже знаете, $Data – это содержимое файла, но в списке фигурирует еще и ADS Zone.Identifier . Это прозрачный намек на то, что файл получен из какой-то зоны. Знаете, откуда эта картинка?

Чтобы выяснить зону, надо прочесть содержимое ADS.

Get-Content .\PSWindowsUpdate.zip -Stream Zone.Identifier ZoneId=3

Очевидно, он нацелен на пакетную разблокировку (например, когда архив уже распакован). Команда ниже разблокирует в папке Downloads все файлы, содержащие в имени PS :

Dir C:\Downloads\*PS* | Unblock-File

Конечно, существуют всякие утилиты с графическим интерфейсом, даже умеющие интегрироваться в контекстное меню. Но, на мой взгляд, PowerShell или на худой конец streams вполне достаточно.

Как предотвратить блокировку файлов

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

Однако из названия неочевидно, что политика распространяется не только на почтовые вложения, но и скачанные из Интернета файлы. Подробнее о диспетчере вложений читайте в KB883260 .

В домашних изданиях редактора групповых политик нет, но реестр никто не отменял: SaveZoneInformation.zip .

Другие примеры практического применения ADS

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

Инфраструктура классификации файлов

Об авторе

Интересный материал, спасибо. Узнал что-то новое про PowerShell, который мне всё ещё мало знаком:)

Для общения с семьёй чаще использую WhatsApp — пока с этим сервисом было меньше всего проблем, даже родители там освоились. Контактик тоже в основном для семьи, хотя там обмен сообщений в основном вокруг публикуемых альбомов с фото и видео. Некоторые родственники хранят верность Viber — у меня с ним не сложилось как-то, держу просто для них, не оставляя попыток перетащить и их в WhatsApp.

Для работы в основном Slack, когда что-то срочное — WhatsApp, очень срочное — SMS. ВКонтакте для общения по работе с внешним миром.

Skype использую только для видеозвонков, в основном с семьей опять же. С удовольствием заменил бы его на WhatsApp, будь там видеозвонки.

urix

В Viber теперь появились видеозвонки, и даже видеозвонки для десктопной версии. Так что может быть, Viber станет следующим скайпом… в хорошем смысле

Андрей Кузнецов

Материал интересный, спасибо. Я знал про существование потоков, но не знал, что с ними так просто работать через PowerShell.
Что касается IM: К скайпу у меня есть нарекания только по времени запуска на Windows Phone. На ipad и Windows такой проблемы нет. Использую для голосовой связи, когда по каким-то причинам неудобно использовать GSM.
А переписка через Whatsapp. Наличие его только на телефоне скорее плюс, с точки зрения конфиденциальности.

  • Андрей Кузнецов : А переписка через Whatsapp. Наличие его только на телефоне скорее плюс, с точки зрения конфиденциальности.

    Андрей, поясните, в чем тут плюс

Павловский Роман

1. Пользуюсь чаще всего: Skype и Hangouts — по работе на ПК, по остальной переписке «ВКонтакте» с любого устройства, так как клиенты по работе обычно сидят на Скайпе, а друзья и знакомые в Соц.Сетях.

2. Хотел бы пользоваться в идеале: Jabber — для переписки и звонков с любых устройств. Как по мне, клиент можно установить на любое устройство и переписываться, где бы не находился пользователь, даже на слабом Интернет-соединении + к этому можно развернуть свой jabber-сервер и хранить всю переписку на сервере, чтобы потом можно было быстро найти нужную переписку, если клиент не умеет хранить историю, а плагины для звонков через jabber можно будет найти (например, через тот же SIP Asterisk 1.8+)

Андрей Баятаков

Чаще всего пользуюсь WhatsApp (в основном по работе), для звонков (аудио/видео/международные звонки) Skype. Хотя десктопный Skype ужасно бесит (у меня трансформер и дома я им пользуюсь в основном как планшетом)… Viber — не прижился. Чтобы звонить через WhatsApp нужно иметь просто железные нервы. Скажешь что-нибудь собеседнику и ждешь минуту-две когда он тебя услышит (подключение 50Mbit)…
Была бы возможность перешел бы совсем на Skype. На Windows 10 Mobile после недавнего обновления сообщения из Skype приходят прямо во встроенное приложение Сообщения (как СМС), что очень удобно.

Maxim

1. Скрепя сердце пользуюсь ICQ (для заказчиков-ретроградов) и Slack (для более современных).
2. Хотел бы пользоваться Jabber - по тем же причинам, что у Романа Павловского выше.

Владимир Кирюшин

Здравствуйте Вадим!
Прочитал перед этой статьёй вашу статью про то, как прочитать отчёт проверки всего системного диска командой chkdsk . Отличная статья! Благодаря ей сегодня после поверки командой chkdsk системного диска я получил текстовый файл отчёта. А эта статья тоже много чего проясняет в программе PowerShell. Кое-что мне пенсионеру бывает непонятно, но я стараюсь не паниковать и читаю усердно до конца. Спасибо вам за учёбу,которую вы с нами проводите! Всего Вам хорошего!

Lecron

Какие браузеры и программы-даунлоадеры создают этот поток?

Какие еще есть варианты использования потоков самим пользователем? И в частности, пользователем скриптописателем? Так как, хоть и знал про них давно, ни разу не использовал. При реальной работе с компом про них просто не вспоминаешь, и из-за этого, возможно городишь костыли, вместо удобного инструмента, а без этой работы, по памяти, ничего придумать не получается.
Сообразил только об одном варианте. Комментарий к файлу, если нет возможности или желания писать длинный текст в имя файла. Но для этого нужна поддержка со стороны файл менеджера, который раньше, да и сейчас, пишет их в descript.ion или files.bbs.

Speed Guru

Очередная мусорная технология наподобие USN журнала. Много ли вам будет пользы от ZoneIdentifier или от вируса, прикреплённого к фалу или папке? Конечно нет. Более того — это захламление системы лишними, ни коим образом не нужными нормальному пользователю «подфайлами». Каждое лишнее чтение в каталоге MFT и прочие операции, сопутствующие обслуживанию и содержанию альтернативных потоков, это лишние затраченные циклы процессора, оперативной памяти, а самое главное лишняя нагрузка на жёсткий диск.
Вы можете сказать мне что эта технология очень нужна системе. Но это чушь — система отлично работала бы и без потоков. Но пользователя никто не спрашивает — впарили (как USN журнал) и возможности полностью отключить ведение этих потоков не дали. А ведь мне как пользователи они вовсе не нужны, думаю как и вам…
Всё что мы можем сделать это «streams -s -d %systemdrive%». Но и это не даёт возможности удалить потоки на системном разделе.

Alexiz Kadev

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

Жаль в голосовалке нельзя было выделить несколько мессенджеров: я пользуюсь несколькими, поскольку некоторые мои контакты предпочитают какие-то определённые. Так, я использую WhatsUp, ICQ(правда, конечно, не родной клиент),Skype, SkypeforBusiness (тихий ужас, а не клиент, впрочем когда он назывался Lync был ещё хуже) и Viber (вот тут спама больше чем в других как минимум раз в 5).
А в идеале использовать какой-то один, типа Миранды с плагинами, поскольку найти в случае необходимости, кто где когда что-то говорил/писал во всей этой куче просто нереально. Но увы, ряд производителей закрывают свои протоколы и оберегают их как Кащей свою иголку.

  • VSh

    Vadim Sterkin : Роман, я не включил Jabber в опрос. Решил, что им мало кто пользуется и перспектив нет.

    Зря
    Я, например, использую OpenFire (freeware xmpp) как офисный коммуникатор на нескольких доменах.

    Поэтому у меня основной это XMPP (Pidgin.exe, Spark.exe), но 99.8% из этих сообщений — внутридоменные.
    Skype — для внешних IM
    WhatsApp и Viber — для «случайных связей», последние n месяцев только СПАМ, думаю — не удалить ли?

  • Артем

    У меня все почему-то в вайбере. И качество связи вполне устраивает. А так телеграмм бы. Да пусто там.

    hazet

    1. Skype (на ПК) и Viber (на Мобиле). Причины в основном как и у большинства — количество имеющихся контактов и естественно нежелание этих самых контактов, пересесть на другой мессенджер.
    2.uTox. Миниатюрный, ничего лишнего, клиент для Win, Linux, Mac и Android. Позиционируется как защищенный.
    P.S. ЩаЗ займусь перетягиванием своих контактов на него поплотней:-)

    Евгений Карелов

    Cпасибо Вам за Вашу работу!

    Касательно опроса, на ПК для переписки использую QIP 2012, к которому подключены контакты ICQ, ВКонтакте и другие. Лично мне удобно, использовать для общения по нескольким протоколам одну программу. Да и возможность просматривать ленты соцсетей из одного места очень радует. В идеале, не хватает только поддержки Skype, который я использую для голосовой связи, но она явно не появится.
    Хотя эта программа и выглядит «заброшенной», ибо обновлений уже давно не было, возложенные функции выполняет прекрасно.

    strafer

    Интересная мешанина из темы поста про потоки данных и опроса по IM.

    По опросу: Jabber/Jabber, который вы таки зря не включили в список, хотя там есть вотсап, основанный на XMPP, и даже идущая к успеху асечька.

    Jabber в общем-то решает все указанные проблемы ввиду открытости протокола, наличия клиентов под множество платформ и наличия серверов, которые можно поднимать самостоятельно. Но кактусы жевать традиционнее, да.

    • В списке клиенты, а не протоколы.
      ICQ… ну, я не стал там смайлики ставить, ибо должно быть и так понятно.
      Jabber точно не решает одну проблему — там никого нет.

      • strafer

        Vadim Sterkin : В списке клиенты, а не протоколы.

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

        Vadim Sterkin : ICQ… ну, я не стал там смайлики ставить, ибо должно быть и так понятно.

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

        Vadim Sterkin : Jabber точно не решает одну проблему - там никого нет.

        Тем не менее для Telegram вы же сами написали

        выглядит здорово, но там пусто (что поправимо)

        Jabber имел все шансы стать тем же, чем сегодня является экосистема e-mail (полная открытость протокола, возможность поднимать свои сервера кому угодно и обеспечивать взаимодействие между серверами и т.д.), но корпорациям это не нужно, что отлично видно на примере отхода от него гугла или проприентизирования вотсапа.

        • Для Telegram — поправимо, для Jabber — очень маловероятно. Поэтому первый есть в списке, а второго — нет.

          • strafer

            Конечно, Telegram - стильно, модно, молодёжно, а Jabber никто прикольный вроде Паши Дурова не двигает. Какие уж тут перспективы.

            Гм… да вылезите вы уже из своего танка теорий заговора «весь мир против свободного ПО». Все намного проще

            Если непонятно, так выглядит для человека первый опыт взаимодействия с официально рекомендуемым клиентом Jabber на самой распространенной мобильной платформе.

            strafer

          • Немного не понял, где в моём комментарии про заговор.

            Да везде:) Вы пытаетесь списать неудачи jabber на немодность и немолодежность, в то время как его клиенты с первого экрана не приспособлены для современной реальности.

            А что я должен увидеть на скриншоте?

            Предложение ввести номер телефона ~~~O~

          • strafer

            strafer : Вы пытаетесь списать неудачи jabber на немодность и немолодежность

            Ну так если оно так.

            strafer : в то время как его клиенты с первого экрана не приспособлены для современной реальности.

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

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

            Да, не понимаете, даже после объяснений с картинками… Это не мода, это единственный способ максимально упростить регистрацию с мобильных устройств, составляющих основу аудитории современных мессенджеров и единственный источник для ее роста.

            strafer

            На скриншоте запрос на имя, пароль и опциональный ник. Куда сильнее упрощать-то? Или кроме учащихся коррекционных школ уже не осталось больше резервов для роста аудитории, и надо чтоб была одна кнопка «сделать за*сь»?
            Зачем тут вообще номер телефона и что мессенджер должен с номером телефона делать?

  • DIR /B C:\WINDOWS\System32\*.SCR

    DIR /B C:\WINDOWS\System32\*.* |FIND /i ".SCR"

    Опишите подробно назначение параметров каждой команды (помните, что для каждой команды можно вызвать справку ключом /?). Обратите внимание на тот факт, что одинаковые ключи могут иметь различное действие для разных команд.

    4.1.8. Файловые потоки NTFS*

    Файловая система NTFS поддерживает файловые потоки – альтернативные потоки данных. Фактически файловые потоки представляют собой объединение нескольких файлов в одну группу с одним общим именем файла (у каждого потока своё дополнительное имя). В группе существует основной поток данных, с которым большинство программ работают как с файлом, и дополнительные именованные потоки, не отображающиеся обычными средствами. При файловых операциях копирования, переноса, удаления и т.п., в NTFS операция производится над всей группой. При использовании некоторых архиваторов и копировании файлов, содержащих альтернативные потоки, на раздел FAT, эти потоки могут быть утеряны. Технически альтернативные потоки применяются для дополнения файла информацией без изменения содержания основного потока и без создания дополнительных файлов, которые могут быть утеряны.

    Альтернативные потоки используются антивирусами для сохранения информации о файле («отпечатка», контрольной суммы) для детектирования изменения файла во времени. Клиенты системы обмена файлами Direct Connect (DC++) могут сохранять результаты хеширования (вычисление контрольных сумм) для больших файлов, которые используются в случае перемещения файла при повторном хешировании, что существенно ускоряет обновление списка.

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

    Просмотреть информацию о потоках можно командой STREAMS 25 , программой NTFS Stream Explorer26 , с помощью модулей расширения файловых менеджеров27 , в Windows 7 командаdir /r выводит список всех потоков для указанных объектов (с командой также dir можно использовать дополнительные ключи).

    При сохранении файлов из интернета по умолчанию файлу в NTFS добавляется поток Zone.Identifier 28 , который имеет формат ini-файла, и обычно содержит текст:

    Параметр ZoneId с числом означает зону, откуда прибыл файл на компьютер, номер зоны берётся из настроек зон безопасности (Панель управления /Свойства обозревателя (Сеть и интернет/ Свойства брау-

    зера )/ вкладкаБезопасность ). Допустимы следующие значения29 : 0 – локальный компьютер

    1 – интранет (локальная сеть, домен)

    2 – доверенный источник

    3 – интернет

    4 – недоверенный источник

    При значении 3 система выдаст предупреждение «Не удаётся прове-

    рить издателя. Вы действительно хотите запустить эту программу?»,

    внизу сообщения установлен флажок «Всегда спрашивать при открытии этого файла », снятие которого удаляет потокZone.Identifier . ЕслиZoneId содержит значение 4, то появится предупреждение «Эти файлы нельзя открыть. Параметры безопасности Интернета не позволили открыть

    25 Streams (http://technet.microsoft.com/ru-ru/sysinternals/bb897440)

    26 NTFS Stream Explorer, программа для работы с потоками NTFS (http://hex.pp.ua/ntfs-stream-explorer.php )

    27 NTFS File Information

    (http://forum.farmanager.com/viewtopic.php?t=2050)

    28 Отключить создание блокирующего потока для файлов можно в редакторе локальной групповой политики (gpedit.msc): Конфигурация пользо-

    вателя/ Административные шаблоны/ Компоненты Windows/ Диспетчер вложений/ Удаление сведений о зоне происхождения вложений.

    29 Поток Zone.Identifier (http://hex.pp.ua/Zone.Identifier.php)

    один или несколько файлов » и открытие файлов блокируется. При открытии в проводнике окнаСвойства для файла, полученного из интернета, внизу вкладкиОбщие появляется кнопкаРазблокировать и

    надпись « Осторожно: этот файл получен с другого компьютера и, возможно, был заблокирован с целью защиты компьютера», нажатие кнопки Разблокироватьудаляет поток Zone.Identifier.

    С помощью обозревателя интернет скачайте файл STREAMS.zip (можете скачать любой небольшой файл, указав его имя в команде далее), сохраните его в корневую папку диска F:, просмотрите содержимое потокаZone.Identifier командой:

    MORE < F:\Streams.zip:Zone.Identifier

    Откройте в проводнике окно Свойства (Alt+Enter или командаСвойства контекстного меню) для скачанного файла, на вкладке Общие нажмите кнопкуРазблокировать , в консоли повторите предыдущую команду.

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

    ECHO Main text > F:\M.TXT

    ECHO Hidden text > F:\M.TXT:Secret.TXT

    TYPE F:\M.TXT

    MORE < F:\M.TXT:Secret.TXT

    Альтернативный текстовый поток можно загрузить в блокнот:

    NOTEPAD F:\M.TXT:Secret.TXT

    Альтернативные потоки можно создавать также у папок и системных файлов30 .

    Потоки также используются для хранения расширенных атрибутов31 .

    30 Скрытое хранение данных в потоках файла $Repair в системном каталоге $RmMetadata (http://hex.pp.ua/RmMetadata.php )

    31 Расширенные атрибуты NTFS и FAT16

    (http://hex.pp.ua/extended-attributes.php) 53

    Подключение