Steganografy troch bestannen: gegevens ferbergje direkt yn sektoaren

In koart foarwurd

Steganografy, as immen it net ûnthâldt, ferberget ynformaasje yn guon konteners. Bygelyks yn ôfbyldings (besprutsen hjir и hjir). Jo kinne ek gegevens ferbergje yn tsjinsttabellen fan it bestânsysteem (dit waard skreaun oer hjir), en sels yn TCP-protokol tsjinstpakketten. Spitigernôch hawwe al dizze metoaden ien neidiel: om ûnmerkber "ynfoegje" ynformaasje yn in kontener, jo hawwe slûchslimme algoritmen nedich dy't rekken hâlde mei de eigenaardichheden fan 'e ynterne struktuer fan' e kontener. En problemen ûntsteane mei it ferset fan 'e kontener tsjin manipulaasje: bygelyks, as jo de foto in bytsje bewurkje, is ferburgen ynformaasje ferlern.

Is it mooglik om ien of oare manier te dwaan sûnder listige algoritmen en subtile manipulaasjes mei gegevens, en dochs soargje foar de funksjonaliteit fan 'e kontener en in akseptabel nivo fan feiligens fan ferburgen gegevens? Foarút sjen, sil ik sizze - ja, jo kinne! Ik sil jo sels in nut oanbiede.

Bloody details fan 'e metoade

It basisidee is sa ienfâldich as in klap op 'e foarholle: d'r binne gebieten op 'e skiif dêr't it bestjoeringssysteem noait nei skriuwt (of yn seldsume gefallen skriuwt). Om foar te kommen dat de needsaak is om te sykjen nei dizze gebieten mei listige algoritmen, sille wy redundânsje brûke - dat is, wy sille ús ferburgen ynformaasje in protte, in protte kearen duplisearje oer alle sektoaren fan 'e skiif. Dan, boppe op al dizze pracht, kinne jo de nedige partysjes oanmeitsje, triemsystemen formatearje, bestannen skriuwe en OS's ynstallearje - lykwols, in diel fan 'e geheime gegevens sil wurde bewarre en kinne wurde ophelle, en werhelle duplikaasje sil ús helpe set it orizjinele gehiel byinoar út de stikken.

It foardiel fan dizze metoade is fanselssprekkend: wy binne net ôfhinklik fan it bestânsformaat, of sels fan it type bestânsysteem dat brûkt wurdt.

De neidielen binne ek, tink ik, dúdlik:

  • Geheime gegevens kinne allinich feroare wurde troch de heule skiif folslein te herskriuwen, folge troch it opnij oanmeitsjen fan de ynhâld sichtber foar de brûker. Jo kinne lykwols gjin software brûke dy't de skiif opnij makket fan in ôfbylding: it sil ek de foarige geheime gegevens opnij oanmeitsje.
  • Hoe grutter it folume fan geheime gegevens, hoe grutter de kâns om wat ynformaasje te ferliezen.
  • It opheljen fan gegevens fan skiif kin lang duorje. Fan ferskate minuten oant ferskate dagen (moderne skiven binne grut).

No litte wy oergean nei de spesifiken.

It is dúdlik dat as jo gewoan geheime gegevens oer de skiif smearje, it sil allinich ferburgen wurde foar it bleate each. As jo ​​​​jo blik útrist mei bygelyks in skiifbewurker, sille de gegevens yn al har gloarje ferskine. Dêrom soe it in goed idee wêze om de gegevens te fersiferjen sadat se net ferskine. Wy sille ienfâldich, mar smaakvol fersiferje: mei it aes256-cbc-algoritme. Wy sille de brûker freegje om de fersiferingskaai en lit him mei in goed wachtwurd komme.

De folgjende fraach is hoe't wy "goede" gegevens kinne ûnderskiede fan minne gegevens. Hjir sil in kontrôlesum ús helpe, mar net in ienfâldige, mar SHA1. En wat? It is goed genôch foar git, dus it sil ús ek passe. Besletten: wy jouwe elk bewarre stikje ynformaasje in kontrôlesum, en as it nei ûntsifering oerienkomt, betsjut dit dat it ûntsiferjen suksesfol wie.

