Альтернативні потоки даних в NTFS.
Файлова система NTFS володіє безліччю цікавих можливостей, однією з яких є наявність альтернативних потоків даних (Alternate Data Stream, ADS). Суть їх у тому, що кожен файл в NTFS являє собою набір потоків, в яких зберігаються дані. За замовчуванням всі дані знаходяться в основному потоці, але при необхідності до файлу можна додавати додаткові, альтернативні потоки даних.
Примітка. Альтернативні потоки даних в NTFS з'явилися давним-давно, ще в Windows NT. Створені вони були для сумісності з файлової системою HFS, що використовується тоді на MacOS. HFS зберігала дані про файлі в спеціальному ресурсному потоці.
Файли в NTFS поділені на атрибути, одним з яких є $ DATA, або атрибут даних.Потоки ж є додатковими властивостями атрибута $ DATA. За замовчуванням існує один, основний потік $ DATA: "". Як бачите, він не має назви, тому зветься неіменованого. Також при бажанні можна створювати додаткові, іменовані потоки, напр. $ DATA: "Stream1". У кожного файлу в NTFS може кілька потоків даних, що містять різні, ніяк не пов'язані між собою дані.
Всі дані, що записуються в файл, за замовчуванням потрапляють в основний потік даних. Коли ми відкриваємо файл, то бачимо стандартний потік, альтернативні ж потоки приховані від користувача і не відображаються за допомогою звичайних засобів. Їх не можна побачити стандартними способами, хоча деякі програми вміють читати приховані в них дані.Також для роботи з потоками можна використовувати командний рядок.
Для прикладу відкриємо консоль і за допомогою команди echo створимо текстовий файл streams.txt і запишемо в нього текст:
echo This is main stream > streams.txt
А за допомогою такої команди запишемо текст в альтернативний потік stream1:
echo This is alternate stream> streams.txt: stream1
Якщо тепер відкрити файл streams.txt в будь-якому текстовому редакторі, то ми побачимо тільки перший запис, текст «This is alternate stream» залишиться прихованим. Прочитати приховану в потоці stream1 інформацію можна командою:
more: stream2
І виведемо потік stream2 наступною командою:
more streams.txt: stream1.txt
І відкриємо альтернативний потік в блокноті командою:
notepad streams.txt: stream1.txt
Примітка. Стандартний Блокнот вимагає розширення txt в назві потоку, інакше він не зможе його відкрити. Більш просунуті редактори, наприклад той же Notepad ++, можуть показувати вміст альтернативного потоку незалежно від його назви.
Наявність альтернативних потоків у файлу ніяк не відображається в Провіднику та інших файлових менеджерах. Для того, щоб їх знайти, найпростіший спосіб - це скористатися командою dir/R (починаючи з Windows Vista), яка показує всі потоки даних, в тому числі й альтернативні.
Вам може здатися, що застосування альтернативних потоків обмежено текстовими даними. Це зовсім не так, і в альтернативних потоках можна зберігати абсолютно будь-яку інформацію. Для прикладу створимо файл picture.txt і додамо до нього потік pic1.jpg, в який помістимо однойменне зображення:
echo Picture> picture.txt
type pic1.jpg> picture.jpg: pic1.jpg
Таким чином, зовні ми маємо звичайний текстовий файл, а для відкриття зображення з альтернативного потоку в графічному редакторі Paint скористаємося командою:
mspaint picture.txt: pic1.jpg
Так само можна додавати до будь-яким типам файлів будь-які дані - до текстових файлів додавати зображення, до медіафайлів додавати текстову інформацію і т.п. Що цікаво, альтернативне вміст не збільшує видимий розмір файлу, наприклад додавши до 1кб текстового файлу HD-відео на 30Гб, провідник все одно покаже розмір файлу 1кб.
Ще в альтернативні потоки можна ховати виконувані файли. Наприклад візьмемо файл test.txt і додамо додаток Блокнот (notepad.exe) в альтернативний потік note.exe:
type notepad.exe> test.txt: note.exe
А для запуску прихованого блокнота скористаємося командою:
start. \ test.txt: note.exe
до речі цією можливістю користуються деякі шкідливі програми, додаючи виконуваний код в альтернативні потоки NTFS.
Утиліта Streams
Для роботи з альтернативними потоками існує кілька сторонніх утиліт, наприклад консольна утиліта Streams від Sysinternals.Вона може визначати наявність альтернативних потоків і видаляти їх. Утиліта не вимагає установки, досить розпакувати її і запустити. Для прикладу перевіримо наявність потоків в папці Streams командою:
Streams.exe -s C: \ Streams
І видалимо альтернативні потоки з файлу streams.txt:
Streams.exe -d C: \ Streams \ streams.txt
PowerShell
PowerShell також вміє працювати з альтернативними потоками - створювати, виявляти, виводити їх вміст і навіть видаляти. Для прикладу створимо текстовий файл:
New-Item -Type file -Path C: \ Streams \ stream.txt
Додамо запис в основний потік:
Set -Content -Path C: \ Streams \ stream.txt -Value "Main stream"
І в альтернативний потік з ім'ям Second:
Set-Content -Path C: \ Streams \ stream.txt -Value "Second stream" -Stream Second
Потім виведемо вміст основного
Get-Content -Path C: \ Streams \ stream.txt
і альтернативного потоків:
Get-Content -Path C: \ Streams \ stream.txt -Stream Second
Для того , щоб виявити наявність альтернативних потоків, можна скористатися командою:
Get-Item -Path C: \ Streams \ stream.txt -Stream *
А видалити зайві потоки можна командою:
Remove-Item -Path C: \ Streams \ streams.txt -Stream *
Використання
Альтернативні потоки використовується як самої Windows, так і деякими програмами. Наприклад, Internet Explorer ділить мережу на 4 зони безпеки і при завантаженні файлів додає до них мітки, які містять інформацію про зону, з якої вони були завантажені.
Мітки ці зберігаються в альтернативному потоці і вдають із себе число від 0 до 4:
• Інтернет (3)
• Місцева мережа (1)
• Надійні сайти (2)
• Небезпечні сайти (4)
• Локальний комп'ютер (0)
щоб переконається в цьому, перейдемо в папку завантажень, візьмемо файл, завантажений з інтернету і перевіримо його на наявність альтернативних потоків.Як бачите, в ньому присутня потік з ім'ям Zone.Identifier, в якому є рядок ZoneID = 3.
Це означає, що файл відноситься до недовірених зоні Інтернет, і при його відкритті треба бути обережним. Деякі програми, наприклад Word, зчитують ці дані при відкритті файлу і видають відповідне попередження.
Також інфраструктура класифікації файлів (File Classification Infrastracture, FCI) заснована на використанні альтернативних потоків. З сторонніх програм альтернативні потоки використовують деякі антивірусні програми, зокрема антивірус Касперського зберігає в них контрольну суму, отриману в результаті перевірки.
Втім, застосування альтернативних потоків цим не обмежується, ви самі можете придумати для них будь-яке застосування. Наприклад, з їх допомогою можна заховати від сторонніх очей особисту інформацію. Файли, що містять альтернативні потоки, можна вільно копіювати або переносити з диска на диск, все потоки будуть скопійовані разом з файлом.
І ще, при використанні альтернативних потоків треба пам'ятати, що вони жорстко прив'язані до файлової системи NTFS. Для того, щоб використовувати їх, файли повинні розташовуватися на дисках з NTFS, відповідно працювати з ними можна тільки з під Windows. Якщо ж перемістити файл на будь-яку іншу файлову систему, то все потоки крім основного будуть втрачені.Також альтернативні потоки обрізаються при передачі файлів по FTP або при пересиланні в якості поштового вкладення.
.