Alternatív adatfolyamok (ADS)

Az ADS gyakorlati, de alapvető alkalmazása CTF és Pentesting környezetben

Mi is az Alternatív adatfolyamok (ADS) ?

Ez egy olyan funkció, amelyet a New Technology File System, más néven NT File System (NTFS) rendszerhez adtak hozzá, hogy növeljék az összehasonlíthatóságot a Macintosh Hierarchical File System (HFS) rendszerrel, laikus nyelven ez valami olyasmi, ami megkönnyítette a fájlok használatát a Mac (Apple) és a PC (Windows) rendszeren egyaránt.

Hogyan működik, és miért érdekel ez engem?

Általában, amikor elmentesz valamit egy fájlba, például egy .txt fájlba, akkor a fájl tartalmát (ascii szöveg) egy adatfolyamban tárolod, amelyet a windows alapértelmezett adatfolyamként ismer fel, így a következő alkalommal, amikor megnyitod a fájlt, ugyanezt a folyamot fogod elérni az adatok megtekintéséhez.

Egy példa

Ha létrehozok egy .txt fájlt a Notepad segítségével a windows rendszeremen, és elmentem egy fájlba (secret.txt), akkor minden alkalommal, amikor megnyitom, látni fogom az adataimat.

Secret.txt Notepad

Secret.txt Notepad

De mi van, ha a fájlban több olyan adat van, amiről nem tudunk?

Ez az, ahol alternatív adatfolyamok jönnek szóba.

A cmd.exe (Command Prompt) programot használom a példák bemutatásához, hogy az emberek könnyebben megértsék a CLI-t (Command Line Interface), de ugyanezek az eredmények elérhetők a Power Shell segítségével is.

Szóval, amikor a parancssor segítségével megnézem a könyvtáram tartalmát, láthatom a titkomat.txt és a fájl mérete 33 bájt.

dir
command prompt

command prompt

Ez egy normál fájlnak tűnik, de mi van, ha a /r-t hozzáadom a parancsomhoz ?

dir /r
Command prompt dir /r

Command prompt dir /r

Most láthatunk egy másik fájlt ugyanabban a könyvtárban, ugyanolyan előtaggal, mint az eredetileg létrehozott titkunk.txt, de evil.txt utótaggal, ahol a $DATA azt mutatja, hogy ez egy $DATA típusú adatfolyam.

A parancsunkhoz hozzáadva a /r-t láthatjuk, hogy mindkét fájl ugyanabban a könyvtárban van, de mi csak a secret-et látjuk.txt-t látjuk az asztalon, láthatjuk a különbséget a fájlméretben is, míg a secret.txt fájlunk még mindig 33 bájtos, a secret.txt:evil.txt 74, ami több mint kétszerese a secret.txt-nek.

Összehasonlítva a két parancs kimenetét.

# First Command
dir# Second Command
dir /r
Command Prompt dir és dir /r

Command Prompt dir és dir /r

Mivel pontosabban látjuk az információkat mindkét parancs által pontosabban látjuk a változásokat.

  • Mindkét kimenet azt mondja, hogy csak 2 fájl van a könyvtárban és ugyanazt a méretet adja meg nekünk, ez azért van, mert a secret.txt és a secret.txt:evil.txt ugyanaz a fájl, nem különböző fájlok, de az adatok külön streamben vannak tárolva.
  • A könyvtárban használt és a rendszerben rendelkezésre álló összes hely továbbra is ugyanaz.

Nézzük meg a kettő tartalmát együtt:

A kettő megtekintése közben láthatjuk, hogy a tartalom különböző, láthatjuk a különbséget a fájlok nevében is, ami arra enged következtetni, hogy könnyen tárolhatunk információt egy másik adatfolyamban több célra is. Az adatfolyamok az NTFS fájlrendszerben egy alapvető elnevezési konvenciót követnek, amely a következő: FileName:StreamName:StreamType Miután elmondtuk, hogy a secret.txt teljes neve az NTFS fájlrendszerben secret lenne.txt::$DATA

Egy alternatív módszer mindkettő megtekintésére a jegyzettömb megnyitása nélkül a következő lenne.

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

.