Laden...

Aus C# cmd mit erhöhten Rechten ausführen

Erstellt von pastors vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.589 Views
P
pastors Themenstarter:in
38 Beiträge seit 2005
vor 4 Jahren
Aus C# cmd mit erhöhten Rechten ausführen

Hallo zusammen,
habe ein blödes Problem, denke auch ich weiß woran es liegt, kann es aber nicht alleine lösen.

Also, habe eine Windows GUI geschrieben die mittels "System" laufen muss! Das funktioniert soweit...
Ich möchte nun aber, eine Batch (cmd) aufrufen die mittels reg add Werte in HKLM schreibt.

Mein Code sieht soweit aus:


Process p = new Process();
p.StartInfo.FileName = @"Batch.bat";
p.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
p.Start();
p.WaitForExit();

Die Batch sieht verkürzt so aus:


reg add HKLM\Software\ESSPrinter /v Dev1 /t REG_SZ /d X50Y23Z87
reg add HKLM\Software\ESSPrinter /v Dev2 /t REG_SZ /d X89Y12Z33
usw.

So, Starte ich das Programm, sehe ich in der Batch die Meldung: "Vorgang erfolgreich ausgeführt". Schaue ich in die Registry rein, sind keine Werte enthalten!
Führe ich die Batch als Administrator aus, sind die Werte in der Registry drin.
Also die Batch für sich funktioniert... aber nicht beim Aufruf mittels dem c# Programm.

Kann mir hierzu jemand weiterhelfen?

T
2.219 Beiträge seit 2008
vor 4 Jahren

Warum schreibst du dann nicht direkt aus deinem Programm aus in die Registry.
Mit deinem Batch File öffnest du jedem Zugang zu der lokalen Registry des Rechners.
Halt ich für sehr fatal!

Registry

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 4 Jahren

Also die Batch für sich funktioniert... aber nicht beim Aufruf mittels dem c# Programm.

Jo, weil das Rechtesystem von Windows so nicht funktioniert.
Die Batch wird in der Form nicht als Admin ausgeführt, daher funktioniert es natürlich auch nicht.

Mach es, wie T-Virus es sagt: direkt über die Anwendung.

P
pastors Themenstarter:in
38 Beiträge seit 2005
vor 4 Jahren

So schlimm ist das mit der Batch nicht. Registry Einträge unter HKLM darf nur ein Administrator Konto oder das System Konto vornehmen.
Der Hintergrund ist etwas schwierig zu erklären... mit der Batch wird eine Maschine gesteuert. Vor ungefähr 15 Jahren dachten die Entwickler der Maschine, es wäre eine gute Idee alles in die Registry zu schreiben anstatt die Koordinaten als textfile abzulegen.
Bisher haben die Mitarbeiter lokale Administratorrechte auf dem System gehabt. Beim letzten Security Audit wurde dies bemängelt.

Also keine Chance aus einem C# Programm eine Batch als Administrator auszuführen ohne die UAC zu deaktivieren?

16.807 Beiträge seit 2008
vor 4 Jahren

UAC ist nochmal ein ganz anderer Stiefel.


     Arguments = "/user:Administrator \"cmd /K " + command + "\""

Willst Du den Admin mitgeben, dann musst Du das über die Start Arguments der ProcessInfo mitgeben.

Verstehe aber nicht, wieso Du es nicht einfach über .NET machst.
Dann brauchst den Batch Quatsch nicht und kannst die Rückgabe auch sauber auswerten.

4.931 Beiträge seit 2008
vor 4 Jahren

Mit runas als Command kannst du das Batch-File unter einem anderen User (mit erhöhtem Rechten) ausführen - es wird aber nach dem Passwort gefragt.

U
135 Beiträge seit 2009
vor 4 Jahren

Mit deinem Batch File öffnest du jedem Zugang zu der lokalen Registry des Rechners.
Halt ich für sehr fatal!

Nö... inwiefern sollte das der Fall sein?
Um nach HKLM schreiben zu können, muss das Batch-File mit administrativen Rechten ausgeführt werden. Wenn Du die hast, kannste genauso gut regedit mit administrativen Rechten starten.

Ansonsten hast Du aber natürlich Recht, der Weg über ein cmd-File um RegKeys zu setzen wirkt ein bissl wie von hinten durch die Brust 😃

U
135 Beiträge seit 2009
vor 4 Jahren

Also keine Chance aus einem C# Programm eine Batch als Administrator auszuführen ohne die UAC zu deaktivieren?

Eine Option (ob's nun schön ist oder nicht kann man sicher drüber diskutieren) wäre noch:
Du kannst via regedit auf Registry-Keys Rechte vergeben (ähnlich wie bei Ordnern im Dateisystem, nur hier eben auf Registry-Keys).
Wenn es um HKLM\Software\ESSPrinter geht, könntest Du auf den ESSPrinter-Key (auf keinen Fall auf Software oder höher ⚠) der Users-Gruppe Schreibrechte geben.

Inwiefern das ein Sicherheitsrisiko für Deine Anwendung darstellt, wenn jeder Benutzer sich in diesem Key austoben kann, musst Du selbst beurteilen.

T
2.219 Beiträge seit 2008
vor 4 Jahren

@UncleBens
Da die Batch Datei als Admin ausgeführt werden soll, würde er jedem die Möglichkeit geben, dort alle Befehle als Admin ausführen zu lassen.
Du kannst dir dann z.B. einen neuen Admin User anlegen, wenn das Skript einmal durchgelaufen wurde und hast vollen Zugriff auf das System.
Oder du liest einfach mal das ganze System aus und lässt die Daten übers Netz abfließen.
Gibt hier genug Möglichkeiten um Schaden anzurichten!

Man sollte NIE aus einem Programm mit Adminrechten irgendwelche lokalen Batch Files starten lassen!
Damit schreit man förmlich danach, dass man sein System gefährden will.

Bei einem Sicherheitsaudit, würde auch da bei jedem seriösen Auditor die Alarmglocken leuten!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 4 Jahren

Da die Batch Datei als Admin ausgeführt werden soll, würde er jedem die Möglichkeit geben, dort alle Befehle als Admin ausführen zu lassen.

Nein. Aus Rechtesicht ist es irrelevant ob hier die .NET oder die CMD Anwendung die Rechte hat.
Ein normaler User kann ohne Adminrechte niemals eine Batch starten, die dann Regedit-Operationen durchführt, auf die er kein Access hat.
Dazu ist egal bei welcher Anwendung ein administratives Recht notwendig.

Die einzige Sache ist, dass die Batch an für sich verändert werden kann, und so andere Befehle als gewünscht als Admin ausgeführt werden können.
Das ist aber an für sich irrelevant, wenn der User so oder so Adminrechte hat.

Ein Benutzer, der keine Adminrechte hat, kann so oder so damit nichts verändern.

Bei einem Sicherheitsaudit, würde auch da bei jedem seriösen Auditor die Alarmglocken leuten!

Nö. Der interessiert sich für sowas gar nicht.
Einen Auditor interessiert das Sicherheits- und Rechtekonzept im Ganzen; nicht wie Batch Dateien ausgeführt werden.

Auch Deine dramatische Ausdrucksweise ändert daran nichts 😃

P
pastors Themenstarter:in
38 Beiträge seit 2005
vor 4 Jahren

Um kurz mal die Brisants aus dem Thema zu nehmen.
Das C# .Net Programm wird bereits beim Starten des System als "System" User gestartet. Die Batchdatei liegt in einem Ordner, in dem ein User keine Rechte hat, nichtmal lesen!
Unser Security Auditor hat das Konstrukt abgesegnet und somit ist das ok.

Mein Ziel ist es, da das C# Programm bereits mit dem System-Account gestartet ist, das Batchfile ebenfalls mit dem System-Account zu starten. So wie es aussieht, verwendet Windows über Process Start(); einen anderen Account.
Ist das technisch möglich?

16.807 Beiträge seit 2008
vor 4 Jahren

Wie bereits gesagt; so funktioniert nun mal das Windows Rechtesystem nicht.
Du musst beim Start aktiv mitgeben, in welchem Kontext die Anwendung gestartet werden muss.
Das passiert nicht automatisch - und das ist bewusst so.