Camp Diskordia I

Etwas orientierungslos folge ich den wenigen verschlafenen Gestalten bis zum FEZ. Nachdem ich eine 20 Minuten brauche die Kasse zu finden, beginnt das „check-in“ Prozedere. Ein wichtiger Mensch hinter einem verkeimten Notebook verweist mich an den Kassenwart. Dieser kassiert das Geld, händigt mir einen Flyer als Quittung aus und schickt mich zurück zum wichten Menschen. Mein Ausweis ist unbedingt notwendig, der Protest verhallt im Bierzelt. Warum Name und Geburtsdatum unbedingt notwendig sind, um mir eine Eintrittskarte zu verkaufen erfahre ich nicht. Dafür bekomme ich eine schicke Badge, die hier jeder um den Hals hängen hat. Entscheidend ist aber das Bändchen am Handgelenk, das ich stolz am Eingang vorzeige.

Das ganze hätte ich mir sparen können, am „Camp“ findet keine Einlasskontrolle statt. Herr Maguhn lässt sich Zeit, mit 20 Minuten Verspätung startet nun Sicherheit nach dem 11. September. Mal kucken, wie es wird…

21C3: Watch you DNS-traffic!

21C3: Watch your dns traffic!
Dan Kaminsky hat in seinem sehr lebhaftigen und witzigen Vortrag über die weniger bekannten Möglichkeiten von DNS gesprochen.
Weil DNS durch jede Firewall kommt, liegt es doch nahe, DNS als Transportschicht für Daten zu nutzen. Es gibt Gerüchte, dass Viren- und Botprogrammierer diese Technik für sich entdeckt haben, denn IRC scheitert meist an der Firewall.
Eigentlich kann man alle Record-Typen benutzen, praktikabel sind jedoch TXT, A und PTR Records, weil sie am gebräuchlisten sind bzw. viel Daten transportieren können. Alles was man braucht, ist ein bösartiger DNS-Server. Um zu beweisen, dass man alles über DNS tunneln kann, wurde praktisch SSH via DNS und Webradio via DNS vorgeführt. Das Tunneling kann sehr interessant werden, wenn man im Starbucks sitzt und keine Lust hat, für den Netzzugang Geld zu bezahlen. Die WLAN-Router lassen nämlich in 99% der Fälle DNS durch. Irgendwie muss der zahlungswillige Kunde ja auf die Login-Seite kommen, oder ? 😉
Diese Idee kann man noch weiter spinnen, so ist eine Peer-To-Peer System auf DNS-Basis vorstellbar. DNS-Server sind so nett, Daten mit einer von uns festgelegten Dauer zwischenzuspeichern. Ich könnte meine MP3s auf einer gewissen Anzahl von Servern ablegen und diese Adressen meinen Freunden geben. Datentransport über DNS ist zwar nicht besonders schnell, aber es gibt Millonen DNS-Server dort draußen…

21C3: Der unbekannte serielle Bus.

21C3: Unbekannter serieller Bus
1stein referierte über die unteren Protokollschichten des Unbekannten Seriellen Buses. „Jeder hat es, keiner weiss, wie es funktioniert“ 😉
Er gab einen sehr guten Überblick über die Low-Level Kommunikation auf dem USB. Zum Schluss erklärte er seinen Hackerport, der die Möglichkeiten der aussterbenden parallelen Schnittstelle (und noch viel mehr) über USB bereitstellt.

21C3: Gnome Anwendungsentwicklung

21C3: Sven Herzberg über Gnome Anwendungsentwicklung
In Gnome Anwendungsentwicklung ging es hauptsächlich um das objektorientierte C-Framework, auf dem GTK und Gnome basieren. Gnome began als reines C-Projekt, die Objektorientierung wurde nicht etwa mit dem Umstieg auf C++ eingeführt, sondern mit GObject und seinen Erben.

Ich sehe diese Technologie mit gemischten Gefühlen. Einerseits sind gute Ansätze dabei, es gibt endlich eine echte Typprüfung, die nicht mal C++ von Hause aus liefert. Andererseits sehe ich den entsprechenden Code und muss vor Schmerz aufstöhnen.

Es wird teilweise Code generiert, Makros werden exzessiv verwendet und die Strukturen kommen mir höllisch kompliziert und fehleranfällig vor.

Interessant war, dass alle Entities Namensstrings und mitunter einen kleinen Kommentar für die API-Doku bekommen können. Diese werden dann für Debugging oder Introspection genutzt, z.B. kann ein GUI-Builder daraus Nutzen ziehen.
Neben privaten Membern kann man noch Properties definieren und diese mit Lese- und Schreibrechten versehen.
Das GInterface klingt wie Java Interfaces und funktioniert auch in etwa so. Es gibt Prerequisits, damit kann man definieren, dass ein Interface nur von Klassen implementiert werden darf, die von Klasse XYZ abgeleitet wurden.

Mit gtkmm steht die C++ Version des Frameworks bereit, das sollte ich mir auf jeden Fall ansehen.

21C3: SUN Bloody Daft Solaris Mechanisms

21C3: SUN Bloody Daft Solaris Mechanisms
Archim hat in seinem Vortrag die Möglichkeiten vom Solaris-Debugger dtrace beleuchtet. Sehr interessant war, dass man damit belibige Funktionen und deren Parameter von Programmen im Userspace beschnüffeln kann. So auch die Signierfunktion von gpg: bösartige Roots oder Nutzern von Rootkits können damit elegant die Passphrasen der Nutzer abgreifen. Es ging außerdem um neuere Rootkit-Techniken und das Aufspüren solcher Angriffe.

21C3: Gentoo Hardened Toolchain

21C3: Gentoo Hardened

Pappy, gekleidet wie ein Consultant 😉 stellt Gentoo Hardened als neues Projekt vor.

Gentoo Hardened möchte es dem User so einfach wie möglich machen, ihn also nicht mit den technischen Details belästigen, sondern konkrete Dokumentation zur Verfügung zu stellen, wie er Gentoo Hardened auf den verschiedenen Plattformen zum Laufen bekommt. Wenn er mehr über den technischen Hintergrund erfahren möchte, kann er in der Dokumentation nachsehen oder auf den Chaos Congress gehen 🙂

Das Problem: Features wie Stack Smash Protection (SSP) kosten Performance, besonders auf der x86 Architektur – dort etwa drei bis fünf Prozent. Nicht auf AMD64, da dort das entsprechende Register schon existiert, RISC-Plattformen sind auch etwas besser drann.

In Gentoo Hardened ist jetzt ziemlich neu, dass der Stack Smash Handler in glibc untergebracht wurde. Aufgrund einer Race-Condition kamen die GH-Leute mit OpenBSD-Leuten ins Gespräch, diese bringen den Handlercode in der libc unter, was für GH die Lösung des Problems war.
Der Handler wandert an eine zentrale, wartbare Stelle, und lungert nicht mehr in jedem Executable herum. Änderungen daran wirken sich dementsprechend ohne neucompilieren der Applikationen sofort aus.

Neben SSP wird noch PIC (position independend code) und PIE (position independent executables) eingesetzt, was auf x86 nochmal bis zu 20 Prozent Performance kostet.

Ich denke Gentoo Hardened macht viel Sinn auf produktiven Servern an exponierter Stelle. Auf dem Desktop werde ich es sicherlich nicht testen, auf meinem Server läuft Debian.
Günstigerweise wurde das noch junge Debian Hardened Projekt von Gentoo-Hardened inspiriert, ein Grund es sich in den nächsten Monaten genauer anzusehen.

21C3: Passive Covert Channels in the Linux Kernel

Joanna Rutkowska: Passive covert channels
Gestiefelt und im ledernen Minirock war die polnische Sicherheitsexpertin Joanna Rutkowska wahrlich die meistfotografierte Vortragende. Diesen Titel hat sie sich aber wahrlich verdient, sie sieht sehr gut aus, trägt die komplexe Materie der Kernelprogrammierung locker und witzig vor und zieht mit ihrem Charme alle Zuschauer in ihren Bann 😉

Ich habe trotzdem versucht mich auf den Inhalt des Vortrages zu konzentrieren. Joanna hat eine Backdoor-Technologie entwickelt, die es ermöglicht, von einen angegriffenen Computer rein passiv Nachrichten abzusenden. Das könnten z.B. mitgesniffte Passwörter sein.
Rein passiv bedeutet, dass sie mit einem kernel-modul die Sequenznummern der ausgehenden Pakete manipuliert und diese als Datenträger mißbraucht. Wenn der User eine Webseite öffnet, sendet er gleichzeitig Daten an den Angreifer, der diesen Traffic natürlich noch mitsniffen muss, um an die Informationen in den Sequenznummern zu kommen.
Mit dieser Technik können 4 Bytes pro TCP/IP Connect übertragen werden, wobei 3 Bytes Nutzdaten sind und ein Byte als Control-Byte herhalten muss. Selbstverständlich werden die ausgehenden Daten verschlüsselt, damit die Sequenznummern dem Administrator immer noch zufällig vorkommen. Wenn man die Idee weiterdenkt, ist auch eine rein bidirektionale Übertragung mit dieser Technologie möglich.

21C3: Check the fucking fingerprints!

Check the fucking fingerprint!
In Seth Hardy’s Vortrag „Learning OpenPGP by example ging es um Angriffe auf PGP Schlüssel und die Infrastruktur des Web of Tust. Er zeigte, wie es möglich ist, doppelte Key IDs zu erzeugen und was man damit machen kann. Daher der Spruch „check the fucking fingerprints„: die Leute sollen nicht nur Key ID und e-Mail Adresse von Schlüsseln überprüfen – der Fingerprint ist die wichtigste (und aufwändigste) Prüfung.

21C3: Weird Programming 2

21C3 Weird Programming 2
Markus Schaber stellte ähnlich wie im letzten Jahr in Weird Programming 2 programmiertechnische Meisterwerke vor. Interessant war ein IOCCC-Beitrag der ein Betriebssystem, GUI und vi in gut 400 Zeilen C-Code unterbrachte. Je nachdem, welche makefile-Optionen man setzt, wird ein Teil des Systems erzeugt. Die Komponenten kann man dann zusammen packen und booten.

Es wurden Beispiele für meisterhaften Code gezeigt, die allesamt aus produktiven Sourcen stammten. Besonders hervorgetan hat sich OpenMDX, die Jungs haben verstanden, was es heisst objektorientiert zu programmieren 😉 Die Krönung war eine Funktion, die sich um Whitespace-Erzeugung für XML-Dateien kümmert:

private String spaces(int number) {
    char[] indent = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',↵
    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',↵
    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',↵
    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',↵
    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
    return(new String(indent, 0, number));
}

Die Folien und weitere Links finden sich auf Schabis WP2 Page, da sollte der geneigte Programmierer unbedingt reinsehen. Als weitere Reisetipps wurden noch thedailywtf.com empfohlen. Schönes Zitat aus dem Vortrag: „Three lines of code and 30 minutes to recover from„.

Auf geht’s

Ich bin heute und morgen auf dem 21C3 anzutreffen und werde, sofern das WLAN denn mal funktioniert, von dort berichten. Spitzen Sie Augen und Ohren 😉

20C3 – Tag 3

Der Windows (In)security Vortrag drehte sich im Prinzip um Angriffe, die von der Windows-Architektur begünstigt werden. Hilfreich ist dabei, dass Windows ein nachrichtengesteuertes System ist und Techniken wie DDE, OLE, COM und diverse Abarten davon zur Verfügung stellt.

Es wurde der bekannte WM_TIMER Angriff erläutert, neu war für mich die Idee, den Code über die Nachricht WM_SETTEXT zu injezieren. Man kann damit den Code in jedes sichtbare und unsichtbare Control injezieren, dieser wird dann mit dem Function-Pointer der an WM_TIMER übergeben wird, angesprungen.

Als praktische Anwendung für diese Angriffe eignen sich personal firewalls hervorragend, da sie einem höheren Security Context laufen, als die User-Space Applikationen und es damit möglich ist, den gewünschten Code im Kontext der Firewall auszuführen.

DDE ist seit Windows 2.0 eine komfortablere Möglichkeit u.a. mit Window-Messages umzugehen, OLE ist der objekt-orientierte Oberbau des ganzen, OLE Automation ist der Autopilot für Hacker.
Man muss also nicht mehr wie wild Windows-Messages durch die Gegend schicken, sondern bemüht Methoden wie dde_execute (?). Das ganze lässt sich natürlich auch aus der Ferne auslösen, schliesslich gibt es die bombensichere RPC-Schnittstelle in Windows 😉

Eine nette Möglichkeit in einem mit Policies „abgesicherten“ Windows eine Shell zu bekommen wurde auch noch erläutert: einfach in $APPLIKATION ein OLE-Objekt „cmd.exe“ einfügen. Damit umgeht man sämtliche Policies…

Die weiteren Vorträge habe ich mir dann geklemmt, Bug Hunting war zu voll, Biological Weapons etwas langweilig und bis zum Vortrag von Jörg war es mir zu lang. Ich bin dann abgehauen und habe mein Schlafdefizit nachgeholt 🙂

20C3 – Tag 2

Im ersten Votrag erklärte Andrew „bunnie“ Huang das Hacken der X-Box Hardware. Es wurde detailliert auf die Schutzmechanismen der X-Box und deren Schwächen eingegangen.

So war z.B. im Flash-Rom ein Fake-Bootsector untergebracht, der nie angesprungen wurde, sondern lediglich zur Verwirrung des Angreifers beitragen soll. Nachdem klar wurde, dass der Inhalt des Flash-ROMs (X-Box Kernel) durch Verschlüsselung und Prüfsummen geschützt ist, wurden andere Möglichkeiten für Angriffe gesucht, u.A. wurde eine X-Box komplett von ihren Chips ‚befreit‘, die Northbridge wurde geöffnet und unter dem Mikroskop studiert.

Der erfolgreiche Ansatz war Bus-Sniffing, also die Datenleitungen auf der Platine abzuhören, um so die unverschlüsselten Datenströme lesen zu können. Andrew hat dafür die Leiterbahnen mit Sandpapier freigelegt und ein Interface für seinen Logic-Analyzer gebaut:

Ausgenutzt wurde schliesslich eine Schwäche des verwendeten Hash-Algorithmus, bei diesem können vier bestimmte Bits gekippt werden, ohne dass sich der Hashwert ändert. Damit war es möglich einen veränderten Public-Key einzuschleusen, der trotzdem dem Hash entsprach, mit diesen Key kann dann eigener Code (z.B. ein Linux Bootloader) signiert werden.

Der zweite Teil des Vortrages befasste sich mit der Installation von Linux auf der X-Box. Es wurden die verschiedenen Exploits und der MechInstaller vorgestellt, mit dem auch unbedarfte User Linux auf ihrer X-Box installieren können.

Ein großes Problem ist, dass die Exploits leicht für die Erstellung von Raubkopien benutzt werden können, womit das xbox-Linux Projekt natürlich nichts zu tun haben möchte. Selbst die Quellcodes der Exploits und des MechInstallers wurden nicht veräffentlicht und waren nur wenigen eingeweihten Personen zugänglich. Nachdem Michael Steil diesen Fakt ausführlich betont hatte, fiel der USB-Stick mit den Sourcen ‚zufällig‘ ins Publikum… 😉

Zum Abschluss gab es eine Demonstration des MechInstallers und natürlich Linux auf der X-Box:

Im Wettbewerb „Homöomorphe Endmontage“ sollten die Teilnehmer ein Legomodell zusammenbauen, ohne Plastiktüte zu öffnen. Den angestrengten Gesichtern nach zu urteilen ist es ein Heidenspaß 😉

Aus dem PGP-Usersguide wurden alle Leute rausgeschmissen, die keinen Computer dabei hatten, weil es ein richtiger Workshop zum Mitmachen sei. Da mein Notebook zu dem Zeitpunkt nicht mal XFree86 installiert hatte, war an gpg nicht zu denken und deshalb habe ich mich zu Herrn Tauss gesetzt und seine Gedanken zur Maschinenlesbaren Regierung gelauscht.

Soweit war der Vortrag nicht besonders interssant, natürlich ist die Bundesregierung an der Informationsfreiheit interessiert, aber der zugrundeliegende Beamtenapparat scheint noch nicht willig zu sein, dieses Projekt mitzutragen.
Nett war noch die Tatsache, dass Joerg Tauss die Aufkleber „Aus hygienischen Gründen wird diese Toilette videoüberwacht“ gekauft hat und auch schon weiss, wo er diese anbringen wird. Ich hoffe auf einen kleinen Aufruhr im Bundetag 😉

In Practical Win32 and unicode exploitation (der Vortrag bekommt den Preis für die besten Folien 😉 ging es im wesentlichen um die Problematik, dass injezierter Code durch die automatische Umwandlung auf Windows-Plattformen in Unicode unerwünschte 0x00en oder sonstigen Strunz enthält. Diese Tatsache kann man jedoch bewusst ausnutzen und die 0x00en zum Code machen oder die entsprechenden Translation tables benutzen, in denen keine Nullen erzeugt werden (OEM z.B.)
Nebenbei wurde noch erklärt wie man den Structured Excption Handler (SEH) von Windows überschreibt um selbst produzierte Exceptions (versehentliche Zugriffe auf nicht gemappte Speicherseiten) abzufangen (Der SEH ruft normalerweise Dr. Watson). Mit diesem Trick kann man die gesamten 4 GB Speicher nach dem eigentlichen Shellcode scannen um ihn dann zur Ausführung zu bringen.

FX von phenoelit hat zu diesem Zweck ein Plugin für seinen Debugger und ein Perlscript geschrieben, dass die Erstellung von „Unicode-kompatiblen“ Windows-Exploits sehr vereinfacht. 2004 wird garantiert ein spannendes Jahr der Viren und Würmer…

20C3 – Tag 1


Der Congress beginnt für mich mit den Worten „Du Schatz, es ist schon um 9…“. Shit – verschlafen 🙁 Ich bin dann 10:20 am BCC, wo mich eine riesiege Schlange erwartet, der Grund warum ich eigentlich früh aufstehen wollte.


Nach 45 Minuten habe ich mein Ticket und kann mich erstmal umsehen. Das BCC hat schon seinen Charme, besonders die Lampen an der Decke 😉


Der grosse Saal sieht etwas klein aus, es passen vielleicht die Hälfte der Leute rein, die sonst im HAKP unterkommen. Neben dem Hackcenter sind die Haecksen, Engel, der Workshop-Raum und die Lockpicker untergebracht. Das Hackcenter selbst ist auch nicht besonders groß, es geht aber erstaunlich gesittet zu. Kein Wunder, es gibt kaum kabelgebundenes Netzwerk, das WLAN röchelt auch in den letzten Zügen.

Im NOC-Preview gibt es die erste Überraschung, für feste IPs im WLAN ist IPSec Pflicht, ausserdem funktioniert das WLAN mit ‚Anmeldung‘.
Das größte Problem ist zur Zeit DHCP im WLAN. Die Leases gibt es über 150 Sekunden, selten jedoch bekommt man brauchbare Geschwindigkeiten, mitunter schläft apt-get bei 500 Bytes / Sekunde ein.


Die Amateurfunkeinführung hat auf die rechtlichen Grundlagen des ganzen hingewiesen.

In Bits und Bytes verschieben wollte der Vortragende die Zuhörer für den Selbstbau digitaler Schaltungen begeistern, es war mehr eine Einführung und hat nur grundlegende Stichpunkte für den Einstieg vermittelt. Trotzdem war es brechend voll.


Der nächste Vortrag ist dann Der Missbrauch von Java, HTTP und XML in dem ein leidgeplagter Entwickler über den Irrsinn der Software-Entwicklung im Mobildfunkbereich berichtet. Man hat in dem Vortrag den Eindruck bekommen, dass die Mobilfunkbranche ein chaotischer, Buzzword-verseuchter Drecksladen ist. Bestes Zitat: ‚Java wird schneller langsamer als Computer schneller werden‘.

Die Hauptanklagepunkte sind, dass XML als Datenspeicher für alles herhalten muss (hauptsache XML), dass XML als Hierarchische Datenbank missbraucht wird, mittels „XML over HTTP“ alle Daten transportiert werden (juchu – noch eine Schicht) und dass XML als Heilmittel gegen alle Probleme des Software-Engineerings gepriesen wird, was zu Konstrukten wie „XML als Zwischenschicht zwischen Datenbank und Applikation“ führt.

Jede neue Software wird in Java geschrieben, weil es die „Schlipsträger“ poppig finden, scheiss auf die Performance, die Hardware wird’s schon richten. Der Begriff der Klopapierprogrammierung hat es mit besonders angetan, er steht für Wrappende Wrapper wrappen Wrapper die wrappen oder so ähnlich, also zig Schalen um vorhandene Bibliotheken.
Weil Java als Lehrsprache verwendet wird, ist sie scheinbar die Lösung aller Probleme. Beim Lernen wird strukturierte Programmierung trainiert („Hello world“), statt sofort Objekt-orientiertes Denken zu vermitteln.

Ein schönes Beispiel war die Story über einen Handy-Provider, der eine eingehende SMS via HTTP auf seinen Server weitergeleitet bekommen möchte. (Bedingung nur nachts und maximal eine SMS pro Sekunde, wegen der Systemlast…. har har har). Als Erfolg oder Mißerfolg gab es keine ordentliche HTTP-Response, sondern ein HTTP-Redirect auf eine wildfremde Adresse mit angehängtem success=Y …

Der nächste Vortrag „Antennen selbst bauen“ war ziemlich schlampig, es lief im Prinzip darauf hinaus, dass die Vortragenden Antennen-Bausätze zur Verfügung stellen werden, weil sie Zugriff auf genaue CNC-Maschinen haben. Diese Bausätze werden dann über die CCC-Strukturen verkauft.


„Sniffen für Fortgeschrittene“ war eine Einführung in tcpdump und ethereal, nicht unbedingt neues, aber trotzdem eine gute Zusammenfassung der Sniffing-Möglichkeiten. Herr C. hat auch gleich losgesnifft und tatsächlich einen Idioten gefunden, der über ungesichertes POP3 seine Mails abruft…


Mein letzter Vortrag war eine Einführung in Python, sehr interessant, obwohl die Sprache den dreckigen Charme von PHP hat. Die Garbage-Collection in Python ist um einiges eleganter als in Java, nicht mehr benötigte Objekte werden z.B. sofort gelöscht (Java GC räumt erst auf , wenn der Speicher wirklich voll ist).

Danach habe ich noch ein bisschen Blinkenlights angekuckt und bin dann nach hause gefahren.