Entwickler-Ecke

Freeware Projekte - Hidden Process Detector v1.1


SAiBOT - Do 21.01.10 16:23
Titel: Hidden Process Detector v1.1
Informationen
Mit diesem kleinen Tool kann man sein Windowssystem nach versteckten Prozessen durchsuchen. Es verwendet folgende Techniken:
Kursiv markierte Methoden sind unsicher und benötigen zum Aufruf den Parameter "-unsafe".

Mit diesen wirkungsvollen Techniken erkennt HPD die meisten, von Rootkits versteckten, Userland Prozesse. Sollten versteckte Prozesse auf deinem System gefunden werden, so ist es sehr wahrscheinlich das dein System von einen Rootkit infiziert ist. Allein durch manipulation von Kernel-Objekten, ist es dem Angreifer nicht mehr möglich seine Prozesse im Hintergrund laufen zu lassen, neben dieser Standard Technik wären noch eine Reihe von Kernel/Userland Hooks notwendig.

Es war viel arbeit dieses Tool kompatibel mit den neueren Versionen von Windows zu machen, aber ich denke ich habe eine universelle Lösung gefunden.

Systemvoraussetzungen
ab Windows 2000

Edit:
Da noch ein paar Virenscanner bei VirusTotal Falschmeldungen von sich gaben, habe ich HPD nochmal überarbeitet. Nun sollte es keine Probleme mehr geben. Hier die Ergebisse:
Edit2:
Ab Version 1.0 wird HPD wieder von manchen "Noname" Av's erkannt, leider finde ich diesmal keine Möglichkeit das Problem zu umgehen.

Virusscans: (v0.3)
Jotti.org:
http://virusscan.jotti.org/de/scanresult/d1165a1c0228f152a79bf2b129e58d07e3cb366d

VirusTotal.com:

Quelltext
1:
2:
3:
Datei HPD.exe empfangen 2010.01.24 01:10:13 (UTC)
Status: Laden ... Wartend Warten Überprüfung Beendet Nicht gefunden Gestoppt
Ergebnis: 0/41 (0%)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
a-squared       4.5.0.50         2010.01.24  -
AhnLab-V3       5.0.0.2         2010.01.23  -
AntiVir               7.9.1.146         2010.01.22  -
Antiy-AVL       2.0.3.7         2010.01.22  -
Authentium       5.2.0.5         2010.01.23  -
Avast               4.8.1351.0         2010.01.23  -
AVG               9.0.0.730         2010.01.23  -
BitDefender       7.2         2010.01.24  -
CAT-QuickHeal       10.00         2010.01.22  -
ClamAV               0.94.1         2010.01.22  -
Comodo               3685         2010.01.23  -
DrWeb               5.0.1.12222       2010.01.23  -
eSafe               7.0.17.0         2010.01.21  -
eTrust-Vet       35.2.7255         2010.01.22  -
F-Prot               4.5.1.85         2010.01.23  -
F-Secure       9.0.15370.0       2010.01.23  -
Fortinet       4.0.14.0         2010.01.23  -
GData               19                 2010.01.24  -
Ikarus               T3.1.1.80.0       2010.01.24  -
Jiangmin       13.0.900         2010.01.23  -
K7AntiVirus       7.10.952         2010.01.22  -
Kaspersky       7.0.0.125         2010.01.24  -
McAfee               5870         2010.01.23  -
McAfee+Artemis       5870         2010.01.23  -
McAfee-GW-Edition    6.8.5         2010.01.24  -
Microsoft       1.5405         2010.01.24  -
NOD32               4800         2010.01.23  -
Norman               6.04.03         2010.01.23  -
nProtect       2009.1.8.0         2010.01.23  -
Panda               10.0.2.2         2010.01.23  -
PCTools               7.0.3.5         2010.01.23  -
Prevx               3.0         2010.01.24  -
Rising               22.31.04.04       2010.01.22  -
Sophos               4.50.0         2010.01.24  -
Sunbelt               3.2.1858.2         2010.01.23  -
Symantec       20091.2.0.41      2010.01.24  -
TheHacker       6.5.0.9.160       2010.01.23  -
TrendMicro       9.120.0.1004      2010.01.23  -
VBA32               3.12.12.1         2010.01.23  -
ViRobot               2010.1.23.2152    2010.01.23  -
VirusBuster       5.0.21.0         2010.01.23  -


Flamefire - Do 21.01.10 19:12

Guter Ansatz. Läuft auch auf Win7...
Kann da leider keine Prozesse mehr verstecken, so dass ich den "Ernstfall" nicht testen kann.
Werde es gleich mal unter XP testen.

