Tips en Trucs 2021

Bestanden in afbeeldingen verbergen met steganografie

Het verbergen van een bestand, een afbeelding, een video of tekst in een ander bestand is bekend onder de naam Steganografie. Het woord Steganografie is een combinatie van twee Griekse woorden, steganos wat betekent bedekt, verborgen of beschermt en graphein wat betekent schrijven. Bronnen beweren dat deze techniek voor het eerst werd gebruikt door Histiaeus, een Griekse koning uit 440 voor Christus. Hij schoor het haar van zijn meest vertrouwde dienaar en schreef een bericht op zijn hoofd. Nadat het haar terug was gegroeid, werd de dienaar naar een bondgenoot gestuurd om de nakende aanval op Griekenland aan te kondigen. Vandaag is Steganografie verder geëvolueerd, veel verbetert en veelvuldig gebruikt om geheime berichten verborgen in bestanden te verzenden en te ontvangen. Zie ook de Wikipedia steganografie webpagina.

Steganografie is een uitgebreid domein en we beperken ons in deze tip tot het verbergen van bestanden in afbeeldingen. Ga er echter niet van uit dat specialisten dit niet kunnen kraken. De hier besproken methoden zijn zeer eenvoudig en een gemiddelde veiligheidsdeskundige kan dit in een paar uur kraken. Beschouw deze tip dan ook louter als educatief. Daarenboven ben ik niet verantwoordelijk voor enige vorm van misbruik.

Bestanden samenvoegen

Deze methode vergt geen speciale software, enkele Linux basisopdrachten volstaan.

Eerst zorgen we voor wat oefenmateriaal: een afbeelding (kopie van een bestaande afbeelding) en een map met een tekstbestand. Dit kunnen we aanmaken met de volgende opdrachten:

dany@pindabook:~> cp Afbeeldingen/Achtergrond.jpg Afbeeldingen/Afbeelding.jpg
dany@pindabook:~> mkdir gd
dany@pindabook:~> echo "Dit document bevat zeer geheime informatie" > gd/geheim.txt

Om alle bestanden in de map gd te groeperen en te comprimeren, gebruiken we het zip formaat. De zip-opdracht installeer je onder openSUSE Leap 15.3 met de opdracht:

dany@pindabook:~> sudo zypper install zip
[sudo] wachtwoord voor root: 
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  zip

1 nieuw te installeren pakket.
Totale downloadgrootte: 250,7 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 838,3 KiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket zip-3.0-2.22.x86_64 wordt opgehaald                                        (1/1), 250,7 KiB (838,3 KiB uitgepakt)
Ophalen: zip-3.0-2.22.x86_64.rpm ...............................................................................[gereed]

Controleren op conflicten tussen bestanden: ....................................................................[gereed]
(1/1) Installeren van: zip-3.0-2.22.x86_64 .....................................................................[gereed]

De geheime documenten in de map gd groeperen en comprimeren we met de opdracht:

dany@pindabook:~> zip -r geheim.zip gd
  adding: gd/ (stored 0%)
  adding: gd/geheim.txt (stored 0%)

Daarna voegen we het aangemaakte zip-bestand achteraan toe aan de afbeelding en slaan het nieuwe bestand op als pindanet.jpg met de opdracht:

dany@pindabook:~> cat Afbeeldingen/Afbeelding.jpg geheim.zip > pindanet.jpg

Je kunt de map met geheime documenten terug uit de afbeelding pindanet.jpg halen en in de map gescheiden opslaan met de opdracht:

dany@pindabook:~> unzip -d gescheiden pindanet.jpg

Na deze controle kan je de mappen met geheime documenten verwijderen en enkel de met het zip-bestand samengevoegde afbeelding bewaren.

Archive: pindanet.jpg warning [pindanet.jpg]: 329584 extra bytes at beginning or within zipfile (attempting to process anyway) creating: gescheiden/gd/ extracting: gescheiden/gd/geheim.txt

Steghide

Met de vorige methode kan je de verborgen bestanden niet met een wachtwoord (-zin) beveiligen. Het programma Steghide kan dit wel en ondersteunt JPEG, BMP, WAV en AU-bestanden.

Het softwarepakket steghide komt niet voor in de openSUSE Leap 15.3 softwarebronnen, maar wel in de extra softwarebron security:privacy. Deze softwarebron voeg je met de volgende opdracht toe aan het softwarebeheer:

dany@pindabook:~> sudo zypper addrepo -f https://download.opensuse.org/repositories/security:/privacy/openSUSE_Leap_15.3/ "security:privacy"
[sudo] wachtwoord voor root: 
Opslagruimte 'security:privacy' wordt toegevoegd ...............................................................[gereed]
Opslagruimte 'security:privacy' is toegevoegd

URI                    : https://download.opensuse.org/repositories/security:/privacy/openSUSE_Leap_15.3/
Ingeschakeld           : Ja
GPG-controle           : Ja
Automatisch vernieuwen : Ja
Prioriteit             : 99 (standaard prioriteit)

Prioriteiten van opslagruimtes hebben geen effect. Alle ingeschakelde opslagruimtes delen dezelfde prioriteit.

Daarna kan je Steghide installeren met de opdracht:

dany@pindabook:~> sudo zypper install steghide
Ophalen van metagegevens uit opslagruimte 'security:privacy' --------------------------------------------------------[\]

Een nieuwe handtekening voor een opslagruimte of pakket is ontvangen:

  Opslagruimte:              security:privacy
  Vingerafdruk van sleutel:  CB83 66CC 735E 720B BB15 56A2 000C 4B6D E3DB D3CD
  Sleutelnaam:               security:privacy OBS Project 
  Sleutelalgoritme:          DSA 1024
  Sleutel aangemaakt:        ma 10 feb 2020 02:45:56 CET
  Sleutel verloopt op:       wo 20 apr 2022 03:45:56 CEST
  Rpm-naam:                  gpg-pubkey-e3dbd3cd-5e40b5d4



    Opmerking: Ondertekenen van gegevens maakt het mogelijk voor de ontvanger om te controleren dat
    er na het ondertekenen geen wijzigingen zijn geweest na het ondertekenen. Accepteren van
    pakketten met foute ondertekening kan leiden tot een corrupt systeem en in extreme gevallen
    zelfs tot een gecompromitteerd systeem.

    Opmerking: Een GPG publieke sleutel wordt betrouwbaar geïdentificeerd door zijn vingerafdruk.
    Vertrouw niet op de sleutelnaam. Als u niet zeker bent of de gepresenteerde sleutel is autentiek
    is, vraag dan de leverancier van de opslagruimte of controleer zijn website. Veel leveranciers
    onderhouden een webpagina die de vingerafdrukken tonen van de GPG sleutels die ze gebruiken.

Wilt u de sleutel verwerpen, tijdelijk vertrouwen of altijd vertrouwen? [v/t/a/?] (v): a
Ophalen van metagegevens uit opslagruimte 'security:privacy' ...................................................[gereed]
Cache van opslagruimte 'security:privacy' wordt gebouwd ........................................................[gereed]
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 3 NIEUWE pakketten zullen worden geïnstalleerd:
  libmcrypt libmhash2 steghide

3 nieuwe te installeren pakketten.
Totale downloadgrootte: 337,8 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 928,9 KiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket libmcrypt-2.5.8-lp153.7.1.x86_64 wordt opgehaald                           (1/3),  81,6 KiB (231,1 KiB uitgepakt)
Ophalen: libmcrypt-2.5.8-lp153.7.1.x86_64.rpm ..................................................................[gereed]
pakket libmhash2-0.9.9.9-lp153.47.1.x86_64 wordt opgehaald                        (2/3), 108,2 KiB (235,1 KiB uitgepakt)
Ophalen: libmhash2-0.9.9.9-lp153.47.1.x86_64.rpm .................................................[gereed (498,6 KiB/s)]
pakket steghide-0.5.1-lp153.3.1.x86_64 wordt opgehaald                            (3/3), 147,9 KiB (462,7 KiB uitgepakt)
Ophalen: steghide-0.5.1-lp153.3.1.x86_64.rpm ...................................................................[gereed]

Controleren op conflicten tussen bestanden: ....................................................................[gereed]
(1/3) Installeren van: libmcrypt-2.5.8-lp153.7.1.x86_64 ........................................................[gereed]
(2/3) Installeren van: libmhash2-0.9.9.9-lp153.47.1.x86_64 .....................................................[gereed]
(3/3) Installeren van: steghide-0.5.1-lp153.3.1.x86_64 .........................................................[gereed]

Met de volgende opdrachten verwijderen we het resultaat van ons vorig experiment en zorgen we opnieuw voor een kopie van een afbeelding om te experimenteren:

dany@pindabook:~> rm pindanet.jpg
dany@pindabook:~> cp Afbeeldingen/Afbeelding.jpg pindanet.jpg

Daarna kunnen we met Steghide ons geheime tekstbestand met een wachtzin in de afbeelding opnemen:

dany@pindabook:~> steghide embed -ef gd/geheim.txt -cf pindanet.jpg 
Enter passphrase: 
Re-Enter passphrase: 
embedding "gd/geheim.txt" in "pindanet.jpg"... done

Als test halen we de geheime tekst terug uit de afbeelding en slaan deze op als gescheiden.txt:

dany@pindabook:~> steghide extract -sf pindanet.jpg -xf gescheiden.txt
Enter passphrase: 
wrote extracted data to "gescheiden.txt".
dany@pindabook:~> cat gescheiden.txt 
Dit document bevat zeer geheime informatie

Ook nu kan je na een geslaagde test de oorspronkelijke tekst en testbestand verwijderen en enkel de afbeelding met de met een wachtzin beveiligde tekst bewaren.

Grafisch met Steg

Steg is een eenvoudig, cross platform en grafisch steganografieprogramma, geschreven in C++. Het is portable software, m.a.w. je kunt het downloaden, uitpakken en overal starten. Steg ondersteunt JPEG, JPG, TIFF, PNG en BMP afbeeldingen. Het gebruikt Stenografische en Cryptografische technieken om gegevens in afbeeldingen te verbergen.

Download de Steg software met de volgende opdracht:

dany@pindabook:~> wget https://www.fabionet.org/_download/Steg-1.1.0.0-Linux-x64.tgz
--2021-12-22 18:46:24--  https://www.fabionet.org/_download/Steg-1.1.0.0-Linux-x64.tgz
Herleiden van www.fabionet.org (www.fabionet.org)... 198.20.127.204
Verbinding maken met www.fabionet.org (www.fabionet.org)|198.20.127.204|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 40397078 (39M) [application/x-tar]
Wordt opgeslagen als: ‘Steg-1.1.0.0-Linux-x64.tgz’

Steg-1.1.0.0-Linux-x64.tgz    100%[=================================================>]  38,53M  5,57MB/s    in 7,0s    

2021-12-22 18:46:35 (5,48 MB/s) - '‘Steg-1.1.0.0-Linux-x64.tgz’' opgeslagen [40397078/40397078]

Pak de Steg software uit met de volgende opdracht:

dany@pindabook:~> tar -xvzf Steg-1.1.0.0-Linux-x64.tgz 
Steg-1.1.0.0-Linux-x64/
Steg-1.1.0.0-Linux-x64/README-common.txt
Steg-1.1.0.0-Linux-x64/README-linux64.txt
Steg-1.1.0.0-Linux-x64/Steg-1.1.0.0-x64.AppImage
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/demoimages/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/demoimages/StegDemoImage-3776x2520.jpg
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/demoimages/StegDemoImage-640x427.jpg
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/demoimages/StegDemoImage-640x427.tif
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/128x128/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/128x128/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/16x16/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/16x16/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/256x256/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/256x256/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/32x32/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/32x32/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/48x48/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/48x48/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/512x512/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/512x512/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/64x64/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/64x64/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/70x70/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/70x70/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/78x78/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/78x78/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/85x85/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/85x85/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/88x88/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/icons/88x88/steg.png
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/rsakeypair/
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/rsakeypair/testKey-priv.der
Steg-1.1.0.0-Linux-x64/Steg-v1.1.0.0-common/rsakeypair/testKey-pub.der

Nu de software uitgepakt is, kan je die starten door in een grafische bestandsbeheerder in de uitgepakte map (Steg-1.1.0.0-Linux-x64) op het programma Steg-1.1.0.0-x64.AppImage te klikken. Meestal krijg je een melding of je de software wel wilt uitvoeren.
Appimage uitvoeren

Start Steg door op de knop Uitvoeren te klikken. Daarna moet je de End-User Licence Agreement accepteren. Dit kan enkel door naar het einde van het document te scrollen en op de knop Yes te klikken.
Steg EULA

Daarna krijg je nog een melding dat de instellingen in de map .config/Steg in jouw Home map worden opgeslagen.
Steg config

Klik OK. Eerst openen we een afbeelding door in het menu File de opdracht Open generic image... te starten en een afbeelding te openen. Hoe groter het afbeeldingsbestand, hoe meer informatie je erin kunt opslaan.

Na het openen van een afbeelding staat in het linker paneel de originele afbeelding en in het rechter paneel de aangepaste afbeelding met onderaan rechts de beschikbare opslagruimte.
Steg

Start in het menu Hide de opdracht Hide Data..., selecteer het te verbergen bestand. Zorg er wel voor dat het bestand kleiner is dan de beschikbare opslagruimte. Na de bewerking volgt een melding met informatie over het verloop ervan.
Steg hidden

Via het menu Edit en de opdracht Configuration... kan je op het tabblad Common Options verschillende versleutelmethoden selecteren:

Je kunt hier ook een verborgen tekst aan de afbeelding toevoegen.
Steg settings

Als alles in orde is, kan je het resultaat opslaan met de Save knop in de werkbalk. Klaar! De gegevens zijn versleuteld opgeslagen in de afbeelding. De afbeelding lijkt een gewone afbeelding te zijn en kan door om het even welke afbeeldingenviewer weergegeven worden.

Om de gegevens terug te halen, open je in Steg de afbeelding met de versleutelde gegevens en start je in het menu Extracht de opdracht Extract Data.... Selecteer de map waar het teruggehaalde bestand opgeslagen moet worden en klaar! Voor meer informatie bezoek je Steg webpagina.

Opruimen

Sluit indien nodig alle programma's af. Steg kan je eenvoudig volledig verwijderen door zowel de programmamap als de configuratiemap met de volgende opdracht te verwijderen:

dany@pindabook:~> rm -r Steg-1.1.0.0-Linux-x64/ .config/Steg/

Vergeet ook niet het gedownloade Steg bestand te verwijderen:

dany@pindabook:~> rm Steg-1.1.0.0-Linux-x64.tgz

Het programma Steghide verwijder je met de volgende opdracht:

dany@pindabook:~> sudo zypper remove -u steghide
[sudo] wachtwoord voor root: 
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 3 pakketten zullen worden VERWIJDERD:
  libmcrypt libmhash2 steghide

3 te verwijderen pakketten.
Na de bewerking zal 928,9 KiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
(1/3) Verwijderen van steghide-0.5.1-lp153.3.1.x86_64 ..........................................................[gereed]
(2/3) Verwijderen van libmhash2-0.9.9.9-lp153.47.1.x86_64 ......................................................[gereed]
(3/3) Verwijderen van libmcrypt-2.5.8-lp153.7.1.x86_64 .........................................................[gereed]
Er zijn actieve programma's die nog steeds bestanden en bibliotheken gebruiken die verwijderd of bijgewerkt zijn door recente opwaarderingen. Ze zouden opnieuw gestart moeten worden om voordeel te hebben van de laatste vormen van bijwerken. Voer 'zypper ps -s' uit om een lijst met deze programma's te maken.

Om de toegevoegde softwarebron en bijhorende GPG-sleutel te verwijderen, moet je eerst de bij de softwarebron horende sleutel opsporen. Een lijst met GPG-sleutels die door het softwarebeheer gebruikt worden, vraag je op met de opdracht:

dany@pindabook:~> rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n'
gpg-pubkey-307e3d54-5aaa90a5    gpg(SuSE Package Signing Key )
gpg-pubkey-39db7c82-5f68629b    gpg(SuSE Package Signing Key )
gpg-pubkey-3dbdc284-53674dd4    gpg(openSUSE Project Signing Key )
gpg-pubkey-1abd1afb-54176598    gpg(PackMan Project (signing key) )
gpg-pubkey-65176565-61a0ee8f    gpg(openSUSE:Backports OBS Project )
gpg-pubkey-e3dbd3cd-5e40b5d4    gpg(security:privacy OBS Project )

De GPG-sleutel voor de security:privacy softwarebron staat in het voorbeeld als laatste en heeft als referentie gpg-pubkey-e3dbd3cd-5e40b5d4. Deze referentie heb je nodig om de GPG-sleutel te verwijderen met:

dany@pindabook:~> sudo rpm -e gpg-pubkey-e3dbd3cd-5e40b5d4

Door het verwijderen van de GPG-sleutel vertrouw je de softwarebron niet langer. De softwarebron security:privacy zelf, verwijder je met de opdracht:

dany@pindabook:~> sudo zypper removerepo "security:privacy"
Opslagruimte 'security:privacy' wordt verwijderd ...............................................................[gereed]
Opslagruimte 'security:privacy' is verwijderd.

Ook de oefenbestanden kunnen verwijderd worden:

dany@pindabook:~> rm -r gd/ geheim.zip gescheiden/ gescheiden.txt pindanet.jpg

Let op met het gebruik van de opdracht rm -r (recursief verwijderen), een typfout kan fatale gevolgen hebben.