Steganograafia failidest mööda: peidame andmeid otse sektoritesse

LĂŒhike sissejuhatus

Steganograafia, kui keegi ei mĂ€leta, on teabe varjamine mingites konteinerites. NĂ€iteks piltides (arutatud siit ja siit). Samuti saab andmeid varjata failisĂŒsteemi metaandmetes (sellest on kirjutatud siit), ja isegi TCP protokolli metaandmetes. Kahjuks on kĂ”igil neil meetoditel ĂŒks puudus: et teavet kontainerisse mĂ€rkamatult "sisse puutuda", on vaja keerulisi algoritme, mis arvestavad konteineri sisemise struktuuriga. Ja konteineri manipulatsioonide taluvuse osas tekivad probleemid: nĂ€iteks, kui natuke pilti redigeerida, kaob peidetud teave.

Kas on vĂ”imalik kuidagi hakkama saada ilma keeruliste algoritmide ja Ă”rnade andmemanipulatsioonideta ning samal ajal tagada konteineri töövĂ”ime ja peidetud andmete nĂ”uetekohane sĂ€ilimine? Ütlen ette — jah, on vĂ”imalik! Ja isegi utiliiti pakun.

Verised detailid meetodist

Peamine idee on lihtne kui murtud puulöök: kĂ”vakettal on alasid, kuhu operatsioonisĂŒsteem kunagi ei kirjuta (vĂ”i kirjutab harva). Et neid alasid ei peaks keeruliste algoritmidega otsima, kasutame redundantsust — see tĂ€hendab, et dubleerime oma peidetud teabe vĂ€ga palju kordi kĂ”igi kĂ”vaketta sektorite peale. SeejĂ€rel saab kogu selle ilu peale luua vajalikud partitsioonid, formaateerida failisĂŒsteeme, kirjutada faile ja paigaldada OS-e — osa salajastest andmetest jÀÀb siiski alles ja seda saab vĂ€lja vĂ”tta, ning korduv dubleerimine aitab meil koostada algse terviku tĂŒkkidest.

Selle meetodi eelis on ilmselge: me ei sĂ”ltu failivormingust ega isegi kasutatavast failisĂŒsteemi tĂŒĂŒbist.

Puudused on samuti ilmsed:

  • Salajasi andmeid saab muuta ainult kĂ”vaketta tĂ€ieliku taastamisega ja seejĂ€rel nĂ€htava sisu uuesti loomisega. Samuti ei tohi kasutada tarkvara, mis taastab ketta pildist: see taastab ka eelnevad salajased andmed.
  • Mida rohkem on salajasi andmeid, seda suurem on tĂ”enĂ€osus osa teabe kaotamiseks.
  • Andmete vĂ€ljavĂ”tmine kettalt vĂ”ib vĂ”tta palju aega. MĂ”nest minutist kuni mitme pĂ€evani (kaasaegsed kettad on suured).

NĂŒĂŒd liigume detailide juurde.

On selge, et kui lihtsalt hajutada salajased andmed kogu kettale, siis need on nĂ€htavad ainult relvastamata pilgule. Kui relvastada pilku nĂ€iteks kettaredaktoriga, siis ilmuvad andmed tĂ€ielikult nĂ€htavale. SeetĂ”ttu oleks hea andmed krĂŒpteerida, et need ei paistaks silma. KrĂŒpteerime lihtsalt, aga maitsekalt: kasutame aes256-cbc algoritmi. KrĂŒpteerimise vĂ”tme kĂŒsime kasutajalt, las ta mĂ”tleb vĂ€lja hea parooli.

JĂ€rgmine kĂŒsimus on, kuidas eristada „Ôigeid“ andmeid riknenud andmetest. Siin aitab meid kontrollsumma, ja mitte lihtsalt, vaid SHA1. Miks mitte? Git'i jaoks on see piisavalt hea, seega sobib ka meile. Otsustatud: varustame iga salvestatud teabe fragment kontrollsummaga, ja kui pĂ€rast dekrĂŒpteerimist see klapib — tĂ€hendab, et dekrĂŒpteerimine Ă”nnestus.