Jo sille ek it fragmintnûmer en de totale lingte fan 'e geheime gegevens nedich hawwe. Fragmintnûmer - om by te hâlden hokker stikken wy al ûntsifere hawwe en hokker oerbleaun binne. De totale lingte sil nuttich wêze foar ús by it ferwurkjen fan it lêste fragmint, om gjin ûnnedige gegevens te skriuwen (dat is, padding). No, om't wy noch in koptekst hawwe, sille wy dêr de namme fan it geheime bestân tafoegje. It sil nuttich wêze nei dekodearring, om net te rieden hoe't jo it iepenje.

Test de metoade yn 'e praktyk

Om te kontrolearjen, litte wy it meast foarkommende medium nimme - in flash drive. Ik fûn in âlde mei 1 GB kapasiteit, dat is hiel geskikt foar eksperiminten. As jo, lykas ik, op it idee kamen om net te bemuoien mei fysike media, mar te testen op in bestân - in skiifôfbylding, dan sil ik direkt sizze: it sil net wurkje. By it opmeitsjen fan sa'n "skiif" makket Linux it bestân opnij oan, en alle net brûkte sektoaren sille wurde fol mei nullen.

As masine mei Linux moast ik spitigernôch in waarstasjon brûke op 'e Raspberry Pi 3 lizzend op' e balkon D'r is net in soad ûnthâld, dus wy sille gjin grutte bestannen ferbergje. Wy beheine ússels ta in maksimale grutte fan 10 megabytes. D'r hat ek gjin punt om bestannen te ferbergjen dy't te lyts binne: it hulpprogramma skriuwt gegevens op skiif yn klusters fan 4 KB. Dêrom sille wy ús hjirûnder beheine ta in 3 kb-bestân - it past yn ien sa'n kluster.

Wy sille it flash-drive yn stadia bespotje, nei elke etappe kontrolearje oft de ferburgen ynformaasje lêsber is:

  1. Snelle opmaak yn FAT16-formaat mei in klustergrutte fan 16 KB. Dit is wat Windows 7 biedt te dwaan mei in flash-drive dat gjin bestânsysteem hat.
  2. It flash drive mei alle soarten jiskefet mei 50% ynfolje.
  3. It flash drive mei alle soarten jiskefet mei 100% ynfolje.
  4. "Lange" opmaak yn FAT16-formaat (alles oerskriuwe).

De earste twa tests, lykas ferwachte, einige yn folsleine oerwinning: it hulpprogramma koe mei súkses 10 megabytes fan geheime gegevens út 'e flash drive ekstrahearje. Mar nei't it flash-drive oant kapasiteit fol wie mei bestannen, barde in flater:

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

Sa't jo sjen kinne, waarden allinich 158 klusters mei súkses ûntsifere (632 kilobytes fan rau gegevens, wat 636424 bytes oan lading jout). It is dúdlik dat d'r gjin manier is om hjir 10 megabytes te krijen, en dochs binne d'r ûnder dizze klusters dúdlik duplikaten. Jo kinne op dizze manier net iens 1 megabyte weromhelje. Mar wy kinne garandearje dat wy 3 kilobytes fan geheime gegevens sille herstellen fan in flash drive sels nei't it is opmakke en skreaun nei kapasiteit. Eksperiminten litte lykwols sjen dat it goed mooglik is om in bestân fan 120 kilobytes lang te ekstrahearjen fan sa'n flash drive.

De lêste test liet spitigernôch sjen dat it heule flash-drive oerskreaun waard:

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

Net ien kluster is oerlibbe... Spitich, mar net tragysk! Foardat opmaak, litte wy besykje te meitsjen fan in partition op de flash drive, en al yn it in triem systeem. Trouwens, it kaam út it fabryk mei krekt dizze opmaak, dus wy dogge neat fertocht.
It is frijwat ferwachte dat de beskikbere romte op 'e flash drive wat ôfnommen is.

It wurdt ek frij ferwachte dat 10 megabytes net kinne wurde ferburgen op in folslein folsleine skiif. Mar no is it oantal mei súkses ûntsifere klusters mear as ferdûbele!

