Steganograafia minevikufailid: andmete peitmine otse sektoritesse

Lühike eessõna

Steganograafia, kui keegi ei mäleta, peidab teavet mõnesse konteinerisse. Näiteks piltidel (arutletud siin и siin). Andmeid saate peita ka failisüsteemi teenindustabelites (sellest kirjutati siin) ja isegi TCP-protokolli teenusepakettides. Kahjuks on kõigil neil meetoditel üks puudus: teabe märkamatult konteinerisse "sisestamiseks" on vaja kavalaid algoritme, mis võtavad arvesse konteineri sisemise struktuuri iseärasusi. Ja probleemid tekivad konteineri vastupanuga manipuleerimisele: näiteks kui muudate pilti veidi, läheb peidetud teave kaotsi.

Kas on võimalik kuidagi ilma kavalate algoritmide ja andmetega peenete manipulatsioonideta hakkama saada ning tagada siiski konteineri funktsionaalsus ja peidetud andmete vastuvõetav turvatase? Tulevikku vaadates ütlen - jah, saate! Pakun isegi utiliiti.

Meetodi verised üksikasjad

Põhiidee on lihtne nagu löök vastu lauba: kettal on piirkondi, kuhu operatsioonisüsteem kunagi ei kirjuta (või kirjutab harvadel juhtudel). Et vältida nende alade otsimist kavalate algoritmide abil, kasutame liiasust - see tähendab, et dubleerime oma peidetud teavet palju-mitu kordi kõigis ketta sektorites. Seejärel saate kogu selle hiilguse peale luua vajalikud partitsioonid, vormindada failisüsteeme, kirjutada faile ja installida OS-e – osa salajastest andmetest salvestatakse ja neid saab taastada ning korduv dubleerimine aitab meid pane originaaltervik tükkidest kokku.

Selle meetodi eelis on ilmne: me ei sõltu failivormingust ega isegi kasutatava failisüsteemi tüübist.

Minu arvates on ka puudused ilmsed:

  • Salajasi andmeid saab muuta ainult terve ketta täieliku ümberkirjutamisega, millele järgneb kasutajale nähtava sisu uuesti loomine. Kuid te ei saa kasutada tarkvara, mis loob ketta pildist uuesti: see loob uuesti ka eelmised salaandmed.
  • Mida suurem on salaandmete maht, seda suurem on tõenäosus mõne teabe kaotamiseks.
  • Andmete otsimine kettalt võib võtta kaua aega. Mitmest minutist mitme päevani (kaasaegsed kettad on suured).

Liigume nüüd edasi üksikasjade juurde.

Selge on see, et kui salaandmeid lihtsalt üle ketta määrida, jääb see palja silma eest vaid peidetuks. Kui varustate oma pilgu näiteks kettaredaktoriga, ilmuvad andmed kogu oma hiilguses. Seetõttu oleks hea mõte krüpteerida andmed, et need ei ilmuks. Krüpteerime lihtsalt, kuid maitsekalt: kasutades algoritmi aes256-cbc. Küsime kasutajalt krüpteerimisvõtit ja laseme tal välja mõelda hea parooli.

Järgmine küsimus on, kuidas eristada "häid" andmeid halbadest andmetest. Siin aitab meid kontrollsumma, kuid mitte lihtne, vaid SHA1. Ja mida? See on giti jaoks piisavalt hea, nii et see sobib ka meile. Otsustatud: anname igale salvestatud teabele kontrollsumma ja kui see pärast dekrüpteerimist ühtib, tähendab see, et dekrüpteerimine õnnestus.

Teil on vaja ka fragmendi numbrit ja salaandmete kogupikkust. Fragmendi number on selleks, et jälgida, millised tükid oleme juba dešifreeritud ja millised on alles. Kogupikkus on meile kasulik viimase fragmendi töötlemisel, et mitte kirjutada tarbetuid andmeid (st polsterdust). Noh, kuna meil on endiselt päis, lisame sinna salafaili nime. See on kasulik pärast dekrüpteerimist, et mitte arvata, kuidas seda avada.

Meetodi testimine praktikas

Kontrollimiseks võtame kõige tavalisema kandja - mälupulga. Leidsin ühe vana 1 GB mahuga, mis on katsetamiseks üsna sobiv. Kui teil, nagu minul, tuli idee mitte vaeva näha füüsilise andmekandjaga, vaid testida seda failis - kettakujutises, siis ütlen kohe: see ei tööta. Sellise "ketta" vormindamisel loob Linux faili uuesti ja kõik kasutamata sektorid täidetakse nullidega.

Linuxiga masinana pidin kahjuks kasutama ilmajaama rõdul lebaval Raspberry Pi 3-l. Seal on vähe mälu, nii et suuri faile me ei peida. Piirdume maksimaalselt 10 megabaidiga. Samuti pole mõtet peita liiga väikeseid faile: utiliit kirjutab andmed kettale 4 KB klastritena. Seetõttu piirdume allpool 3 kb failiga - see sobib ühte sellisesse klastrisse.

Pilkame mälupulka järk-järgult, kontrollides pärast iga etappi, kas peidetud teave on loetav:

  1. Kiire vormindamine FAT16-vormingus klastri suurusega 16 KB. Seda pakub Windows 7 teha mälupulgaga, millel pole failisüsteemi.
  2. Mälupulga täitmine igasuguse prügiga 50% võrra.
  3. Mälupulga täitmine igasuguse prügiga 100% võrra.
  4. "Pikk" vormindamine FAT16-vormingus (kõik ülekirjutamine).

