Steganografia tiedostoittain: tietojen piilottaminen suoraan sektoreihin

Pieni esipuhe

Steganografia, jos joku ei muista, piilottaa tietoja joihinkin astioihin. Esimerkiksi kuvissa (käsitelty täällä и täällä). Voit myös piilottaa tiedot tiedostojärjestelmän palvelutaulukoissa (tästä kirjoitettiin täällä), ja jopa TCP-protokollan palvelupaketeissa. Valitettavasti kaikilla näillä menetelmillä on yksi haittapuoli: jotta voit huomaamattomasti "lisätä" tietoja säiliöön, tarvitaan ovelia algoritmeja, jotka ottavat huomioon säiliön sisäisen rakenteen erityispiirteet. Ja ongelmia syntyy säiliön manipulointikestävyydestä: esimerkiksi jos muokkaat kuvaa hieman, piilotetut tiedot katoavat.

Voidaanko jotenkin pärjätä ilman ovelia algoritmeja ja hienovaraisia ​​tietojen käsittelyä ja silti varmistaa kontin toimivuus ja hyväksyttävä suojaustaso piilotetuille tiedoille? Tulevaisuudessa sanon - kyllä, voit! Tarjoan sinulle jopa apuohjelman.

Menetelmän veriset yksityiskohdat

Perusidea on yksinkertainen kuin isku otsaan: levyllä on alueita, joille käyttöjärjestelmä ei koskaan kirjoita (tai kirjoittaa harvoissa tapauksissa). Välttääksemme tarpeen etsiä näitä alueita ovelilla algoritmeilla, käytämme redundanssia - toisin sanoen kopioimme piilotetut tietomme monta, monta kertaa levyn kaikilla sektoreilla. Tämän loiston lisäksi voit luoda tarvittavat osiot, muotoilla tiedostojärjestelmät, kirjoittaa tiedostoja ja asentaa käyttöjärjestelmiä - kaikesta huolimatta osa salaisista tiedoista tallennetaan ja voidaan hakea, ja toistuva kopiointi auttaa meitä koota alkuperäinen kokonaisuus paloista.

Tämän menetelmän etu on ilmeinen: emme ole riippuvaisia ​​tiedostomuodosta tai edes käytetyn tiedostojärjestelmän tyypistä.

Myös haitat ovat mielestäni ilmeisiä:

  • Salaisia ​​tietoja voidaan muuttaa vain kirjoittamalla koko levy kokonaan uudelleen ja luomalla sitten uudelleen käyttäjälle näkyvä sisältö. Et kuitenkaan voi käyttää ohjelmistoa, joka luo levyn uudelleen kuvasta: se myös luo uudelleen aiemmat salaiset tiedot.
  • Mitä suurempi määrä salaisia ​​tietoja on, sitä suurempi on todennäköisyys, että jotkin tiedot menetetään.
  • Tietojen hakeminen levyltä voi kestää kauan. Useista minuuteista useisiin päiviin (nykyaikaiset levyt ovat suuria).

Siirrytään nyt yksityiskohtiin.

On selvää, että jos vain levität salaisia ​​tietoja koko levylle, se vain piilotetaan paljaalta silmältä. Jos varustat katseesi esimerkiksi levyeditorilla, tiedot näkyvät kaikessa loistossaan. Siksi olisi hyvä idea salata tiedot, jotta ne eivät tule näkyviin. Salaamme yksinkertaisesti, mutta tyylikkäästi: käyttämällä aes256-cbc-algoritmia. Pyydämme käyttäjältä salausavaimen ja annamme hänen keksiä hyvän salasanan.

Seuraava kysymys on, kuinka voimme erottaa "hyvän" tiedon huonosta tiedosta. Tässä tarkistussumma auttaa meitä, mutta ei yksinkertainen, vaan SHA1. Ja mitä? Se on tarpeeksi hyvä gitille, joten se sopii myös meille. Päätetty: annamme jokaiselle tallennetulle tiedolle tarkistussumman, ja jos se täsmää salauksen purkamisen jälkeen, se tarkoittaa, että salauksen purku onnistui.

