Frage:
Erstellen Sie einen nicht endbaren Prozess in Windows
user20825
2013-02-16 01:44:03 UTC
view on stackexchange narkive permalink

Ich bin Student und wirklich neugierig auf nicht abschließbare Prozesse in Windows.

Zu Bildungszwecken möchte ich eine Anwendung (möglicherweise in VB6?) erstellen, die von einem Benutzer nicht beendet werden kann Task-Manager oder Taskkill. Welche Strategien und Exploits setzen solche Anwendungen ein, um dies zu ermöglichen?

VB6 wird Sie wahrscheinlich nicht dorthin bringen. Das ist ein bisschen so, als hätten Sie von der internationalen Frachtschifffahrt gehört, und Sie haben ein Ruderboot und möchten es ausprobieren.
Die Frage [Diese StackOverflow] (http://stackoverflow.com/questions/992671/how-to-write-an-unkillable-process-for-windows) und [dieser Technet-Artikel] (http: // Blogs) können hilfreich sein. technet.com/b/markrussinovich/archive/2005/08/17/unkillable-processes.aspx) - ihre Schlussfolgerung, man kann mit etwas * wirklich * Unsterblichem nichts Nützliches anfangen. Alles, was ist, muss Malware-Techniken (wie die Installation als Treiber) verwenden, um schwerer zu töten. Sie könnten auch interessiert sein an [wie DRM es macht] (http://en.wikipedia.org/wiki/StarForce).
Fünf antworten:
Polynomial
2013-02-16 19:50:32 UTC
view on stackexchange narkive permalink

Im Gegensatz zu dem, was viele Leute glauben, gibt es tatsächlich mehrere Möglichkeiten, dies zu tun. Einige von ihnen sind häufig, andere selten zu sehen. Einige von ihnen sind schwach, andere stark. Es hängt alles davon ab, wie Sie es tun.

Lassen Sie uns eine Sammlung davon durchgehen:


1. Pre-NT RegisterServiceProcess Trick
Windows 9x und andere Pre-NT-Betriebssysteme hatten in kernel32.dll eine undokumentierte API namens RegisterServiceProcess , die (wie der Name schon sagt) registriert den Prozess als Systemdienst. Nachdem ein Prozess diese Funktion aufgerufen hatte, hielt das Betriebssystem sie für kritisch und erlaubte dem Task-Manager nicht, sie zu beenden. Diese Funktion wurde entfernt, als NT auf den Markt kam, sodass sie unter XP oder höher nicht funktioniert.

2. Tricks zur Prozessbenennung
In WinXP enthielt die ausführbare Datei des Task-Managers eine fest codierte Liste von Prozessnamen, die nicht beendet werden sollten, und stattdessen eine Meldung wie die von Ihnen erwähnte. Diese betrafen im Wesentlichen die kritischen Systemdienste wie smss.exe und rpcss.exe . Das Problem war, dass der Pfad nicht überprüft wurde, sodass jede andere ausführbare Datei mit demselben Namen zu einem nicht tötbaren Prozess führen würde. Dieser Trick verhindert nicht, dass der Prozess per se beendet wird, sondern verhindert, dass der Windows XP-Task-Manager den Prozess beenden kann. Es ist weiterhin möglich, ein anderes Tool zu verwenden, um den Prozess abzubrechen.

3. Keep-Alive-Prozesse
Diese sind bei weitem am häufigsten. Es werden zwei Prozesse erstellt, die wiederholt auf die Existenz des anderen prüfen. Wenn einer getötet wird, lässt der andere ihn wieder auferstehen. Dies hindert Sie nicht daran, den Prozess wirklich zu beenden, aber es macht es ärgerlich, zu verhindern, dass der Prozess zurückkommt.

Der Task-Manager enthält eine Option zum Beenden des Prozessbaums, mit der Sie einen Prozess und alle untergeordneten Prozesse beenden können, um dieses Problem zu beheben. Wenn ein Prozess in Windows erstellt wird, verfolgt das Betriebssystem die Prozess-ID, die ihn erstellt hat. Der Prozessbaum "Kill" durchläuft alle Prozesse und sucht nach Personen, deren übergeordnete ID der Prozess-ID entspricht, die Sie beenden. Da Keep-Alive-Prozesse normalerweise bei einer wiederholten Abfrage ausgeführt werden, können Sie beide Prozesse beenden, bevor sie feststellen, dass ein Fehler aufgetreten ist.

Eine Verteidigung dagegen besteht darin, einen Dummy-Prozess zu erstellen, der dann den Keep-Alive-Prozess auslöst Lassen Sie diesen Dummy-Prozess beenden. Der Hauptprozess übergibt seine ID an den Dummy-Prozess, und der Dummy-Prozess übergibt seine ID an den Keep-Alive-Prozess. Die Kette wird jedoch unterbrochen, wenn der Dummy-Prozess beendet wird. Dadurch bleiben sowohl der primäre als auch der Keep-Alive-Prozess ausgeführt, es ist jedoch unmöglich, die Kill-Prozessbaumfunktion des Task-Managers zu verwenden. Stattdessen müssten Sie ein Skript schreiben, um sie zu beenden, oder ein Tool verwenden, mit dem Sie mehrere Prozesse gleichzeitig beenden können.

4. Hooks im Benutzermodus über geladene DLLs
Es ist möglich, eine DLL in einen laufenden Prozess einzufügen. Tatsächlich bietet Windows eine Funktion, mit der jede DLL aus Gründen der Erweiterbarkeit in alle Prozesse geladen werden kann, die user32.dll importieren. Diese Methode wird als AppInit-DLLs bezeichnet. Sobald eine DLL eingefügt wurde, kann sie den Speicher des Prozesses manipulieren. Es ist dann möglich, die Werte bestimmter Funktionszeiger so zu überschreiben, dass der Aufruf an eine Stub-Routine umgeleitet wird, die dann die Zielfunktion aufruft. Diese Stub-Routine kann verwendet werden, um die Parameter zu filtern oder zu manipulieren und Werte eines Funktionsaufrufs zurückzugeben. Diese Technik wird als Hooking bezeichnet und kann sehr leistungsfähig sein. In diesem Fall ist es möglich, eine DLL in laufende Prozesse einzufügen, die OpenProcess und TerminateProcess verknüpfen, um sicherzustellen, dass keine Anwendung einen Handle für Ihren Prozess erhalten oder ihn beenden kann . Dies führt in gewisser Weise zu einem Wettrüsten, da alternative APIs im Benutzermodus zum Beenden von Prozessen verwendet werden können und es schwierig ist, sie alle zu verknüpfen und zu blockieren, insbesondere wenn wir nicht dokumentierte APIs in Betracht ziehen.

5 . Hooks im Benutzermodus über injizierte Threads
Dieser Trick funktioniert genauso wie bei DLLs, außer dass keine DLL-Datei benötigt wird. Ein Handle für den Zielprozess wird erstellt, ein Teil des Speichers wird über VirtualAllocEx darin zugewiesen, Code und Daten werden über WriteProcessMemory in den Speicherblock kopiert und ein Thread wird in erstellt der Prozess über CreateRemoteThread . Dies führt dazu, dass in einem Zielprozess Fremdcode ausgeführt wird, der dann verschiedene Hooks auslösen kann, um zu verhindern, dass ein Prozess beendet wird.

6. Call-Hooks im Kernel-Modus
Im Kernel gibt es eine spezielle Struktur namens System Service Dispatch Table (SSDT), die Funktions-IDs von Aufrufen im Benutzermodus in Funktionszeiger auf Kernel-APIs abbildet. Diese Tabelle dient zum Übergang zwischen Benutzermodus und Kernelmodus. Wenn ein böswilliger Treiber geladen werden kann, kann er die SSDT so ändern, dass anstelle der richtigen API eine eigene Funktion ausgeführt wird. Dies ist ein Kernel-Modus-Hook, der ein Rootkit darstellt. Im Wesentlichen ist es möglich, die Wolle über die Augen des Betriebssystems zu ziehen, indem falsche Daten von Anrufen zurückgegeben werden. Tatsächlich ist es möglich, den Prozess nicht nur nicht tötbar, sondern auch unsichtbar zu machen. Ein Problem bei x64-Builds ist, dass der SSDT durch Kernel Patch Protection (KPP) geschützt ist. Es ist möglich, KPP zu deaktivieren, dies hat jedoch weitreichende Konsequenzen, die die Entwicklung eines Rootkits erschweren können.

7. Direkte Kernel-Objektmanipulation (DKOM)
Dieser Trick beinhaltet auch das Laden eines böswilligen Treibers auf dem Betriebssystem, erfordert jedoch keine Änderung des SSDT. Prozesse auf dem System werden als EPROCESS -Strukturen im Kernel gespeichert. Beachten Sie, dass diese Struktur vollständig versionierungsabhängig ist und nur teilweise von Microsoft dokumentiert wird. Daher ist für mehrere Zielversionen ein Reverse Engineering erforderlich, um sicherzustellen, dass der Code nicht versucht, die falschen Zeiger oder Daten zu lesen. Wenn Sie jedoch EPROCESS -Strukturen im Kernel erfolgreich suchen und auflisten können, können Sie sie bearbeiten.

Jeder Eintrag in der Prozessliste verfügt über einen Zeiger FLink und BLink , die auf den nächsten und vorherigen Prozess in der Liste verweisen. Wenn Sie Ihren Zielprozess identifizieren und die Zeiger FLink und BLink auf sich selbst verweisen lassen und der FLink und BLink Wenn seine Geschwister aufeinander zeigen, überspringt das Betriebssystem einfach Ihren Prozess, wenn Sie Reinigungsarbeiten ausführen, z Tötungsprozesse. Dieser Trick wird als Aufheben der Verknüpfung bezeichnet. Dies macht den Prozess nicht nur für den Benutzer unsichtbar, sondern verhindert auch, dass alle Benutzermodus-APIs auf den Prozess abzielen, es sei denn, ein Handle für den Prozess wurde generiert, bevor die Verknüpfung aufgehoben wurde. Dies ist eine sehr leistungsfähige Rootkit-Technik, insbesondere weil es schwierig ist, sich davon zu erholen.

8. Debugger-Tricks
Dies ist ein ziemlich cooler Trick, den ich in freier Wildbahn noch nicht gesehen habe, der aber recht gut funktioniert. Die Windows-Debugger-API ermöglicht es jedem Prozess, einen anderen zu debuggen, sofern er über die entsprechenden Berechtigungen verfügt. Wenn Sie die Debugger-API verwenden, können Sie einen Prozess in einen "debuggten" Zustand versetzen. Wenn dieser Prozess einen Thread enthält, der derzeit von einem Debugger angehalten wird, kann der Prozess von Windows nicht beendet werden, da die ordnungsgemäße Thread-Kontrolle während der Beendigung nicht garantiert werden kann, wenn der Thread blockiert ist. Wenn Sie den Debugger beenden, wird der Prozess natürlich nicht mehr debuggt und entweder geschlossen oder stürzt ab. Es ist jedoch manchmal möglich, eine Situation zu erzeugen, in der eine Kette von Prozessen existiert, die sich gegenseitig in einer Schleife debuggen. Wenn jeder Prozess einen Dummy-Thread im nächsten anhält, kann keiner beendet werden. Beachten Sie, dass es einem Benutzer möglich ist, andere Threads innerhalb des Prozesses manuell zu beenden, wodurch sie unbrauchbar werden, aber dennoch nicht beendet werden.

9. Windows 8 DRM
Dies ist eine neue, von der ich erst kürzlich gehört habe, aber ich weiß nicht viel darüber. Auf Twitter ging ein Gerücht um, und ich habe hier und da auf verschiedenen technischen Websites Ausschnitte gesehen, aber ich habe noch keine konkreten Nachforschungen angestellt. Ich denke, es ist noch früh. Im Wesentlichen geht es darum, dass Windows 8 über einen Mechanismus verfügt, mit dem "vertrauenswürdige Anbieter" Prozesse als DRM-kritisch registrieren können, um zu verhindern, dass sie vom Benutzer getötet oder manipuliert werden. Einige Leute haben spekuliert, dass der Mechanismus zur Überprüfung vertrauenswürdiger Anbieter schwach ist und möglicherweise angegriffen werden kann.< - Sieht so aus, als wäre dieser gefälscht. Soviel zur Gerüchteküche! Strike>

Update: Harry Johnston wies in den Kommentaren darauf hin, dass Windows 8.1 geschützte Dienste einführt, die für die Verwendung durch AV und entwickelt wurden DRM zum Schutz vor Manipulation oder Angriff durch Code mit niedrigeren Berechtigungen auf dem System.

10. Werkzeugmanipulation
Dieser wurde wahrscheinlich viel in freier Wildbahn verwendet, aber ich habe noch nie gesehen, dass er richtig ausgeführt wurde. Im Wesentlichen beinhaltet dieser Trick das Targeting spezifischer Werkzeuge, z. Task-Manager, indem Sie die ausführbaren Dateien auf der Festplatte so bearbeiten, dass die Funktionalität geändert wird. Dies ist den zuvor erwähnten Hook-Tricks im Benutzermodus sehr ähnlich, aber in diesem Fall bleiben sie auf der Festplatte bestehen und haben weitreichendere Konsequenzen als einfaches API-Hooking. Ein Problem ist natürlich, dass Windows File Protection (WFP) die Änderung bestimmter kritischer Systemdateien, einschließlich des Task-Managers, verhindert. Amüsanterweise ist es jedoch möglich, den ausführbaren Pfad des Standard-Task-Managers über die Registrierung zu ändern. Anstatt mit der ausführbaren Datei des Task-Managers herumzuspielen, sichern Sie einfach Ihre eigene Version irgendwo und lassen Sie das Betriebssystem sie verwenden.


Alles in allem gibt es viele Möglichkeiten, dies mit unterschiedlichem Grad an Robustheit zu erreichen. Das Obige stellt eine Mehrheit von ihnen dar, ist jedoch nicht erschöpfend. Tatsächlich können viele der von mir beschriebenen Tricks auf alternative Weise erreicht werden, indem verschiedene Mechanismen oder APIs verwendet werden, um dasselbe Ziel zu erreichen.

@polnomial Können Sie nur sagen, welche die beliebteste ist und im Allgemeinen von verschiedenen Viren- und Antivirensoftware verwendet wird?
Sie sind alle gleichermaßen möglich, geben oder nehmen.
Dies ist eine ziemlich gute Antwort, aber ich wäre gespannt auf die Mindestanforderungen, die für die Ausführung der einzelnen Methoden erforderlich sind, da für alle unterschiedliche Ebenen erforderlich sind.
@SteveS 1,2,3 kann von jedem Benutzer ausgeführt werden, 4,5,8,9 erfordern Admin, 6,7 erfordern Admin und eine Möglichkeit, die Treibersignatur zu umgehen (deaktivieren oder einen signierten Treiber verwenden), 10 hängt von der ACL ab der Datei, die Sie ersetzen möchten.
Haben Sie Links zu Windows 8 DRM? Es klingt schrecklich.
Benötigt # 8 wirklich Admin? Und für # 3 können Sie den Kill Process Tree auch brechen, indem Sie ProcA ProcB starten lassen, wodurch ProcC gestartet und ProcB beendet wird (alles bevor der Task-Manager geöffnet wird). Dann ist C seine eigene Wurzel im Prozess "Wald" und hat nichts mit A zu tun.
@mihi Ja, für # 8 ist ein Administrator erforderlich, da das Debuggen eine privilegierte Operation ist. Ich habe den Trick der Prozessverkettung im letzten Absatz von # 3 erwähnt.
Ich hatte den Eindruck, dass Sie einen Prozess debuggen können, wenn Sie über Vollzugriffsberechtigungen verfügen (z. B. wenn er unter Ihrem Benutzerkonto ausgeführt wird). Zumindest habe ich einige Programme mit OllyDbg getestet, ohne Administrator zu sein (Dinge wie HW Breakpoints funktionieren jedoch nicht).
@mihi Ja, das stimmt, aber ich bin mir ziemlich sicher, dass in diesem Fall der Teil "Debuggen eines Debuggers" Administrator erfordert.
Ihre Nummer 9 klingt verdächtig nach [geschützten Diensten] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn313124 (v = vs.85) .aspx), die in Windows 8.1 eingeführt wurden. (Vielleicht waren die Gerüchte richtig, aber die Technologie war nicht rechtzeitig für die ursprüngliche Version von Windows 8 bereit?)
@HarryJohnston Schöner Fund. Ich werde es in die Antwort aufnehmen.
Nur für den Fall, dass diese Antwort entfernt wird, speichere ich die Seite :)
AJ Henderson
2013-02-16 02:24:34 UTC
view on stackexchange narkive permalink

