{"id":219,"date":"2007-08-11T23:14:36","date_gmt":"2007-08-11T21:14:36","guid":{"rendered":"http:\/\/www.mitternachtshacking.de\/blog\/219-ccc-camp-zert-vml-ani-and-third-party-patches"},"modified":"2018-05-31T23:05:19","modified_gmt":"2018-05-31T22:05:19","slug":"ccc-camp-zert-vml-ani-and-third-party-patches","status":"publish","type":"post","link":"https:\/\/www.mitternachtshacking.de\/blog\/219-ccc-camp-zert-vml-ani-and-third-party-patches","title":{"rendered":"CCC Camp: ZERT: VML, ANI and Third-party Patches"},"content":{"rendered":"<p>Gil Dabah, u.a. Autor des diStorm Disassembler hat in diesem <a href=\"http:\/\/events.ccc.de\/camp\/2007\/Fahrplan\/events\/2051.en.html\">Vortrag<\/a> die M\u00f6glichkeiten des Binary Patchings am Beispiel von zwei Microsoft L\u00fccken (VML, ANI) vorgestellt und dabei ein wenig Werbung f\u00fcr seinen Arbeitgeber <a href=\"http:\/\/zert.isotf.org\/\">ZERT<\/a> (Zeroday Emergency Response Team) gemacht. Insgesamt war der Vortrag aber sehr ausgewogen, er hat nicht nur auf Vorteile des Binary Patchings hingewiesen sondern auch auf die m\u00f6glichen Probleme und Gefahren und es den Teilnehmern \u00fcberlassen, daraus ihren Schluss zu ziehen. Der Vortrag hat mir auch aus diesem Grund recht gut gefallen.<\/p>\n<p>Patching wird von Gil definiert als \u00c4nderung von Daten oder Code, die das Verhalten eines Programms ver\u00e4ndern. Das vielleicht bekannteste Beispiel von Binary Patching sind Game Cracks, nach deren Anwendung sich ein Spiel ohne zugeh\u00f6rige CD bzw. Registrierungscode spielen l\u00e4sst.<\/p>\n<p>Typische Probleme beim Patchen von Binaries sind:<\/p>\n<ul>\n<li>verschiedene Binary Versionen<\/li>\n<li>Code \u00c4nderungen \/ Verschiebungen des Programmcodes im Binary<\/li>\n<li>Kein Platz im Binary f\u00fcr Zusatzcode<\/li>\n<li>Konkurrierendes Hot Patching von Microsoft<\/li>\n<li>Windows File Protection, das \u00c4nderungen an Systembibliotheken verhindert<\/li>\n<li>Virenscanner Probleme (modifizierte Binaries)<\/li>\n<\/ul>\n<p>Insgesamt ist daher das \u00c4ndern von Systemdateien gar nicht so einfach. Der Bin\u00e4rpatch kann auf verschiedene Art erzeugt werden:<\/p>\n<p>PE-Patching<\/p>\n<ul>\n<li>Ein Portable Executable Binary ist ein komplettes ausf\u00fchrbares Programm unter Windows.<\/li>\n<li>Beim PE-Patching wird das komplette Programm angepasst, was auch \u00c4nderungen der PE-Struktur erfordert<\/li>\n<li>In kurzer Zeit nicht verl\u00e4\u00dflich durchzuf\u00fchren, da meist gr\u00f6\u00dfere \u00c4nderungen erforderlich sind<\/li>\n<li>Insgesamt sehr aufwendig<\/li>\n<\/ul>\n<p>Per-Version Patching<\/p>\n<ul>\n<li>Jede einzelne Version eines Binaries wird passend gepatcht<\/li>\n<li>Ben\u00f6tigt alle vorhandenen Programmversionen<\/li>\n<li>Wenn einzelne Versionen unbekannt sind, kann der Patch nicht angewandt werden<\/li>\n<\/ul>\n<p>Hot Patching Bytes<\/p>\n<ul>\n<li>M\u00f6glich, wenn der Patch nur an wenigen Stellen angewandt werden muss<\/li>\n<li>7 Bytes sind oft nicht genug<\/li>\n<\/ul>\n<p>Spot Patching<\/p>\n<ul>\n<li>Einfach, da lediglich Search &#038; Replace verwendet wird<\/li>\n<li>Geht nicht, wenn z.B. die Patch-Signatur nicht statisch ist<\/li>\n<\/ul>\n<p>Eine L\u00fccke, f\u00fcr die ZERT einen Patch entwickelt hat ist die VML (Vector Markup Language) L\u00fccke, ein Zeroday, der am 19.09.2006 von Adam Thomas von Sunbelt Software gefunden wurde. Die L\u00fccke wurde zu diesem Zeitpunkt aktiv im Internet genutzt, um in Systeme einzubrechen. der VML-Bug ist ein einacher Stack-based Buffer Overflow in der Datei VGX.DLL, die von allen Internet Explorer 6 Versionen in Windows XP SP2 verwendet wird. DEP (Data Execution Prevention) w\u00fcrde vor dem Exploit sch\u00fctzen, wird jedoch standardm\u00e4\u00dfig beim IE nicht verwendet. Der Angriff ben\u00f6tigt lediglich fehlerhafte Attribute in der VML-Fill-Methode und ist daher einfach auszuf\u00fchren. Ein typischer &#8222;surf and geht owned&#8220;-Exploit.<\/p>\n<p>&lt;v.rect&gt;&lt;v.fill method=&#8220;AAAAAAA&#8230;&#8220;&gt;&lt;\/v.fill&gt;&lt;\/v.rect&gt;<\/p>\n<p>Das Patchen des VML-Binaries ging relativ einfach vonstatten, da VGX.DLL eine In-proc DLL ist die registriert und deregistriert werden kann. Der Ablauf erfolgt dann wie folgt:<\/p>\n<ol>\n<li>Einlesen der VGS.DLL<\/li>\n<li>Finden der Signatur<\/li>\n<li>Patchen des Binaries<\/li>\n<li>Speichern der gepatchten PATCHEDVGX.DLL<\/li>\n<li>Deregistrieren der VGX.DLL<\/li>\n<li>Registrieren der PATCHEDVGX.DLL<\/li>\n<\/ol>\n<p>Beim ANI-Fehler musste zum Patchen eine andere Methode angewandt werden, da die USER32.DLL sich so nicht \u00e4ndern l\u00e4sst. Die verwendete Technik nennt sich in-memory patching:<\/p>\n<ol>\n<li>Mittels knownDLLs die Patch-DLL jedem Proze\u00df hinzuladen<\/li>\n<li>Im RAM die USER32.DLL finden und patchen<\/li>\n<\/ol>\n<p>Allerdings wird diese Technik in 64 Bit Vista nicht mehr funktionieren, da nur signierte Bibliotheken geladen werden k\u00f6nnen.<\/p>\n<p>Fazit und Risikomanagement:<\/p>\n<ul>\n<li>Don&#8217;t use 3rd-party patches!<\/li>\n<li>Do you trust patches from people that don&#8217;t own the source code?<\/li>\n<li>What about liability and vendor support?<\/li>\n<li>If not patched, you are already vulnerable!<\/li>\n<li>Do you want to stay unprotected?<\/li>\n<li>ZERT supplies source code of the patches<\/li>\n<\/ul>\n<p>Am Ende bleibt es halt doch immer dem Sicherheitsbeauftragten und dem Administrator \u00fcberlassen zu entscheiden, was sie tun wollen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gil Dabah, u.a. Autor des diStorm Disassembler hat in diesem Vortrag die M\u00f6glichkeiten des Binary Patchings am Beispiel von zwei Microsoft L\u00fccken (VML, ANI) vorgestellt und dabei ein wenig Werbung f\u00fcr seinen Arbeitgeber ZERT (Zeroday Emergency Response Team) gemacht. Insgesamt war der Vortrag aber sehr ausgewogen, er hat nicht nur auf Vorteile des Binary Patchings [&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\/219"}],"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=219"}],"version-history":[{"count":0,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/219\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/media?parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/categories?post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/tags?post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}