Anmerkungen:
Warum beginnst du dein PID-Bruteforce bei 0, wenn du dann bei 0 und 4 ein continue hast?
Außerdem war da was wegen dem UPX-Packer... War keine gute Idee Programme zu packen. Wäre also besser, wenn du es normal lässt. Wegen dem Windows-Speichermanager.
Ansonsten...Test kommt gleich ;-)

Edit: Ok. Der PID-Bruteforcer ist gut. Der hat mein Ollydbg mit Treiber-Plugin gefunden. Der Rest der Tests hat nichts gefunden. Auch das FU-Rootkit erkennt er mit dem PID-BruteForce.
Manko: False-Positives beim letzten Test (NtQuerySystemInformation) Er erkennt sich selbst als versteckt. Aber auch nicht immer und konnte es nicht durch etwas bestimmtes reproduzieren. Taucht aber gelegendlich mal auf. Sowohl unter Win7 als auch XP


SAiBOT - Do 21.01.10 20:10

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
Guter Ansatz. Läuft auch auf Win7...
Kann da leider keine Prozesse mehr verstecken, so dass ich den "Ernstfall" nicht testen kann.
Werde es gleich mal unter XP testen.

Wenn du Kerneltreiber + Zubehör für W7 haben willst lass es mich wissen.

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:

Anmerkungen:
Warum beginnst du dein PID-Bruteforce bei 0, wenn du dann bei 0 und 4 ein continue hast?
Außerdem war da was wegen dem UPX-Packer... War keine gute Idee Programme zu packen. Wäre also besser, wenn du es normal lässt. Wegen dem Windows-Speichermanager.
Ansonsten...Test gleich ;-)

Ja, schön blöd :oops:, danke!
kannst du mir das mit UPX näher erleutern?

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:

Manko: False-Positives beim letzten Test (NtQuerySystemInformation) Er erkennt sich selbst als versteckt. Aber auch nicht immer und konnte es nicht durch etwas bestimmtes reproduzieren. Taucht aber gelegendlich mal auf. Sowohl unter Win7 als auch XP

Ja, nun weiß ich auch warum -.-, dürfte behoben sein.
lade gleich die neue, ungepackte Version hoch.

Danke für dein Feedback


Flamefire - Do 21.01.10 20:41

@UPX: Ich versuchs...Ist schon ne Weile her. UPX haut alle Sections zusammen. Normalerweise kann Windows bestimmte Teile auslagern, da UPX aber alles in eine Speicherregion schreibt, geht das nicht mehr. Praktisch: Alles oder nichts (auslagern)
Da er nich alles auslagern kann, lagert er nichts aus...
Am Ende eben: Es geht was mit dem Speichermanager schief ;-)
Argument war: Kleine Anwendung-->Kein wirklicher vorteil (ob nun 10 oder 30kb ist eh egal); Große Anwendung-->Speichermanagerproblem

Fix scheint zu klappen.

PS: Source würde mich mal intressieren. Grundprinzip hab ich ja schon mit olly gesehn, aber mal als High-Level-Language wäre es auch intressant. Auch unter dem Aspekt, was an Schlupflöchern noch bleibt.


BenBE - Do 21.01.10 22:01

Sollte bei Sicherheitskritischen Anwendungen ja eigentlich eh bevorzugt werden, dass man sieht, welche Lücken offen bleiben ...


kurt59 - Fr 22.01.10 17:30

HPD.exe war nur kurz auf meinem USB-Stick gespeichert.
Datei wurde von McAfee mit den Hinweis auf "MultiDropper-JD (Trojan)" sofort gelöscht.

Ein Scan mittels jotti.org brachte keine Fehlermeldung - was stimmt da nicht?


SAiBOT - Fr 22.01.10 17:47

Keine Fehlermeldung? Oder keine Virenmeldung? Möglicherweise ist dein McAfee nicht auf dem neusten Stand, in jedem Falle eine Falschmeldung!


kurt59 - Fr 22.01.10 18:23

Es war eine Virusmeldung und ein aktueller Scanner.
Ein Scan bei Virustotal.com gibt auch 3 Meldungen aus.


SAiBOT - Fr 22.01.10 19:20

Tja, alles Falschmeldungen, die meisten haben scheinbar etwas dagegen wenn der Prozess sich selbst debug-privileges holt. So ist es leider immer bei so Systemnahen Tools. Wenn du ein wenig Ahnung von Debugging hast, kannst du die Exe ja mal unter die Lupe nehmen. Wobei die Meldung "MultiDropper-JD (Trojan)" doch schon Zweifel hervorrufen sollte, denn was ist ein Trojaner!? ohne Internetkomponenten.


