Filsystem steganografi

Hej Habr.

Jag skulle vilja presentera ett litet projekt om steganografi, 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.

Filsystem steganografi

En mycket gammal Linux FS valdes som prototyp ext2.

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. Superblock, som ger grundlĂ€ggande information om systemet. Efter att jag hittats Blockera bitmapp Đž Inode tabell. 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 hex editor.

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 AES, 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.

Filsystem steganografi

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.
Filsystem steganografi

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).
Filsystem steganografi
Och sÄ hÀr ser FS ut med informationen som redan Àr zippad.
Filsystem steganografi

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.
Filsystem steganografi

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:

  1. sudo Copy_Flash.sh "DEVICE" - hÀmta FS-bilden frÄn DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – skapa en virtuell miljö, ladda ner nödvĂ€ndiga bibliotek och kör skrivskriptet;
  3. sudo ./Write_Flash.sh “DEVICE” – skriv den Ă€ndrade FS igen till DEVICE.

LĂ€sning:

  1. sudo Copy_Flash.sh "DEVICE" - hÀmta FS-bilden frÄn DEVICE (flash);
  2. ./Read.sh "KEY" "MARKER" - skapa en virtuell miljö, ladda ner nödvÀndiga bibliotek och kör skipt för lÀsning;
  3. Ö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 Fat32, NTFS О ext4.
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. Exempel pÄ arbete presenteras pÄ min youtube-kanal. Hela koden för projektet finns publicerad pÄ github.
(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 PavelMSTU för vÀrdefulla rÄd vid planering av studien och rekommendationer om utformningen av artikeln.

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster