{"id":212,"date":"2007-08-09T23:14:40","date_gmt":"2007-08-09T21:14:40","guid":{"rendered":"http:\/\/www.mitternachtshacking.de\/blog\/212-ccc-camp-testing-and-exploiting-flash-applications"},"modified":"2018-05-31T17:54:44","modified_gmt":"2018-05-31T16:54:44","slug":"ccc-camp-testing-and-exploiting-flash-applications","status":"publish","type":"post","link":"https:\/\/www.mitternachtshacking.de\/blog\/212-ccc-camp-testing-and-exploiting-flash-applications","title":{"rendered":"CCC Camp: Testing and Exploiting Flash Applications"},"content":{"rendered":"<p>Fukami ist einfach gut. Der Vortrag \u00fcber <a href=\"http:\/\/events.ccc.de\/camp\/2007\/Fahrplan\/events\/1994.en.html\">Testing und Exploiting Flash Applications<\/a> war allererste Sahne. Am Anfang kurz die Grundlagen erkl\u00e4rt, dann typische Problemklassen beschrieben, die Sicherheitsrisiken an konkreten Beispielen vorgef\u00fchrt und das alles so, dass der HighLevel-Betrachter verstehen konnte, dass Flash ein Problem sein kann aber gleichzeitig mit so vielen Details, dass mir jetzt auch klar ist, wo genau die Probleme sind.<\/p>\n<p>1. Die Grundlagen<\/p>\n<p>Von Flash gibt es eine Reihe von Generatoren, die Flash-Movies erzeugen k\u00f6nnen jedoch nur den offiziellen Player von Adobe, da keine weiteren Player erlaubt sind. Flash besteht aus einer Skriptsprache (ActionScript, aktuell ist v2 weit verbreitet und v3 kommt gerade mit neuen Funktionen). Flash ist u.a. f\u00fcr Audio\/Video-Anwendungen sehr beliebt. Zu Flash kommt Flex dazu, eine SDK mit IDE, im Grunde besteht das aus Flash 9, Interface Libraries und einem Eclipse Plugin. AIR ist die Adobe Integrated Runtime f\u00fcr Desktop-Anwendungen. Bereits wenn man an dieser Stelle auf Flash guckt, fallen ein paar gef\u00e4hrliche Eigenschaften auf: Flash kann HTTP Request Forgery, kann JavaScript, &#8230; \u00e4h<\/p>\n<p>2. Die Sicherheit<\/p>\n<p>Flash hat seit Version 7 ein Security Modell, das haupts\u00e4chlich auf der &#8222;Same Origin Policy&#8220; basiert. In Version 8 und 9 wurde das Modell vereinfacht, aber auch ein Player Version 9 wendet die alte Policy an, wenn ein Flash Version 7 Movie abl\u00e4uft. Dar\u00fcber hinaus gibt es in Flash einen Persistent Local Datastore f\u00fcr Shared Objects. Da kann der Flash-Movie beliebige Daten hereinlegen, maximal jedoch 100 KB. Die Daten haben kein Expiration Date, sind nicht einfach l\u00f6schbar und auf einigen Plattformen sogar Cross-Browser erhalten. Damit hat man schon einen krass permanenten Speicher, wenn man einen Webseitenbesucher wieder identifizieren will.<\/p>\n<p>3. Die Angriffe<\/p>\n<p>Das f\u00e4ngt schon mal an mit Local Connection Objects die verwendet werden, damit zwei Flash-Movies miteinander Nachrichten austauschen k\u00f6nnen. Die Nachrichten werden nicht gefiltert, da kann mal also sehr gut XSS oder JavaScript durchschleusen. Und Flash kann ja bekanntlich Javascript. Lustig ist es auch mit den Variablen. F\u00fcr uninitialisierte Variablen gilt in etwa das gleiche wie bei PHP mit register globals. Da man Variablen \u00fcber die URL, FlashVar oder localVars.AS-Objekt \u00fcbergeben kann, ist jede uninitialisierte globale Variable eine potentielle Gefahr. Die Sandbox in der Flash abl\u00e4uft ist zwar ganz sinnvoll, aber weitgehend beschr\u00e4nkt auf die Same Origin (FQDN) Policy sowie eine Cross Domain Policy, die als XML-File geladen werden kann.<\/p>\n<p>4. Client Side Attacks<\/p>\n<p>Auf Client-Seite ist vieles m\u00f6glich, XSS, XSF (Cross Side Flashing), Mass Exploits, Backdoors und vieles mehr. Die Funktion getURL() in ASv2 erlaubt beispielsweise JavaScript- und DOM-Aufrufe. Fukami spricht hier von PDNF (Potentially Dangerous Native Function). Au\u00dferdem gibt es HTML in Flash (HTML-Injection beispielsweise durch das CreateTextField oder den Anchor-Tag), daf\u00fcr muss die Anwendung aber als Flash 7 kompiliert werden.<\/p>\n<p>5. ActionScript v3<\/p>\n<p>Noch viel lustiger wird es mit ActionScript Version 3, da gibt es lustige neue Funktionen. Auf jumperz.net gibt es einen in Flash programmierten Portscanner, der vom Client aus die IP-Adresse 127.0.0.1 scannt. Die Gefahr von Socket-Operationen sollte eigentlich bekannt sein, JavaScript verzichtet aus gutem Grund darauf.<\/p>\n<p>6. Tools<\/p>\n<ul>\n<li>Flare &#8211; Decompiler<\/li>\n<li>MTASC &#8211; Compilter<\/li>\n<li>Flasm &#8211; Disassembler<\/li>\n<li>SWFmill &#8211; SWF\/XML-Converter<\/li>\n<li>Debugger-Version des Flash Players<\/li>\n<li>SWFTools &#8211; Programme zur SWF-Manipulation, z.B. swfcombine<\/li>\n<li>haXe &#8211; ASv2\/v3-Compiler<\/li>\n<\/ul>\n<p>7. Neue L\u00fccken<\/p>\n<p>Neue L\u00fccken werden kommen, beispielsweise:<\/p>\n<ul>\n<li>RTMP\/AMF buffer overflows<\/li>\n<li>Data handling Fehler f\u00fcr Media Server \/ Plugins<\/li>\n<li>Breaking the Sandbox<\/li>\n<li>ASv3 Decompiler \/ Source Code Analyzer<\/li>\n<li>RTMP\/AMF Proxy\/Fuzzer<\/li>\n<li>DNS Rebinding<\/li>\n<\/ul>\n<p>8. Weitere Informationen<\/p>\n<p><a href=\"www.flashsec.org\">www.flashsec.org<\/a><\/p>\n<p>Zusammenfassend ein richtig klasse Vortrag mit coolen wenig bekannten Informationen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fukami ist einfach gut. Der Vortrag \u00fcber Testing und Exploiting Flash Applications war allererste Sahne. Am Anfang kurz die Grundlagen erkl\u00e4rt, dann typische Problemklassen beschrieben, die Sicherheitsrisiken an konkreten Beispielen vorgef\u00fchrt und das alles so, dass der HighLevel-Betrachter verstehen konnte, dass Flash ein Problem sein kann aber gleichzeitig mit so vielen Details, dass mir jetzt [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,8],"tags":[],"_links":{"self":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/212"}],"collection":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/comments?post=212"}],"version-history":[{"count":0,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}