Steganografia e skedarëve të kaluar: fshehja e të dhënave direkt në sektorë

Një parathënie e shkurtër

Steganografia, nëse dikush nuk e mban mend, po fsheh informacione në disa kontejnerë. Për shembull, në foto (diskutuar këtu и këtu). Ju gjithashtu mund të fshehni të dhënat në tabelat e shërbimit të sistemit të skedarëve (për këtë është shkruar këtu), dhe madje në paketat e shërbimit të protokollit TCP. Fatkeqësisht, të gjitha këto metoda kanë një pengesë: për të "futur" në mënyrë të padukshme informacionin në një enë, ju nevojiten algoritme dinake që marrin parasysh veçoritë e strukturës së brendshme të enës. Dhe lindin probleme me rezistencën e kontejnerit ndaj manipulimit: për shembull, nëse e modifikoni pak figurën, informacioni i fshehur humbet.

A është e mundur të bësh disi pa algoritme dinake dhe manipulime delikate me të dhënat, dhe ende të sigurohet funksionaliteti i kontejnerit dhe një nivel i pranueshëm i sigurisë së të dhënave të fshehura? Duke parë përpara, unë do të them - po, mundesh! Unë madje do të ofroj një shërbim.

Detaje të përgjakshme të metodës

Ideja bazë është aq e thjeshtë sa një goditje në ballë: ka zona në disk që sistemi operativ nuk i shkruan kurrë (ose i shkruan në raste të rralla). Për të shmangur nevojën për të kërkuar për këto zona duke përdorur algoritme dinake, ne do të përdorim tepricën - domethënë, ne do të dublikojmë informacionin tonë të fshehur shumë, shumë herë në të gjithë sektorët e diskut. Pastaj, në krye të gjithë kësaj shkëlqimi, mund të krijoni ndarjet e nevojshme, të formatoni sistemet e skedarëve, të shkruani skedarë dhe të instaloni OS - njësoj, një pjesë e të dhënave sekrete do të ruhen dhe mund të merren, dhe dyfishimi i përsëritur do të na ndihmojë bashkojeni të gjithë origjinalin nga pjesët.

Avantazhi i kësaj metode është i dukshëm: ne nuk varemi nga formati i skedarit, apo edhe nga lloji i sistemit të skedarëve të përdorur.

Disavantazhet janë gjithashtu, mendoj, të dukshme:

  • Të dhënat sekrete mund të ndryshohen vetëm duke rishkruar plotësisht të gjithë diskun, e ndjekur nga rikrijimi i përmbajtjes së dukshme për përdoruesin. Sidoqoftë, nuk mund të përdorni softuer që rikrijon diskun nga një imazh: ai gjithashtu do të rikrijojë të dhënat e mëparshme sekrete.
  • Sa më i madh të jetë vëllimi i të dhënave sekrete, aq më të mëdha janë gjasat për të humbur disa informacione.
  • Marrja e të dhënave nga disku mund të marrë shumë kohë. Nga disa minuta në disa ditë (disqet moderne janë të mëdha).

Tani le të kalojmë në specifikat.

Është e qartë se nëse thjesht lyeni të dhënat sekrete në të gjithë diskun, ato do të fshihen vetëm nga syri i lirë. Nëse e pajisni shikimin tuaj, të themi, me një redaktues disku, të dhënat do të shfaqen në të gjithë lavdinë e tyre. Prandaj, do të ishte mirë që të kriptoni të dhënat në mënyrë që të mos shfaqen. Ne do të kodojmë thjesht, por me shije: duke përdorur algoritmin aes256-cbc. Ne do t'i kërkojmë përdoruesit çelësin e enkriptimit dhe do ta lëmë të nxjerrë një fjalëkalim të mirë.

Pyetja tjetër është se si mund të dallojmë të dhënat "të mira" nga të dhënat e këqija. Këtu do të na ndihmojë një kontroll, por jo i thjeshtë, por SHA1. Dhe ç'farë? Është mjaft i mirë për git, kështu që do të na përshtatet edhe neve. Vendosëm: ne i sigurojmë çdo informacioni të ruajtur një shumë kontrolli, dhe nëse pas deshifrimit përputhet, do të thotë se deshifrimi ishte i suksesshëm.

Do t'ju duhet gjithashtu numri i fragmentit dhe gjatësia totale e të dhënave sekrete. Numri i fragmentit është për të mbajtur gjurmët se cilat pjesë kemi deshifruar tashmë dhe cilat kanë mbetur. Gjatësia totale do të jetë e dobishme për ne kur përpunojmë fragmentin e fundit, në mënyrë që të mos shkruajmë të dhëna të panevojshme (d.m.th., mbushje). Epo, meqenëse kemi ende një kokë, do të shtojmë emrin e skedarit sekret atje. Do të jetë e dobishme pas deshifrimit, në mënyrë që të mos hamendësoni se si ta hapni atë.

Testimi i metodës në praktikë

Për të kontrolluar, le të marrim mjetin më të zakonshëm - një flash drive. Gjeta një të vjetër me kapacitet 1 GB, i cili është mjaft i përshtatshëm për eksperimente. Nëse ju, si unë, keni ardhur me idenë që të mos shqetësoheni me median fizike, por ta testoni atë në një skedar - një imazh disk, atëherë unë do të them menjëherë: nuk do të funksionojë. Kur formaton një "disk" të tillë, Linux krijon përsëri skedarin dhe të gjithë sektorët e papërdorur do të mbushen me zero.

Si një makinë me Linux, për fat të keq, më duhej të përdorja një stacion meteorologjik në Raspberry Pi 3 të shtrirë në ballkon. Nuk ka shumë memorie atje, kështu që ne nuk do të fshehim skedarë të mëdhenj. Ne kufizohemi në një madhësi maksimale prej 10 megabajt. Gjithashtu nuk ka asnjë pikë për të fshehur skedarët që janë shumë të vegjël: programi shkruan të dhëna në disk në grupe 4 KB. Prandaj, më poshtë do të kufizohemi në një skedar 3 kb - ai përshtatet në një grup të tillë.

Ne do ta tallim flash drive-in në faza, duke kontrolluar pas çdo faze nëse informacioni i fshehur është i lexueshëm:

  1. Formatim i shpejtë në formatin FAT16 me një madhësi grupi prej 16 KB. Kjo është ajo që Windows 7 ofron për të bërë me një flash drive që nuk ka një sistem skedarësh.
  2. Mbushja e flash drive me të gjitha llojet e mbeturinave me 50%.
  3. Mbushja e flash drive me të gjitha llojet e mbeturinave me 100%.
  4. Formatimi "i gjatë" në formatin FAT16 (duke mbishkruar gjithçka).

Dy testet e para, siç pritej, përfunduan me fitore të plotë: mjeti ishte në gjendje të nxirrte me sukses 10 megabajt të dhëna sekrete nga flash drive. Por pasi flash drive u mbush në kapacitet me skedarë, ndodhi një dështim:

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

Siç mund ta shihni, vetëm 158 grupe u dekriptuan me sukses (632 kilobajt të dhëna të papërpunuara, që japin 636424 bajt ngarkesë). Është e qartë se nuk ka asnjë mënyrë për të marrë 10 megabajt këtu, dhe megjithatë midis këtyre grupimeve ka qartësisht dublikatë. Ju nuk mund të rikuperoni as 1 megabajt në këtë mënyrë. Por ne mund të garantojmë se do të rikuperojmë 3 kilobajt të dhëna sekrete nga një flash drive edhe pasi të jetë formatuar dhe shkruar në kapacitet. Sidoqoftë, eksperimentet tregojnë se është mjaft e mundur të nxirret një skedar 120 kilobajt i gjatë nga një flash drive i tillë.

Testi i fundit, për fat të keq, tregoi se i gjithë flash drive ishte mbishkruar:

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

Nuk ka mbijetuar asnjë grumbull... E trishtë, por jo tragjike! Para formatimit, le të përpiqemi të krijojmë një ndarje në flash drive, dhe tashmë në të një sistem skedari. Meqe ra fjala ka ardhur nga fabrika pikerisht me kete formatim, ndaj nuk po bejme asgje te dyshimte.
Është mjaft e pritshme që hapësira e disponueshme në flash drive është ulur paksa.

Është gjithashtu mjaft e pritshme që 10 megabajt nuk mund të fshihen në një disk plotësisht të plotë. Por tani numri i grupimeve të deshifruara me sukses është më shumë se dyfishuar!

Total clusters read: 250752, decrypted: 405

Fatkeqësisht, është e pamundur të grumbullosh një megabajt nga copa, por dyqind kilobajt janë të lehta.

Epo, lajmet për kontrollin e fundit, të 4-të, këtë herë janë të gëzueshme: formatimi i plotë i një flash drive të tillë nuk çoi në shkatërrimin e të gjithë informacionit! 120 kilobajt të dhëna sekrete përshtaten në mënyrë të përkryer në hapësirën e papërdorur.

Tabela përmbledhëse e testit:

Steganografia e skedarëve të kaluar: fshehja e të dhënave direkt në sektorë

Pak teorizim: për hapësirën e lirë dhe sektorët e papërdorur

Nëse e keni ndarë ndonjëherë hard diskun tuaj në ndarje, mund të keni vënë re se nuk është gjithmonë e mundur të ndani të gjithë hapësirën e lirë në disk. Seksioni i parë gjithmonë fillon me disa dhëmbëzime (zakonisht 1 megabajt, ose sektorë 2048). Pas seksionit të fundit, ndodh gjithashtu që të mbetet një "bisht" i vogël sektorësh të papërdorur. Dhe ndonjëherë ka boshllëqe midis seksioneve, megjithëse rrallë.

Me fjalë të tjera, ka sektorë në disk që nuk mund të aksesohen gjatë punës normale me diskun, por të dhënat mund të shkruhen në këta sektorë! Dhe kjo do të thotë ta lexosh gjithashtu. Rregulluar për faktin se ekziston edhe një tabelë ndarjeje dhe kodi i ngarkuesit, të cilat ndodhen në zonën bosh në fillim të diskut.

Le të bëjmë një pushim nga seksionet për një kohë dhe të shikojmë diskun nga një pamje e shpendëve, si të thuash. Këtu kemi një ndarje të zbrazët në disk. Le të krijojmë një sistem skedarësh në të. A mund të themi se disa sektorë në disk mbeten të pafshirë?

E-e-e - rrokullisje daulle! Përgjigja do të jetë pothuajse gjithmonë po! Në të vërtetë, në shumicën e rasteve, krijimi i një sistemi skedarësh zbret në shkrimin e vetëm disa blloqeve të informacionit të shërbimit në disk, dhe përndryshe përmbajtja e ndarjes nuk ndryshon.

Dhe gjithashtu - thjesht empirikisht - mund të supozojmë se sistemi i skedarëve nuk mund të zërë gjithmonë të gjithë hapësirën e caktuar deri në sektorin e fundit. Për shembull, një sistem skedari FAT16 me një madhësi grupi prej 64 kilobajtësh, padyshim që nuk mund të zërë plotësisht një ndarje me një madhësi jo shumëfish të 64 kilobajt. Në fund të një seksioni të tillë do të duhet të ketë një "bisht" të disa sektorëve, të paarritshëm për ruajtjen e të dhënave të përdoruesit. Megjithatë, ky supozim nuk mund të konfirmohej eksperimentalisht.

Pra, për të maksimizuar hapësirën e disponueshme për steganogramin, duhet të përdorni një sistem skedari me një madhësi më të madhe grupi. Ju gjithashtu mund të krijoni një ndarje, edhe nëse kjo nuk është e nevojshme (për shembull, në një flash drive). Nuk ka nevojë të krijohen seksione boshe ose të lihen zona të pandara - kjo do të tërheqë vëmendjen e qytetarëve të interesuar.

Dobi për eksperimente

Mund të prekni kodin burimor të programit këtu

Për të ndërtuar, do t'ju duhet versioni Qt 5.0 ose më i lartë dhe OpenSSL. Nëse diçka nuk funksionon, mund t'ju duhet të redaktoni skedarin steganodisk.pro.

Ju mund të ndryshoni madhësinë e grupit nga 4 KB në, të themi, 512 bajt (në sekretfile.h). Në të njëjtën kohë, kostoja e informacionit të shërbimit do të rritet: titulli dhe shuma e kontrollit zënë 68 bajt fikse.

Ju duhet ta ekzekutoni programin, natyrisht, me të drejtat e përdoruesit rrënjë dhe me kujdes. Nuk do të bëhen pyetje përpara se të mbishkruani skedarin ose pajisjen e specifikuar!

Kënaquni.

Burimi: www.habr.com

Shto një koment