derwowusste
Goto Top

Code ausführen am Anmeldebildschirm von Windows

article-picture
Die folgende Anleitung zeigt auf, wie man mit einem einfachen Kunstgriff erreichen kann, an der Anmeldemaske schon vor der Anmeldung oder trotz Sperrung beliebigen Code auszuführen.

Ich habe mein Konzept zum Kennwortselbstreset für Windowsdomänen überarbeitet und mich dabei mit den Möglichkeiten, die einem der Anmeldebildschirm auch ohne Anmeldung bietet, befasst. Als Nebenprodukt fiel diese Idee ab.

Am Anmeldebildschirm steht einem neben den Anmeldezeilen der Button zum Herunterfahren zur Verfügung, sowie der Knopf "erleichterte Bedienung", auch bekannt als utility manager. Dann gibt es noch die Sprachauswahl, sowie wenige andere Executables, wie z.B. Magnify.exe, welche über Tastaturkürzel angesprochen werden können.

Alle mir bislang bekannten Ansätze arbeiten damit, diese Executables auszutauschen. Das ist kein guter Ansatz, denn Erstens verliert man die originale Funktionalität und zweitens unterbindet auch der Virenscanner ggf. den Austausch bzw. die Verwendung dieser ausgetauschten Dateien.

Mein Ansatz:
Ich ändere die Überwachungseinstellungen ("SACL") der Datei (z.B. des genannten Utility Managers) und überwache erfolgreiches Ausführen der Datei durch das Konto "System", welches am Anmeldebildschirm aktiv ist. Klickt man nun auf den utility manager, so wird der Zugriff ins Sicherheitseventlog protokolliert.

sacl1
angepasste SACL der utilman.exe aus c:\windows\system32

secpol
Eingeschaltete Überwachung von Dateizugriffen

seclog1
Eintrag im Sicherheitseventlog, nachdem man amAnmeldebildschirm auf den Utility manager geklickt hat

Mit diesem Event bestücke ich dann im Aufgabenplaner einen dazu passenden Tasktrigger wie folgt:
task1
Als Executor legt man z.B. "System" fest.
untitled
Man muss dazu einen "custom trigger" anlegen, mit folgendem xml-code:
<QueryList>
  <Query Id="0" Path="Security">  
    <Select Path="Security">  
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (EventID=4663)]]  
and
*[EventData[Data[@Name='ObjectName'] and (Data='C:\Windows\System32\Utilman.exe')]]  
and
*[EventData[Data[@Name='SubjectUserSid'] and (Data='S-1-5-18')]]  
</Select>
  </Query>
</QueryList>

task_3_1
Als Testaktion lasse ich mir ein Popup "Hurra" senden.
Achtung1: achtet darauf, dass auf dem Reiter "Conditions"/(dt.) "Bedingungen" der Haken bei "Aufgabe nur starten, falls Computer im Netzbetrieb" entfernt wird.
Achtung2: es sollte klar sein, dass, wenn man einem unangemeldeten Nutzer die Möglichkeit gibt, Code mit hohen Rechten auszuführen, dieser Code/Skript nur von Admins veränderbar sein darf (es sei denn, ihr wollt das)!

Fertig! Auch wenn niemand angemeldet ist, oder wenn der Bildschirm gesperrt ist kann ich mit Klick auf den Utility Manager beliebigen Code ausführen!

Nachwort: diese Änderungen (Taskplaner, SACL) sind nur mit Adminrechten möglich. Ist es jedoch eingerichtet, kann es danach natürlich auch jedem Nichtadmin dienen. Meine Tests ergaben zudem, dass das Konto "System" ausführend nie auf diese Datei zugreift, so dass ich keine einzige ungewollte Ausführung verzeichnen konnte. Wenn Ihr das anders erlebt, bitte ich um Feedback.

Edit 11.4.24: Trigger präzisiert, so dass er wirklich nur auf das Systemkonto reagiert, selbst dann, wenn man auch Execute-Zugriffe aller Benutzer überwachen möchte

Content-ID: 81830088682

Url: https://administrator.de/contentid/81830088682

Printed on: October 10, 2024 at 04:10 o'clock

Celiko
Celiko Nov 20, 2023 at 14:44:37 (UTC)
Goto Top
Moin,

Idee und workaround gefällt mir 👍

Werde mir den Post mal abspeichern falls ich so einen use case mal haben sollte.

Vg
Celiko
emeriks
emeriks Nov 21, 2023 at 11:57:00 (UTC)
Goto Top
Respekt, DWW!
Klasse, trickreicher Ansatz!
Bei mir läuft gerade die Rolle an, wo man dieses Verfahren u.U. ähnlich ansetzen könnte ...
DerWoWusste
DerWoWusste Nov 21, 2023 updated at 13:00:16 (UTC)
Goto Top
Moin.
Bei mir läuft gerade die Rolle an, wo man dieses Verfahren u.U. ähnlich ansetzen könnte
"Self-backdooring" zum Beispiel. Als Noteingang ein Skript hinterlegen, das einen Nutzer anlegt mit einem bekannten Kennwort (oder diesen aktiviert). Von außen ist ja nicht sichtbar, dass es dieses gibt, bzw. was es macht.
Ich habe es selbst benötigt, um ein Polling zu beschleunigen in oben genanntem SSPR-Konzept, da ich bei Tests nicht warten wollte.

Du könntest es auch nutzen, um schwachen Nutzern z.B. einen NIC-Reset zu ermöglichen, oder einen Backupstart oder sonstwas, was eben nur mit hohen Rechten funktioniert.
Globetrotter
Globetrotter Feb 22, 2024 at 16:08:08 (UTC)
Goto Top
VeryVery C00L face-smile

Tnx!

Gruss Globe!