Alternate Data Streams (ADS)

Praktické, ale základní použití ADS v prostředí CTF a pentestingu

Tak co jsou to Alternate Data Streams (ADS) ?

Jedná se o funkci, která byla přidána do souborového systému New Technology File System, známého také jako NT File System (NTFS), aby se zvýšila srovnatelnost s hierarchickým souborovým systémem Macintosh (HFS), laicky řečeno je to něco, co usnadnilo používání souborů jak v počítači Mac (Apple), tak v počítači PC (Windows).

Jak to funguje a proč bych se o to měl zajímat?

Obvykle, když něco ukládáte do souboru, například souboru .txt, ukládáte obsah souboru (ascii text) do datového proudu, který systém Windows rozpozná jako výchozí proud, takže při příštím otevření souboru budete přistupovat ke stejnému proudu, abyste si data mohli zobrazit.

Příklad

Pokud vytvořím soubor .txt pomocí Poznámkového bloku v systému Windows a uložím jej do souboru (secret.txt), pak při každém jeho otevření uvidím svá data.

Secret.txt Poznámkový blok

Secret.txt Notepad

Ale co když je v souboru více dat, o kterých nevíte ?

Tady přichází na řadu alternativní datové toky.

Použiji cmd.exe (Příkazový řádek) pro demonstraci příkladů, abych lidem usnadnil pochopení CLI (Rozhraní příkazového řádku), ale stejných výsledků lze dosáhnout i pomocí Power Shell.

Takže když pomocí příkazového řádku zobrazím obsah svého adresáře, vidím své tajemství.txt a velikost souboru je 33 bajtů.

dir
příkazový řádek

příkazový řádek

To vypadá jako normální soubor, ale co když do svého příkazu přidám /r ?

dir /r
příkazový řádek dir /r

příkazový řádek dir /r

Nyní vidíme další soubor ve stejném adresáři se stejným prefixem jako náš původně vytvořený secret.txt, ale s příponou evil.txt, kdežto $DATA nám říká, že se jedná o proud typu $DATA.

Přidáním /r do našeho příkazu vidíme, že oba soubory jsou ve stejném adresáři, ale vidíme pouze secret.txt na naší ploše, můžeme také vidět rozdíl ve velikosti souborů, zatímco náš soubor secret.txt má stále 33 bajtů, náš secret.txt:evil.txt má 74, což je více než dvojnásobek našeho secret.txt.

Při porovnání výstupu obou příkazů.

# First Command
dir# Second Command
dir /r
Příkaz Prompt dir a dir /r

Příkaz Prompt dir a dir /r

Při tom vidíme informace podle obou příkazů přesněji jsme schopni vidět změny v jasnějším pohledu.

  • Oba výstupy říkají, že v adresáři jsou pouze 2 soubory a udávají nám stejnou velikost, je to proto, že secret.txt a secret.txt:evil.txt jsou stejný soubor, nikoliv různé soubory, ale data jsou uložena v samostatných proudech.
  • Celkové místo využité v adresáři a dostupné v systému je stále stejné.

Podívejme se na obsah obou společně:

Při prohlížení obou vidíme, že obsah je odlišný, vidíme také rozdíl v názvu souborů, což nám dává představu, že můžeme snadno ukládat informace do alternativního datového toku pro více účelů. Datové proudy se v souborovém systému NTFS řídí základní konvencí pojmenování, která je Název souboru:Název proudu:Typ proudu, přičemž celý název souboru secret.txt v souborovém systému NTFS by byl secret.txt::$DATA

Alternativní způsob, jak zobrazit oba soubory, aniž byste je museli otevírat v poznámkovém bloku, by byl následující:

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

.