Tarvitset myös fragmenttinumeron ja salaisten tietojen kokonaispituuden. Fragmenttinumeron tarkoituksena on pitää kirjaa siitä, mitkä palaset olemme jo purkaneet ja mitkä ovat jäljellä. Kokonaispituus on hyödyllinen meille, kun käsittelemme viimeistä fragmenttia, jotta et kirjoita tarpeettomia tietoja (eli täyte). No, koska meillä on edelleen otsikko, lisäämme salaisen tiedoston nimen siihen. Se on hyödyllinen salauksen purkamisen jälkeen, jotta et arvaisi kuinka se avataan.

Menetelmän testaus käytännössä

Tarkistaaksesi otetaan yleisin tietoväline - flash-asema. Löysin vanhan 1 Gt:n kapasiteetilla, joka on melko sopiva kokeiluihin. Jos sinä, kuten minä, keksit ajatuksen olla välittämättä fyysisen median kanssa, vaan testata sitä tiedostossa - levykuvassa, sanon heti: se ei toimi. Kun alustetaan tällaista "levyä", Linux luo tiedoston uudelleen ja kaikki käyttämättömät sektorit täytetään nolilla.

Linux-koneena jouduin valitettavasti käyttämään sääasemaa parvekkeella makaavassa Raspberry Pi 3:ssa. Muistia ei ole paljoa, joten suuria tiedostoja emme piilota. Rajoitamme itsemme enintään 10 megatavuun. Liian pieniä tiedostoja ei myöskään kannata piilottaa: apuohjelma kirjoittaa tiedot levylle 4 kt:n klustereissa. Siksi rajoitamme alla 3 kt:n tiedostoon - se sopii yhteen tällaiseen klusteriin.

Pilkkaamme flash-asemaa vaiheittain ja tarkistamme jokaisen vaiheen jälkeen, ovatko piilotetut tiedot luettavissa:

  1. Nopea alustus FAT16-muodossa, klusterin koko 16 kt. Tätä Windows 7 tarjoaa flash-asemalle, jossa ei ole tiedostojärjestelmää.
  2. Flash-aseman täyttäminen kaikenlaisilla roskilla 50%.
  3. Flash-aseman täyttäminen kaikenlaisilla roskilla 100%.
  4. "Pitkä" muotoilu FAT16-muodossa (korvaa kaikki).

Kaksi ensimmäistä testiä päättyivät odotetusti täydelliseen voittoon: apuohjelma onnistui poimimaan 10 megatavua salaista tietoa flash-asemasta. Mutta kun flash-asema oli täynnä tiedostoja, tapahtui virhe:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Kuten näette, vain 158 klusterin salaus purettiin onnistuneesti (632 kilotavua raakadataa, mikä antaa 636424 10 tavua hyötykuormaa). On selvää, että täällä ei ole mahdollista saada 1 megatavua, ja silti näiden klustereiden joukossa on selvästi kaksoiskappaleita. Et voi edes palauttaa 3 megatavua tällä tavalla. Mutta voimme taata, että saamme takaisin 120 kilotavua salaista tietoa flash-asemalta, vaikka se on alustettu ja kirjoitettu kapasiteettiin. Kokeet osoittavat kuitenkin, että tällaisesta flash-asemasta on täysin mahdollista purkaa XNUMX kilotavua pitkä tiedosto.

Viimeinen testi valitettavasti osoitti, että koko flash-asema kirjoitettiin päälle:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

Yksikään klusteri ei ole säilynyt... Surullista, mutta ei traagista! Ennen alustamista yritetään luoda osio flash-asemaan ja jo siinä tiedostojärjestelmä. Muuten, se tuli tehtaalta juuri tällä muotoilulla, joten emme tee mitään epäilyttävää.
On odotettavissa, että flash-aseman käytettävissä oleva tila on hieman vähentynyt.

On myös odotettavissa, että 10 megatavua ei voitu piilottaa täysin täyteen levyyn. Mutta nyt onnistuneesti purettujen klustereiden määrä on yli kaksinkertaistunut!

