Një paraqitje e vogël
Steganografia, nëse dikush nuk e mban mend, është fshehja e informacionit në ndonjë kontejner. Për shembull, në imazhe (kjo u diskutua dhe ). Mund të fshehni gjithashtu të dhënat në tabelat e shërbimit të sistemit të skedarëve (për këtë është shkruar ), dhe madje . Fatkeqësisht, të gjithë këto metoda kanë një të metë të vetme: për të futur informacionin pa u vërejtur në kontejner, ne na nevojiten algoritma të sofistikuar që marrin parasysh karakteristikat e brendshme të kontejnerit. Po ashtu, ka probleme me qëndrueshmërinë e kontejnerit ndaj manipulimeve: për shembull, nëse modifikoni pak imazhin, informacioni i fshehur humbet.
A mund të dëshmojmë ndonjëherë pa algoritma të sofistikuara dhe manipulatorë të hollë të të dhënave, dhe megjithatë të sigurojmë funksionalitetin e kontejnerit dhe një nivel të pranueshëm të ruajtjes së të dhënave të fshehura? Duke iu referuar së ardhmes do të them - po, është e mundur! Dhe madje do të propozoj një vegël.
Detajet e tmerrshme të metodës
Ideja kryesore është e thjeshtë si një goditje me shufër në ballë: në disk ekzistojnë zona në të cilat sistemi operativ kurrë nuk shkruan (ose shkruan në raste të rralla). Që të mos duhet të kërkoni këto zona me algoritma të sofistikuar, do të përdorim tepricën - do të kopjojmë informacionin tonë të fshehur shumë-më shumë herë në të gjithë sektorët e diskut. Pastaj, mbi gjithë këtë bukuri, mund të krijoni ndarjet e nevojshme, të formatoni sistemet e skedarëve, të shkruani skedarët dhe të vendosni sistemet operuese - pjesa e sekretit do të ruhet dhe mund të nxirret, dhe kopjimi i përsëritur do të na ndihmojë të rregullojmë informacionin e origjinës nga copat.
Avantazhi i një metode të tillë është i dukshëm: ne nuk jemi të varur nga formati i skedarëve, as nga tipi i sistemit të skedarëve të përdorur.
Të metat gjithashtu, mendoj, janë të dukshme:
- Të dhënat sekrete mund të ndryshohen vetëm me një riprodhim të plotë të gjithë diskut, me një rifillim të përmbajtjes që i është parë përdoruesit. Në këtë rast, nuk mund të përdoren software që riprodhojnë diskun nga një imazh: ai do të riprodhojë gjithashtu dhe të dhënat sekrete të mëparshme.
- Sa më i madh të jetë volumi i të dhënave sekrete, aq më e madhe është probabiliteti i humbjes së një pjese të informacionit.
- Nxjerrja e të dhënave nga disku mund të marrë shumë kohë. Nga disa minuta në disa ditë (disqe moderne janë më të mëdhaja).
Tani le të kalojmë te detajet.
E kuptueshme që nëse shpërndajmë thjesht të dhënat e fshehta në të gjithë diskun, ato do të mbeten të fshehta vetëm nga syri i zakonshëm. Po të armatosim syrin, le të themi, me një redaktues disku, të dhënat do të shfaqen në gjithë shkëlqimin e tyre. Prandaj, është mëse e nevojshme që të dhënat të enkriptohen, për të mos u dalluar. Do ta bëjmë këtë duke përdorur një metodë të thjeshtë, por me stil: me algoritmin aes256-cbc. Çelësin e enkriptimit do ta kërkojmë nga përdoruesi, le t'i shpikë një fjalëkalim të mirë.
Pyetja tjetër është se si të dallojmë të dhënat "e duhura" nga ato të prishura. Këtu do të na ndihmojë shuma e kontrollit, por jo një e zakonshme, por SHA1. Pse jo? Për git është mjaft e mirë, prandaj është gjithashtu e dobishme për ne. E vendosur: do t'i pajisim çdo fragment të ruajtur të informacionit me një shifër kontrolli, dhe nëse pas dekriptimit ajo përputhet — do të thotë se dekriptimi ka qenë i suksesshëm.
Gjithashtu do të na nevojitet numri i fragmentit dhe gjatësia totale e të dhënave të fshehta. Numri i fragmentit — për të ndjekur se cilat pjesë kemi dekriptuar tashmë, dhe cilat kanë mbetur. Gjatësia totale na nevojitet kur të përpunojmë fragmentin e fundit, për të mos shkruar të dhëna të panevojshme (të njohura si padding). Po ashtu, duke qenë se kemi një titull, do ta shtojmë emrin e skedarit të fshehtë. Ky do të jetë i dobishëm pas dekriptimit, për të mos u menduar se me çfarë ta hapim atë.
Do ta testojmë metodën në praktikë
Për verifikimin do të marrim mbajtësin më të zakonshëm — një flash drive. Kam gjetur një të vjetër 1 Gb, që është perfekt për eksperimente. Nëse edhe juve, si dhe mua, ju erdhi në mendje të mos shqetësoheni për mbajtësit fizikë, por të provoni me një skedar — një imazh disku, të them menjëherë: nuk do të funksionojë. Kur formatoni një ‘disk’ të tillë, Linux krijon një skedar të ri, dhe të gjitha sektorët e papërdorur do të mbushen me zero.
Si makinë me Linux, për fat të keq, duhet të përdorim një stacion meteorologjik që ndodhet në ballkon, të bazuar në Raspberry Pi 3. Atje nuk ka shumë memorie, prandaj nuk do të fshehim skedarë të mëdhenj. Do t'u përshtatemi një madhësie maksimale prej 10 megabajtësh. Skedarët shumë të vegjël gjithashtu nuk kanë kuptim të fshihen: utilitari shkruan të dhëna në disk në grupe prej 4 Kb. Prandaj, nga poshtë, do të kufizohemi në një skedar prej 3 Kb — ai mund të strehohet në një grup të tillë.
Do ta testojmë flash drive-n me një qasje të etapizuar, duke kontrolluar pas çdo etape nëse informacioni i fshehur është lexueshme:
- Formatim i shpejtë në formatin FAT16 me madhësinë e klasterit 16 kb. Kjo është ajo që ofron Windows 7 me një memorje USB që nuk ka një sistem skedarësh.
- Mbushja e memorjes USB me të dhëna të ndryshme deri në 50%.
- Mbushja e memorjes USB me të dhëna të ndryshme deri në 100%.
- Formatim "i gjatë" në formatin FAT16 (me riparimin e gjithë informacionit).
Dy provat e para përfunduan me një fitore të plotë: aplikacioni arriti të nxjerrë me sukses 10 megabajt të dhënash sekrete nga memorja USB. Megjithatë, pasi memorja u mbush me skedarë, ndodhi një dështim:
Totali i grupeve të lexuara: 250752, të dekoduara: 158
Gabim: nuk mund të shkruaj dosjen e sekretit të paplotë
Siç shohim, arritëm të dekriptojmë vetëm 158 klastera (632 kilobajt të dhënash të papërpunuara, që japin 636424 byte informacion të dobishëm). Është e qartë se 10 megabajt këtu nuk mund të grumbullohen, dhe mes këtyre klasterëve ka padyshim dublika. Edhe 1 megabajt nuk mund të rikuperohet kështu. Megjithatë, mund të garantojmë se 3 kilobajt të dhënash sekrete do të rikuperohen nga memoria edhe pasi të formatizohet dhe të mbushet. Sidoqoftë, eksperimentet tregojnë se është me të vërtetë e mundur të nxirret një skedar me gjatësi 120 kilobajt nga një memorje e tillë.
Prova e fundit, fatkeqësisht, tregoi se memoria është ri-shkruar e tëra:
$ sudo .\/steganodisk -p password \/dev\/sda
Madhësia e pajisjes: 250752 klasterë
250700 99%
Klasterë të totalizuar të lexuar: 250752, të çosur: 0
Gabim: nuk mund të shkruaj dosjen e sekretit të paplotë
Asnjë klaster nuk u ruajt... E trishtë, por jo tragjike! Do të përpiqemi të krijojmë një ndarje në memorjen USB para formatimit, dhe pastaj në të — një sistem skedarësh. Për më tepër, ajo erdhi nga fabrika me këtë formatim, kështu që nuk po bëjmë asgjë të dyshimtë.
Padyshim që hapësira e disponueshme në memorjen USB paksa u zvogëlua.
Po ashtu, ishte e pritshme që 10 megabajt nuk arritën të fshihen në një disk të mbushur plotësisht. Por tani numri i klasterëve të dekriptuar u rrit më shumë se dy herë!
Totali i klasterëve të lexuar: 250752, të dekriptuar: 405
Megabajtë, fatkeqësisht, nuk mund të mblidhen nga copat, por dyqind kilobajtë — lehtësisht.
Dhe ora e fundit, kontrollet e 4-ta, këtë herë sjell lajme të gëzueshme: formatimi i plotë i kësaj memorjeje nuk çoi në shkatërrimin e të gjithë informacionit! 120 kilobajt të dhënash sekrete u ruajtën në hapësirën e pavendosur.
Të dhënat përmbledhëse për testimin:

