Treiber zur Laufzeit entladen

Hallo Leute,

hat jemand eine Ahnung, wie man einen Treiber unter Windows zur Laufzeit entlädt? Es geht um die Deaktivierung von Symantec Antivirus.


Gruß,

Chris
 
also wenn's ums Deaktivieren des AntiVirus-Programms geht, dann hat das, schätz ich mal, weniger was mit Treiber entladen zu tun, sondern ehr mit Beenden von Prozessen...

Wenn du es weiterhin im Hintergrund laufen lassen willst, aber inaktiv setzen willst, musst du dich mal erkundigen, in wie weit sich das Programm direkt über die Konsole steuern lässt.

Wenn du die Prozesse des Programms komplett killen willst (vorausgesetzt, du hast die nötigen Rechte), dann geht das mit taskkill

und dazu hat google folgendes gefunden:
http://www.tech-recipes.com/rx/446/xp_kill_windows_process_command_line_taskkill
 
Hi!

Nein, die Prozesse sind's definitiv nicht. Die habe ich alle schon gekillt (per Hook). Es wird ein Treiber geladen (eeCtrl.sys - Eraser Engine), der vermutlich mit Ring 0 Privilegien läuft und den Dateizugriff/Programmstart überwacht.

Gruß,

Chris
 
also meistens kannst du antivirusprogramme nicht einfach per taskkill abschießen. so weit ich weis liegt das daran, dass sie auf kernelebene laufen oder mit eingebunden sind.... also vom level her "ring 0" - wärend du bei einer herkömmlichen applikation fast immer "ring 3" als level hast. aber was schreib ich lange texte ... schau selber:

http://de.wikipedia.org/wiki/Ring_(CPU)

es gibt auch wege diese programme zu beeinflussen. ich weiss aber nciht wie :-) vermutlich musst du sie mit einem level 0 degugger bearbeiten wie z.B. softice...
 
Die Prozesse kriege ich über eine DLL gekillt, die per Hook injiziert wird. Ich muss aber definitiv noch den Treiber entladen, sonst ist der Realtime-Schutz noch aktiv.
 
Möglichkeit 1: (User imitieren)
Die AV-Tools lassen sich durch eine GUI steuern - so lässt sich der Echtzeit Schutz deaktivieren. Man braucht lediglich die Windows Messages abzufangen und diese dann mit dem eigenen Programm wieder nach zu bauen.

Antivir, McAfee und viele andere lassen sich so auschalten. Bei Norton, Kaspersky usw. kann man die Einstellungen mit einem PW sichern dann funktionierts nicht mehr auf die ganz billige Tour.

Möglichkeit 2: (Windows MessageSystem ausnutzen)
Ich habe in diese RIchtung schon einige bemerkenswerte Dinge anstellen können. ->Windows hat keinerlei Kontrolle darüber welches Programm/User mit welchen Rechten diese Message sendet. Eine Designschwäche von Windows. Ich habe mich damit beschäftig, und bin dann mal auf Herrn Krzysztof Wilkos gestossen der einige äuserst Interessante Berichte darüber verfasste. Unteranderem machte er sogar genau dieses Thema in einer hakin9 Ausgabe public. Hier der Artikel:
Windows Systemmessages Exploit

Dieses Wissen angewendet auf die GUIs von AVs oder andere GUIs von Programmen die mit Systemrechten laufen kann man wunderbar für lokale Exploits benützen - um etwa mehr Rechte zu erhalten oder gleich eine Aktion im namen des Wirtsprogrammes durchzuführen.

Es sei noch angemerkt, dass man durch die DEP (Data Execution Protection) solche Exploits erfolgreich verhindern kann, sofern diese für das jeweilige Programm aktiviert ist. Siehe auch DEP funktioniert!?

Natürlich ist auch die DEP ein Witz -> man kann durch Methode 1 (User imitation) einfach sein Ziel Prozess zu den Ausnahmen hinzufügen und somit den Exploit durchführen.
 
