Alternatywne strumienie danych NTFS
|Alternate Data Streams (ADS) – alternatywne strumienie danych NTFS
Każdy plik i katalog znajdujący się na partycji sformatowanej w systemie NTFS posiada kilka strumieni danych:
- jeden główny, bez nazwy (nienazwany, unnamed) zawierający faktyczną zawartość pliku. Bezimienny strumień jest obowiązkowym elementem i jest zawsze obecny. Jeżeli tworzymy alternatywny strumień i plik nie istnieje, system automatycznie tworzy zerowej długości nienazwany strumień.
- strumienie przechowujące informację o bezpieczeństwie pliku. Warto pamiętać, że deskryptor zabezpieczeń i atrybuty plików należą do pliku jako całość, a nie do nienazwanego strumienia.
- inne alternatywne strumienie
Główny, nienazwany strumień jest jedynym widocznym spod Explorera i linii komend. W momencie otwierania pliku przez domyślną aplikację, w w rzeczywistości otwierany jest ten nienazwany strumień. Aby określić alternatywny strumień, dodajemy dwukropek i nazwę strumienia do nazwy pliku.
Przykład:
nazwa_pliku.rozszerzenie (np.traxter.txt) określa nienazwany strumień pliku, a nazwa_pliku.rozszerzenie:nazwa_strumienia (np.traxter.txt:strona_www.txt) określa nazwę ADS-a.
Plik główny: plik widoczny
Plik główny ze strumieniem: plik widoczny:plik ukryty
Liczba strumieni może być dowolna. Charakterystyczną cechą jest to, że takie strumienie mają nazwę, są nie widoczne, wszystkie cechy / atrybuty są ukryte. Można w nich przechowywać dowolne typy danych, tak jak w normalnych plikach.
Podsumowując strumienie NTFS to ukryte pliki na dysku znajdujące się „pod” zwykłym, widocznym plikiem / folderem. Nie zdradzają żadnych śladów swojej działalności, nie powodują zmiany wielkości pliku, nawet jego sumy kontrolnej, ale jednocześnie zabierają miejsce na dysku – można mieć jeden mały plik na dysku, zawierający strumienie o wadze całego dysku!
Przykład:
Plik główny: instrukcja.doc (1MB) Strumień: instrukcja.doc:film-wakacje-FullHD.avi (699MB) Strumień: instrukcja.doc:windows7-install.iso (3500MB)
W przykładzie na dysku mamy zapisany plik instrukcja.doc, z dołączonymi dwoma strumieniami. Widoczny jest tylko plik główny, a strumienie są ukryte. Analiza dysku wskazuje, że wykorzystywane jest miejsce o wielkości 1MB, choć tak naprawdę zajęte jest blisko 4200MB >>> ~ 4,2GB. Fajna sprawa, czyż nie?
Zalety
Strumienie pozwalają przechowywać pliki na dysku, w ten sposób, że nikt nie będzie wiedział o ich istnieniu. Przy okazji można ominąć limit miejsca na dysku dla naszego konta ustalony przez administratora. Nawet gość może stworzyć taki strumień w każdym pliku, do którego ma dostęp. W strumieniu możemy przechowywać tyle danych, ile się zmieści na dysku :). Jednak administrator dysponując pełnymi uprawnieniami może nam usunąć plik wraz ze strumieniem, ale skąd będzie wiedzieć, że tam jest jakiś strumień?
Zagrożenia
Jednak strumienie stanowią również zagrożenie dla systemu – w razie przedostania się do systemu szkodnika może on przechowywać lub dołączać szkodliwe elementy do normalnych plików, działając jednocześnie w sposób niezauważalny (np. rootkity).
Przykłady strumieni
Nie wszystkie strumienie są szkodliwe. Niektóre są także automatycznie generowane przez sam system np. strumienie Zone.Identifier
C:Downloadssetup.zip:Zone.Identifier
strumienie tego typu wskazują przynależność do jednej z 5 stref zabezpieczeń: 0 – Mój komputer; 1 – Lokalny Intranet; 2 – Zaufane Witryny; 3 – Internet; 4 – Witryny z ograniczeniami. Strefy te wyświetlane są w Internet Explorer w Opcjach internetowych, zakładka Zabezpieczenia, ale strefa Mój komputer jest domyślnie ukryta. Strumienie te generowane są w momencie zapisywanie plików pobranych z Internetu na dysk komputera przez Internet Explorer / Firefox od wersji 3. Pobierane pliki otrzymują przynależność do strefy Internet, czyli numer 3 oraz wpis w strumieniu:
[ZoneTransfer]
ZoneId=3
W momencie otwierania pliku system sprawdza Zone.Identifier i wyświetla komunikat Ostrzeżenie o zabezpieczeniach: otwieranie pliku (taki komunikat nie otrzymamy uruchamiając z linii komend):
Więcej o typach strumieni w artykule Strumienie NTFS
Przykład strumienia rootkita Pe386:
C:WINDOWSsystem32:lzx32.sys
Funkcjonowanie strumieni
Aby zobrazować działanie ukrytych strumieni tworzymy przykładowy:
w Wierszu poleceń wpisujemy jedno z poleceń, w zależności gdzie tworzymy – na partycji systemowej, lub innym dysku
echo 12345 > plik.txt:cyfry echo 12345 > x:plik.txt:cyfry
Zostanie utworzony plik.txt zawierający strumień „cyfry”. Aby odczytać dane możemy użyć polecenia:
more < plik.txt:cyfry more < x:plik.txt:cyfry
lub otworzyć w notatniku, ale musimy dodać rozszerzenie .txt
echo 12345 > plik.txt:cyfry.txt notepad plik.txt:cyfry.txt echo 12345 > x:plik.txt:cyfry.txt notepad x:plik.txt:cyfry.txt
Strumienie możemy również tworzyć w katalogach
mkdir katalog lub md katalog echo 12345 > katalog:plik.txt notepad katalog:plik.txt
Zostanie utworzony strumień w katalogu. To jest strumień a nie plik więc jak wejdziemy do tego katalogu to nic nie zobaczymy.
Kopiowanie plików do strumieni
W Wiersz polecenia wpisujemy polecenie:
type "ścieżka do kopiowanego pliku" > "ścieżka do tworzonego pliku:nazwa strumienia"
Podam przykład jak ukryć pliki mp3 w strumieniach:
type f:atb.mp3 > f:readme.txt:atb.mp3
W przykładzie plik muzyczny atb.mp3 został skopiowany do strumienia readme.txt:atb.mp3 w pliku readme.txt. Plik readme.txt zajmuje na dysku 0 bajtów, ale zawiera strumień o wadze kilku MB.
Teraz, aby odtworzyć taki plik wpisujemy polecenie:
"ścieżka do pliku odtwarzacza" "ścieżka do pliku:nazwa strumienia" np. "C:Program FilesAIMP2aimp2.exe" f:readme.txt:atb.mp3
W przykładzie plik został otwarty w odtwarzaczu AIMP.
Bazując na powyższej instrukcji możemy zamiast mp3 wykorzystać dowolne inne pliki, w tym nawet wykonywalne EXE, co jest wykorzystywane także przez szkodliwe aplikacje.
Kopiowanie danych tekstowych ze strumieni do normalnych plików
W przypadku plików tekstowych można użyć polecenia „more”:
kopiowanie strumienia cyfry z pliku plik.txt do pliku drugi_plik.txt
more < plik.txt:cyfry > drugi_plik.txt more < x:plik.txt:cyfry > x:drugi_plik.txt
kopiowanie drugi_plik.txt do strumienia cyfry w plik.txt.
more < drugi_plik.txt > plik.txt:cyfry more < x:drugi_plik.txt > x:plik.txt:cyfry
Kopiowanie danych binarnych ze strumieni do normalnych plików
Plików nie można kopiować do strumienia lub na odwrót windowsowym poleceniem „copy”. Umożliwia to jednak uniksowy odpowiednik – polecenie „cp”, które można także zastosować w Windows.
Wykorzystanie polecenia „cp” w ADC
Polecenie „cp” umożliwia skopiowanie pliku binarnego do strumienia i na odwrót. Można w ten sposób ukrywać i przechowywać pliki na dyskach.
Aby skorzystać z tej możliwości potrzebny jest windowsowy port uniksowego polecenia „cp”.
Dla wygody można pobrać tylko potrzebne pliki z każdej paczki: polecenie_cp_na_Windows.zip
Zestaw CoreUtils
z pakietu narzędzi Linuxa na Windows GnuWin32 Packages
download: najnowsza wersja (zestaw coreutils)
Możemy pobrać:
- – pakiet do instalacji (można wyekstraktować w Uniwersal Extractor, po ekstrakcji pakietu coreutils-x.x.x.exe z katalogu {app}bin kopiujemy 3 pliki: cp.exe, libiconv2.dll, libintl3.dll)
- – binaria (ale wtedy dodatkowo pobrać zależne biblioteki dependencies zip file – coreutils-x.x.x-dep.zip); z archiwum binaria coreutils-x.x.x-bin.zip kopiujemy plik .bincp.exe, a z coreutils-x.x.x-dep.zip dwie wymienione biblioteki. Zestaw „grep” oferuje nowsze biblioteki – archiwum grep-x.x.x-dep.zip.
Pliki te kopiujemy do katalogu C:WINDOWS. Następnie uruchamiamy Wiersz polecenia i wpisujemy odpowiednie polecenia.
———————————————————————-
Zestaw UnxUtils
download: najnowsza wersja
Pobieramy archiwum, po wypakowaniu kopiujemy pliki:
.binsh.exe
.usrlocalwbincp.exe
Plik cp.exe kopiujemy do katalogu C:WINDOWS. Następnie uruchamiamy sh.exe (lokalizacja dowolna), który zawiera własny interpretator linii komend, do którego wpisujemy komendy. Czasami trzeba dwa razy kliknąć Enter aby polecenia się wykonały.
———————————————————————-
port cp (nieoficjalny)
download: https://gnthexfiles.republika.pl/cp.zip
po wypakowaniu pliki kopiujemy do katalogu C:WINDOWS. Następnie uruchamiamy systemowy Wiersz polecenia i wpisujemy odpowiednie polecenia.
Port ten został skompilowany w środowisku cygwin, dlatego też dołączona jest biblioteka cygwin1.dll. Środowisko to umożliwia uruchamianie linuksowych programów pod Windows. Zamienia ono odwołania do linuksowych funkcji systemowych na funkcje windowsowe.
Polecenie „cp” w praktyce
Wzór-przykład skopiowania pliku do strumienia:
cp film.avi plik.txt:film lub cp x:film.avi x:plik.txt:film
Wzór-przykład skopiowania strumienia do pliku:
cp plik.txt:film film.avi lub cp x:plik.txt:film x:film.avi
Przykład:
Plik „cp.zip” został skopiowany do strumienia „arch.zip” (nie jest konieczne nadawanie rozszerzenia, alternatywnie można by było nazwać strumień „arch”) w pliku „plik.txt” (jeśli plik „plik.txt” nie istnieje zostanie utworzony). Tak więc został utworzony pusty „plik.txt” zawierający strumień „arch.zip”, który jest niewidoczny.
W następnym poleceniu strumień „arch.zip” został skopiowany do pliku „arch2.zip”. Wynikowo sytuacja na dysku jest taka:
Przeglądanie i usuwanie strumieni
Możliwości przeglądania i usuwania strumieni opisane są we wpisie: Przeglądanie i usuwanie strumieni NTFS
jeszcze dir /R rozszerza listing o wykaz strumieni.
btw. poza ciekawostką coś tego faktycznie używa?