Hei Habr.
Jeg vil gjerne presentere et lite prosjekt om
Jeg laget et prosjekt om skjult lagring av informasjon i filsystemet (videre FS).
Dette kan brukes til å stjele konfidensiell informasjon for pedagogiske formål.
En veldig gammel Linux FS ble valgt som prototype
implementering
Implementeringshensyn
Hvis det er greit å "nøste opp" ext2-standarden, så kan du erstatte at det i FS er en s.k.
Hvis du lagrer skjult informasjon uten kryptering, vil den, til tross for uskarpheten i FS, fortsatt være for iøynefallende, spesielt hvis programmereren vet hva han skal se etter. Derfor ble det besluttet å kryptere alle blokkene i kildefilen. Jeg valgte blokkchiffer
For å skille de nødvendige blokkene fra alle de andre ved lesing, ble det besluttet å legge til en spesiell markør til hver blokk i begynnelsen av blokken. Dette tokenet ble kryptert avhengig av blokknummeret i kildefilen. Dette trikset gjorde det umiddelbart mulig ikke bare å finne de nødvendige blokkene, men også å gjenkjenne deres riktige rekkefølge.
Generelt driftsprinsipp for systemet.
Opptaksalgoritme
Poengene:
- Skriv først litt informasjon til kildefilsystemet;
- Slett denne informasjonen (ikke nødvendigvis alle);
- Filen som skal skjules er delt inn i blokker av samme lengde, og legger til en markør;
- Krypter disse blokkene;
- Plasser krypterte blokker i tomme FS-blokker.
For elskere av blokkdiagram
Nedenfor er et blokkskjema over opptaksalgoritmen. Algoritmen mottar fire filer som input:
- Bilde av et modifiserbart filsystem;
- Fil underlagt steganografi;
-Fil med krypteringsnøkkel for AES;
- Fil med markør.
Det er verdt å merke seg med en gang at denne algoritmen har en ulempe: etter å ha skrevet filen til FS, kan ikke skriv noe nytt inn i FS, siden all ny informasjon kan ende opp i blokkene som vi har allokert til vår zippede fil, selv om dette også åpner for muligheten for å "raskt dekke sporene våre."
Men det er ganske åpenbart hvordan dette kan fikses: det er nødvendig å omskrive algoritmen for å skrive blokker i FS. Dette er en forståelig, men utrolig tidkrevende oppgave.
For Proof Of Consept implementerte jeg ikke dette.
Som et resultat vil følgende endringer bli gjort i FS; dette er hvordan FS ser ut før steganografi (en lydfil ble tidligere tatt opp).
Og slik ser FS ut med informasjonen som allerede er zippet opp.
Lesealgoritme
Poengene:
- Med kunnskap om nøkkelen og metoden for å konstruere markører, komponer de første N markørene, med garantien at N multiplisert med lengden på filsystemblokken er større enn lengden på den zippede filen;
- Søk etter blokker i FS starter med markører;
- Dechiffrer de mottatte blokkene og separer markørene;
- Samle de resulterende blokkene i riktig rekkefølge og få kildefilen.
For elskere av blokkdiagram
Nedenfor er et blokkskjema over opptaksalgoritmen. Algoritmen mottar tre filer som input:
-filsystembilde;
-Fil med krypteringsnøkkel for AES;
- Fil med markør.
Etter at programmet har kjørt, vises Read-filen, som vil være filen som er trukket ut fra det steganograferte filsystemet; hvis nøkkelen eller markøren ble spesifisert feil, vil Read-filen være tom.
(for elskere av skjønnhet, kan du sette inn ikke bare filen, men en "header" som inneholder metainformasjon: filnavn, rettigheter, sist endrede tidspunkt, etc.)
Automatisering av oppstart
For enkelhets skyld ble bash-skript skrevet for å automatisere lanseringen på Linux (testet på Ubuntu 16.04.3 LTS).
La oss se på lanseringen trinn for trinn.
Запись:
- sudo Copy_Flash.sh "DEVICE" - få FS-bildet fra DEVICE (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – lag et virtuelt miljø, last ned de nødvendige bibliotekene og kjør skriveskriptet;
- sudo ./Write_Flash.sh “DEVICE” – skriv den endrede FS-en igjen til DEVICE.
Lesning:
- sudo Copy_Flash.sh "DEVICE" - få FS-bildet fra DEVICE (flash);
- ./Read.sh “KEY” 'MARKER» - lag et virtuelt miljø, last ned de nødvendige bibliotekene og kjør skipt for lesing;
- I gjeldende katalog åpner du Read-filen - dette er den zippede informasjonen.
Konklusjon
Denne steganografimetoden trenger sannsynligvis forbedring, ytterligere testing og utvidelse til mer populære filsystemer, som f.eks
Men hensikten med dette arbeidet var å vise prinsippet for at det er mulig å utføre skjult lagring av informasjon i filsystemet.
Ved hjelp av slike algoritmer kan du fryktløst lagre informasjon, og hvis, hvis du kjenner nøkkelen, er det mulig å hacke et slikt system ikke med brute force (men med en veldig lang algoritme), uten å vite nøkkelen, dette systemet virker for meg å være absolutt stabilt, men dette kan tjene som en grunn for en egen artikkel.
All kode er implementert i Python versjon 3.5.2.
(Ja, ja, jeg vet at for produksjonsversjonen må du skrive noe "raskt", for eksempel C 😉)
I denne implementeringen bør størrelsen på inndatafilen for steganografi ikke overstige 1000 kB.
Jeg vil uttrykke min takknemlighet til brukeren
Kilde: www.habr.com