ntfs-alternate-data-streams-01.png


Для начала немного теории

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

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

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

  • $10 – $STANDART_INFORMATION
  • $30 – $FILE_NAME
  • $80 – $DATA
Вообще их довольно таки много, но важно понимать, что каждая запись MFT представляет собой набор этих атрибутов.

$10 – $STANDART_INFORMATION – стандартная информация. В этом атрибуте указываются временные метки файла и атрибуты DOS.

Атрибут $80 – $DATA - содержимое файла.

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

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

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


Практика
Давайте попробуем использовать альтернативные потоки на практике.

Прячем текст
Создадим текстовый документ, к которому и будем прикреплять альтернативные потоки. Он будет содержать слово "Planet".



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

Далее спрячем текст "secret" в альтернативный поток secret.txt
echo наш_секретный_текст>файл_в_котором_прячем:название
Например: echo secret>test.txt:secret.txt



Итак, у нас есть файл test.txt. Если его открыть обычным методом (двойным кликом), то мы увидим слово "Planet". Чтобы посмотреть наше скрытое содержимое нужно прописать:
more < test.txt:secret.txt



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

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


Прячем архив с файлами
Допустим у Вас есть архив с файлами, который также вы хотите спрятать в текстовом документе. Спрячем его в том же test.txt

Для начала поместите архив в ту же папку, где хранится test.txt, затем пропишите:
type имя_архива > test.txt:название_потока
Например, я прячу архив file.rar, тогда команда будет выглядеть
type file.rar > test.txt:myfile


Вместо myfile можете написать любое название
Можете проверить и убедиться, что размер test.txt не изменился. Это очень хорошо, так как не выдает наше потаенное место.

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

Чтобы открыть наш архив и посмотреть содержимое, поместите исполняемый файл программы WinRAR.exe туда же, где хранится и test.txt (либо наоборот).




Если вы не сделаете этого, то получите такое сообщение:




Затем в командной строке пропишите:
Откроется Ваш секретный архив.

Прячем программу
Чаще всего подобным образом злоумышленники прячут вредоносное ПО

Для примера я спрячу калькулятор в том же текстовике. В той же командной строке пишем:
type путь_к_программе > test.txt:calc.exe
type C:\windows\system32\calc.exe > test.txt:calc.exe
Чтобы запустить данную программу, нужно прописать
Если получаете ошибку, тогда запускаете так
wmic process call create \\.\C:\Users\user\test.txt:calc.exe
Для чего еще используют скрытые потоки?
В вашей системе скорее всего используется огромное количество файлов со скрытыми потоками. Наиболее популярные варианты использования – это пометки файлов, скачанных с недоверенных источников, пометки файлов, проверенных антивирусами, иные метки, позволяющие каким-то способом “подписать” файл. Замечали, что иногда, при открытии файла, скачанного с Интернета, появляется окно с предупреждением, что файл получен из Интернета и относиться к нему нужно осторожно? Как думаете, каким способом помечен файл?