1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

Статья написана для журнала «Хакер» в 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 , и если она включена, то ты можешь заметить, что размер небольшого файла, помещенного в архив, не только не уменьшается, а даже увеличивается (за счет того, что данные в потоках тоже помещаются в архив). Это может вызвать подозрения. Программа для отслеживания обращений к файловой системе — FileMonitor от тех же Sysinternals — не делает различий между обращениями к файлам или потокам. Соответственно, внимательное изучение лога обращений к диску подозрительной программы (твоего кейлоггера) выдаст и название потока, куда пишется лог, и имя файла, к которому он прикреплен.

Читать еще:  Черный список mw. Руководство и прохождение по "Need for Speed: Most Wanted"

Вирусы

В сентябре 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.txt:Stream

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Как пользоваться программой RS Partition Recovery для восстановления файлов с дисков, флешек после форматирования

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

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

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

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

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

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

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

Думаю, что никто не станет спорить с тем, что файловая система NTFS сейчас прочно заняла первое место среди пользователей операционных систем семейства Windows, вытеснив такие файловые системы как FAT16 и FAT32 (которые в общем-то схожи), а файловая система exFAT, несмотря на значительно более проработанную концепцию, всё ещё не дотягивает по популярности до NTFS.

Откуда пошли альтернативные потоки данных?

Ключевым термином NTFS является MFT – Master File Table. Каждая запись MFT описывает конкретный файл и состоит из набора фиксированных атрибутов. Каждый атрибут содержит список полей, содержащих определённые значения.

Атрибуты бывают такими:

  • $10 – $STANDART_INFORMATION
  • $30 – $FILE_NAME
  • $80 – $DATA

Вообще их довольно таки много, но важно понимать, что каждая запись MFT представляет собой набор этих атрибутов.

Вот скриншот из программы DiskExplorer от Runtime’s (создатели GetDataBack). Я открыл произвольный файл (LOG.old) и слева отобразился перечень атрибутов. Здесь есть $10 – $STANDART_INFORMATION – стандартная информация. В этом атрибуте указываются временные метки файла и атрибуты DOS.

Атрибут $30 – $FILE_NAME – содержит имя файла. Если длина имени больше 8 символов (стандарт 8.3), то создаётся дополнительный атрибут $30 как для длинного имени, так и для короткого. Всё просто.

А вот другой скрин, на котором я отобразил атрибут $80 – $DATA, то есть содержимое файла:

Помните, я сказал, что если имя длинное, то у файла два атрибута $30, для каждого из имён? Это ключевой момент. Мы почти подошли к сути вопроса. Вообще у файла может быть несколько однотипных атрибутов, никто не запрещает. Так вот, а что будет, если у файла будет несколько атрибутов $DATA? То есть непосредственно содержимого. Да, такая ситуация возможна!…

Это и называется альтернативным потоком данных. Единственная особенность – должен быть атрибут $DATA по умолчанию (он задаётся без имени), остальные атрибуты $DATA должны быть поименованы, чтобы к ним можно было обратиться.

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

Из доступных способов – командная строка. Для обращения к дополнительным атрибутам $DATA используется суффикс : . Например, если мы хотим поместить в текстовый файлик 1.txt содержимое файла sekret.rar в альтернативный поток, то должны выполнить команду:

type sekret.rar > 1.txt:litl-admin.ru

Данная команда создаст новый атрибут $DATA с именем litl-admin.ru (как мило) и перенаправит в него содержимое архива sekret.rar. Проверим?

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

Ничего необычного не видно. А теперь найдём-ка его MFT-запись.

Видите второй атрибут $80 с именем litl-admin.ru? Это и есть наш “скрытый” альтернативный поток данных. На самом деле таких потоков у файла может быть огромное количество. Но не нужно думать, что эти возможности используются исключительно злоумышленниками в корыстных интересах.

Для чего можно использовать скрытые потоки?

По секрету скажу, что в вашей системе скорее всего используется огромное количество файлов со скрытыми потоками. Наиболее популярные варианты использования – это пометки файлов, скачанных с недоверенных источников, пометки файлов, проверенных антивирусами, иные метки, позволяющие каким-то способом “подписать” файл. Замечали, что иногда, при открытии файла, скачанного с Интернета, появляется окно с предупреждением, что файл получен из Интернета и относиться к нему нужно осторожно? Как думаете, каким способом помечен файл?

Как идентифицировать скрытые потоки?

Вместе с тем, существует способ массово просканировать каталог и вывести все альтернативные потоки данных в имеющихся файлах. Для этого существует бесплатная программка AlternativeStreamView от Nirsoft.

Работа с ней очень проста. Запускаете, выбираете каталог для сканирования и получаете результаты:

При помощи неё же можно извлечь поток в отдельный файл:

Расширение файла при этом, правда, будет утрачено, зато можно определить тип по содержимому:

Обратите внимание на то, что размер файлов совпадает – это и есть содержимое потока:

Что я имел ввиду, когда говорил о том, чтобы определить тип файла по содержимому? А вот что:

У многих файлов есть конкретная сигнатура. Для архивов WinRAR это “Rar!” Встретили – меняем расширение на “.rar” и получаем рабочий архив.

Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!

Также, подписывайтесь на наш канал в YouTube! Видео выкладываются весьма регулярно и будет здорово увидеть что-то одним из первых!

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector