Прячем инфу в NTFS

Sportik1488

ТопМенеджер
220
122
7 Май 2018
Простейший способ спрятать какую-то информацию в NTFS — положить ее в альтернативный поток (Alternative Data Stream, далее ADS). Трюк стар как сам мир: ему уже более 15 лет.

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

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

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

Записываем текст в дополнительный поток — secrets.txt
echo "some secrets" > test.txt:secrets.txt
Читаем текст из потока secrets.txt
more < test.txt:secrets.txt
notepad.exe test.txt:secrets.txt
Записываем исполняемый файл в поток
type C:\windows\system32\calc.exe > test.txt:calc.exe
Запускаем файл из потока (нужно указывать полный путь)
start c:\test.txt:calc.exe
wmic process call create \\.\c:\test.txt:calc.exe
Так как не все программы поддерживают дополнительные потоки, может возникнуть проблема с их открытием. Но она решается за счет создания символических линков с помощью mklink.
mklink link_fi le.txt test.txt:secrets.txt
Раньше встроенных способов для просмотра потоков в винде не было — теперь же для этого можно воспользоваться стандартной командой для листинга директорий с аргументом /R:
Кстати, еще одна интересная фича для обычной жизни. Всем известно, что в *nix’ах (UFS) есть жесткие ссылки (hardlink) на файлы, то есть файл у нас фактически один, а ссылок на него — много. Причем раскиданы они могут быть по всей системе.


Так вот в NTFS такая возможность тоже есть, но почему-то она «забылась» и особо не используется. Единственное ограничение для NTFS — жесткие ссылки могут быть только на одном логическом диске.

В XP это делается так:
fsutil hardlink create новая_ссылка исходный_файл
Начиная с Vista, это делается утилитой mklink c аргументом ‘/h’:
mklink /h новая_ссылка исходный_файл