Ich glaube nicht, dass das, was Sie versuchen, möglich ist. Sie müssten das Betriebssystem untergraben, um zu verhindern, dass ein Prozess beendet werden kann. Alle Prozesse werden innerhalb des Betriebssystems ausgeführt, daher kann das Betriebssystem jeden Prozess beenden. Sie können sogar Prozesse wie "explorer.exe" beenden, mit denen das Startmenü und der Desktop ausgeführt werden.

Die meisten Programme, die als "nicht tötbar" erscheinen, können tatsächlich beendet werden, aber ein anderes Programm überwacht ihre Ausführung und wann Wenn der Prozess geschlossen wird, wird er automatisch sofort neu gestartet. Wenn Sie processA beenden, startet processB es und wenn Sie processB beenden, startet processA es. Da Sie beide Prozesse nicht einfach genau zusammen beenden können, wird es sehr schwierig, sie während des Systembetriebs zu entfernen.

Dieselbe Technik wird sowohl von mehreren Antiviren-Anbietern als auch von den gängigen verwendet Anti-Cheating-Programm PunkBuster.

Auf älteren Systemen kann der Prozess auch als Dienst ausgeführt werden. Unter Windows XP und Windows 2000 kann der Task-Manager keine Prozesse beenden, die vom Service-Manager gestartet wurden, da der Service-Manager in einem anderen Benutzerkontext ausgeführt wird. Auf diesen älteren Systemen kann das Erstellen eines Windows-Dienstes nicht direkt mit dem Task-Manager beendet werden. In neueren Windows-Versionen kann er jedoch beendet werden.

Es kann hilfreich sein, zu sehen, in welchem ​​Kontext der Prozess ausgeführt wird unter, wenn die Erlaubnis verweigert wird. Sie können ein Tool wie Process Explorer aus der SysInternal-Suite verwenden, um festzustellen, unter welchem ​​Benutzerkontext der Prozess ausgeführt wird. Wenn der Benutzerkontext, unter dem der Task-Manager ausgeführt wird, keinen Zugriff auf Kill-Prozesse hat, die unter dem Benutzerkontext ausgeführt werden, unter dem der Prozess ausgeführt wird, schlägt der Kill fehl.

Zugehörige Informationen finden Sie unter dieser Frage für Superuser https://superuser.com/questions/109010/kill-a-process-which-gives-access-denied. Es scheint, dass es eine Sicherheitseinstellung pro Prozess gibt, die angewendet werden kann, um das Recht zum Töten zu entfernen. Dies könnte programmgesteuert erfolgen und das Beenden erschweren. Ein Administrator könnte jedoch weiterhin die Verantwortung für den Prozess übernehmen und dann die Berechtigungen zurücksetzen, um das Beenden zu ermöglichen. Die speziellen Windows-APIs sind CreateProcessWithTokenW und SetSecurityInfo.

Betrachten Sie meine Absicht nicht als falsch, aber ich habe meine Viren gesehen, die nicht vom Task-Manager beendet werden können.
@VarunDotCuDotCc - was dort im Allgemeinen passiert, ist, dass es zwei ausführbare Dateien gibt. Jeder überwacht den anderen und wenn einer getötet wird, startet der andere ihn sofort neu. Da die Dateien gesperrt werden können, während die ausführbaren Dateien ausgeführt werden, können Sie sie nicht einfach löschen, ohne beide zuerst anzuhalten. Diese Technik wird häufig von AV-Software sowie dem beliebten Anti-Cheating-Programm Punkbuster verwendet.
Nein, es gibt eine einzige ausführbare Datei. Ich bin ziemlich sicher. Wenn ich auf die Option Prozesse beenden klicke, wird im Task-Manager die Meldung "Der Prozess kann nicht beendet werden" angezeigt.
Und dann zaubert Antivirus und der Prozess wird beendet (nach einem Scan).
@VarunDotCuDotCc - Versuchen Sie, die "Anwendung" oder den "Prozess" zu beenden? Wenn die Benutzerkontensteuerung aktiviert ist, werden Sie als Administrator oder Benutzer ausgeführt? Wenn Sie auf Benutzerebene ausgeführt werden, können Sie Verwaltungsprozesse nicht beenden. Wenn Sie auf der Ebene "Anwendung / Aufgabe" töten, wird der Prozess zum Schließen aufgefordert und kann abgelehnt werden. Das Töten des Prozesses selbst sollte den Prozess ungeachtet seiner Wünsche schwer stoppen.
OK, ich habe einen Beweis. Installieren Sie AVG Anti Virus (kann kostenlos sein). Wechseln Sie nun im Task-Manager zur Registerkarte "Prozess" und beenden Sie den Prozess "avgnt.exe". Wissen Sie, was Sie erhalten, nur die Meldung "Der Vorgang konnte nicht abgeschlossen werden. Zugriff verweigert".
@VarunDotCuDotCc - Wenn Sie eine Nachricht "Zugriff verweigert" erhalten, ist mit ziemlicher Sicherheit die Benutzerkontensteuerung aktiviert und Sie führen den Task-Manager nicht im Verwaltungsmodus aus. Haben Sie die Schaltfläche "Prozesse für alle Benutzer anzeigen"? Wenn ja, klicken Sie darauf (der Task-Manager wird im Verwaltungsmodus automatisch geschlossen und wieder geöffnet) und versuchen Sie dann, den Prozess abzubrechen.
@VarunDotCuDotCc - Die andere Möglichkeit ist, dass wenn Sie ein sogenanntes Rootkit erhalten, es den Task-Manager durch eine gefälschte oder geänderte Version ersetzen oder die Systemdateien von Window so ändern kann, dass Anweisungen zum Beenden des Prozesses ignoriert werden. Ein solches Programm konnte jedoch nicht in Visual Basic erstellt werden, da es eine sehr fortgeschrittene native Code-Programmierung erfordert, um diese Funktionalität zu missbrauchen, und VB6 ist viel zu eingeschränkt, um dies zu tun. Es ist auch unwahrscheinlich, dass legitime Programme ein Root-Kit verwenden, da sie einen Computer gefährden können. (Siehe das Sony DRM RootKit-Fiasko.)
OK, ich habe versucht, den Task-Manager als Administrator auszuführen und alles, was Sie gesagt haben. Ich denke auch, dass UAC in XP nicht existiert.
Ich denke, Rootkit werden nicht von Antiviren erstellt. Haben Sie die Installation von AVG selbst überprüft?
@VarunDotCuDotCc - Ok, ich habe etwas mehr über die Nachricht recherchiert, die Sie erhalten haben. Es scheint, dass der Task-Manager auch keine Dienste beenden darf. Wenn ein Prozess vom Service Manager aus gestartet wird, muss er vom Service Manager oder einem anderen Prozesskiller beendet werden. Sie könnten einen Dienst mit VB6 machen. Tut mir auch leid wegen der Verwirrung. Ich habe seit einiger Zeit nicht mehr mit XP gearbeitet und der Zugriff des Task-Managers wurde zwischen XP und Vista geändert. Ich bin mir ziemlich sicher, dass es Dienste jetzt direkt beenden kann, aber in XP / 2000 konnte es nicht.
Ändern der Windows-Systemdateien, sodass Anweisungen zum Beenden des Prozesses ignoriert werden. das ist was ich suche
Ich habe gerade einen Dienst in VB6 erstellt, installiert und ausgeführt. Danach habe ich es sehr einfach über den Task-Manager beendet.
@AJHenderson Ich arbeite mit vielen XP-Computern in unserem Unternehmen und kann bestätigen, dass diese Meldung angezeigt wird, wenn versucht wird, bestimmte Aufgaben im Task-Manager abzubrechen, selbst wenn Sie als Administrator angemeldet sind (dieser Fehler ist auch aufgetreten) Windows 7 auch mit Run As Administrator). Es sind jedoch nicht alle Dienste, nur einige von ihnen. Außerdem ist dieser Fehler nicht nur auf Systemprozesse beschränkt, auch wenn es sich hauptsächlich um Systemprozesse handelt, bei denen Sie sie nicht beenden können.
@Rachel Sie können sehen, dass ich versuche, dasselbe aus den letzten 45 Minuten zu vermitteln. Jetzt habe ich einige Stimmen zu meinen Argumenten. Im Allgemeinen wird diese Technik von Viren und Antivirenprogrammen verwendet, um zu verhindern, dass sie von dem anderen beendet werden.
Es ist 2:45 Uhr hier und ich habe ein paar Stunden hier ohne Glück verbracht. Also gehe ich schlafen und werde später an der Diskussion teilnehmen.
@Rachel - Wird Active Directory ausgeführt und werden die Prozesse in einem Kontext ausgeführt, über den der lokale Administrator keine Kontrolle hat? Letztendlich ist der Ausführungskontext hier der Schlüssel. Windows (es sei denn, Rootkitted oder sehr selten, der Kernel wird instabil gemacht) kann jeden laufenden Prozess beenden. Der Zugriff wird verweigert. Nachrichten sind das Ergebnis des Ausführungskontexts des Task-Managers, der keine Berechtigung zum Beenden von Anwendungen hat, die im Ausführungskontext des Prozesses ausgeführt werden.
@AJHenderson Ja, wir verwenden Active Directory und ich weiß, dass ich diesen Fehler einige Male gesehen habe, als ich versucht habe, einen Prozess über das Netzwerkadministratorkonto abzubrechen, nicht nur über das lokale Administratorkonto. Manchmal handelt es sich um Systemprozesse, manchmal um Programmierer von Drittanbietern wie AVG, und ein- oder zweimal handelt es sich um Malware. Es ist kein Problem, das ich jetzt habe, also würde ich wahrscheinlich keine Verwendung beim Ausführen von Tests gebrauchen, aber ich kann bestätigen, dass es in der Vergangenheit passiert ist :)
http://superuser.com/questions/109010/kill-a-process-which-gives-access-denied - Hier finden Sie weitere Details zu Prozessbenutzerkontexten.
tylerl
2013-02-16 07:05:41 UTC
view on stackexchange narkive permalink

