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 på Linux (testade 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

Lägg en kommentar