Kündigung geschützt antivirus-Prozess
Ich bin mit dem ESet antivirus, und vor kurzem seine GUI-front-end egui.exe aufgehängt und war unter 50% CPU (also 100% von einem Kern). Erstaunlich fand ich, dass ich nicht töten kann, selbst mit debug-Berechtigungen aktiviert.
Nun bin ich neugierig: wie sehen Sie die Umsetzung einer solchen Verteidigung, und gibt es einen Weg, um zu töten es kurz zu schreiben, einen kernel-Treiber?
Den egui.exe Prozess läuft unter einem normalen Benutzer (nicht-admin), und ich versuchen zu töten, die es in verschiedenen Möglichkeiten, mit einem administrativen Konto. Hier ist, was ich versucht habe.
- Sie nicht töten, es aus dem task-manager
- Sie nicht töten, es mit pskill
- Sie nicht töten, es mit process explorer, noch kann Sie einen debugger anfügen, um es
Dann begann ich einige Programmier-und festgestellt, dass:
-
unter nicht-privilegierten Benutzer, können Sie es mit PROSESS_TERMINATE Zugang, aber die tatsächlichen Aufruf von TerminateProcess() schlägt fehl mit Fehler 5.
-
unter admin-Konto, können Sie es mit beliebigen Zugriffsrechten, die Sie möchten (nach dem aktivieren der debug-Privileg natürlich), aber dann ruft an TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() alle fehl mit Fehler 5.
Diese definitiv Punkte, um eine Art der Geigen, die nicht nur die Einstellung der Prozess-DACL, da Sie wenn Beenden, waren nicht in der DACL, die Sie nicht in der Lage, öffnen Sie den Prozess mit PROCESS_TERMINATE rechts in den ersten Platz. Sind Sie tatsächlich abfangen Win32-API-Aufrufe? Wenn ja, dann wie? Es ist eine Weile gewesen, seit ich low-level-system-Programmierung, also verzeih meine Unwissenheit.
- Warum wollen Sie das wissen? 🙂
- AVs in der Regel haben die kernel-Modus-Komponenten. Wenn Sie töten könnten Sie nur, indem Sie sich höchsten Privilegien, es wäre mieser Schutz.
- Können Sie es töten, wenn es normal läuft, oder ist es nur, wenn es aufgehängt, dass man nicht töten ?
- vielleicht ist es mir, aber ich weiß nicht wie unsterblich Prozesse, die fressen alle meine CPU
- Ich könnte nicht töten, wenn es normal läuft
- Plus Plus: ich bin admin auf der Maschine. Ich kann stoppen und sogar deinstallieren, die ganze Sache. Aber das ist nicht der Punkt, ich neugierig, WIE Sie es tun.
- Es geht nicht darum, was Nutzer tun können, es geht darum, was die software tun können.
- Auch können Sie mit Process Hacker an processhacker.sourceforge.net um den Prozess zu beenden. Führen Sie es als administrator mit der rechten Maustaste auf den Prozess, Beenden. Es ist open source, so können Sie den code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können, get ein halten Sie die "System Virginity Verifier" von Joanna Rutkowska, dies sollte Ihnen eine ziemlich gute Idee wo Sie setzen Ihren Haken. Ähnlicher Werkzeuge (einschließlich GMER) kann verwendet werden, um zu untersuchen, was Los ist in den Eingeweiden des Systems. Es mag merkwürdig klingen, aber manchmal AVs verwenden Techniken, die auch Häufig in schädliche software, wie z.B. rootkit-Techniken, in einem Versuch zu schützen, Ihre software zu täuschen.
Es klingt wie SSDT-Hooking und ähnliche Techniken verwendet wurden, um zu "schützen" den Prozess. Mein Erster Schuss auf das wäre auszusetzen, alle threads des Prozesses. Die meisten dieser Schutz-Mechanismen (von malware und anti-malware-alike) trigger nur auf die Beendigung der versuche. Aber sobald Sie anhalten aller threads (Prozess-Explorer tun können), keiner von Ihnen geplant werden nicht mehr durch den scheduler (führt zu nicht-CPU-Auslastung).
SSDT (manchmal SDT) steht für die System Service Descriptor Table. Es ist die Tabelle mit der Funktion Adressen der system-Dienste (die Anzahl der system-Dienstleistung der index). Wenn Sie anrufen, so etwas wie
CreateFile
aus der Win32-Anwendung, es wird am Ende in NTDLL aufrufenNtCreateFile
(==ZwCreateFile
im UM). Von dort den Mechanismus (was hat sich geändert seit Windows 2000/XP) unterscheiden sich darin, wie es übergänge in den Kernelmodus (KM), bekannt als "ring 0". Trotzdem, die Umsetzung derNtCreateFile
in NTDLL etwa Folgendes aus: es verschiebt den index des system-Dienst-in ein register und ruft dann die Methode, die verwendet wird, um den übergang zu KM (sysenter
opcode in neueren Implementierungen). Ankunft in KM, wird der handler den index überprüfen, um herauszufinden, die Funktion Adresse aus der SSDT und rufen Sie dann diese Funktion. Es gibt einige weitere überprüfung des UM-stack geht hier (wenn Sie kommen UM), aber das ist der Prozess, in einfachen Worten. Also, wenn du den Haken Funktionalität auf dieser Ebene können Sie verhindern, dass jedes subsystem, einschließlich der Win32-subsystem, etwas zu tun. Dies hat jedoch mehrere Probleme verbunden (ihrigen am wenigsten von Ihnen). Die meisten Entwickler machen einen schlechten job, die können oft beobachtet werden, dass sich die malware, wie das rootkit von Sony entschieden, um auf einigen audio-CDs im Jahr 2005. So Insulinspritzen ist praktisch unmöglich, ohne die Gefahr Fehler zu überprüfen und mehrere unabhängige code-Stücken, die Haken die gleichen SSDT index wird in der Regel auch zu Problemen führen wegen Rücksichtslosigkeit auf Seiten der Praktiker.So Aufhängen des threads scheint eine Möglichkeit, obwohl diese Frage natürlich ist die Art der open-ended (ohne zu wissen, die details des ESET-Treiber(s)). Wenn Sie jedoch verhindern, dass auch Sie sollten in der Tat erwägen, switching-Produkte. Ich Wette, dass die Nachteile der system Stabilität solcher Produkte höher sind als die zusätzlichen "Schutz", obwohl Sie (ESET) erzählen dir etwas anderes.
Andere mögliche Methode könnte sein, code zu injizieren (z.B. über eine DLL), und der Vorgang selbst nennen
ExitProcess
. Dies hängt auch davon ab, ob oder nicht, Ihre Haken, damit diese Lücke.Kann es verschiedene Fälle, sagen:
Erhalten Sie ERROR_ACCESS_DENIED. Ich weiß nicht, welche Schritte Sie gingen durch, aber darf ich vorschlagen, diese:
Können Sie spielen, um es, weil selbst wenn man strat Ihre app (das ist, was Sie versucht zu tun, vermute ich) wird es mit Ihren Anmeldedaten.