Ukrywanie danych w wielokrotnych strumieniach plików NTFS

   System plików NTFS posiada wiele ciekawych a mało znanych funkcji. Jedną z nich są alternate data streams, tłumaczone jako wielokrotne lub alternatywne strumienie danych. O co w nich chodzi? Otóż każdy plik na partycji NTFS, obojętnie czy jest zwykłym plikiem czy katalogiem, posiada główny (nienazwany, unnamed) strumień, w którym zapisane są informacje, które przechowuje. To to jest to, co widzimy jak otwieramy plik. Plik może posiadać jednak więcej strumieni i można w nich przechowywać dane tak jak w normalnych plikach. Nie różnią się bowiem one niczym od nienazwanego strumienia oprócz tego, że mają nazwy. Jak się dostać do strumienia? Jest to całkiem proste: tak samo jak do pliku, z tym, że po nazwie pliku wpisujemy dwukropek i nazwę strumienia, np.:
plik.txt:plik.avi. Widzimy tu strumień plik.avi w pliku plik.txt.
   Jak utworzyć strumień i coś do niego zapisać? Np. przekierowując wyjście polecenia echo:
echo abc > plik.txt:str
Jeśli plik.txt nie istniał, zostanie utworzony, a w nim strumień str zawierający sześć bajtów: literki abc, spację oraz znaki CR i LF oznaczające przejście do nowej linii. Jak teraz odczytać dane z pliku? Można użyć polecenia more:
more < plik.txt:str
Można też skorzystać z Notatnika:
notepad plik.txt:str
Ups, Notatnik mówi, że plik nie istnieje. Nie jest to jednak problem ze strumieniem a błąd w Notatniku, który wymaga rozszerzenia .txt. Dajmu więc mu je:
echo abc > plik.txt:str.txt
notepad plik.txt:str.txt
Teraz działa :) Możemy spróbować otworzyć nasz strumień w innym programie. Jeśli jest dobrze napisany to sobie poradzi. Problemy mogą być bo niewielu programistów wie o czymś takim jak dodatkowe strumienie danych. Np. nie można skopiować pliku do strumienia lub na odwrót poleceniem copy. W przypadku plików tekstowych można sobie poradzić poleceniem more:
more < plik.txt:str > drugi_plik.txt
skopiuje strumień str z pliku plik.txt do pliku drugi_plik.txt
more < drugi_plik.txt > plik.txt:str
skopiuje drugi_plik.txt do strumienia str w plik.txt.
Jedyny znany mi sposób na skopiowanie pliku binarnego do strumienia i na odwrót to wykorzystanie windowsowego portu uniksowego polecenia cp:
cp film.avi plik.txt:film
cp plik.txt:film film.avi
Wiemy już mniej więcej jak działają strumienie. Jak je można wykorzystać do ukrywania danych? Po prostu zapisując dane do strumienia nie zostawiamy praktycznie żadnych śladów. Nie można narzędziami dostępnymi w Windowsie stwierdzić, że w pliku są jakieś strumienie. Wielkość pliku pokazywana przez polecenie dir, Eksplorator Windows czy inne programy nie zmienia się. Zmniejsza się jedynie ilość wolnego miejsca na dysku co jest oczywiste. Poza tym strumienie można tworzyć w katalogach! Zobaczmy przykład:
mkdir katalog
echo abc > katalog:plik.txt
notepad katalog:plik.txt
Stworzyliśmy strumień w katalogu. To jest strumień a nie plik więc jak wejdziemy do tego katalogu to nic nie zobaczymy. Dla wielu osób takie coś będzie zadziwiające ale należy pamiętać, że dodatkowe strumienie są wspierane przez NTFS od ponad 10 lat. Po prostu mało osób o nich wie. Bardziej są znane przez użytkowników Maców. Pod Windows prawie nikt nie ma o nich pojęcia i dlatego są tak fajnym sposobem na ukrywanie danych, np. przed administratorem. Administrator, ponieważ ma pełne uprawnienia, może nam skasować plik wraz ze strumieniem ale skąd będzie wiedzieć, że tam jest jakiś strumień?
   No właśnie, skąd mamy wiedzieć, że w jakimś pliku albo katalogu są dodatkowe strumienie? Windows nam w żaden sposób tego nie powie, trzeba użyć zewnętrznych programów. Znam takie dwa: LADS oraz Streams. Są to proste konsolowe programy pokazujące istniejące strumienie i pozwalające je kasować.
   Obsługę wielokrotnych strumieni danych wprowadzono w Windows NT dla zgodności z Macami. Przez długi czas nie miały innego zastosowania w systemie. Począwszy do Windows 2000 w okienku właściwości pliku obecna jest zakładka Podsumowanie, w której możemy zapisać autora, tytuł itp. Informacje te są zapisywane w strumieniu SummaryInformation, przed literą S jest jeszcze znak niedrukowalny. W Windows XP SP2 dodano funkcję ostrzegajacą przed uruchamianiem plików ściągniętych z Internetu. IE przy ściąganiu pliku i OE przy zapisie załącznika dodają strumień Zone.Identifier. Explorer (w przeciwieństwie np. do cmd.exe) po wykryciu w tym strumieniu wpisu ZoneID=3 (lub więcej) ostrzega przed otwarciem pliku jako potencjalnie niebezpiecznego.