Paranoia für Anfänger
Informationssicherheit unter Linux
Verstecken
Auch wenn mit Hilfe von kryptographischen Programmen der Inhalt einer Nachricht inzwischen recht gut vor Außenstehenden geschützt werden kann, hat eine verschlüsselte Datei oder E-Mail immer noch den Nachteil, dass sie in der Flut von Klartextnachrichten auffällt und womöglich erst das Interesse eines Lauschers weckt. Hilfe bietet da die Steganographie (die Kunst des verdeckten Schreibens), welche Informationen in einem unauffälligen Trägermedium wie z. B. einem Bild versteckt, ohne dass dadurch erkennbare Änderungen entstehen würden.
Besonders beliebte Verstecke sind JPEGs und andere Bildformate, weil sie gleichzeitig unauffällig und groß genug sind, um geheime Daten zu transportieren. Das einfachste, und wahrscheinlich deshalb auch am meisten verbreitete Verfahren, um Daten in unkomprimierten Bildformaten wie BMP einzubetten, ist dabei, die niederwertigsten Bits der RGB-Werte (siehe Kasten 1) zu verändern, was immerhin drei Bit pro Bildpunkt Speicherplatz ermöglicht. Es werden ausschließlich die niederwertigsten Bits verändert, da diese den kleinsten Einfluss auf den eigentlichen Farbwert haben und das Bild daher nur um nahezu unsichtbare Farbnuancen verändert wird. Bei JPEGs ist das Ganze etwas komplizierter, weil das Bild nicht einfach Pixel für Pixel gespeichert, sondern mittels der sogenannten diskreten Cosinus-Transformationin Frequenzkoeffizienten zerlegt wird. Diese werden wiederum quantisiert, wobei die hochfrequenten Koeffizienten (vom Auge kaum wahrgenommene Details) auf Null gerundet werden. Hierbei fällt ein Teil der Bildinformationen weg, weshalb man JPEG auch als verlustbehaftete Komprimierungsmethode bezeichnet. Da das Bild anschließend noch (verlustfrei) komprimiert wird, ist es nicht so einfach wie z. B. bei BMPs, unbemerkt an den Bytes etwas zu ändern. Stattdessen werden die niederwertigsten Bits der einzelnen Koeffizienten vor der verlustfreien Komprimierung des Bildes überschrieben.
Nicht nur in der Kryptographie, auch in der Steganographie findet ein ständiger Wettlauf zwischen neuen Algorithmen und neuen Analyseverfahren statt. So wurde neben einer visuellen Attacke auch ein statistischer Weg gefunden, die oben beschriebene Methode zu brechen. Ausgenutzt wird dabei die Tatsache, dass es zu einer untypischen Verteilung der Farbwerte in den Bildern kommt.
Eine mögliche Antwort auf diese Entwicklung ist das Programm OutGuess [7], das die statistische Verteilung der Frequenzkoeffizienten nicht ändert und somit resistent ist. Praktisch bedeutet diese Strategie, dass für jeden im Wert veränderten Frequenzkoeffizienten ein anderer in umgekehrter Weise ersetzt wird. Wenn also an einer Stelle aus einer 2 eine 3 wird, macht OutGuess an einer anderen eine 3 zu einer 2. Ebenfalls unbetroffen sind das in Java geschriebene F5 [8], bei dem nicht einfach Bits überschrieben, sondern die Beträge der Koeffizienten dekrementiert werden, und das Tool JPHS [9], auf das wir hier nicht näher eingehen wollen.
Auch wenn sich die mathematischen Methoden unterscheiden, ist die Bedienung der oben genannten Programme sehr ähnlich: Es werden jeweils ein Trägerbild, die Datei mit den zu versteckenden Daten und und ein Passwort angegeben, mit dem die Daten noch zusätzlich verschlüsselt werden. Die zusätzliche Verschlüsselung ist nötig, da sich die versteckte Datei sonst unabhängig von der Stärke des Algorithmus' einfach durch Aufruf des Programms enttarnen lassen würde.
Zu beachten ist weiterhin, dass keine Grafik mehrmals verwendet werden darf und dass zu dem Bild kein Original im Internet oder an einer anderen öffentlich zugänglichen Stelle existieren sollte, da die steganographische Nachricht sonst durch bloßes Vergleichen mit dem Original extrahiert werden könnte. Hat man also ein passendes Bild gefunden, kann man die Informationen mit den folgenden Befehlen einbetten:
outguess -k "Bigger is Better" -d geheim.txt mein.jpg mein2.jpg
Um das Programm F5 einsetzen zu können, muss ein Java Runtime Environment installiert sein. Der Aufruf sieht dann folgendermaßen aus:
java -mx40M -classpath $CLASSPATH:/usr/local/f5 Embed -e geheim.txt -p "Bigger is Better" mein.jpg mein2.jpg
Die Umgebungsvariable $CLASSPATH enthält den Pfad zu den Klassen des Java Runtime Environments, und /usr/local/f5 ist das Verzeichnis, in dem das Programm F5 liegt. Falls Suns bzw. Blackdowns JRE 1.4 installiert ist, sollte der Aufruf auch ohne $CLASSPATH: funktionieren. Die Extraktion der geheimen Nachricht funktioniert analog zur Einbettung:
outguess -k "Bigger is Better" -r mein2.jpg geheim2.txt
Oder mit dem Tool F5:
java -mx40M -classpath $CLASSPATH:/usr/local/f5 Extract -e geheim2.txt -p "Bigger is Better" mein2.jpg
Leider existieren auch für F5, OutGuess und JPHS schon wieder frische mathematische Ansätze, mit denen sich die Algorithmen knacken lassen. Die Autoren der jeweiligen Programme werden sicherlich darauf reagieren – fast sicher ist, dass die prozentuale Einbettungskapazität in der nächsten Software-Generation weiter sinken wird. Deshalb bietet sich als alternatives Trägermedium eine MP3-Datei an, die auch bei Einbettungskapazitäten von weit unter einem Prozent noch genügend Platz bietet. Diesen Vorteil nutzt das Programm MP3Stego, das Nachrichten während des Kodierens im MP3 versteckt [10]. Eingebettet bzw. extrahiert wird mit den folgenden Kommandos, wobei darauf zu achten ist, dass die WAV-Datei in 16 Bit vorliegt:
encode_ix86 -E geheim.txt mein.wav mein.mp3 decode_ix86 -X mein.mp3 mein2.wav geheim2.txt
MP3Stego besteht darauf, neben den versteckten Daten auch die ursprüngliche WAV-Datei (bzw. das, was davon nach der Komprimierung noch übrig ist) auszugeben. Unterbinden lässt sich dieses "Feature", indem man statt mein2.wav /dev/null angibt.
Ein überzeugendes Feature von MP3Stego ist übrigens, dass keine Passphrase als Parameter beim Programmaufruf gesetzt werden muss, sondern nach Programmstart abgefragt wird. Allen anderen Tools fehlt diese Option leider – das gesetzte Passwort landet damit in der Historyder eigenen Shell. Wer sein Passwort also geheimhalten will, sollte vorher die (Bash-) History mit unset HISTFILE für den Rest der Sitzung deaktivieren.
Paranoia für Fortgeschrittene
Bei all der Verschlüsselung sollte man sich bewusst machen, dass weder AES noch irgend ein anderer kryptographischer Algorithmus (außer dem sehr unpraktischen One-Time-Pad) mathematisch beweisbar sicher ist, sondern diese nur den bisherigen Versuchen der internationalen Kryptoanalytiker-Gemeinde widerstehen konnten. Außerdem reicht es bei weitem nicht, den Algorithmus isoliert zu betrachten – das schwächste Glied befindet sich oft an einer völlig anderen Stelle im System. So kann ein im Computer versteckter Keylogger oder eine geschickt positionierte Kamera alle eingegebenen Daten inklusive des PGP/GPG-Mantras ausspähen und damit sämtliche Sicherheitsmaßnahmen umgehen.
Ein weiterer Schwachpunkt handelsüblicher Computer-Systeme ist die elektromagnetische Abstrahlung, die von praktisch allen Komponenten eines PCs (insbesondere vom Monitor) ausgeht. Wie gut sich diese Abstrahlungen selbst mit einfachsten Mitteln empfangen lassen, veranschaulicht das Programm Tempest for Eliza [11], das durch spezielle Muster auf dem Bildschirm Weltempfänger-taugliche Melodien im Kurzwellenbereich emittiert. Es ist zwar möglich, den Raum zu isolieren, in dem der Computer steht – allerdings breiten sich die Signale auch über jedes Kabel aus, was eine Isolierung extrem aufwendig macht. In dem isolierten Raum sollte also nach Möglichkeit nur ein Laptop stehen, auf dem am besten Tinfoil Hat Linux [12] läuft. Diese Distribution passt praktischerweise auf eine einzelne Diskette und bringt neben GPG auch (Tom Viers) Wipe mit. Gegen Keylogger schützt das enthaltene gpggrid, welches das Mantra buchstabenenweise aus einer zufällig erstellten Matrix wählen lässt. Außerdem aktiviert die "Paran0id"-Option im Tinfoil-Menü einen extrem kontrastarmen Farbmodus, der Beobachtern das Leben schwer (bzw. Optiker glücklich) macht, und sie lässt GPG im Hintergrund ständig Dateien verschlüsseln, um von der eigenen GPG-Instanz abzulenken.
Ebenfalls nützlich für Situationen, in denen selbst dem eigenen Bildschirm nicht mehr getraut werden kann, ist morseblink, mit dessen Hilfe sich Nachrichten über die LEDs des Keyboards morsen lassen. Im "Paran0id"-Modus wird morseblink genutzt, um Zufallsdaten zu morsen und somit die verräterische Abstrahlung der Tastatur zu überlagern. Eine Textdatei kann im Standard-Modus mit folgenden Kommando gemorst werden:
cat text | morseblink
Zu guter Letzt empfiehlt das Tinfoil Hat README noch eine Mütze aus Aluminiumfolie [13], um auch die eigenen Gedanken vor fremden Einflüssen zu schützen – die Ernsthaftigkeit der Distribution ist allerdings spätestens an diesem Punkt zu bezweifeln.
Kasten 1: Niederwertigste Bits
In vielen steganographischen Algorithmen wird ausschließlich das niederwertigste Bit verändert. Um dies zu verstehen, muss man wissen, wie die Darstellung von Zahlen im binären Kontext funktioniert. Als Beispiel nehmen wir dazu einen Bildpunkt einer 24-Bit-BMP-Datei, dessen Farbwert als Mischungsverhältnis aus Rot, Grün und Blau (RGB) gespeichert wird. In unserer BMP-Datei wird jeweils ein Byte (8 Bit) für jeden Farbwert gespeichert, woraus sich insgesamt 24 Bit pro Pixel ergeben.
In BMP-Dateien werden die Farbwerte in umgekehrter Reihenfolge gespeichert. In binärer Darstellung sieht das dann so aus:
Blau
Grün
Rot
Dezimal
198
113
47
Binär
11000110
01110001
00101111
:Wenn jetzt die Bits 101 eingebettet werden, ändern sich jeweils die die niederwertigsten Bits der drei Farb-Bytes:
Blau Grün Rot
Dezimal 199 112 47
Binär 11000111 01110000 00101111
Dezimal bedeutet eine Änderung an diesen Bits maximal eine Abweichung von 2
0, also +/- 1. Damit hat das niederwertigste Bit den kleinstmöglichen Einfluss auf den Wert der Zahl und somit auf die Farbe, die das menschliche Auge kaum von der Originalfarbe unterscheiden kann.
Glossar
chiffrieren
Eine Chiffre ist ein Verschlüsselungsalgorithmus, der einen Klartext – meistens mit Hilfe eines Schlüssels – in einen Chiffre-Text umwandelt.
XOR
XOR (exklusives Oder) ist eine Operation, die 0 ergibt, wenn beide Bits, auf die sie angewendet wird, den gleichen Wert besitzen. Bei unterschiedlichen Werten ist das Ergebnis 1. Beim Verschlüsseln mit XOR werden Klartext und Schlüssel einfach bitweise verknüpft. Zum Entschlüsseln wiederholt man den selben Vorgang, da sich der Schlüssel mit sich selbst auslöscht (K ⊕ S ⊕ S = K). Diese Art der Verschlüsselung ist allerdings nur so lange sicher, wie der Schlüssel nicht wiederholt wird, also nur mit einem Schlüssel, der so lang ist wie die Nachricht selbst (s. One-Time-Pad).
Patches
Ein Patchfile enthält Anleitungen, wie eine oder mehrere Dateien geändert werden sollen. Das spart Download-Aufwand, denn anstatt für eine neue Programmversion den gesamten Quelltext neu herunter zu laden, wird nur das Patchfile benötigt, wenn die ältere Programmversion noch vorliegt.
PRNG
Ein Pseudo Random Number Generator ist ein Algorithmus, der sehr lange, nach statistischen Gesichtspunkten zufällig erscheinende Datenreihen ausgibt. Falls der PRNG in einem kryptographischen Kontext eingesetzt werden soll, darf er weiterhin nicht voraussagbar sein, da sonst das komplette kryptographische System angreifbar wird. Bei offenen Algorithmen wird das in der Regel durch einen zufälligen Anfangszustand erreicht, der genau wie ein kryptographischer Schlüssel geheim gehalten werden muss und sich z. B. aus benutzerbedingten Ereignissen ergibt.
Mountpoint
Als Mountpoint bezeichnet man den Pfad, an dem ein Dateisystem "eingehängt" wird. Nach dem Mounten wird dann der Inhalt des Dateisystems als Teil des (als Mountpoint gewählten) Verzeichnisses angezeigt – alle bestehenden Daten im Verzeichnis werden dabei überdeckt.
diskreten Cosinus-Transformation
Die eng mit der Fourier-Transformation verwandte diskrete Cosinus-Transformation (DCT) wird bei der JPEG-Kodierung jeweils auf 8x8 Pixel große Bildblöcke angewendet und wandelt die dreidimensionale räumliche Zuordnung (die dritte Dimension ergibt sich aus den Werten der Pixel) innerhalb des Blocks in eine diskrete Frequenz-Amplituden-Zuordnung um. Die Frequenz der einzelnen Frequenzkoeffizienten ist dabei ein Maß für die Änderungen im Bild; eine gleichmäßige Fläche schlägt sich also in niedrigen Frequenzen nieder, während feine Details hohen Frequenzen entsprechen.
History
Die Bash (und die meisten anderen Shells) speichern alle während einer Sitzung eingegebenen Kommandos in einer History-Datei (standardmäßig ~/.bash_history). Mit dem Befehl unset HISTFILE wird die Umgebungsvariable mit der Position der History-Datei gelöscht und somit das Speichern der Befehle unmöglich.
One-Time-Pad
Beim One-Time-Pad ("Einmalblock") wird eine Nachricht mit einem komplett zufälligen Schlüssel in Länge des Klartextes verschlüsselt. Traditionell wurden dazu Nachricht und Schlüssel buchstabenweise modulo 26 (Rest der beim Teilen der Summe durch 26 bleibt) addiert. Heutzutage benutzt man binäre Nachrichten und Schlüssel, die man mit XOR verknüpft. Solange der Schlüssel wirklich zufällig ist und nur einmal verwendet wird, kann dieser Algorithmus nicht geknackt werden. Der Nachteil ist allerdings, dass man eine große Menge echter Zufallsdaten braucht und der Schlüssel genauso lang (und somit in vielen Fällen genauso schwierig geheimzuhalten) ist wie die Nachricht.
Keylogger
Ein Keylogger ist ein Programm oder Gerät, das alle Tastenanschläge mitliest und somit Passwörter und andere sensible Daten preisgibt.
PGP/GPG-Mantra
Als Mantra bezeichnet man das Passwort, mit dem PGP und GPG den privaten Schlüssel chiffrieren und so vor fremdem Zugriff sichern.
Infos
[2] http://loop-aes.sourceforge.net/
[3] http://www.kernel.org/pub/linux/utils/util-linux/
[4] http://gsu.linux.org.tr/wipe/
[5] http://freshmeat.net/projects/securedelete/
[6] http://wipe.sourceforge.net/
[8] http://wwwrn.inf.tu-dresden.de/~westfeld/f5.html
[9] http://linux01.gwdg.de/~alatham/stego.html
[10] http://www.mirrors.wiretapped.net/security/steganography/mp3stego/
[11] http://www.erikyyy.de/tempest/



