Nicht wahrnehmbare Gewährung von Administratorrechten

Den ganzen Freitag, Freunde. Heute teilen wir Ihnen ein weiteres Material mit, das am Vorabend des Starts des Reverse Engineering- Kurses übersetzt wurde.



Ich hatte eine coole Idee, wie ich einen Benutzer dazu bringen kann, Ihre Anwendung ohne Social Engineering oder mithilfe von Exploits von Drittanbietern auszuführen. Darüber hinaus können Sie einfach vorwärts gehen und eine Masseninfektion ausführbarer Dateien auslösen. Dies kann jedoch zu vielen unvorhergesehenen Problemen führen und bedeutet auch, dass digital signierte Anwendungen von vertrauenswürdigen Lieferanten als nicht vertrauenswürdige Dateien angezeigt werden. Es ist eine gute Idee, nur eine DLL zu „erfassen“. Ich werde diese Methode nicht als Bypass-Benutzerkontensteuerung (User Account Control) bezeichnen, da Sie noch die Berechtigung zum Ausführen der Anwendung benötigen (nicht Ihre).

Bibliothek laden


Sie kennen dieses Konzept vielleicht bereits, aber ich werde trotzdem erklären, was es ist. Wenn die Anwendung LoadLibrary in der DLL aufruft, aber nicht den vollständigen Pfad zur Datei bereitstellt, überprüft das System zuerst den Registrierungsschlüssel KnownDlls, in dem es nach dem Pfad sucht. Wenn er nicht vorhanden ist, sucht das System in dem Verzeichnis, aus dem die Anwendung ausgeführt wurde, und sucht dann in Systempfaden wie system32 / syswow64.

Sie können Ihre DLL durchaus im selben Verzeichnis wie die Anwendung ablegen und ihr denselben Namen geben wie eine normal geladene System-DLL. In jedem Fall muss Ihre DLL jedoch die folgenden Anforderungen erfüllen:

  • Die Anwendung sollte die DLL nach Namen und nicht nach dem vollständigen Pfad herunterladen (wie dies häufig der Fall ist).
  • Die erforderliche Bibliothek darf nicht in HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ KnownDLLs vorhanden sein.
  • Ihre DLL sollte mit der Prozessorarchitektur übereinstimmen (denken Sie daran, dass 64-Bit-Prozessoren einfach 32-Bit-Bibliotheken überspringen und umgekehrt).
  • Die Bibliothek befindet sich in System32 oder Syswow64, da bestimmte Pfade häufig nicht funktionieren.

Der ZeroAccess-Virus verwendete diese Methode, um "Social Engineering" zu nutzen und den Benutzer zum Ausführen der Datei zu zwingen. Zunächst wurde das Adobe Flash-Installationsprogramm von der offiziellen heruntergeladen, die Bot-DLL wurde im selben Verzeichnis wie das Installationsprogramm aufgezeichnet und anschließend das Installationsprogramm gestartet. Wenn das Installationsprogramm ausgeführt wird, zeigt die Benutzerkontensteuerung eine Meldung an, dass die Anwendung von einer vertrauenswürdigen Quelle von „Adobe Systems Incorporated“ bereitgestellt wird und der Benutzer diese Anwendung höchstwahrscheinlich installiert (dies führt zur Ausführung einer schädlichen Bot-DLL).


Ist das ein echtes Update für Flash Player? Oder ZeroAccess? Niemand weiß es.

Weniger invasive Methode


Stellen Sie sich vor, es gibt einen Ordner, in dem sich 90% der Anwendungen befinden, für die erhöhte Kontorechte erforderlich sind, und der ohne diese Rechte beschreibbar ist. Nun, ein solcher Ordner existiert und dies ist der %userprofile%Downloads Ordner. Sie verstehen wahrscheinlich, worauf ich hinaus will.

Ich hatte nicht erwartet, eine DLL zu finden, die die meisten Anwendungen lädt und gleichzeitig alle Kriterien für eine böswillige DLL erfüllt, und nach etwa fünf Minuten Suche fand ich eine Goldmine: dwmapi.dll . Diese Bibliothek erfüllte nicht nur alle Kriterien, sondern lud auch alle Installationsdateien herunter. Jetzt erstellen wir unsere eigene DLL, nennen sie “dwmapi.dll” , legen sie im Ordner “dwmapi.dll” Downloads" ab und führen die Installationsdatei aus.



Erfolg! Tatsache ist jedoch, dass es nicht funktioniert, sobald wir mit der Installation beginnen, da wir eine wichtige Bibliothek ersetzt haben. Dies ist jedoch leicht zu beheben. Wir infizieren die DLL.

Erstellen einer Infektions-DLL


Zuerst wollte ich nur einen neuen Abschnittsheader hinzufügen, das Feld NumberOfSections im PE-Header ändern und dann einfach meinen Abschnitt am Ende der PE-Datei hinzufügen. Es stellte sich heraus, dass unmittelbar nach der letzten Abschnittsüberschrift ein zugehöriges Importverzeichnis vorhanden ist, das von unserer Abschnittsüberschrift überschrieben wird. Nach ungefähr 2 Stunden Schreiben einer Anwendung zur Wiederherstellung aller PE von Grund auf erinnerte mich jemand daran, dass das verknüpfte Importverzeichnis nur existiert, um den Download importierter Dateien zu beschleunigen. Es kann überschrieben und dann einfach im PE-Header deaktiviert werden.

Die nächsten 15 Minuten hielt ich STRG + Z gedrückt, um dorthin zurückzukehren, wo ich angefangen hatte und fühlte mich dumm. Nach zwei Codezeilen funktionierte mein Infektor ordnungsgemäß und ich konnte mit dem nächsten Schritt fortfahren. Jetzt trennt der Infector einfach das zugehörige Importverzeichnis und schreibt es mit einem neuen Abschnittskopf neu, fügt am Ende der PE-Datei einen neuen Abschnitt hinzu, passt SizeOfImage an den neuen Abschnitt an und ändert AddressOfEntryPoint so, dass er auf unseren neuen Abschnitt verweist.

Jetzt brauchen wir nur noch den Code, den wir dort abgelegt haben.

Shellcode


Die naheliegende Wahl bestand darin, den hinzugefügten Abschnitt zur Ausführung von Shellcode zu zwingen, sodass wir uns nicht um Verschiebungen und Importe kümmern mussten. Der eigentliche Code ist ziemlich einfach und mit einigen praktischen FASM-Makros geschrieben. Ich werde schnell erläutern, wie er funktioniert.

  • Der Stapel wird überprüft, um sicherzustellen, dass dwmapi.dll von DLL_PROCESS_ATTACH aufgerufen wurde.
  • Die Ldr-PEB-Struktur wird verwendet, um die Basisadresse von Kernel32 und Ntdll zu erhalten.
  • Eine einfache GetProcAddress-Implementierung wird verwendet, um die folgenden Funktionen zu importieren: NtOpenProcessToken, NtQueryInformationToken, NtClose, ExpandEnvironmentStringsA, CreateProcessA;
  • Das aktuelle Prozesstoken wird geöffnet und der Code fordert ihn auf, zu bestätigen, dass die Anwendung, von der aus wir starten, über UAC-Administratorrechte verfügt.
  • Es stellt sich der Pfad cmd.exe heraus, und dann wird die Befehlszeile aufgerufen.
  • Die Ausführung wird zurück zum eigentlichen Einstiegspunkt von dwmapi.dll übertragen, weshalb die Ausführung fortgesetzt werden kann.

Alles zusammenfügen


Das Endergebnis der Operation infiziert dwmapi.dll mit unserem Shellcode und legt ihn im Download-Ordner ab. Sobald der Benutzer das Installationsprogramm herunterlädt und ausführt, für das Administratorrechte erforderlich sind, wird eine Befehlszeile als Administrator aufgerufen (aufgrund von Wow64FsRedirect und der Tatsache, dass Die meisten Einstellungen funktionieren unter wow64. Wir können denselben Code auf 32-Bit- und 64-Bit-Windows-Systemen verwenden.

Den vollständigen Infektor und Shellcode finden Sie auf meinem Github: https://github.com/MalwareTech/UACElevator .

Das ist alles. Wir sehen uns auf dem Kurs!

Source: https://habr.com/ru/post/de457082/


All Articles