Ausführen eines Prozesses mit den geringstmöglichen Berechtigungen in winapi

8

Ich schreibe etwas ähnlich wie die Ссылка . Derzeit führe ich Benutzerprozesse mit CreateProcess-Aufruf aus. Ich töte den Prozess, wenn es länger als angegebene angegebene Zeit läuft, aber ich weiß nicht, wie man Dateisystemrechte / das Erschaffen von Prozessrechten usw. zum geschaffenen Prozess verweigert. Die angegebene ausführbare Datei kann buchstäblich alles sein und ich muss nur stdin / stdout zulassen. Es wäre auch toll, wenn ich Arbeitsspeicher setzen könnte.

Ich habe viele Artikel auf msdn gelesen, z. B. CreateProcessAsUser Function , CreateProcessWithLogonW Funktion usw., aber ich werde sehr schnell verwirrt (wahrscheinlich weil mein Win32-Wissen extrem begrenzt ist). Ist es ausreichend, einfach CreateProcessAsUser aufzurufen und spezielle Benutzer mit diesen eingeschränkten Rechten zu erstellen (und wie man einen solchen Benutzer erstellt).

Ich hoffe, ich kann dies in einem Funktionsaufruf mit richtigen Parametern erreichen, also bitte helfen.

Wenn Sie ein ähnliches Open-Source-Projekt kennen, wäre es auch großartig.

Danke.

================================================== ===========

Bearbeiten: Hallo nochmal :) Ich bin immer noch dabei. Ich hatte nicht genug Zeit, um daran zu arbeiten, aber ich denke, Snemarch Post ist sehr nützlich. Wenn jemand out-of-the-Box-Lösung hat, wäre es großartig. Ich werde posten, wenn ich etwas mit Snemarchs Links mache.

    
Klark 25.09.2010, 23:05
quelle

3 Antworten

6

Sehen Sie sich OpenProcessToken und AdjustTokenPrivileges - damit können Sie (in einem gewissen Umfang) die Berechtigungen Ihres Prozesses anpassen. Sie können SaferCreateLevel für einige Standardrechte wie SAFER_LEVELID_UNTRUSTED verwenden.

    
snemarch 27.09.2010 10:41
quelle
5

Ziehen Sie in Betracht, den Benutzerprozess in einem Jobobjekt auszuführen. Kindprozesse, die vom Benutzerprozess erstellt werden, enden auch im selben Jobobjekt. Sie können bestimmte Beschränkungen anwenden, wie viele Ressourcen der Job verwenden kann, wie er mit der grafischen Benutzeroberfläche usw. interagieren kann (siehe SetInformationJobObject Funktion). Sie können alle Prozesse innerhalb eines Jobobjekts mit einem Schlag beenden.

    
atzz 27.09.2010 11:08
quelle
3

Wir haben ein Stück Code dafür, aber ich kann es nicht posten: (

Erstellen Sie ein "eingeschränktes" Zugriffstoken basierend auf dem Zugriffstoken für diesen Prozess. Erstellen Sie dann einen neuen Prozess für die App mit diesem Zugriffstoken.

Hatte einen Kommentar mit dem Code - Weitere Informationen finden Sie im MSDN-Artikel mit dem Namen "Das Web durchsuchen und E-Mails sicher als Administrator lesen "". Wie immer hat MS jedoch das Internet durchbrochen und der Artikel ist nicht mehr da.

>

Verbundene Suchanfragen wurden mit der App "DropMyRights" gefunden, die auf einem Blog verlinkt ist, der zu diesem Artikel verlinkt , die tun können, was Sie wollen, bietet Quelle, aber auch diese Links sind in der Blog-Seite gebrochen.

möchten Sie vielleicht Funktionen wie betrachten %Code% %Code% OpenProcessToken

und privs wie GetTokenInformation

    
Greg Domjan 30.09.2010 16:49
quelle