Steganografie verlede lêers: versteek data direk in sektore

'n Kort voorwoord

Steganografie, as iemand nie onthou nie, versteek inligting in sommige houers. Byvoorbeeld, in prente (bespreek hier и hier). U kan ook data in dienstabelle van die lêerstelsel versteek (hieroor is geskryf hier), en selfs in TCP-protokol dienspakkette. Ongelukkig het al hierdie metodes een nadeel: om inligting onmerkbaar in 'n houer te "voeg", benodig jy slinkse algoritmes wat die eienaardighede van die interne struktuur van die houer in ag neem. En probleme ontstaan ​​met die houer se weerstand teen manipulasie: as jy byvoorbeeld die prentjie effens wysig, gaan verborge inligting verlore.

Is dit moontlik om op een of ander manier klaar te kom sonder slinkse algoritmes en subtiele manipulasies met data, en steeds die funksionaliteit van die houer en 'n aanvaarbare vlak van sekuriteit van verborge data te verseker? As ek vorentoe kyk, sal ek sê - ja, jy kan! Ek sal selfs 'n hulpprogram aanbied.

Bloedige besonderhede van die metode

Die basiese idee is so eenvoudig soos 'n hou op die voorkop: daar is areas op die skyf waarna die bedryfstelsel nooit skryf nie (of in seldsame gevalle skryf). Om die behoefte te vermy om na hierdie gebiede te soek met behulp van slinkse algoritmes, sal ons oortolligheid gebruik - dit wil sê, ons sal ons verborge inligting baie, baie keer oor alle sektore van die skyf dupliseer. Dan, bo en behalwe al hierdie prag, kan jy die nodige partisies skep, lêerstelsels formateer, lêers skryf en bedryfstelsels installeer - eweneens, 'n deel van die geheime data sal gestoor word en kan herwin word, en herhaalde duplisering sal ons help sit die oorspronklike geheel saam uit die stukke.

Die voordeel van hierdie metode is duidelik: ons is nie afhanklik van die lêerformaat, of selfs van die tipe lêerstelsel wat gebruik word nie.

Die nadele is ook, dink ek, duidelik:

  • Geheime data kan slegs verander word deur die hele skyf heeltemal te herskryf, gevolg deur die herskep van die inhoud wat vir die gebruiker sigbaar is. U kan egter nie sagteware gebruik wat die skyf vanaf 'n prent herskep nie: dit sal ook die vorige geheime data herskep.
  • Hoe groter die volume geheime data, hoe groter is die waarskynlikheid dat sommige inligting verlore gaan.
  • Die herwinning van data vanaf skyf kan lank neem. Van 'n paar minute tot 'n paar dae (moderne skywe is groot).

Kom ons gaan nou oor na besonderhede.

Dit is duidelik dat as jy bloot geheime data oor die hele skyf smeer, dit net vir die blote oog weggesteek sal word. As jy jou blik toerus met byvoorbeeld 'n skyfredigeerder, sal die data in al sy glorie verskyn. Daarom sal dit 'n goeie idee wees om die data te enkripteer sodat dit nie verskyn nie. Ons sal eenvoudig, maar smaakvol enkripteer: met behulp van die aes256-cbc-algoritme. Ons sal die gebruiker vir die enkripsiesleutel vra en hom met 'n goeie wagwoord laat opkom.

Die volgende vraag is hoe ons “goeie” data van slegte data kan onderskei. Hier sal 'n kontrolesom ons help, maar nie 'n eenvoudige een nie, maar SHA1. En wat? Dit is goed genoeg vir git, so dit sal ons ook pas. Besluit: ons voorsien elke gestoorde stukkie inligting van 'n kontrolesom, en as dit na dekripsie ooreenstem, beteken dit dat die dekripsie suksesvol was.

Jy sal ook die fragmentnommer en die totale lengte van die geheime data benodig. Die fragmentnommer is om tred te hou van watter stukke ons reeds ontsyfer het en watter oor is. Die totale lengte sal vir ons nuttig wees wanneer die laaste fragment verwerk word, om nie onnodige data (dit wil sê opvulling) te skryf nie. Wel, aangesien ons nog 'n kop het, sal ons die naam van die geheime lêer daar byvoeg. Dit sal nuttig wees na dekripsie, om nie te raai hoe om dit oop te maak nie.

Toets die metode in die praktyk

Om te kyk, kom ons neem die mees algemene medium - 'n flash drive. Ek het 'n ou een met 'n kapasiteit van 1 GB gekry, wat baie geskik is vir eksperimente. As jy, soos ek, met die idee vorendag gekom het om jou nie aan fisiese media te steur nie, maar om dit op 'n lêer te toets - 'n skyfbeeld, dan sal ek dadelik sê: dit sal nie werk nie. Wanneer so 'n "skyf" geformateer word, skep Linux die lêer weer, en alle ongebruikte sektore sal met nulle gevul word.

As 'n masjien met Linux moes ek ongelukkig 'n weerstasie gebruik op die Raspberry Pi 3 wat op die balkon lê. Daar is nie baie geheue daar nie, so ons sal nie groot lêers wegsteek nie. Ons beperk onsself tot 'n maksimum grootte van 10 megagrepe. Daar is ook geen sin om lêers wat te klein is weg te steek nie: die program skryf data na skyf in 4 KB-klusters. Daarom sal ons onsself hieronder beperk tot 'n 3 kb-lêer - dit pas in een so 'n groepie.

Ons sal die flash drive in fases bespot en na elke fase kyk of die verborge inligting leesbaar is:

  1. Vinnige formatering in FAT16-formaat met 'n groepgrootte van 16 KB. Dit is wat Windows 7 bied om te doen met 'n flash drive wat nie 'n lêerstelsel het nie.
  2. Vul die flash drive met alle soorte vullis met 50%.
  3. Vul die flash drive met alle soorte vullis met 100%.
  4. "Lang"-formatering in FAT16-formaat (oorskryf alles).

Die eerste twee toetse, soos verwag, het in 'n volledige oorwinning geëindig: die program kon 10 megagrepe geheime data suksesvol uit die flash drive onttrek. Maar nadat die flash drive vol lêers was, het 'n fout plaasgevind:

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

Soos u kan sien, is slegs 158 groepe suksesvol gedekripteer (632 kilogrepe rou data, wat 636424 10 grepe loonvrag gee). Dit is duidelik dat daar geen manier is om 1 megagrepe hier te kry nie, en tog is daar duidelik duplikate tussen hierdie groepe. Jy kan nie eers 3 megagreep op hierdie manier herstel nie. Maar ons kan waarborg dat ons 120 kilogrepe geheime data van 'n flash drive sal herstel selfs nadat dit geformateer en tot kapasiteit geskryf is. Eksperimente toon egter dat dit heel moontlik is om 'n lêer van XNUMX kilogrepe lank uit so 'n flash drive te onttrek.

Die laaste toets het ongelukkig getoon dat die hele flash drive oorskryf is:

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

Nie 'n enkele tros het oorleef nie... Hartseer, maar nie tragies nie! Kom ons probeer om 'n partisie op die flash drive te skep, en reeds daarin 'n lêerstelsel voordat ons formateer. Terloops, dit het van die fabriek af gekom met presies hierdie formatering, so ons doen niks verdag nie.
Daar word nogal verwag dat die beskikbare spasie op die flash drive effens afgeneem het.

Daar word ook redelik verwag dat 10 megagrepe nie op 'n heeltemal vol skyf versteek kon word nie. Maar nou het die aantal suksesvol ontsyferde groepe meer as verdubbel!

Total clusters read: 250752, decrypted: 405

Ongelukkig is dit onmoontlik om 'n megagreep uit stukke saam te stel, maar tweehonderd kilogrepe is maklik.

Wel, die nuus oor die laaste, 4de kontrole, hierdie keer is vreugdevol: die volledige formatering van so 'n flash drive het nie gelei tot die vernietiging van alle inligting nie! 120 kilogrepe geheime data pas perfek in ongebruikte ruimte.

Toetsopsommingstabel:

Steganografie verlede lêers: versteek data direk in sektore

'n Bietjie teoretisering: oor vrye ruimte en ongebruikte sektore

As jy al ooit jou hardeskyf in partisies verdeel het, het jy dalk opgemerk dat dit nie altyd moontlik is om al die vrye spasie op die skyf toe te ken nie. Die eerste afdeling begin altyd met een of ander inkeping (gewoonlik 1 megagreep, of 2048 sektore). Agter die laaste afdeling gebeur dit ook dat daar 'n klein "stert" van ongebruikte sektore bly. En soms is daar gapings tussen afdelings, hoewel selde.

Met ander woorde, daar is sektore op die skyf wat nie toeganklik is tydens normale werk met die skyf nie, maar data kan na hierdie sektore geskryf word! En dit beteken om dit ook te lees. Aangepas vir die feit dat daar ook 'n partisietabel en selflaaiprogramkode is, wat in die leë area aan die begin van die skyf geleë is.

Kom ons neem 'n rukkie 'n breek van die afdelings en kyk so te sê na die skyf uit 'n voëlvlug. Hier het ons 'n leë partisie op die skyf. Kom ons skep 'n lêerstelsel daarin. Kan ons sê dat sommige sektore op die skyf nie uitgevee is nie?

E-e-e - tromrol! Die antwoord sal byna altyd ja wees! Trouens, in die meeste gevalle kom die skep van 'n lêerstelsel daarop neer om slegs 'n paar blokke diensinligting na die skyf te skryf, en andersins verander die inhoud van die partisie nie.

En ook - suiwer empiries - kan ons aanvaar dat die lêerstelsel nie altyd al die spasie wat daaraan toegeken is, tot by die laaste sektor in beslag kan neem nie. Byvoorbeeld, 'n FAT16-lêerstelsel met 'n groepgrootte van 64 kilogrepe kan natuurlik nie heeltemal 'n partisie beset met 'n grootte nie 'n veelvoud van 64 kilogrepe nie. Aan die einde van so 'n afdeling sal daar 'n "stert" van verskeie sektore moet wees, ontoeganklik vir die stoor van gebruikersdata. Hierdie aanname kon egter nie eksperimenteel bevestig word nie.

Dus, om die beskikbare spasie vir die steganogram te maksimeer, moet u 'n lêerstelsel met 'n groter groepgrootte gebruik. Jy kan ook 'n partisie skep, selfs al is dit nie nodig nie (byvoorbeeld op 'n flash drive). Dit is nie nodig om leë afdelings te skep of ontoegekende gebiede te verlaat nie - dit sal die aandag van belangstellende burgers trek.

Nut vir eksperimente

Jy kan die bronkode van die hulpprogram raak hier

Om te bou, sal jy Qt weergawe 5.0 of hoër en OpenSSL nodig hê. As iets nie werk nie, moet jy dalk die steganodisk.pro-lêer wysig.

Jy kan die groepgrootte verander van 4 KB na, sê, 512 grepe (in secretfile.h). Terselfdertyd sal die koste van diensinligting toeneem: die kopskrif en kontrolesom beslaan 'n vaste 68 grepe.

U moet die hulpprogram natuurlik uitvoer met wortelgebruikersregte, en met omsigtigheid. Daar sal geen vrae gevra word voordat die gespesifiseerde lêer of toestel oorskryf word nie!

Geniet.

Bron: will.com

Voeg 'n opmerking