Alternative datastrømme (ADS)
Praktisk, men grundlæggende anvendelse af ADS i CTF- og pentestingmiljøer
Så hvad er alternative datastrømme (ADS)?
Det er en funktion, der blev tilføjet til New Technology File System, også kendt som NT File System (NTFS), for at øge sammenligneligheden med Macintosh Hierarchical File System (HFS), og det er noget, der gør det lettere at bruge dine filer på både Mac (Apple) og PC (Windows).
Hvordan fungerer det, og hvorfor skal jeg bekymre mig om det?
Når du gemmer noget i en fil, f.eks. en .txt-fil, gemmer du normalt indholdet af din fil (ascii-tekst) i en datastrøm, som Windows genkender som standardstrømmen, så næste gang du åbner din fil, vil du få adgang til den samme strøm for at se dine data.
Som eksempel
Hvis jeg opretter en .txt-fil ved hjælp af Notepad på mit Windows-system og gemmer den til en fil (secret.txt), så vil jeg, hver gang jeg åbner den, kunne se mine data.
Men hvad nu hvis der er flere data i filen, som du ikke er klar over?
Det er her alternative datastrømme kommer i spil.
Jeg vil bruge cmd.exe (Command Prompt) til at demonstrere eksemplerne for at gøre det lettere for folk at forstå CLI (Command Line Interface), men de samme resultater kan også opnås ved hjælp af Power Shell.
Så når jeg bruger kommandoprompt til at se indholdet af min mappe, kan jeg se min hemmelighed.txt og størrelsen af filen er 33 bytes.
dir
Det ligner en normal fil, men hvad hvis jeg tilføjer /r til min kommando ?
dir /r
Nu kan vi se en anden fil i den samme mappe med samme præfiks som vores oprindeligt oprettede hemmelighed.txt, men med et suffiks evil.txt, hvor $DATA fortæller os, at der er tale om en stream af typen $DATA.
Ved at tilføje /r til vores kommando kan vi se, at begge filer ligger i samme mappe, men vi kan kun se den hemmelige.txt på vores skrivebord, vi kan også se forskellen i filstørrelsen, mens vores secret.txt-fil stadig er 33 bytes, er vores secret.txt:evil.txt 74, hvilket er mere end 2 gange vores secret.txt.
Sammenligning af output af begge kommandoer.
# First Command
dir# Second Command
dir /r
I dette kan vi se oplysningerne ved begge kommandoer mere præcist vi er i stand til at se ændringerne i et mere klart perspektiv.
- Både output siger, at der kun er 2 filer i mappen og giver os den samme størrelse, det er fordi secret.txt og secret.txt:evil.txt er den samme fil ikke forskellige filer, men dataene er gemt i separate strømme.
- Den samlede plads, der bruges i mappen og tilgængelig på systemet, er stadig den samme.
Lad os se indholdet af begge sammen:
Mens vi ser dem begge kan vi se, at indholdet er forskelligt, vi kan også se forskellen på navnet på filerne, hvilket giver os en idé om, at vi nemt kan gemme oplysninger i en alternativ datastrøm til flere formål. Datastrømme følger en grundlæggende navngivningskonvention i NTFS-filsystemet, som er FileName:StreamName:StreamType, idet det fulde navn på secret.txt i NTFS-filsystemet ville være secret.txt::$DATA
En alternativ metode til at se begge uden at åbne dem i notepad ville være:
# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt