Ett litet förord
Steganografi, om nÄgon inte kommer ihÄg, döljer information i vissa behÄllare. Till exempel i bilder (diskuterat О ). Du kan ocksÄ dölja data i filsystemets servicetabeller (detta skrevs om ), och Àven . TyvÀrr har alla dessa metoder en nackdel: för att omÀrkligt "infoga" information i en behÄllare behöver du listiga algoritmer som tar hÀnsyn till sÀrdragen i behÄllarens interna struktur. Och problem uppstÄr med behÄllarens motstÄndskraft mot manipulation: till exempel, om du redigerar bilden nÄgot, gÄr dold information förlorad.
Ăr det möjligt att pĂ„ nĂ„got sĂ€tt klara sig utan listiga algoritmer och subtila manipulationer med data, och Ă€ndĂ„ sĂ€kerstĂ€lla behĂ„llarens funktionalitet och en acceptabel sĂ€kerhetsnivĂ„ för dolda data? NĂ€r jag ser framĂ„t, sĂ€ger jag - ja, det kan du! Jag kommer till och med att erbjuda dig ett verktyg.
Bloda detaljer om metoden
Grundidén Àr sÄ enkel som ett slag i pannan: det finns omrÄden pÄ disken som operativsystemet aldrig skriver till (eller skriver i sÀllsynta fall). För att undvika behovet av att söka efter dessa omrÄden med hjÀlp av listiga algoritmer kommer vi att anvÀnda redundans - det vill sÀga vi kommer att duplicera vÄr dolda information mÄnga, mÄnga gÄnger över alla sektorer pÄ disken. Sedan, ovanpÄ all denna prakt, kan du skapa de nödvÀndiga partitionerna, formatera filsystem, skriva filer och installera operativsystem - samtidigt kommer en del av den hemliga informationen att sparas och kan hÀmtas, och upprepad duplicering kommer att hjÀlpa oss sÀtta ihop den ursprungliga helheten frÄn bitarna.
Fördelen med denna metod Àr uppenbar: vi Àr inte beroende av filformatet, eller ens pÄ vilken typ av filsystem som anvÀnds.
Nackdelarna Àr ocksÄ, tror jag, uppenbara:
- Hemliga data kan endast Àndras genom att fullstÀndigt skriva om hela disken, följt av att Äterskapa innehÄllet som Àr synligt för anvÀndaren. Du kan dock inte anvÀnda programvara som Äterskapar disken frÄn en bild: den kommer ocksÄ att Äterskapa tidigare hemliga data.
- Ju större volym hemlig data, desto större Àr sannolikheten för att viss information gÄr förlorad.
- Att hÀmta data frÄn disk kan ta lÄng tid. FrÄn flera minuter till flera dagar (moderna diskar Àr stora).
LÄt oss nu gÄ vidare till detaljerna.
Det Àr klart att om du helt enkelt smetar ut hemlig data över hela disken, kommer den bara att döljas för blotta ögat. Om du utrustar din blick med, sÀg, en diskredigerare, kommer datan att dyka upp i all Àra. DÀrför skulle det vara en bra idé att kryptera data sÄ att den inte dyker upp. Vi kommer att kryptera enkelt, men smakfullt: med aes256-cbc-algoritmen. Vi ber anvÀndaren om krypteringsnyckeln och lÄter honom komma med ett bra lösenord.
NÀsta frÄga Àr hur vi kan skilja "bra" data frÄn dÄliga data. HÀr kommer en kontrollsumma att hjÀlpa oss, men inte en enkel sÄdan, utan SHA1. Och vad? Det Àr tillrÀckligt bra för git, sÄ det kommer att passa oss ocksÄ. Beslutat: vi förser varje lagrad information med en kontrollsumma, och om den matchar efter dekrypteringen betyder det att dekrypteringen lyckades.
Du behöver ocksÄ fragmentnumret och den totala lÀngden pÄ de hemliga uppgifterna. Fragmentnumret Àr till för att hÄlla reda pÄ vilka bitar vi redan har dechiffrerat och vilka som finns kvar. Den totala lÀngden kommer att vara anvÀndbar för oss nÀr vi bearbetar det sista fragmentet, för att inte skriva onödiga data (det vill sÀga utfyllnad). Tja, eftersom vi fortfarande har en rubrik lÀgger vi till namnet pÄ den hemliga filen dÀr. Det kommer att vara anvÀndbart efter dekryptering, för att inte gissa hur man öppnar det.
Testa metoden i praktiken
För att kontrollera, lÄt oss ta det vanligaste mediet - en flash-enhet. Jag hittade en gammal med 1 GB kapacitet, som Àr ganska lÀmplig för experiment. Om du, som jag, kom pÄ idén att inte bry dig om fysiska medier, utan att testa det pÄ en fil - en diskavbildning, dÄ sÀger jag direkt: det kommer inte att fungera. NÀr du formaterar en sÄdan "disk" skapar Linux filen igen, och alla oanvÀnda sektorer kommer att fyllas med nollor.
Som en maskin med Linux var jag tyvÀrr tvungen att anvÀnda en vÀderstation pÄ Raspberry Pi 3 som lÄg pÄ balkongen. Det finns inte mycket minne dÀr, sÄ vi kommer inte att gömma stora filer. Vi begrÀnsar oss till en maximal storlek pÄ 10 megabyte. Det Àr heller ingen idé att dölja filer som Àr för smÄ: verktyget skriver data till disken i 4 KB-kluster. DÀrför kommer vi nedan att begrÀnsa oss till en 3 kb fil - den passar in i ett sÄdant kluster.
Vi kommer att hÄna flashenheten i etapper och kontrollera efter varje steg om den dolda informationen Àr lÀsbar:
- En snabb formatering till FAT16 med en klusterstorlek pÄ 16 KB. Detta Àr vad den föreslÄr att göra. Windows 7 med ett flashminne som inte har ett filsystem.
- Fyller flash-enheten med alla typer av skrÀp med 50%.
- Fyller flash-enheten med alla typer av skrÀp med 100%.
- "LÄng" formatering i FAT16-format (skriver över allt).
De tvÄ första testerna slutade, som vÀntat, i fullstÀndig seger: verktyget kunde framgÄngsrikt extrahera 10 megabyte hemlig data frÄn flashenheten. Men efter att flashenheten var fylld till kapaciteten med filer, intrÀffade ett fel:
Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile
Som du kan se dekrypterades endast 158 ââkluster framgĂ„ngsrikt (632 kilobyte rĂ„data, vilket ger 636424 10 byte nyttolast). Det Ă€r tydligt att det inte finns nĂ„got sĂ€tt att fĂ„ 1 megabyte hĂ€r, och Ă€ndĂ„ finns det tydliga dubbletter bland dessa kluster. Du kan inte ens Ă„terstĂ€lla 3 megabyte pĂ„ detta sĂ€tt. Men vi kan garantera att vi kommer att Ă„terstĂ€lla 120 kilobyte hemlig data frĂ„n en flash-enhet Ă€ven efter att den har formaterats och skrivits till kapacitet. Experiment visar dock att det Ă€r fullt möjligt att extrahera en fil som Ă€r XNUMX kilobyte lĂ„ng frĂ„n en sĂ„dan flashenhet.
Det senaste testet visade tyvÀrr att hela flashenheten skrevs över:
$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile
Inte ett enda kluster har överlevt... Sorgligt, men inte tragiskt! Innan vi formaterar, lÄt oss försöka skapa en partition pÄ flashenheten och redan i det ett filsystem. Den kom förresten frÄn fabriken med exakt denna formatering, sÄ vi gör inget misstÀnkt.
Det Àr ganska förvÀntat att det tillgÀngliga utrymmet pÄ flashenheten har minskat nÄgot.
Det Àr ocksÄ ganska vÀntat att 10 megabyte inte kunde döljas pÄ en helt full disk. Men nu har antalet framgÄngsrikt dekrypterade kluster mer Àn fördubblats!
Total clusters read: 250752, decrypted: 405
TyvÀrr Àr det omöjligt att sÀtta ihop en megabyte frÄn bitar, men tvÄhundra kilobyte Àr lÀtt.
NÄvÀl, nyheterna om den sista, fjÀrde kontrollen, den hÀr gÄngen Àr glÀdjande: att fullstÀndigt formatera en sÄdan flashenhet ledde inte till att all information förstördes! 4 kilobyte hemlig data passar perfekt in i oanvÀnt utrymme.
Testsammanfattningstabell:

Lite teoretisering: om ledigt utrymme och oanvÀnda sektorer
Om du nÄgon gÄng har delat upp din hÄrddisk i partitioner har du kanske mÀrkt att det inte alltid Àr möjligt att allokera allt ledigt utrymme pÄ disken. Det första avsnittet börjar alltid med nÄgon indragning (vanligtvis 1 megabyte, eller 2048 sektorer). Bakom det sista avsnittet hÀnder det ocksÄ att det finns kvar en liten "svans" av oanvÀnda sektorer. Och ibland finns det luckor mellan avsnitten, Àven om det Àr sÀllan.
Det finns med andra ord sektorer pÄ disken som inte gÄr att komma Ät under normalt arbete med disken, men data kan skrivas till dessa sektorer! Och det betyder att lÀsa den ocksÄ. Justerat för det faktum att det Àven finns en partitionstabell och startladdarkod, som finns i det tomma omrÄdet i början av disken.
LÄt oss ta en paus frÄn avsnitten en stund och titta pÄ skivan frÄn fÄgelperspektiv sÄ att sÀga. HÀr har vi en tom partition pÄ disken. LÄt oss skapa ett filsystem i den. Kan vi sÀga att vissa sektorer pÄ disken förblir oraderade?
E-e-e - trumrulle! Svaret kommer nÀstan alltid att vara ja! Faktum Àr att i de flesta fall, att skapa ett filsystem beror pÄ det faktum att endast ett fÄtal block av tjÀnstinformation skrivs till disken, och annars Àndras inte partitionens innehÄll.
Och Àven - rent empiriskt - kan vi anta att filsystemet inte alltid kan uppta allt utrymme som tilldelats det fram till den sista sektorn. Till exempel kan ett FAT16-filsystem med en klusterstorlek pÄ 64 kilobyte uppenbarligen inte helt uppta en partition med en storlek som inte Àr en multipel av 64 kilobyte. I slutet av ett sÄdant avsnitt mÄste det finnas en "svans" av flera sektorer som Àr otillgÀngliga för att lagra anvÀndardata. Detta antagande kunde dock inte bekrÀftas experimentellt.
SÄ för att maximera det tillgÀngliga utrymmet för steganogrammet mÄste du anvÀnda ett filsystem med en större klusterstorlek. Du kan ocksÄ skapa en partition, Àven om detta inte Àr nödvÀndigt (pÄ en flash-enhet, till exempel). Det finns inget behov av att skapa tomma sektioner eller lÀmna otilldelade omrÄden - detta kommer att locka intresserade medborgares uppmÀrksamhet.
Verktyg för experiment
Du kan trycka pÄ kÀllkoden för verktyget
För att bygga behöver du Qt version 5.0 eller högre och OpenSSL. Om nÄgot inte fungerar kan du behöva redigera filen steganodisk.pro.
Du kan Àndra klusterstorleken frÄn 4 KB till, sÀg, 512 byte (i secretfile.h). Samtidigt kommer kostnaden för serviceinformation att öka: rubriken och kontrollsumman upptar en fast 68 byte.
Du mÄste naturligtvis köra verktyget med root-anvÀndarrÀttigheter och med försiktighet. Det kommer inte att stÀllas nÄgra frÄgor innan du skriver över den angivna filen eller enheten!
Njut av det.
KĂ€lla: will.com