Total clusters read: 250752, decrypted: 405

Valitettavasti on mahdotonta koota megatavua kappaleista, mutta kaksisataa kilotavua on helppoa.

No, uutiset viimeisestä, neljännestä tarkistuksesta, tällä kertaa iloisia: tällaisen flash-aseman täydellinen alustaminen ei johtanut kaikkien tietojen tuhoamiseen! 4 kilotavua salaista dataa mahtuu täydellisesti käyttämättömään tilaan.

Testin yhteenvetotaulukko:

Steganografia tiedostoittain: tietojen piilottaminen suoraan sektoreihin

Hieman teoretisointia: vapaasta tilasta ja käyttämättömistä sektoreista

Jos olet joskus jakanut kiintolevyn osioihin, olet ehkä huomannut, että kaikkea levyn vapaata tilaa ei aina ole mahdollista varata. Ensimmäinen osa alkaa aina sisennyksellä (yleensä 1 megatavu tai 2048 sektoria). Viimeisen osion takana tapahtuu myös niin, että jäljelle jää pieni "häntä" käyttämättömiä sektoreita. Ja joskus osien välillä on aukkoja, vaikkakin harvoin.

Toisin sanoen levyllä on sektoreita, joihin ei pääse käsiksi normaalin levytyöskentelyn aikana, mutta tietoja voidaan kirjoittaa näihin sektoreihin! Ja se tarkoittaa myös sen lukemista. Oikaistu sillä, että siellä on myös osiotaulukko ja käynnistyslatauskoodi, jotka sijaitsevat tyhjällä alueella levyn alussa.

Pidetään hetki jaksoista tauko ja katsotaan levyä niin sanotusti lintuperspektiivistä. Tässä meillä on tyhjä osio levyllä. Luodaan siihen tiedostojärjestelmä. Voimmeko sanoa, että jotkin levyn sektorit jäävät pyyhkimättä?

E-e-e - rumpupyörä! Vastaus on lähes aina kyllä! Todellakin, useimmissa tapauksissa tiedostojärjestelmän luominen merkitsee vain muutaman palveluinformaatiolohkon kirjoittamista levylle, eikä osion sisältö muuten muutu.

Ja myös - puhtaasti empiirisesti - voidaan olettaa, että tiedostojärjestelmä ei aina voi varata kaikkea sille varattua tilaa viimeiseen sektoriin asti. Esimerkiksi FAT16-tiedostojärjestelmä, jonka klusterin koko on 64 kilotavua, ei tietenkään voi täysin varata osiota, jonka koko ei ole 64 kilotavun kerrannainen. Tällaisen osion lopussa tulee olla useiden sektoreiden "häntä", joihin ei päästä käyttäjätietojen tallentamista varten. Tätä oletusta ei kuitenkaan voitu vahvistaa kokeellisesti.

Joten maksimoidaksesi steganogrammille käytettävissä olevan tilan, sinun on käytettävä tiedostojärjestelmää, jonka klusterikoko on suurempi. Voit myös luoda osion, vaikka se ei olisi välttämätöntä (esimerkiksi flash-asemalle). Ei tarvitse luoda tyhjiä osia tai jättää jakamattomia alueita - tämä herättää kiinnostuneiden kansalaisten huomion.

Apuohjelma kokeisiin

Voit koskettaa apuohjelman lähdekoodia täällä

Rakentaaksesi tarvitset Qt-version 5.0 tai uudemman ja OpenSSL:n. Jos jokin ei toimi, saatat joutua muokkaamaan steganodisk.pro-tiedostoa.

Voit muuttaa klusterin koon 4 kt:sta esimerkiksi 512 tavuun (salaisuustiedostossa.h). Samalla palveluinformaation hinta nousee: otsikko ja tarkistussumma vievät kiinteät 68 tavua.

Sinun on suoritettava apuohjelma tietysti pääkäyttäjän oikeuksilla ja varoen. Mitään kysymyksiä ei esitetä ennen määritetyn tiedoston tai laitteen korvaamista!

Enjoy.

Lähde: will.com

Lisää kommentti