Alternate Data Streams (ADS)

Praktyczne, ale podstawowe zastosowanie ADS w środowiskach CTF i Pentesting

Więc czym są Alternate Data Streams (ADS) ?

Jest to funkcja, która została dodana do systemu plików New Technology File System znanego również jako NT File System (NTFS) w celu zwiększenia porównywalności z Hierarchicznym Systemem Plików (HFS) komputerów Macintosh, w terminologii laika jest to coś, co ułatwiło korzystanie z plików na komputerach Mac (Apple) i PC (Windows).

Jak to działa i dlaczego powinienem się tym zainteresować ?

Zwykle, gdy zapisujesz coś do pliku, na przykład plik .txt, przechowujesz zawartość pliku (tekst ascii) w strumieniu danych, który Windows rozpoznaje jako strumień domyślny, więc następnym razem, gdy otworzysz plik, będziesz miał dostęp do tego samego strumienia, aby wyświetlić swoje dane.

Jako przykład

Jeśli utworzę plik .txt za pomocą Notatnika w systemie Windows i zapiszę go w pliku (secret.txt) to za każdym razem gdy go otworzę zobaczę swoje dane.

Secret.txt Notatnik

Secret.txt Notatnik

Ale co, jeśli w pliku jest więcej danych, których nie jesteś świadomy ?

Tutaj do gry wchodzą alternatywne strumienie danych.

Będę używał cmd.exe (Command Prompt) do zademonstrowania przykładów, aby ułatwić ludziom zrozumienie CLI (Command Line Interface), ale te same wyniki można osiągnąć również przy użyciu Power Shell.

Więc kiedy używam command prompt do przeglądania zawartości mojego katalogu widzę mój secret.txt, a rozmiar pliku to 33 bajty.

dir
command prompt

command prompt

To wygląda jak normalny plik, ale co jeśli dodam /r do mojego polecenia ?

dir /r
Command prompt dir /r

Command prompt dir /r

Teraz widzimy inny plik w tym samym katalogu z tym samym prefiksem co nasz pierwotnie utworzony secret.txt, ale z przyrostkiem evil.txt, gdzie jako $DATA mówi nam, że jest to strumień typu $DATA.

Dodając /r do naszego polecenia możemy zobaczyć, że oba pliki są w tym samym katalogu, ale możemy zobaczyć tylko secret.txt na naszym Pulpicie, możemy również zobaczyć różnicę w wielkości pliku, podczas gdy nasz plik secret.txt jest nadal 33 bajtów nasz secret.txt:evil.txt jest 74, który jest więcej niż 2 razy nasz secret.txt.

Porównując wyjście z obu poleceń.

# First Command
dir# Second Command
dir /r
Command Prompt dir i dir /r

Command Prompt dir i dir /r

W tym możemy zobaczyć informacje przez obie komendy dokładniej jesteśmy w stanie zobaczyć zmiany w bardziej przejrzystej perspektywie.

  • Oba wyjścia mówią, że istnieją tylko 2 pliki w katalogu i dać nam ten sam rozmiar, to dlatego, że secret.txt i secret.txt:evil.txt są tego samego pliku nie różne pliki, ale dane są przechowywane w oddzielnych strumieniach.
  • Całkowita przestrzeń używana w katalogu i dostępne w systemie są nadal takie same.

Zobaczmy zawartość obu plików razem:

Przeglądając oba możemy zobaczyć, że zawartość jest różna, możemy również zobaczyć różnicę w nazwie plików, co daje nam do zrozumienia, że możemy łatwo przechowywać informacje w alternatywnym strumieniu danych dla wielu celów. Strumienie danych podążają za podstawową konwencją nazewnictwa w systemie plików NTFS, która jest FileName:StreamName:StreamType, mówiąc, że pełna nazwa secret.txt w systemie plików NTFS byłaby secret.txt::$DATA

Alternatywną metodą wyświetlenia obu bez otwierania ich w notatniku byłoby.

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt

.