Esimesed kaks testi lõppesid ootuspäraselt täieliku võiduga: utiliit suutis mälupulgalt edukalt välja võtta 10 megabaiti salajasi andmeid. Kuid pärast seda, kui välkmälu täitus failidega, ilmnes tõrge:

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

Nagu näete, dekrüpteeriti edukalt ainult 158 ​​klastrit (632 kilobaiti toorandmeid, mis annab 636424 10 baiti kasulikku koormust). Selge on see, et 1 megabaiti siin kuidagi kätte ei saa ja ometi on nende klastrite hulgas selgelt duplikaate. Sel viisil ei saa te isegi 3 megabaiti taastada. Kuid võime garanteerida, et taastame mälupulgalt 120 kilobaiti salajasi andmeid isegi pärast selle vormindamist ja mahutavust. Eksperimendid näitavad aga, et selliselt mälupulgalt on täiesti võimalik XNUMX kilobaidist faili välja tõmmata.

Viimane test kahjuks näitas, et kogu mälupulk kirjutati üle:

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

Ühtegi klastrit pole säilinud... Kurb, aga mitte traagiline! Enne vormindamist proovime luua mälupulgal partitsiooni ja juba selles failisüsteemi. Muide, see tuli tehasest täpselt sellise vorminguga, nii et me midagi kahtlast ei tee.
On üsna ootuspärane, et mälupulgal saadaolev ruum on veidi vähenenud.

Üsna ootuspärane on ka see, et 10 megabaiti ei õnnestunud täiesti täis kettale ära peita. Nüüd on aga edukalt dekrüpteeritud klastrite arv enam kui kahekordistunud!

Total clusters read: 250752, decrypted: 405

Kahjuks on megabaiti tükkidest võimatu kokku panna, kuid kakssada kilobaiti on lihtne.

Noh, uudised viimase, neljanda kontrolli kohta, seekord on rõõmustavad: sellise mälupulga täielik vormindamine ei toonud kaasa kogu teabe hävitamist! 4 kilobaiti salajasi andmeid mahub ideaalselt kasutamata ruumi.

Testi kokkuvõtlik tabel:

Steganograafia minevikufailid: andmete peitmine otse sektoritesse

Natuke teoretiseerimist: vaba ruumi ja kasutamata sektorite kohta

Kui olete kunagi oma kõvaketta partitsioonideks jaganud, olete võib-olla märganud, et kogu ketta vaba ruumi pole alati võimalik eraldada. Esimene osa algab alati mõne taandega (tavaliselt 1 megabait ehk 2048 sektorit). Viimase lõigu taha juhtub ka seda, et kasutamata sektoritest jääb väike “saba”. Ja mõnikord on lõikude vahel lünki, kuigi harva.

Ehk siis kettal on sektoreid, millele tavapärase kettaga töötamise ajal ligi ei pääse, aga nendesse sektoritesse saab andmeid kirjutada! Ja see tähendab ka selle lugemist. Kohandatud selle järgi, et seal on ka partitsioonitabel ja alglaaduri kood, mis asuvad ketta alguses tühjal alal.

Teeme lõikudest korraks pausi ja vaatame ketast nii-öelda linnulennult. Siin on kettal tühi partitsioon. Loome selles failisüsteemi. Kas võime öelda, et mõned ketta sektorid jäävad kustutamata?

E-e-e - trummipõrin! Vastus on peaaegu alati jah! Tõepoolest, enamikul juhtudel taandub failisüsteemi loomine ainult mõne teenuseteabe ploki kettale kirjutamisele ja muidu partitsiooni sisu ei muutu.

Ja lisaks – puhtalt empiiriliselt – võime eeldada, et failisüsteem ei suuda alati hõivata kogu talle eraldatud ruumi kuni viimase sektorini. Näiteks FAT16-failisüsteem, mille klastri suurus on 64 kilobaiti, ei saa ilmselgelt täielikult hõivata partitsiooni, mille suurus ei ületa 64 kilobaiti. Sellise jaotise lõpus peab olema mitme sektori "saba", mis pole kasutajaandmete salvestamiseks juurdepääsetav. Seda oletust ei saanud aga eksperimentaalselt kinnitada.

Nii et steganogrammi jaoks saadaoleva ruumi maksimeerimiseks peate kasutama suurema klastri suurusega failisüsteemi. Saate luua ka partitsiooni, isegi kui see pole vajalik (näiteks mälupulgal). Pole vaja luua tühje sektsioone ega jätta eraldamata alasid - see tõmbab huvitatud kodanike tähelepanu.

Kasulikkus katseteks

Saate puudutada utiliidi lähtekoodi siin

Ehitamiseks vajate Qt versiooni 5.0 või uuemat ja OpenSSL-i. Kui midagi ei tööta, peate võib-olla redigeerima faili steganodisk.pro.

Saate muuta klastri suurust 4 KB-lt näiteks 512 baidile (failis secretfile.h). Samal ajal tõuseb teenuseteabe hind: päis ja kontrollsumma hõivavad fikseeritud 68 baiti.

Loomulikult peate utiliidi käivitama juurkasutaja õigustega ja ettevaatlikult. Enne määratud faili või seadme ülekirjutamist küsimusi ei esitata!

Nautige.

Allikas: www.habr.com

Lisa kommentaar