SAiBOT - Mo 19.04.10 13:17

Kleines Update
Ursprünglich war HPD in MASM geschrieben doch da Assembler so unpraktikabel ist, habe ich mich doch wieder für eine high level language entschieden. HPD wurde so überarbeitet, dass es nun auch auf Windows 2000 Systemen laufen sollte, ausserdem bringt das Tool eine neue Technik mit. Diese Technik macht es sich zu nutzen, dass die Netstat.exe ein Handle jedes Prozesses in sich trägt, der über eine Internetverbindung verfügt. Die Listen der Verbindungen werden durchsucht und die PID’s der Einträge verglichen mit denen aus der Prozessliste. Das Format aus diesen Listen ist vergleichbar mit dem Aufruf “Netstat.exe -a -o”. Leider funktioniert diese Methode erst ab Windows XP.


Hidden - Mo 19.04.10 13:30

Gut, gehen wir doch mal den "Ernstfall" durch: Unter Windows 7 finde ich mit PID Bruteforce vier Prozesse(vgl. Screenshot).
Diese müsste ich ja nun noch einer Quelle zuordnen, warum hörst du bei der PID schon auf?

lg,

(PS: Sehr schmeichelhaft, dein Tool nach meinem Nick zu benennen :zustimm:)


SAiBOT - Mo 19.04.10 13:40

Hi Hidden, eigentlich besorgt sich das Tool die Quelle auch mit der Funktion GetModuleFileNameExA aus der psapi.dll.

MSDN:
Minimum supported client
Windows 2000 Professional

Welches OS hast du :shock: ?

(PS: Deine Beiträge im Forum haben mir immer sehr zugesagt, deswegegen ist es dazu gekommen :D).

Edit: achso Win7, glatt überlesen. Mh also sollte bei dir eigentlich auch so aussehen wie auf meinem Screenshot aus dem ersten Post.


Hidden - Mo 19.04.10 14:44

Hi :)

Also die .dll ist auf jeden Fall vorhanden - und zwar gleich 4x :lol:

Vielleicht kannst du mir ja mal eine Debug-Version schicken. Dass die zweite Ausgabe ohne Fehlermeldung einfach so fehlt, kommt mir etwas spanisch vor :O

lg,

E: Nach Neustart sind alle versteckten Prozesse verschwunden


SAiBOT - Mo 19.04.10 14:47

Ist der Einsprungspunkt in deiner Psapi.dll auch vorhanden oder steckt er bei dir in der Kernel32.dll?

Habe da noch was gefunden:
MSDN hat folgendes geschrieben:
DLL
Kernel32.dll on Windows 7 and Windows Server 2008 R2, Psapi.dll if PSAPI_VERSION=1 on Windows 7 and Windows Server 2008 R2, Psapi.dll on Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000


user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
Dass die zweite Ausgabe ohne Fehlermeldung einfach so fehlt, kommt mir etwas spanisch vor :O

Das habe ich im Code berücksichtigt.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

E: Nach Neustart sind alle versteckten Prozesse verschwunden

Das kann nicht sein :mrgreen:


Hidden - Mo 19.04.10 14:51

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
Ist der Einsprungspunkt in deiner Psapi.dll auch vorhanden oder steckt er bei dir in der Kernel32.dll?
Wie überprüfe ich das? :oops:

Ich würde dir mal gerade die .dll anhängen, aber die ist 4x vorhanden - 2x 9kb ud 2x 6kb. Auf welchen Pfad greifst du zu?

E: Die Pfade sind - System43/..; Amd64_..; SysWOW64/..(6kb); x86_microsoft-..(6kb)

lg,


SAiBOT - Mo 19.04.10 14:59

zB. mit dem Tool DLLExports von Luckie (http://www.michael-puff.de/Developer/Delphi/Programme/DLLExports2_0.zip). Es dürfte IMHO nur die aus System32 ausschlaggebend sein.


Hidden - Mo 19.04.10 15:05

Ist vorhanden - 000015BC.

Mit dlls habe ich ncoh nicht gearbeitet. Können sich durch 64 bit irgendwelche Adressen verschoben haben?

lg,


SAiBOT - Mo 19.04.10 15:24

Also wenn deine Psapi.dll aus dem System32 Verzeichnis die Funktion beinhaltet, verstehe ich das Problem nicht. Ich schicke mal einen Codeauszug.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
const
  psapidll = 'psapi.dll';
  kernel   = 'kernel32.dll';
var
  GetModuleFileNameExA: function(hProcess: THandle; hModule: HMODULE;
  lpFilename: PChar; nSize: Cardinal): Cardinal; stdcall;
  psapi: Cardinal;


  //...
  psapi := GetModuleHandle(psapidll);
  if psapi = 0 then
    psapi := LoadLibraryA(psapidll);

  @GetModuleFileNameExA := GetProcAddress(psapi, 'GetModuleFileNameExA');

  // Habe das jetzt noch etwas erweitert:
  if not Assigned(GetModuleFileNameExA) then
    @GetModuleFileNameExA := GetProcAddress(GetModuleHandle(kernel),
      'GetModuleFileNameExA');

  //...
  if Assigned(GetModuleFileNameExA) then
  begin
    GetModuleFileNameExA(hProcess, 0, @buffer, 260);
    WriteLn(Format(tHiddenFound+' Name: "%s", PID: %d',[buffer,PID]));
  end
  else
    WriteLn(Format(tHiddenFound+' PID: %d',[PID]));


Kenne mich mit 64er Systemen nicht aus, aber das dürfte doch eigentlich keine Probleme geben?

Edit: Ok das Problem ist gefixt, lag daran dass die Funktion in user profile iconHidden's Fall in der Kernel32.dll exportiert ist und in meinen Fällen immer in der psapi.dll war.


Delete - Di 20.04.10 09:10

Scheint zu funktionieren. Bei mir auf der Arbeit findet er einen versteckten Prozess mit Netstate mit der IP-Adresse 127.0.0.1. Allerdings wäre es wirklich hilfreich, wenn du die ProzessID noch auflösen würdest, denn so kann man damit nicht viel anfangen. Und ich weiß jetzt nicht wirklich, ob das was schlimmes ist.

Mein Rechner zu Hause scheint sauber zu sein, da wird nichts gefunden.


SAiBOT - Mi 21.04.10 11:48

Hi Luckie,
die PID lässt sich leider nur auflösen wenn man mittels OpenProcess an das Processhandle kommt. Beim Bruteforce werden alle PID's durchlaufen und genau das versucht. Es gibt leider keine weiteren Möglichkeiten, innerhalb von Ring3, an weitere Informationen zu kommen. Der Anwender sollte sein System auf Kernelhooks untersuchen (mit zB. diesem Tool http://www.resplendence.com/hookanalyzer ) ,diese entfernen und HPD neu starten. Mit Chance bekommt man so mehr Informationen. Wenn das alles nichts hilft, kann es auch sein das es sich um ein Handle-"Zombie" handelt, welcher durch Softwarekonflikte oder Windows selbst entstanden ist, in diesem Fall hilft System neustarten und HPD erneut drüber laufen lassen.


Delete - Mi 21.04.10 12:29

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
die PID lässt sich leider nur auflösen wenn man mittels OpenProcess an das Processhandle kommt.

Und warum machst du das nicht? Die PID von dem versteckten Prozess hast du doch.


baka0815 - Mi 21.04.10 12:47

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
Beim Bruteforce werden alle PID's durchlaufen und genau das versucht.

Ich vermutet, dass meinte er damit. :)


Delete - Mi 21.04.10 13:14

Dann verstehe ich das Problem nicht.


Hidden - Mi 21.04.10 21:42

Hi :)

Jetzt habe ich fünf versteckte Prozesse. Ich werde das demnächst mal im Auge behalten, kannst du mir mir eventuell eine Version schicken, die an beiden Orten nach der Funktion sucht?

Edit: Ich habe die Quelle ausgemacht, es handelt sich um.. AntiVir! :hair:
Seit zwei Tagen habe ich das Problem, dass bei ca. 2000 Bytes und 10 Sekunden das Update der Virendefinitionen abbricht. Und jedes Mal, wenn ein Update fehlschlägt, habe ich einen versteckten Prozess mehr.
Wird der Updater-Prozess eventuell nicht richtig beendet, oder verbleiben irgendwelche Referenzen darauf? Die Prozesse werden im ID Bruteforce gelistet.
Mich würde interessieren, ob dies genauso ist, wenn ein Update erfolgreich verläuft - was ich leider gerade nicht testen kann.

E2: Mal mit dem Taskmanager geguckt.. Der Prozess heißt update.exe, und es wird nach Fehlschlag zunächst ein zweiter update.exe ausgeführt, bevor der Erste aus der Liste verschwindet, und von deinem Programm gefunden wird(selbe PID). :lupe:

Ich bin mir der Implikationen noch nicht ganz im klaren: Was bedeutet es nun, wenn die PID beim ID-Bruteforce gelistet ist? Nach 8 Tests habe ich jetzt also 8 verschiedene PIDs gelistet.

lg,


SAiBOT - Do 22.04.10 09:03

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Dann verstehe ich das Problem nicht.

Wenn man trotz Debugprivileges nicht die nötigen Rechte hat, um mit OpenProcess an das handle eines Prozesses zu kommen(welches wir brauchen um näheres über den Prozess zu erfahren), dann verhindern das Kernelhooks.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
kannst du mir mir eventuell eine Version schicken, die an beiden Orten nach der Funktion sucht?

Habe die neue Version schon hochgeladen.

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:

Was bedeutet es nun, wenn die PID beim ID-Bruteforce gelistet ist? Nach 8 Tests habe ich jetzt also 8 verschiedene PIDs gelistet.

Die Funktion geht alle möglichen PID's durch und versucht diese per OpenProcess zu "öffnen". Kriegt die Funktion ein handle oder ein "acces denied", handelt es sich um einen aktiven Prozess. Am Ende wird noch überprüft ob sich die gefundene PID auch in der Liste befindet die Process32First/Process32Next liefert, ist dem nicht so markiert HPD diesen Prozess als "versteckt". (die gleiche Methode benutzt zB. F-Secure BlackLight)

Mich würde ein Screenshot davon interessieren.


Hidden - Do 22.04.10 09:17

Hi :)

Also mit Rev.3 der 1.0-er Version bekomme ich auch jetzt noch keine genaueren Angaben. Aus dem Screenshot kannst du also nicht mehr als die PIDs sehen. Oder ein Screenshot von AntiVir?

Vielleicht schützt sich AntiVir auch mit einem Kernel-Hook :?:

Edit:
Anhang:


SAiBOT - Do 22.04.10 10:33