Wie von AJ erwähnt, ist letztendlich das Betriebssystem verantwortlich. Es entscheidet, ob ein Prozess beendet werden kann, wann er beendet wird, wie usw. Bestimmte Prozesse können durch das Betriebssystem "geschützt" werden, wodurch verhindert wird, dass sie beendet werden, oder wie es auch der Fall ist, kann der Prozess technisch beendet werden, aber Das Beenden des Prozesses führt zum Herunterfahren des gesamten Computers.

Wenn Sie Malware geschrieben haben und das Beenden eines Prozesses unmöglich machen möchten, sollten Sie das Betriebssystem am besten ändern, um dies zu verhindern . Dies kommt nicht in Frage und ist tatsächlich etwas, worüber Autoren bereits nachgedacht haben. In der Tat ist das Vornehmen von Betriebssystemänderungen zum Schutz von Ressourcen ein so häufiger Thread, dass sie einen Namen dafür haben: " rootkit".

Wie ändern Sie also das laufende Betriebssystem? Glücklicherweise sind alle modernen Betriebssysteme so geschrieben, dass Sie solche Änderungen vornehmen können. Schreiben Sie einfach ein Kernelmodul (a.k.a. "Treiber"). Es gibt sogar ein Entwicklungskit, mit dem Sie loslegen können.

Wenn Sie dort sind, verknüpfen Sie einfach den Codepfad, der die Prozesssteuerung übernimmt, und geben Sie Ihre kleine Ausschlussregel ein. Weitere Informationen finden Sie in den Rootkits.

Evert
2015-09-03 19:14:44 UTC
view on stackexchange narkive permalink

Es ist keine gute Idee, einen wirklich nicht tötbaren Prozess zu erstellen. Es ist jedoch durchaus möglich, einen Prozess davor zu schützen, von einem anderen Benutzer als einem Administrator beendet zu werden. Administratoren haben und sollten vollen Zugriff auf den Prozess haben und können den Prozess beenden.

Um dies zu tun, müssen Sie die Prozess-ACL ändern, damit das Betriebssystem alle Versuche ablehnt, den Prozess abzubrechen von Nicht-Administratoren.

In Ihrem Prozess-Starup-Code sollten Sie die Prozess-DACL abrufen, eine Einschränkung hinzufügen, damit "Jeder" beim Versuch, den Prozess abzubrechen, einen "Zugriff verweigert" erhält, und dann schreiben Setzen Sie den Prozess DACL zurück.

Wenn Sie interessiert sind, kann ich Ihnen .NET-Quellcode zur Verfügung stellen.

braindigitalis
2018-06-08 18:50:28 UTC
view on stackexchange narkive permalink

Eine Sache, die hier übersehen wurde, ist das Konzept der (ab) Verwendung der Virtualisierung zur Implementierung eines Hypervisors über Fenstern, die Ihren Code enthalten.

Da Ihr Code dann außerhalb und über Fenstern ausgeführt wird, ist er nicht leicht zu erkennen kann auch nicht durch Windows beendet werden.

" Blue Pill" war ein Proof of Concept eines solchen Konzepts, jedoch wird nach anfänglicher Aufregung eine solche Implementierung sehr selten und persönlich erwähnt Ich habe so etwas noch nicht in freier Wildbahn gesehen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...