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

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):

strumienie5.jpg

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

strumienie1.jpg

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

strumienie2.jpg

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

strumienie3.jpg

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.

strumienie-ads

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.

cpCoreUtils.jpg

———————————————————————-

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.

cpUnxUtils.jpg

———————————————————————-

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.

cpnooffical.jpg

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:

cpprzykład1.jpg

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:

cpprzykład2.jpg

Przeglądanie i usuwanie strumieni
Możliwości przeglądania i usuwania strumieni opisane są we wpisie: Przeglądanie i usuwanie strumieni NTFS



Tags:
2 komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *