AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Security_Descriptor ändern

Ein Thema von Apollonius · begonnen am 4. Sep 2007 · letzter Beitrag vom 8. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#1

Security_Descriptor ändern

  Alt 4. Sep 2007, 16:20
Ich habe mir kürzlich mal Gedanken gemacht, wie man verhindern könnte, dass ein anderer Prozess mit WriteProcessMemory Variablen meines Programms verändert. Da bietet sich natürlich an, zu verhindern, dass ein Handle meines Prozesses mit den nötigen Rechten PROCESS_VM_WRITE und PROCESS_VM_OPERATION geöffnet wird. Da ließe sich ja etwas mit dem Security-Descriptor meines Prozesses drehen. Kann man denn den eigenen Security-Descriptor verändern, oder ist das (zum Beispiel für Debugging etc.) verboten? Wenn ja - wie geht es? Ich habe die MSDN durchforstet, da ist zu dem Thema auch viel zu finden, aber auf eine Funktion zum Setzen eines neuen Descriptors bin ich nicht gestoßen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Security_Descriptor ändern

  Alt 4. Sep 2007, 22:24
Aehnliches Problem: http://assarbad.net/de/stuff/temp/KillMeSoftly/
Ansonsten frage "Dezipaitor" zum Thema
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: Security_Descriptor ändern

  Alt 4. Sep 2007, 22:36
Du kannst die Prozess DACL mit SetSecurityInfo mit ObjectType =
SE_KERNEL_OBJECT setzen.
Theoretisch, da ich es selbst nicht probiert habe.

ABER: Der Besitzer eines Security Descriptor kann immer die ACL ändern! Besitzer kann jeder werden dem es über die ACL erlaubt ist.
Zudem können bestimmte Gruppen, auch ohne diese ACL Rechte, Besitzer übernehmen. Administratoren können dies z.B. RestoreOperatoren (auch Administratoren)
ist es auch erlaubt, den Besitzer beliebig zu wählen.
Das gilt übrigens natürlich auch für DIENSTE.

Debuggerbenutzer haben da jedoch nicht viel zu sagen, was den Security Descriptor angeht.

Einen Security kann man auf verschiedene Arten bauen..
Die einfachste Art mit Win32API Mitteln ist ConvertStringSecurityDescriptorToSecurityDescripto r

Am einfachsten wird es sowieso mit meiner Bibliothek.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Security_Descriptor ändern

  Alt 5. Sep 2007, 18:34
Zitat:
ABER: Der Besitzer eines Security Descriptor kann immer die ACL ändern! Besitzer kann jeder werden dem es über die ACL erlaubt ist.
Zudem können bestimmte Gruppen, auch ohne diese ACL Rechte, Besitzer übernehmen. Administratoren können dies z.B. RestoreOperatoren (auch Administratoren)
Soll das heißen, dass Administratoren unabhängig von Descriptor den Prozess mit Process_All_Access öffnen können? Das wäre ja nochmal ein dicker Grund, nicht als Admin zu arbeiten.
Danke schonmal für eure Hilfe.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: Security_Descriptor ändern

  Alt 5. Sep 2007, 19:03
Zitat von Apollonius:
Zitat:
ABER: Der Besitzer eines Security Descriptor kann immer die ACL ändern! Besitzer kann jeder werden dem es über die ACL erlaubt ist.
Zudem können bestimmte Gruppen, auch ohne diese ACL Rechte, Besitzer übernehmen. Administratoren können dies z.B. RestoreOperatoren (auch Administratoren)
Soll das heißen, dass Administratoren unabhängig von Descriptor den Prozess mit Process_All_Access öffnen können? Das wäre ja nochmal ein dicker Grund, nicht als Admin zu arbeiten.
Danke schonmal für eure Hilfe.
Können sie nicht unbedingt. Administratoren unterliegen wie alle anderen Nutzer auch dem Rechtesystem. Sie haben bloß den Vorteil, sich das Recht (wie auch immer) verschaffen zu können.
Man sieht es gut an dem Ordner "System Volume Information". Ein Admin kann es sich per default nicht ansehen. Er kann jedoch die DACL anpassen und dann sich den Inhalt ansehen.

Das hemmt schonmal einige Programme, die normal auf etwas zugreifen wollen. Die meisten Programme geben dann auf.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Security_Descriptor ändern

  Alt 5. Sep 2007, 19:09
Hm. Irgendwo in meinem Code ist noch ein Fehler, denn auch als Gast kriege ich ein gültiges Handle...
Programm 1:
Delphi-Quellcode:
program Project2;

uses
  Forms,
  Windows,
  AclAPI,
  AccCtrl,
  sysutils,
  dialogs,
  Unit1 in 'Unit1.pas{Form1};

{$R *.res}
const PROTECTED_DACL_SECURITY_INFORMATION = $80000000; //DACLs werden nicht vererbt
var desc: SECURITY_DESCRIPTOR;
begin
  InitializeSecurityDescriptor(@desc, SECURITY_DESCRIPTOR_REVISION);
  SetSecurityDescriptorDACL(@desc, false, nil, false);
  Showmessage(SysErrorMessage(SetSecurityInfo(getCurrentProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION or PROTECTED_DACL_SECURITY_INFORMATION, nil, nil, desc.Dacl, nil)));
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Ich hoffe mal, dass ich da mit der Api nicht ganz falsch liege. Auf Buttonklick wird eine Nachricht an ein zweites Programm mit geschickt, dabei wird die Adresse einer Variablen im WParam und das Hauptfensterhandle im LParam mitgeliefert.
Delphi-Quellcode:

procedure TForm1.rec(var Message:TMessage);
var ProcId, ProcHandle: Cardinal; buffer, dummy: cardinal;
begin
getWindowThreadProcessId(Message.LParam, ProcId);
ProcHandle:=OpenProcess(PROCESS_VM_WRITE or PROCESS_VM_OPERATION, false, ProcID);
if ProcHandle=0 then
 begin
  showmessage('Prozess-Handle ist Null!');
  exit;
 end;
showmessage('Gueltiges Prozess-Handle');
try
 buffer:=5;
 WriteProcessMemory(ProcHandle, Pointer(Message.WParam), @buffer, 4, dummy);
finally
 closeHandle(ProcHandle);
end;
end;
Und ich kriege immer ein gültiges Handle. Wo steckt der Fehler?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

Re: Security_Descriptor ändern

  Alt 5. Sep 2007, 20:02
Zitat von Apollonius:
Hm. Irgendwo in meinem Code ist noch ein Fehler, denn auch als Gast kriege ich ein gültiges Handle...
Programm 1:
[/delphi]
Und ich kriege immer ein gültiges Handle. Wo steckt der Fehler?
Du setzt nil für die DACL ein. Das bedeutet, dass JEDER (damit auch Gast) vollen Zugriff auf das Objekt hat. Du musst schon einen DACL erzeugen und auch Benutzer einfügen. Wenn du die DACL leer lässt, dann darf niemand mehr auf das Objekt zugreifen. Dann kommt wieder, wie oben schon geschrieben, der Besitzer ins Spiel.

Die DACL zu ändern ist etwas aufwendig in C. Deshalb meinte ich ja, dass du ConvertStringTo... verwenden sollst.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Security_Descriptor ändern

  Alt 5. Sep 2007, 20:31
Hm. Ich zitiere mal aus SetSecurityDescriptorDACL:
Zitat:
When the pDacl parameter does not point to a DACL and the bDaclPresent flag is FALSE, a DACL can be provided for the object through an inheritance or default mechanism.
Ich habe das so interpretiert, dass dann niemand Zugriff hat. Tja, falsch gedacht...


Ich habe mir auch vorher schonmal diese tolle "Sprache" für die Descriptors angeschaut, aber das sieht einfach nur furchtbar aus. Und ich verstehe nicht ganz, wie ich zum Beispiel die Rechte, die es nur für Prozesse gibt, geben oder nehmen kann.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Security_Descriptor ändern

  Alt 6. Sep 2007, 21:33
So richtig geklärt haben wir das ja nicht. Was für einen String brauche ich denn beispielsweise, wenn ich den Prozess-Handle-Öffnern das Recht PROCESS_VM_READ verwehren will, er aber alles andere bekommen soll? Diese Beschreibungen der Descriptor-Sprache sind für mich absolut kryptisch...
Danke im Vorraus
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#10

Re: Security_Descriptor ändern

  Alt 7. Sep 2007, 00:43
Ich habe mal schnell ein Progrämmchen geschrieben, dass Strings in einen Security Descriptor und zurück verwandelt.

Man kann den String ins Memo schreiben und dann den Button drücken - oder es einfach leer lassen und im ACL Editor die Einstellungen vornehmen und dann ins Memo schreiben lassen.
Mit der ComboBox kann man bestimmen, welche Art Objekt umgegangen werden soll - ich habe sie nicht alle getestet, daher kann es noch zu Merkwürdigkeiten kommen.

Ich hab das Programm sehr schnell runter-gehackt und daher nicht großartig getestet. Mit Fehlern müssen wir daher Leben.
Angehängte Dateien
Dateityp: rar stringdescriptor_699.rar (231,4 KB, 28x aufgerufen)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz