Hej Habr.
Jag skulle vilja presentera ett litet projekt om , gjord pÄ min fritid frÄn att studera.
Jag gjorde ett projekt om dold lagring av information i filsystemet (vidare FS).
Detta kan anvÀndas för att stjÀla konfidentiell information för utbildningsÀndamÄl.

En mycket gammal Linux FS valdes som prototyp .
genomförande
ImplementeringsövervÀganden
Om det Ă€r bra att âriva uppâ ext2-standarden sĂ„ kan man byta ut att det i FS finns en s.k. , som ger grundlĂ€ggande information om systemet. Efter att jag hittats Đž . NĂ€stan omedelbart föddes idĂ©n om att registrera information i för nĂ€rvarande tomma FS-block. Nu var det vĂ€rt att tĂ€nka pĂ„ skydd frĂ„n en bevĂ€pnad programmerare .
Om du lagrar dold information utan kryptering, kommer den, trots dess suddighet i FS, fortfarande att vara för iögonfallande, sÀrskilt om programmeraren vet vad den ska leta efter. DÀrför beslutades det att kryptera alla block i kÀllfilen. Jag valde blockchiffer , men som du förstÄr Àr detta inte viktigt.
För att separera de nödvÀndiga blocken frÄn alla andra vid lÀsning, beslöts det att lÀgga till en speciell markör till varje block i början av blocket. Denna token krypterades beroende pÄ blocknumret i kÀllfilen. Detta trick gjorde det omedelbart möjligt att inte bara hitta de nödvÀndiga blocken utan ocksÄ att kÀnna igen deras korrekta ordning.
AllmÀn funktionsprincip för systemet.

Inspelningsalgoritm
Om poÀng:
- Skriv först lite information till kÀllfilsystemet;
- Ta bort denna information (inte nödvÀndigtvis alla);
- Filen som ska döljas Àr uppdelad i block av lika lÀngd och lÀgger till en markör;
- Kryptera dessa block;
- Placera krypterade block i tomma FS-block.
För Àlskare av blockdiagram
Nedan finns ett blockschema över inspelningsalgoritmen. Algoritmen tar emot fyra filer som indata:
- Bild av ett modifierbart filsystem;
-Fil som Àr föremÄl för steganografi;
-Fil med krypteringsnyckel för AES;
- Fila med markör.

Det Àr vÀrt att genast notera att den hÀr algoritmen har en nackdel: efter att ha skrivit filen till FS, fÄr inte skriv nÄgot nytt i FS, eftersom all ny information kan hamna i de block som vi har allokerat till vÄr zippade fil, Àven om detta ocksÄ öppnar för möjligheten att "snabbt tÀcka vÄra spÄr."
Men det Àr ganska uppenbart hur detta kan fixas: det Àr nödvÀndigt att skriva om algoritmen för att skriva block i FS. Detta Àr en förstÄelig, men otroligt tidskrÀvande uppgift.
För Proof Of Consept implementerade jag inte detta.
Som ett resultat kommer följande Àndringar att göras i FS; sÄ hÀr ser FS ut innan steganografi (en ljudfil spelades in tidigare).

Och sÄ hÀr ser FS ut med informationen som redan Àr zippad.

LĂ€salgoritm
Om poÀng:
- Med kunskap om nyckeln och metoden för att konstruera markörer, komponera de första N markörerna, med garantin att N multiplicerat med lÀngden pÄ filsystemblocket Àr större Àn lÀngden pÄ den zippade filen;
- Sök efter block i FS som börjar med markörer;
- Dechiffrera de mottagna blocken och separera markörerna;
- Samla de resulterande blocken i rÀtt ordning och hÀmta kÀllfilen.
För Àlskare av blockdiagram
Nedan finns ett blockschema över inspelningsalgoritmen. Algoritmen tar emot tre filer som indata:
-Filsystemavbildning;
-Fil med krypteringsnyckel för AES;
- Fila med markör.

Efter att programmet körts visas Read-filen, vilket kommer att vara filen som extraherats frÄn det steganograferade filsystemet; om nyckeln eller markören angavs felaktigt kommer Read-filen att vara tom.
(för Àlskare av skönhet kan du infoga inte bara filen, utan en "header" som innehÄller metainformation: filnamn, rÀttigheter, senast Àndrad tid, etc.)
Startautomatisering
För enkelhetens skull skrevs bash-skript för att automatisera lanseringen av Linux (testad pÄ Ubuntu 16.04.3 LTS).
LÄt oss titta pÄ lanseringen steg för steg.
rekord:
- sudo Copy_Flash.sh "DEVICE" - hÀmta FS-bilden frÄn DEVICE (flash);
- ./Write.sh âFILEâ âKEYâ âMARKERâ â skapa en virtuell miljö, ladda ner nödvĂ€ndiga bibliotek och kör skrivskriptet;
- sudo ./Write_Flash.sh âDEVICEâ â skriv den Ă€ndrade FS igen till DEVICE.
LĂ€sning:
- sudo Copy_Flash.sh "DEVICE" - hÀmta FS-bilden frÄn DEVICE (flash);
- ./Read.sh "KEY" "MARKER" - skapa en virtuell miljö, ladda ner nödvÀndiga bibliotek och kör skipt för lÀsning;
- Ăppna filen LĂ€s i den aktuella katalogen - detta Ă€r den zippade informationen.
Slutsats
Denna steganografimetod behöver förmodligen förbÀttring, ytterligare testning och tillÀgg till mer populÀra filsystem, som t.ex , О .
Men syftet med detta arbete var att visa principen med vilken det Àr möjligt att utföra dold lagring av information i filsystemet.
Med hjÀlp av sÄdana algoritmer kan du oförskrÀckt lagra information, och om, om du kÀnner till nyckeln, det Àr möjligt att hacka ett sÄdant system inte med brute force (men med en mycket lÄng algoritm), sÄ utan att kÀnna till nyckeln, Systemet förefaller mig vara absolut stabilt, men detta kan tjÀna som anledning till en separat artikel.
All kod Àr implementerad i Python version 3.5.2. presenteras pÄ min youtube-kanal. Hela koden för projektet finns publicerad pÄ .
(Ja, ja, jag vet att för produktionsversionen mĂ„ste du skriva nĂ„got "snabbt", till exempel C đ)
I den hÀr implementeringen bör storleken pÄ indatafilen för steganografi inte överstiga 1000 kB.
Jag vill uttrycka min tacksamhet till anvÀndaren för vÀrdefulla rÄd vid planering av studien och rekommendationer om utformningen av artikeln.
KĂ€lla: will.com