Avira hookt tatsächlich ZwOpenprocess und schützt die eigenen Prozesse ( http://www.delphi-forum.de/viewtopic.php?p=491116#491116 ), deswegen zeigt er bei dir keinen Exenamen an :hair:. Ich versuche mal einen kleinen Trick um derartige Schutzmechanismen zu umgehen. Versuch mal Rev. 4. Wie gesagt wäre es jetzt etwas bösartiges, hätte man den Kernelhook entfernen können und HPD erneut starten können um so mehr zu erfahren.

Hätte gern mal nen Screenshot vom HPD sollte er jetzt bei dir die Exenamen anzeigen.


Hidden - Do 22.04.10 10:40

nope, nur IPs. :nixweiss:

Edit: Ich habe gerade mal von hier [http://www.avira.de/de/support/vdf_update_info.html] ein manuelles Update heruntergeladen. Auch hier verbleibt ein Zombie-Prozess. :lupe: Von einem fehlgeschlagenen Update steht zwar diesmal nichts, aber AntiVir installiert anstandslos das selbe Update 4x..


SAiBOT - Do 22.04.10 11:10

Ich sehe gerade in dem Link den ich zuletzt gepostet habe, geht es auch um "Zombie-Prozesse" die von Avira verursacht werden. Avira scheint dafür bekannt zu sein :mrgreen:


Hidden - Do 22.04.10 12:50

Hi :)

Höchst interessant: Beim Ausführen mit Adminrechten werden auf einmal keine Prozesse mehr gefunden :lupe:

lg,


SAiBOT - Do 22.04.10 15:52

Mit Adminrechten solltest du HPD schon starten, nur so kann es korrekt funktionieren :eyecrazy:. Keine Ahnung wie es sich verhält wenn dem nicht so ist :nixweiss:. Auf deine neuen Ergebnisse ist auf jeden Fall mehr verlass. Habe auch Avira und bei mir findet er auch keine Zombie-Prozesse, vielleicht ist dieses Problem seitens Avira gefixt. Ich hätte mal eine IsAdmin Funktion einbauen sollen :oops:. Danke Hidden ich werde im ersten Post zuschreiben das es Adminrechte benötigt.


Hidden - Do 22.04.10 16:06

Naja - eigentlich probiere ich zunächst einmal aus, ob ein Programm ohne richtig läuft. Und, da keine Fehlermeldung kam.. :P

Der AntiVir-Prozess bleibt ja aber wohl trotzdem irgendwo bestehen/referenziert, sonst würde ich ohne Adminrechte ja nicht immer exakt die ID finden.

Meine Vermutung geht sogar so weit, dass eventuell die Prozesse anderer Nutzer deinem Programm trotz Admin nicht zugänglich sind, da unter Win7 ja auch Admins weiter eingeschränkt wurden.

lg,


SAiBOT - Do 22.04.10 18:11

Ausgestattet mit den Debugprivileges, hat man Zugriff auf jeden Prozess, bis auf den "System" Prozess (PID: 4), selbst unter Vista/7. Vergleiche mal die PID's, die er bei dir findet, mit Prozessen die normal angezeigt werden. Um dir PID's der laufenden Prozesse anzusehen kannst du zB. den ProcessExplorer (Sysinternals) benutzen, bin mir ziemlich sicher das dies Falschmeldungen sind die dadurch entstanden sind das HPD keine Adminrechte hatte.


Hidden - Do 22.04.10 18:38

Auch im Taskmanager mit Adminrechten tauchen die Prozesse aber nicht auf :lupe: *zweifel*


SAiBOT - Do 22.04.10 18:51

Woher weißt du denn um was für Prozesse es sich handelt? Du musst die PID's vergleichen, der Taskmanager kann diese AFAIK nicht anzeigen. Der ProcessExplorer schon (siehe Screenshot).


Hidden - Do 22.04.10 19:09

Dann schau' dir mal meine Screenshots [http://www.delphi-forum.de/download.php?id=12582] von oben an ;) (Ich verwende übrigens normalerweise auch den ProcessExplorer :party:). Wie so ziemlich alles, was man heute kriegt, ist der zunächst unbrauchbar eingestellt. Das geht unter Ansicht/Spalten auswählen.


SAiBOT - Do 22.04.10 22:22

Ja ich seh... mhhh das ist wirklich merkwürdig, dass muss ich erstmal in Ruhe durchgehen.


AHT - Fr 23.04.10 16:56

Kann das mit AntiVir bestätigen. Da scheint AntiVir ein Handle auf guardgui.exe nicht zu schließen (getestet unter Vista).
Hier [http://freenet-homepage.de/ahfundgrube/Progs/PH.zip] die neue URL zu meinem Tool.
Das Problem scheint im Kernel zu entstehen, sonst würde das Tool eigentlich an den Handleeigentümer kommen.

Ich habe mich vor einigen Jährchen mal mit ähnlichen Techniken beschäftigt. Die PID Bruteforcing Methode weist da einige Schwachstellen auf - bin damals damit über ähnliche Probleme gestolpert. Es gibt da im Usermode einige ganz nette Möglichkeiten, solche Scans schon recht effektiv durchzuführen - an die prozesserzeugende Datei kommt man dabei natürlich nicht immer.

Bei dem CSRSS HandleTable Test (ich nehme an, du nimmst die gleiche Technik wie ich) ist folgendes zu beachten
http://www.paules-pc-forum.de/forum/spezielles/113409-problem-mit-process_dup_handle-bei-csrss-exe.html
- ich denke, das tust du aber wohl schon.

Danke für den Link hier - sehr interessant!

________________________________________________

MfG

AHT


AHT - Fr 23.04.10 17:07

Ergänzung:

Process32First... wird in der Regel nicht gehookt, sondern NtQuerySystemInformation.
Deine Technik mit NtQuerySystemInformation kannst du bestimmt noch verbessern (ungetestet).
Es gibt da noch mehr Möglichkeiten, nicht nur eine...


_____________________________________

MfG

AHT


AHT - Fr 23.04.10 18:05

Nochmal ich... :lol:

Was man verbessern kann:
Auf dem Screenshot unten siehst du dein Tool und mein Tool - beide arbeiten im Usermode. Hier wurde ein Prozess mittel der DLL HideProcessNT.dll (kommt, glaube ich, auch hier aus dem Delphibereich) versteckt.
Dein Tool erkennt den Prozess (noch) nicht, meins ja.
Schaue dir unter anderem die native API (Nt/-)ZwQuerySystemInformation mal etwas genauer an - vor allen Dingen die InformationClasses, die M$ nicht dokumentiert.

[url=http://www.postimage.org/image.php?v=aVCkxa0]user defined image[/url]

PS: Weiter so, tolle Sache! Wenn du Anregungen für weitere solche Sachen brauchst, stehe ich zur Verfügung.


Hidden - Fr 23.04.10 18:39



AHT - Fr 23.04.10 19:05

Windows7? 32Bit oder 64Bit?


Hidden - Fr 23.04.10 19:20

Win7x64, mit oder ohne Admin das Selbe. Der prozess wird aber auch nicht aufgelistet, also entweder ist es ein Fehlalarm, und du erkennst es, oder du findest die PID gar nicht erst.

lg,


AHT - Fr 23.04.10 19:28

Ist leider kein 64Bit Programm - da läuft das unter Umständen nicht korrekt. Deine Vermutung mit AntiVir scheint aber zu stimmen (Vista 32Bit).
Zitat:

[*** Gefundene PID's ohne sichtbaren Prozess ***]

PID: 3040
Prozesspfad: C:\Program Files\Avira\AntiVir Desktop\guardgui.exe
Startzeit des Prozesses: 23.4.2010 um 19:15Uhr, 1sec 49millisec
Prozesses wurde beendet um: 23.4.2010 um 19:15Uhr, 1sec 346millisec
Zeit des Prozesses im Kernelmode: 15ms
Zeit des Prozesses im Usermode: 15ms
PID des Elternprozesses: 1884
Adresse des PEB's: 2147332096
Geöffnet mit Zugriffsrechten: $1FFFFF
Anzahl geöffneter Handles auf den Prozess: 2
Pointer Count: 3
Exitcode: 0

PID: 3064
Prozesspfad: C:\Program Files\Avira\AntiVir Desktop\guardgui.exe
Startzeit des Prozesses: 23.4.2010 um 19:12Uhr, 56sec 901millisec
Prozesses wurde beendet um: 23.4.2010 um 19:12Uhr, 57sec 260millisec
PID des Elternprozesses: 1884
Adresse des PEB's: 2147336192
Geöffnet mit Zugriffsrechten: $1FFFFF
Anzahl geöffneter Handles auf den Prozess: 2
Pointer Count: 3
Exitcode: 0

________________________________________________


AHT - Fr 23.04.10 20:00

Das scheint mit der Meldebox von antivir 10 zusammenzuhängen - immer wenn die auftaucht, scheint ein neuer Zombie hinzuzukommen.


Hidden - Fr 23.04.10 20:05

Hi - Welche Melde box genau? Ich experimentiere mal gerade in wenig, aber könntest du mir einen zweiten Weg nennen, der bei dir einen Zombie erzeugt?

lg,


AHT - Fr 23.04.10 20:14

Nochmal zu dem Tool hier:
@SAiBOT:
Du musst an deiner Technik arbeiten - das funktioniert so nicht.
Viele Usermode Processhider nehmen die API SetWindowsHookEx, um ihre DLL zu injizieren - das ist schön einfach und braucht wenig Code. SetWindowsHookEx funktioniert aber nur, wenn der Prozess ein vernünftiges Fenster hat (so wie der Taskmanager). Dein Tool hat kein vernünftiges Fenster, dein Kreuzverhörtest (ich nehme an, du fürst einen durch, denn das ist der Standard) funktioniert dann aber nicht korrekt, denn der versteckte Prozess ist für dein Tool gar nicht versteckt.

Wegen der Zombies:
Es gibt da mehrere Möglichkeiten zu "testen", ob eine PID von einem Zombie belegt wird oder nicht - ich zeige diese Klamotten dann in blauer Farbe an, nicht in Rot.


AHT - Fr 23.04.10 20:17

@Hidden:
Diese MessageBox
[url=http://www.postimage.org/image.php?v=gxjjEZi]user defined image[/url]

Wenn der Guard einen Virus findet, entsteht auch ein Zombie. Bei einem Update erscheint auch dieser Dialog.


AHT - Fr 23.04.10 20:41

Das Problem mit den Zombies wurde an Avira gemeldet.


Hidden - Fr 23.04.10 20:58

@AHT: Wo?(Thread-Link?) - von dir? :)

Edit: @AHT hat mir gerade noch eine auf x64 angepasste Version seines Detektors geschickt, die findet ohne Adminrechte nichts und mit Adminrechten den AntiVir-Prozess. Interessanterweise ist es ja bei dem Tool von @SAiBOT genau anders herum.

lg,


AHT - Fr 23.04.10 21:01

Die Meldung hat jemand für mich übernommen, evtl. Poste ich im Forum dort noch einmal.


AHT - Fr 23.04.10 21:48

Mein Tool ist so konzipert, das es zwingend Adminrechte benötigt. Saibot scheint in seinem Tool schon auf Zombies zu testen (damit es diese nicht anzeigt) - doch ohne Adminrechte funktioniert das nicht bei jedem Prozess.


AHT - Sa 24.04.10 14:01

Hier der Link zu meinem Posting bei AntiVir:
http://forum.avira.com/wbb/index.php?page=Thread&threadID=112028


AHT - Sa 24.04.10 20:19

Deine Beobachtung mit Update.exe konnte ich ebenfalls bestätigen - tritt auf allen Betriebssystemen auf. Guardgui wird nur unter Vista und Windows7 nicht geschlossen. Ursache ist hier sched.exe von Avira - der baut Mist.

_________________
____________________
MfG AHT


SAiBOT - Mo 03.05.10 12:28

user profile iconAHT hat folgendes geschrieben Zum zitierten Posting springen:
Nochmal ich... :lol:

Was man verbessern kann:
Auf dem Screenshot unten siehst du dein Tool und mein Tool - beide arbeiten im Usermode. Hier wurde ein Prozess mittel der DLL HideProcessNT.dll (kommt, glaube ich, auch hier aus dem Delphibereich) versteckt.
Dein Tool erkennt den Prozess (noch) nicht, meins ja.
Schaue dir unter anderem die native API (Nt/-)ZwQuerySystemInformation mal etwas genauer an - vor allen Dingen die InformationClasses, die M$ nicht dokumentiert.

[url=http://www.postimage.org/image.php?v=aVCkxa0]user defined image[/url]

PS: Weiter so, tolle Sache! Wenn du Anregungen für weitere solche Sachen brauchst, stehe ich zur Verfügung.


Welche Techniken benutzt diese DLL bitte? Injeziert sie Code in bestehende Prozesse? Ansonsten glaube ich nicht, dass der Programmierer so geschickt war alle meine Tests zu unterwandern.

Edit: Also ich habe eine Dll mit diesem Namen gefunden -> http://www.hackerboard.de/code-kitchen/16976-prozess-verstecken-unter-xp.html, ich habe mal ein Screenshot angehängt (So sieht es bei mir unter XP SP2 und Win7 aus). Man beachte das anscheinend nur Process32First/Next erfolgreich gehookt werden, selbst der Taskmanager findet den "versteckten" Prozess noch!

user profile iconAHT hat folgendes geschrieben Zum zitierten Posting springen:
Nochmal zu dem Tool hier:
@SAiBOT:
Du musst an deiner Technik arbeiten - das funktioniert so nicht.
Viele Usermode Processhider nehmen die API SetWindowsHookEx, um ihre DLL zu injizieren - das ist schön einfach und braucht wenig Code. SetWindowsHookEx funktioniert aber nur, wenn der Prozess ein vernünftiges Fenster hat (so wie der Taskmanager). Dein Tool hat kein vernünftiges Fenster, dein Kreuzverhörtest (ich nehme an, du fürst einen durch, denn das ist der Standard) funktioniert dann aber nicht korrekt, denn der versteckte Prozess ist für dein Tool gar nicht versteckt.


HPD erkennt bis jetzt auch nur Prozesse die versteckt werden und keine Threads die in sichtbaren Prozessen versteckt werden. Aber das ist ohnehin mein nächster Ansatzpunkt.

user profile iconAHT hat folgendes geschrieben Zum zitierten Posting springen:
Mein Tool ist so konzipert, das es zwingend Adminrechte benötigt. Saibot scheint in seinem Tool schon auf Zombies zu testen (damit es diese nicht anzeigt) - doch ohne Adminrechte funktioniert das nicht bei jedem Prozess.


Genau das ist das Problem, was hier zu verwirrung geführt hat. HPD ist auch so konzipert, das es zwingend Adminrechte benötigt. Inaktive Prozesse werden außer Acht gelassen.


SAiBOT - Sa 03.07.10 12:42

Update zu v1.1:
-Bei Systemen mit fehlenden Privilegien liefert HPD nun Fehlermeldungen statt falsche Ergebnisse.
-Neue Erkennungsmethode
-Das Konsolenfenster hat jetzt einen neuen Stil :D


Cypher2000 - Mo 05.07.10 20:40

Gut gemacht, wieder ein nützliches Tool das ich zum Überprüfen des PCs einsetzen kann. ;)
Nur eine Sache: Kann man vielleicht irgendwie die Musik ausschalten? Wenn nämlich 2 Songs gleichzeitig dudeln hört sich das nicht so schön aus, auch wenns nur 3 Sekunden dauert bis ich "Nothing was found" gelesen habe und das Programm wieder geschlossen habe. Wenn du die Musik nicht ganz deaktivieren willst bitte ich dich nur um einen Commandline Parameter wie "-nosound" oder so.

Dankeschön. :)


SAiBOT - Sa 14.08.10 11:37

-nosound Parameter ist hinzugefügt, ganz möchte ich nicht darauf verzichten =).


delphi10 - Do 19.08.10 22:36

Der erste Start unter W2k


SAiBOT - Do 19.08.10 23:33

hast du HPD mit dem "-unsafe" Parameter gestartet? Falls ja, kann es durchaus passieren das sich HPD so verabschiedet. Falls nicht, muss ich mir die CSRSS Methode nochmal ansehen. Die Netstat-Methode funktioniert erst ab XP, das "impossible" ist also normal.