Veel on kindlasti vajalik fragmenti number ja salajaste andmete kogupikkus. Fragmenti number — et jĂ€lgida, millised tĂŒkid on juba dekrĂŒpteeritud ja millised on veel alles. Kogupikkus tuleb meele kasuks viimasel fragmendil töötlemisel, et mitte kirjutada liigseid andmeid (teisisĂ”nu padding). Ja kuna meil igal juhul on pealkirja lisamine teel, siis lisame sinna salajase faili nime. See on vajalik pĂ€rast dekrĂŒpteerimist, et ei peaks mĂ”tlema, kuidas seda avada.

Testime meetodit praktikas

Kontrollimiseks vĂ”tame kĂ”ige levinuma kandja — mĂ€lupulga. Mul on vanem 1 GB mĂ€lupulk, mis sobib katsetamiseks. Kui teil, nagu minul, tekkis mĂ”te mitte vaeva nĂ€ha fĂŒĂŒsiliste kandjate ja katsetada failiga — ketaspildiga, siis ĂŒtlen kohe: see ei Ă”nnestu. Ketaste vormindamisel loob Linux selle faili uuesti, ja kĂ”ik kasutamata sektorid tĂ€idetakse nullidega.

Kahjuks pidime Linuxi masina jaoks kasutama rĂ”dul vedelevat Raspberry Pi 3 meteoroloogiapostit. Seal on mĂ€lu napp, seega ei hakka me suuri faile peitma. Piirdume maksimaalse suurusega 10 megabaiti. Liialt vĂ€ikesi faile pole mĂ”tet peita: utiliit kirjutab andmed kettale klastrite kaupa, igaĂŒhe suurus on 4 KB. SeetĂ”ttu piirame alates allapoole faili suuruseks 3 KB — see mahub ĂŒhte sellesse klastrisse.

Hakkame mÀlupulkadega mÀngima etappide kaupa, kontrollides iga etapi jÀrel, kas varjatud teave on loetav:

  1. Kiire FAT16 vormindamine 16 kB klastriga. Just seda pakub Windows 7 USB-mĂ€luseadmest, millel ei ole failisĂŒsteemi.
  2. USB-mĂ€luseadmest on tĂ€idetud 50% igasuguse prĂŒgi.
  3. USB-mĂ€luseadmest on tĂ€idetud 100% igasuguse prĂŒgi.
  4. „Pikk“ FAT16 vormindamine (kĂ”igi andmete ĂŒle kirjutamine).

Esimesed kaks katset lÔppesid oodatud tÀieliku vÔiduga: utiliit suudeti edukalt taastada 10 megabaiti salajasi andmeid USB-mÀluseadmest. Kuid pÀrast seda, kui mÀlupulk oli faili tÀis laaditud, toimus rike:

Kokku lugenud klastrid: 250752, dekrĂŒpteeritud: 158
VIGA: ei saa kirjutada lÔpetamata secretFile'i

Kuidas nĂ€eme, suudeti edukalt dekrĂŒpteerida vaid 158 klastrit (632 kilobaiti toorandmeid, mis annab 636424 baiti kasulikku koormust). On selge, et 10 megabaiti siit ei saa, ja muidugi on nende klastrite seas kindlasti duplikaate. Isegi 1 megabait ei ole sellisel viisil enam taastatav. Kuid vĂ”ime garanteerida, et 3 kilobaiti salajasi andmeid me taastame USB-mĂ€luseadmest isegi pĂ€rast selle vormindamist ja ĂŒle tĂ€itmist. Kuid katseid nĂ€itavad, et sellisest mĂ€lust on tĂ€iesti vĂ”imalik taastada 120 kilobaitine fail.

Viimane katse nĂ€itas kahjuks, et mĂ€lupulk on tĂ€ielikult ĂŒle kirjutatud:

$ sudo .\/steganodisk -p password \/dev\/sda
Seadme suurus: 250752 klastrit
250700 99%
Kokku lugemise klastrid: 250752, dekrĂŒpteeritud: 0
VIGA: ei saa kirjutada lÔpetamata secretFile'i

Ühtegi klastri ei jÀÀnud
 Kahjuks, kuid mitte traagiliselt! Proovime enne vormindamist luua USB-mĂ€luseadmest jagunemise ja seejĂ€rel selle sisse failisĂŒsteemi. Üldiselt tuli see tootmisest just sellise vormindamisega, seega ei tee me midagi kahtlast.
OotuspÀraselt on USB-mÀluseadmest saadaval ruum veidi vÀhenenud.

