Vaihtoehtoiset tietovirrat (ADS)

Vaihtoehtoisten tietovirtojen (ADS) käytännöllinen mutta perustavanlaatuinen soveltaminen CTF- ja Pentesting-ympäristöissä

Mitä ovat siis vaihtoehtoiset tietovirrat (ADS) ?

Se on ominaisuus, joka lisättiin uuden teknologian tiedostojärjestelmään, joka tunnetaan myös nimellä NT-tiedostojärjestelmä (NTFS), jotta se olisi vertailukelpoisempi Macintoshin hierarkkisen tiedostojärjestelmän (HFS) kanssa, maallikon termein ilmaistuna se on jotakin, joka helpotti tiedostojesi käyttöä sekä Macissa (Apple) että PC:ssä (Windows).

Miten se toimii ja miksi minun pitäisi välittää siitä?

Vakiintuneesti, kun tallennat jotain tiedostoon esimerkiksi .txt-tiedostoon, tallennat tiedostosi sisällön (ascii-teksti) tietovirtaan, jonka windows tunnistaa oletusvirraksi, joten seuraavan kerran kun avaat tiedostosi, käytät samaa tietovirtaa katsellaksesi tietojasi.

Esimerkkinä

Jos luon .txt-tiedoston Notepadilla Windows-järjestelmässäni ja tallennan sen tiedostoon (secret.txt), niin aina kun avaan sen, näen tietoni.

Secret.txt Notepad

Secret.txt Notepad

Mutta entä jos tiedostossa on muutakin tietoa, josta et ole tietoinen?

Tällöin vaihtoehtoiset tietovirrat astuvat kuvaan.

Käytän cmd.exe (Command Prompt) -ohjelmaa esimerkkien havainnollistamiseen, jotta ihmiset ymmärtäisivät helpommin CLI:n (Command Line Interface, komentorivikäyttöliittymä), mutta samoihin tuloksiin päästään myös Power Shellin avulla.

Kun käytän komentokehotetta tarkastellakseni hakemistoni sisältöä, näen salaisuuteni.txt ja tiedoston koko on 33 tavua.

dir
komentokehote

komentokehote

Tämä näyttää tavalliselta tiedostolta, mutta entä jos lisään komentoon /r ?

dir /r
Komentokehote dir /r

Komentokehote dir /r

Nyt näemme samassa hakemistossa olevan toisen tiedoston samalla etuliitteellä kuin alunperin luomaamme salaisuutta.txt, mutta päätteellä evil.txt, kun taas $DATA kertoo meille, että kyseessä on $DATA-tyyppinen stream.

Lisäämällä komentoon /r näemme, että molemmat tiedostot ovat samassa hakemistossa, mutta näemme vain salaisuuden.txt työpöydällämme, voimme myös nähdä eron tiedostojen koossa, kun salaisuus.txt-tiedostomme on edelleen 33 tavua, salaisuus.txt:evil.txt-tiedostomme on 74 tavua, mikä on yli kaksi kertaa enemmän kuin salaisuus.txt-tiedostomme.

Vertailemalla molempien komentojen tulosteita.

# First Command
dir# Second Command
dir /r
Komento Prompt dir ja dir /r

Komento Prompt dir ja dir /r

Tässä näemme molempien komentojen antamat tiedot tarkemmin pystymme näkemään muutokset selkeämmin.

  • Kummassakin tulosteessa sanotaan, että hakemistossa on vain 2 tiedostoa ja ne antavat meille saman koon, se johtuu siitä, että salaisuus.txt ja salaisuus.txt:evil.txt ovat sama tiedosto ei eri tiedostoja, mutta tiedot on tallennettu erillisiin virtoihin.
  • Kokonaisuudessaan hakemistossa käytetty ja järjestelmässä käytettävissä oleva tila on edelleen sama.

Katsellaanpa molempien sisältöä yhdessä:

Katsellessamme molempia huomaamme, että sisältö on erilainen, näemme myös eron tiedostojen nimissä, mistä saamme käsityksen siitä, että voimme helposti varastoida tietoa vaihtoehtoiselle tietovirralle useampaan eri tarkoitukseen. Tiedostovirrat noudattavat NTFS-tiedostojärjestelmässä perusnimityskonventiota, joka on FileName:StreamName:StreamType, kun on sanottu, että salaisuus.txt-tiedoston koko nimi NTFS-tiedostojärjestelmässä olisi salaisuus.txt::$DATA

Vaihtoehtoinen tapa tarkastella molempia avaamatta niitä notepadissa olisi.

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

.