Total clusters read: 250752, decrypted: 405

Spitigernôch is it ûnmooglik om in megabyte út stikken te sammeljen, mar twahûndert kilobytes binne maklik.

No, it nijs oer de lêste, 4e kontrôle, dizze kear is bliid: folslein opmaak fan sa'n flash drive hat net liede ta de ferneatiging fan alle ynformaasje! 120 kilobytes oan geheime gegevens passe perfekt yn net brûkte romte.

Test gearfetting tabel:

Steganografy troch bestannen: gegevens ferbergje direkt yn sektoaren

In bytsje teoretisearjend: oer frije romte en net brûkte sektoaren

As jo ​​​​jo hurde skiif oait hawwe ferdield yn partysjes, hawwe jo miskien opfallen dat it net altyd mooglik is om alle frije romte op 'e skiif te allocearjen. De earste seksje begjint altyd mei wat ynspringen (meastal 1 megabyte, of 2048 sektoaren). Efter de lêste seksje bart it ek dat der in lytse "sturt" bliuwt fan net brûkte sektoaren. En soms binne der gatten tusken seksjes, hoewol komselden.

Mei oare wurden, der binne sektoaren op 'e skiif, dat kin net tagonklik wurde ûnder normale wurk mei de skiif, mar gegevens kinne wurde skreaun nei dizze sektoaren! En dat betsjut ek lêzen. Oanpast foar it feit dat der ek in partition tafel en bootloader koade, dy't lizze yn it lege gebiet oan it begjin fan 'e skiif.

Lit ús efkes in skoft fan de seksjes nimme en de skiif sa te sizzen út in fûgelperspekt sjen. Hjir hawwe wy in lege partition op 'e skiif. Litte wy dêr in bestânsysteem yn meitsje. Kinne wy ​​sizze dat guon sektoaren op 'e skiif bliuwe unerased?

E-e-e - drumrol! It antwurd sil hast altyd ja wêze! Yndie, yn 'e measte gefallen komt it meitsjen fan in bestânsysteem del op it feit dat mar in pear blokken fan tsjinstynformaasje op' e skiif skreaun wurde, en oars feroaret de ynhâld fan 'e partysje net.

En ek - suver empirysk - kinne wy ​​oannimme dat it bestânsysteem net altyd alle romte besette kin oant de lêste sektor. Bygelyks, in FAT16-bestânsysteem mei in klustergrutte fan 64 kilobytes kin fansels net folslein in partysje besette mei in grutte net in mearfâld fan 64 kilobytes. Oan 'e ein fan sa'n seksje sil d'r in "sturt" wêze moatte fan ferskate sektoaren dy't net tagonklik is foar it bewarjen fan brûkersgegevens. Dizze oanname koe lykwols net eksperiminteel befêstige wurde.

Dus, om de beskikbere romte foar it steganogram te maksimalisearjen, moatte jo in bestânsysteem brûke mei in gruttere klustergrutte. Jo kinne ek in partysje oanmeitsje, sels as dit net nedich is (bygelyks op in flash drive). D'r is gjin ferlet om lege seksjes te meitsjen of net-allokearre gebieten te ferlitten - dit sil de oandacht lûke fan ynteressearre boargers.

Utility foar eksperiminten

Jo kinne de boarnekoade fan it hulpprogramma oanreitsje hjir

Om te bouwen, moatte jo Qt ferzje 5.0 of heger en OpenSSL. As der wat net wurket, moatte jo it steganodisk.pro-bestân miskien bewurkje.

Jo kinne feroarje de kluster grutte fan 4 KB oan, sizze, 512 bytes (yn secretfile.h). Tagelyk sille de kosten fan tsjinstynformaasje tanimme: de koptekst en kontrôlesum nimme in fêste 68 bytes.

Jo moatte it nut fansels útfiere mei root-brûkersrjochten, en mei foarsichtigens. D'r sille gjin fragen steld wurde foardat jo it opjûne bestân of apparaat oerskriuwe!

Genietsje.

Boarne: www.habr.com

Add a comment