Pak teori: për hapësirën e lirë dhe sektorët e pavendosur
Nëse ndonjëherë keni ndarë një hard disk në partitë, atëherë mund të keni vënë re se nuk është gjithmonë e mundur të alokoni gjithë hapësirën e lirë në disk. Partita e parë gjithmonë fillon me një margjinal të caktuar (zakonisht 1 megabajt, ose 2048 sektorë). Pas pjesës së fundit gjithashtu, ndonjëherë, mbetet një "bisht" i vogël i sektorëve të pa përdorur. Po ashtu, mes partive ndonjëherë mbeten hapësira, ndonëse rrallë.
Me fjalë të tjera, në disk ka sektorë, të cilët nuk kanë qasje në punën normale me diskun, por të dhënat mund të shkruhen në këta sektorë! Pra, mund të lexohen gjithashtu. Me faktin se ka gjithashtu një tabelë të repartit dhe një kod boot që ndodhen në zonën e zbrazët në fillim të diskut.
Të shkojmë pak nga partitë dhe të shikojmë diskun nga një lartësi, si të thuash, një fluturim me zog. Këtu kemi një repart të zbrazët në disk. Le të krijojmë një sistem skedarësh në të. A mund të themi se disa sektorë në disk kanë mbetur të pa zënë?
Dhe — një ritëm daulle! Përgjigjja zakonisht do të jetë — po! Sepse në shumicën e rasteve krijimi i një sistemi skedarësh përfundon me faktin se në disk shkruhen vetëm disa blloqe informacioni shërbimi, dhe për të tjerat, përmbajtja e repartit nuk ndryshohet.
Po ashtu — në mënyrë empirike — mund të supozojmë se sistemi i skedarëve nuk mund të zërë gjithmonë gjithë hapësirën e caktuar deri në sektorin e fundit. Për shembull, një sistem skedarësh FAT16 me një madhësi klasteri prej 64 kilobajtësh, natyrisht, nuk do të jetë në gjendje të zërë plotësisht një repart që nuk është shumëfish i 64 kilobajtëve. Në fund të një të tillë partie duhet të mbetet "bishti" i disa sektorëve, të pa arritshëm për ruajtjen e të dhënave të përdoruesve. Megjithatë, nuk u arrit të konfirmohet eksperimenti për këtë supozim.
Pra, për të maksimizuar hapësirën e disponueshme për steganogramin, duhet të përdoret një sistem skedarësh me një madhësi klasteri më të madhe. Mund të krijoni gjithashtu një repart, edhe nëse kjo nuk është e nevojshme (për shembull, në një flash drive). Nuk është e nevojshme të krijoni reparte të zbrazëta ose të lini zona të pa ndara — kjo do të tërheqë vëmendjen e atyre që janë të interesuar.
Utiliteti për eksperimente
Mund të hetoni burimet e utilitetit
Për ndërtimin e tij kërkohet Qt versioni 5.0 dhe më lart dhe OpenSSL. Nëse diçka nuk kompilohet — ndoshta do të duhet të rregulloni skedarin steganodisk.pro.
Mund të ndryshoni madhësinë e klasterit nga 4 KB në, për shembull, 512 byte (në secretfile.h). Në këtë rast, do të rriten shpenzimet për informacionin mbështetës: titulli dhe kontrolli i shumës zënë 68 byte të fiksuara.
Duhen nisur aplikacionin natyrisht me të drejtat e përdoruesit root, dhe me kujdes. Nuk do të ketë pyetje para se të ridëgjohet skedari ose pajisja përkatëse!
Shijoni.
Burimi: habr.com