Nehmen wir mal an, der Virenscanner-Prozess heißt rtvscan.exe.
Die DLL wird in diesen Prozess injiziert.
Die DLL hat eine Startprozedur, die jedes Mal, wenn sie von einem Prozess geladen wird, aufgerufen wird. In der Startprozedur wird überprüft, wie der aktuelle Prozess heißt. Wenn der Prozess "rtvscan.exe" heißt, ruft die DLL TerminateProcess auf. Der Prozess killt sich zuzusagen selbst.

Wie kriegt man nun die DLL in den Prozess?

Da gibt es mehrere Möglichkeiten.
(Ich bin selbst noch Laie, daher möge man mich korrigieren, wenn ich was Falsches schreibe.)
Ich habe mich entschieden, Win32 Hooks zu verwenden. Hooks funktionieren in etwa so:

Windows Prozesse laufen alle voneinander getrennt in ihrem eigenen Speicherbereich. Sie kennen nur sich selbst und keinen anderen Prozess. Dennoch gibt es Möglichkeiten, wie sie untereinander kommunizieren können. Sie können sich z.B. über die Windows-API gegenseitig sog. Messages zuschicken lassen und diese auch überwachen.
Um Messages zu überwachen (z.B. Tastatureingaben und Mausbewegungen), können sogenannte Hooks installiert werden. Ein Hook muss immer mit einem Parameter eingerichtet werden, der die Speicheradresse zu einer Funktion angibt, so dass z.B. die Funktion"CheckKeyboardInput" jedes Mal aufgerufen wird, wenn eine Taste gedrückt wird. Hier gibt es ein Beispiel.

Nun habe ich weiter oben geschrieben, dass ein Prozess nur sich selbst kennt und keine anderen Prozesse. Wie kann er nun diese Hook-Funktion aufrufen, wenn er sie gar nicht kennt?
Die Antwort darauf lautet, dass die DLL, in der die Funktion steckt, von dem Prozess geladen werden muss.

Das ist es in etwa :)

Gruß,

Chris
 
Interessant.

Aber wenn ich einen Prozess mit weniger Rechten starte, der dann eben diesen Hook installiert, wie soll der denn einen anderen Proc killen der mit mehr Rechten läuft?

Beispiel:
In meinem Prozess wird die funktion x gehookt -> und wie du geschrieben hast wird dann als Parameter einen Pointer zu meiner Funktion übergeben, und sobald dieser Event auftritt wird meine definierte Funktion aufgerufen. Nun will meine Funktion einen Prozess killen mit höheren Rechten - geht das?

Da es verschiedene Hooks gibt, wäre es auch interessant zu wissen welche du verwendest; zum einen kann man eine Funktion im eigenen Programm definieren, andererseits kann man auch auf eine eigens dafür geschreibene dll verweisen. (diese wird dann von Windows geladen).

Kannst du folgen worauf ich hinaus will? :)
 
vielen dank für die ausführlichen infos. beide ausführungen sind sehr interessant. ich frag mich allerdings bei der injection ob das ganze überhaupt noch mit vista funktioniert. so weit ich weiss sind ja diverse speicherbereiche geschützt...
 
Die DLL wird ja in den betreffenden Prozess injiziert, d.h. der Prozess ruft die Funktion dann selbst auf mit seinen eigenen Rechten.

Es gibt allerdings ein Problem (ich arbeite mit vista), wenn Du Code in einen Dienst injizieren willst. Dann muss das setzen des Hooks ebenfalls von einem Dienst erfolgen.

Ich habe noch nicht sehr viel experimentiert, welche Hooks am besten wofür geeignet sind, daher verwende ich alle die hier stehen:)
 
Um einmal auf die eigentliche Frage zurueckzukommen, einen Treiber entlaed man normaler mit den WinAPI-Funktionen: OpenSCManager() OpenService() ControlService() DeleteService(). Es setzt natuerlich voraus, dass der Treiber sauber ueber die uebliche Mehtode geladen wurde. Auch geht ZwUnloadDriver.

Zum Thema DLL-Injection ist dieser Text auch empfehlenswert, zwar eher schwer zu lesen, aber bis zum Zeitpunkt der Veroeffentlichung sehr interessante Methoden.

*edit*
http://www.rootkit.com/newsread.php?newsid=849 << den Link hat ich ganz vergessen.
 
Zurück
Oben