{"id":209,"date":"2008-02-15T15:57:32","date_gmt":"2008-02-15T14:57:32","guid":{"rendered":"http:\/\/kay-bruns.de\/wp\/2008\/02\/15\/verwundbarkeiten\/"},"modified":"2014-09-24T13:34:25","modified_gmt":"2014-09-24T12:34:25","slug":"verwundbarkeiten","status":"publish","type":"post","link":"https:\/\/kay-bruns.de\/wp\/2008\/02\/15\/verwundbarkeiten\/","title":{"rendered":"Verwundbarkeiten"},"content":{"rendered":"<p><a href=\"http:\/\/commons.wikimedia.org\/wiki\/Image:Nuvola_apps_important_yellow.svg\" target=\"_blank\"><br \/>\n<img loading=\"lazy\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/d\/dc\/Nuvola_apps_important_yellow.svg\/128px-Nuvola_apps_important_yellow.svg.png\" alt=\"\" width=\"128\" height=\"107\" align=\"left\" border=\"0\" hspace=\"5\" vspace=\"5\" \/><\/a>Kurz: SuRun bis 1.0.2.9 bzw 1.0.2.103 Beta konnten (genau so, wie machmichadmin, SuDown und RunAs) benutzt werden, hier steht, wie und warum.<\/p>\n<p>In diesem Beitrag wird ein Werkzeug mit Quelltexten ver\u00f6ffentlicht, das automatisch Benutzernamen und deren Passworte erkennt und das ausnutzt, um eine Konsole mit diesen Daten zu starten.<\/p>\n<p>SuRun Benutzer sollten ein Update auf SuRun 1.0.3.0 bzw. die aktuelle Beta machen um diese Verwundbarkeit zu schlie\u00dfen.<!--more--><\/p>\n<p>Lang:<\/p>\n<p>Um Programme automagisch administrativ zu starten hat SuRun bis zur vorletzten Beta ein <em><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/bb775101.aspx\" target=\"_blank\">IShellExecuteHook<\/a><\/em> Interface benutzt. So wurden SuRun von Windows fast alle Benutzer-Programme vorgelegt, bevor sie ausgef\u00fchrt wurden und SuRun konnte seelenruhig entscheiden, was zu tun ist.<\/p>\n<p>Die Sache hatte jedoch einen Haken.<\/p>\n<p>Wenn der Hook deaktiviert war oder sich jemand vor SuRun einklinkte, war nix mit gehobenen Rechten. \ud83d\ude25<\/p>\n<p>Deshalb habe ich in den letzten Tagen mit &#8222;<a href=\"http:\/\/www.google.de\/search?q=Import+Address+Table+Hooking\" target=\"_blank\">Import Address Table<\/a><a href=\"http:\/\/www.google.de\/search?q=Import+Address+Table+Hooking\" target=\"_blank\"> (IAT) Hooking<\/a>&#8220; experimentiert.<\/p>\n<blockquote><p><strong>\ud83d\udca1<\/strong> Innerhalb eines Windows Prozesses werden Aufrufe von Funktionen, die in <a href=\"http:\/\/de.wikipedia.org\/wiki\/Dynamic_Link_Library\" target=\"_blank\">DLL<\/a>s implementiert sind (Importe) \u00fcber Tabellen gehandhabt. Die jeweilige DLL wird in den Speicher des Prozesses geladen. Dann werden die Tabellen mit den Importierten Funktionen des Moduls auf die geladene DLL &#8222;verbogen&#8220; und alles l\u00e4uft prima. Es gibt also Tabellen mit den Adressen importierter DLL Funktionen, kurz IAT.<\/p><\/blockquote>\n<p>Dieses einfache Prinzip l\u00e4sst sich auch &#8222;nutzen&#8220;.<\/p>\n<p>Das ist gar nicht sooo schwer. Man sucht sich eine bekannte Funktion, wie z.B. <em><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/ms682431.aspx\" target=\"_blank\">CreateProcessWithLogonW<\/a><\/em>. Dann baut man eine Funktion in sein Programm, die genau so aufgerufen wird, wie z.B.: <em>BOOL WINAPI CreateProcWithLogonW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPCWSTR, LPWSTR, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION);<\/em><\/p>\n<p>Jetzt sucht man in allen geladenen Dlls des Prozesses in dem man l\u00e4uft nach der Original-Funktion und &#8222;verbiegt&#8220; die zu sich selbst.<\/p>\n<p>Wenn Ein Thread des Prozesses nun <em>CreateProcessWithLogonW <\/em>aufzurufen glaubt, wird stattdessen <em>CreateProcWithLogonW <\/em>aufgerufen.<\/p>\n<p>So man dann kontrollieren, was geschehen soll. \ud83d\ude0e<\/p>\n<p>SuRun Beta ab Version 1.0.2.104 benutzt diesen Trick auch, um u.A. <em>CreateProcess <\/em>abzufangen. So kann SuRun erkennen, ob der Prozess administrativ gestartet werden soll bzw. muss.<\/p>\n<p>Windows injiziert <em>SuRunExt.dll<\/em> in alle laufenden Prozesse, die ein Fenster haben und <em>SuRunExt.dll<\/em> installiert dann die entsprechenden <a href=\"http:\/\/www.google.de\/search?q=%22IAT+Hooks%22\" target=\"_blank\">IAT-Hooks<\/a>.<\/p>\n<p>Zum Test dieser Technik habe ich mir ein <strong><a title=\"iathook.zip\" href=\"https:\/\/kay-bruns.de\/wp\/wp-content\/uploads\/2008\/02\/iathook.zip\">Werkzeug<\/a><\/strong> geschrieben.<\/p>\n<p>Nachdem es halbwegs funktionierte, habe ich es ver\u00e4ndert, um die Systemsicherheit zu testen.<\/p>\n<p>Ruft ein Prozess mit injizierter <em>IATHook.dll<\/em> (z.B. Explorer.exe) <em>CreateProcessWithLogonW <\/em> auf, \u00fcbergibt <em>IATHook.dll<\/em> zun\u00e4chst alles der originalen Funktion mit einer Ausnahme: Der neue Prozess wird schlafend (&#8222;suspended&#8220;) erstellt.<\/p>\n<p>Meldet Windows die erfolgreiche Erstellung des Prozesses, startet <em>IATHook.dll<\/em> mit den selben Daten f\u00fcr Name und Passwort eine Windows Console.<\/p>\n<p><strong>Das geht alles ohne jegliche Privilegien, sogar als Gast!<\/strong><\/p>\n<p>Jeder Benutzer, der eine USB-Kamera ansteckt und nach Aufforderung die Daten eines Administrators eingibt, sollte das Tool mal ausprobieren.<\/p>\n<p>Auch ein fr\u00fcheres SuRun konnte so als Sprungbrett missbraucht werden. Da SuRun bisher immer als Benutzerprogramm gestartet wurde, dass den Service kontaktiert und dann <em>CreateProcessWithLogonW <\/em>aufruft, war es f\u00fcr IAT-Hooks anf\u00e4llig. Damit konnte man zwar den Start des Programms nicht fernsteuern, aber man konnte parallel ein zweites Programm mit Administrator-Rechten starten!<\/p>\n<p><strong>Wie umgeht SuRun das jetzt?<\/strong><\/p>\n<p>Klickt der Benutzer ok, l\u00e4dt der SuRun-Dienst ein neues <em>SuRun.exe<\/em> im Kontext des Benutzers schlafend in den Speicher. Dann schreibt der Dienst Benutzernamen, Password etc. direkt in das neue Programm und startet es. Das neue SuRun ruft sofort ohne grafisches Interface <em>CreateProcessWithLogonW <\/em> auf und beendet sich.<\/p>\n<p>Der Dienst deaktiviert f\u00fcr die Startdauer auch die <a href=\"http:\/\/support.microsoft.com\/kb\/197571\/en\" target=\"_blank\"><em>AppInit_Dlls<\/em><\/a>.<\/p>\n<p>Dadurch wird es hoffentlich schwer m\u00f6glich, das frische SuRun zu infizieren und <em>CreateProcessWithLogonW<\/em> abzufangen.<\/p>\n<p><strong>Download:<\/strong><\/p>\n<blockquote><p>IATHook Quelltext und ausf\u00fchrbare Dateien: <strong><a href=\"https:\/\/kay-bruns.de\/wp\/wp-content\/uploads\/2008\/02\/iathook.zip\">IATHook.zip<\/a><\/strong><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Kurz: SuRun bis 1.0.2.9 bzw 1.0.2.103 Beta konnten (genau so, wie machmichadmin, SuDown und RunAs) benutzt werden, hier steht, wie und warum. In diesem Beitrag wird ein Werkzeug mit Quelltexten ver\u00f6ffentlicht, das automatisch Benutzernamen und deren Passworte erkennt und das ausnutzt, um eine Konsole mit diesen Daten zu starten. SuRun Benutzer sollten ein Update auf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/posts\/209"}],"collection":[{"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/comments?post=209"}],"version-history":[{"count":2,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/posts\/209\/revisions"}],"predecessor-version":[{"id":523,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/posts\/209\/revisions\/523"}],"wp:attachment":[{"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/media?parent=209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/categories?post=209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kay-bruns.de\/wp\/wp-json\/wp\/v2\/tags?post=209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}