Samuti ootuspĂ€raselt ei Ă”nnestunud 10 megabaiti tĂ€ielikult tĂ€idetud kettale varjata. Kuid nĂŒĂŒd on edukalt dekrĂŒpteeritud klastrite arv kasvanud rohkem kui kahekordseks!

Kokku lugenud klastrite arv: 250752, dekrĂŒpteeritud: 405

Megabaiti, kahjuks, ei Ă”nnestu tĂŒkkidest kokku koguda, aga 200 kilobaiti - kergesti.

Ja teadaanne viimase, 4. kontrolli kohta on seekord rÔÔmustav: tÀielik vormindamine sellisest USB-mÀluseadmest ei viinud kogu info hÀvimiseni! 120 kilobaiti salajasi andmeid mahtus suurepÀraselt kasutamata ruumi.

KokkuvÔtte tabel katsetest:

Steganograafia failidest mööda: peidame andmeid otse sektoritesse

Natuke teooriat: vaba ruumi ja kasutamata sektorite kohta

Kui olete kunagi jaganud kĂ”vaketast osadeks, olete ehk mĂ€rganud, et kaugel sellest, et saaks kogu vabalahe ketas Ă€ra kasutada. Esimene osa algab alati teatud vahega (see on tavaliselt 1 megabait vĂ”i 2048 sektorit). Viimase osaga jÀÀb samuti sageli natuke kasutamata „otsi“ tĂŒhjade sektoritega. Ja vahel jÀÀb osade vahele ka vahe, kuigi harva.

TeisisĂ”nu, kettal on sektoreid, millele ei pÀÀse ligi tavalise ketta kasutamise ajal, aga andmeid saab neisse sektoritesse kirjutada! See tĂ€hendab, et neid saab ka lugeda. Arvestades, et on olemas ka partitsioonide tabel ja laadimiskood, mis asuvad just tĂŒhjas piirkonnas ketta alguses.

JĂ€tame hetkeks osad kĂ”rvale ja vaatame ketast kĂ”rgelt, nii öelda, linnulennult. Meie ketasel on tĂŒhi osa. Loome sinna failisĂŒsteemi. Kas vĂ”ime öelda, et mĂ”ni sektor kettal jĂ€i kirjutamata?

Ja-jaa — trummipĂ”rin! Vastus on peaaegu alati — jah! Sest enamikul juhtudel seisneb failisĂŒsteemi loomine selles, et kettale salvestatakse vaid mĂ”ned teenuseteabe plokid, samas kui muu sisu ei muutu.

Ja veel — puhtalt empiiriliselt — vĂ”ib oletada, et failisĂŒsteem ei pruugi alati kasutada kogu ettenĂ€htud ruumi viimase sektorini. NĂ€iteks FAT16 failisĂŒsteem, mille klastrite suurus on 64 kilobaiti, ei suuda ilmselgelt tĂ€ielikult Ă€ra kasutada osa, mille suurus ei ole 64 kilobaiti. Sellise osa lĂ”pus peab jÀÀma „otsi“ mĂ”nest sektorist, mis ei ole kasutatav kasutajaandmete salvestamiseks. Siiski, seda oletust ei Ă”nnestunud eksperimentaalselt kinnitada.

Seega, et maksimeerida ruumi, mis on saadaval steganogrammile, tuleb kasutada suurema klastrite suurusega failisĂŒsteemi. Samuti on vĂ”imalik luua osa, isegi kui see ei ole vajalik (nĂ€iteks mĂ€lupulgale). TĂŒhi osa vĂ”i jaotamata alade jĂ€tmine ei ole soovitatav — see tĂ”mbab huvi tekitavate kodanike tĂ€helepanu.

Eksperimentide tööriist

Tööriista lÀhtekoodiga saab tutvuda siin

Kogumiseks on vajalik Qt versioon 5.0 vĂ”i kĂ”rgem ning OpenSSL. Kui midagi ei kokkulepita — on vĂ”imalik, et tuleb muuta steganodisk.pro faili.

Klastri suurust saab muuta nÀiteks 4 Kb pealt 512 baitile (failis secretfile.h). Sellega kaasnevad suuremad kulud teenindusteabe jaoks: pÀis ja kontrollsummad vÔtavad fikseeritud 68 baiti.

Tööriista tuleb loomulikult kĂ€ivitada kasutaja root Ă”igustega, kuid ettevaatlikult. Enne antud faili vĂ”i seadme uuesti kirjutamist ei esitatakse mingeid kĂŒsimusi!

Naudi.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster