Warte nur ein Weilchen…

Doxygen endlos
Ich habe Doxygen auf ein etwas größeres Projekt losgelassen. Das war Vorgestern, genauer gesagt vor 38 Stunden… Zum Glück hat sich noch niemand beschwert wegen der CPU-Last 🙂

and thanks for all the fish://

Heute habe ich von der netten Dame an der Rezeption ein neues WLAN-Ticket bekommen und kann nun fröhlich das Internetz leersaugen. Ich habe zwar lauter Filme mitgenommen, die ich schon immer mal sehen wollte, aber da man beim Musikhören herumhacken kann, ziehe ich mir Musik von zu hause.
KDE ist toll. Mit fish:// stöber‘ ich auf meinem Server und entdecke die Perlen in meiner MP3-Sammlung wieder. Warum muss man dafür immer erst hunderte von Kilometern fahren?

KDE Anwendungen fernsteuern

KDE dcop Browser
Mit dem dcop-Browser kdcop kann man sehr bequem die öffentlichen Interfaces beliebiger KDE-Komponenten erkunden.
Noatun stellt in der Klasse Noatun die Methoden playpause(), stop(), forward() und back() bereit. Wie praktisch, dass mein Notebook über „Multimediatasten“ mit der gleichen Bezeichnung verfügt 🙂 Über den Ausführen-Knopf (STRG-E) kann der Methodenaufruf getestet werden.
Wird die erwartete Funktion ausgeführt, kann der entsprechende Fernsteuerungsbefehl in ein Script gegossen werden. Die Syntax dabei ist
dcop [Komponente] [Klasse] [Methode] [Parameter]
z.B.
dcop noatun Noatun playpause
Tja, häte ich gestern mal nachgeschaut, was ich heute in mein Blog schreibe. Dann wäre mir die Sucherei erspart geblieben… 😉

Großmutter, warum hast du so große Ohren?

Diesem Thema widmet sich morgen das Chaosradio:

„Flirten, Lästern, Tratschen. Und niemand hört mit.“ – so warb 2002 die Bundesregierung um Vertrauen in eine funktionierende Demokratie mit intakten Bürgerrechten. Seit dieser Werbekampagne ist das Fernmeldegeheimnis stark eingeschränkt worden und trotz eines strengen Urteils des Bunderverfassungsgerichtes zum großen Lauschangriff steigen
die Zahl der Telefonüberwachung kontinuierlich stark an.
Seit Beginn dieses Jahres hat die Telekommunikationsüberwachung eine neue Dimension: Internet-Provider und E-Mail-Anbieter sind verpflichtet, den Behörden umfangreiche Schnittstellen zum Einblick in die E-Mail-Postfächer zur Verfügung zu stellen. Neben den horrenden Kosten, die letztendlich von den Kunden getragen werden müssen, bedeutet diese Möglichkein einen massiven Angriff auf das Fernmeldegeheimnis.
Chaosradio will mit euch über die neuen Einschränkungen sprechen und Tipps für die sichere Kommunikation geben.

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…