Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prozess verstecken / Win7x64 (https://www.delphipraxis.net/173377-prozess-verstecken-win7x64.html)

Medium 20. Feb 2013 22:39

Prozess verstecken / Win7x64
 
Nabend!

Wir haben einige Panel-PCs bei unseren Kunden hängen, die nur und ausschließlich unser Programm zeigen sollen. Da die Panels zum Teil auch für Personen zugänglich sind, die daran nichts machen können sollen (innerhalb des Programms ist das durch Passwörter geschützt), haben wir das Problem, dass ein jeder daher kommen könnte, und unser Programm einfach via Taskmanager abschießt. Und somit Dinge tun könnte, die er/sie/es nicht tun können dürfen soll.

Ich habe bereits ein wenig recherchiert, und wie es scheint, ist es unter Win7x64 nicht mehr so ganz so trivial wie unter Win98 einen Prozess aus dem Taskmanager verschwinden zu lassen. Was ich bisher fand, waren Links zu dubiosen Programmen und DLLs, die ich nur mit großen Bauchschmerzen anfassen wollen würde. Wenig ließ sich darüber finden, ob und wie diese das Ziel erreichen. Hiervon hängt auch ab, ob ein potenzieller Kunde unsere Lösung akzeptieren würde, so dass ich doch sehr an einer Lösung interessiert wäre. Wenn also Bedenken bzgl. der mit so etwas anrichtbaren Schäden existieren, wäre ich im Zweifel auch an einer Konversation via PM interessiert. (In diesem Falle würde ich hier zumindest den Forschungsstatus ohne zu viele technische Details wiedergeben, damit der Thread an sich nicht völlig über ist.)

Ich bin mir darüber im Klaren, dass so etwas in böser Absicht einsetzbar wäre. In unserem Fall würde es der Sicherheit einer Industrieanlage dienen, die sicherlich keiner von uns gerne in falschen Händen sehen würde. (Ich sage das nur um potenziellen Unkenrufen vorzubeugen.)


Klar ist, dass man eine Menge via Policies abdecken kann. Wird auch gemacht. Aber gerade die neueren Windows versionen sind (glücklicherweise) ja deutlich weniger angreifbar, so dass ein Strg-Alt-Entf über eine Tastatur immer geht. Genau das ist unser Problem. Wer eine Tasta anstöpselt, kommt weiter. Und die Mainboards haben nun Mal USB, und die USB Subsysteme können wir nicht ganz abschießen, da u.a. der Touch-Screen daran hängt. Das Gehäuse bekommt man trotz Edelstahl sicherlich auch auf um etwas anzuschließen, wenn man es denn wirklich will.
Ich suche händeringend nach einer Lösung dafür. Besten Dank im Voraus!

Union 20. Feb 2013 22:45

AW: Prozess verstecken / Win7x64
 
Trotzdem Policies...

Code:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=1

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=1

jfheins 20. Feb 2013 22:49

AW: Prozess verstecken / Win7x64
 
Naja, also zuerst gilt: Wer ungehinderten Zugriff auf die Hardware hat, dem kannst du nichts mehr entgegensetzen.
Danach:
:arrow: Registriere dein programm als shell. Der Windows Explorer wird nicht mehr gestartet, keien Autostart mehr und dein programm ist das erste und einzige was läuft.
:arrow: Gruppenrichtlinien können Einfluss auf den Sperrbildschirm nehmen.
Benutzerkonfiguration -> Administrative Vorlagen -> System -> Strg+Alt+Entf (Optionen)
Da kannst du alles einstellen.

Dann muss "nur noch" dein Programm sicher sein :mrgreen:

Aphton 20. Feb 2013 22:57

AW: Prozess verstecken / Win7x64
 
Falls du absolut keine saubere Lösung findest, kannst du das ganze ja dreckig lösen.
Du setzt einen globalen DLL-Hook, der per API-Hook bestimmte APIs überwacht. Du müsstest dann alle Möglichkeiten bedenken, wie man eine Anwendung schließen kann - angefangen von TerminateProcess() bis zu CreateRemoteThread mit ExitProcess usw..
Wie schon gesagt - das ist nicht der beste Weg, funktionieren tuts aber..
Du kannst auch Enumerierungs-APIs hooken um so gar nicht erst im TaskMgr oÄ. zu erscheinen..
Hab das letztere selber mal implementiert.. Machbar ist es!

Medium 20. Feb 2013 23:15

AW: Prozess verstecken / Win7x64
 
Danke für die Ideen!

Den Taskmanager ganz zu sperren wäre ... zumindest mittelfristig etwas blöd, da wir via Fernzugriff über eine gesicherte Verbindung diesen doch ganz gut gebrauchen könnten. Was sich da via Policies noch weiter fein-einstellen ließe werde ich mal recherchieren.

Da Prgoramm als Shell laufen zu lassen, daran hatte ich auch schon mal gedacht. Wie schaut es da aus mit der Benutzung von weiteren Programmen und Diensten? Wir müssten z.B. Acrobat Reader starten, und auch drucken können. Inklusive der Dialoge und allem. Das habe ich nicht probiert - geht sowas dann alles noch? Oder anders: Kann ich dann noch immer alles so machen wie als wenn mein Programm "normal" läuft? ShellExecute, CreateProcess, Interaktion mit Diensten und der ganze Kladderedatsch? Wird ein PC-Anywhere Host dann auch immer noch gestartet beim Boot? Bisher habe ich mich immer davor gescheut die Shell zu ersetzten.

Union 21. Feb 2013 06:43

AW: Prozess verstecken / Win7x64
 
Vielleicht solltest Du unter dem Stichwort Kiosk-Modus was Passendes finden.

CCRDude 21. Feb 2013 06:47

AW: Prozess verstecken / Win7x64
 
Security through obscurity ist meiner Meinung nach nie eine gute Idee.

Nachdem ich das gesagt habe... madCodeHook enthält sogar ein Beispiel dafür, wie man per globalem Hook das Beenden eines Prozesses unterbindet. Über die gleiche Geschichte lässt sich auch das erwähnte Ausblenden des Prozesses aus der Prozessliste realisieren (mit dem Ergebnis, dass vermutlich jeder Rootkit-Scanner anschlagen wird).

Medium 21. Feb 2013 08:38

AW: Prozess verstecken / Win7x64
 
Dass das an sich keine 100%ige Nummer ist, sollte klar sein. Der Kunde hat allerdings da sehr rigide Werksvorschriften, und seiner Aussage nach würde ein Verschwinden aus der Liste diese dann ausreichend erfüllen. (Ich hätte da an ganz anderen Stellen angesetzt, und viele der Anforderungen sind auch meiner Meinung nach Mumpitz. Man müsste sich halt wirklich erst an der richtigen Stelle zerstörungsfrei durch ein Edelstahgehäuse sägen um eine Tastatur dran zu bekommen...)

AV Software müsste im Zweifel entsprechend konfiguriert werden, sprich Rootkit Schutz raus. Das Panel ist diesbzgl. auch nicht sonderlich gefährdet, da sind sich die Netzwerker des Kunden wieder sehr sicher. (Sie meinten sogar ein AV müsste überhaupt nicht drauf.)

Verstehen muss ich da auch nicht alles, aber wenn sie es so haben müssen, dann müssen wir das eben so bauen. (Sonst macht's ein anderer.)

Danke für die Ideen! Ich werde mal mit den Optionen spielen.

Dalai 21. Feb 2013 08:59

AW: Prozess verstecken / Win7x64
 
Mal ganz quer gedacht: Würde es nicht ausreichen, wenn das Programm unter einem anderen Benutzerkonto ausgeführt wird, sinnvollerweise einem mit höheren Rechten? Dann kann man gar nichts mehr killen, selbst wenn man wollte, denn anderer Benutzer Prozesse töten, dürfen nur Admins oder höher.

Dazu kommt, dass die Prozesse anderer Benutzer gar nicht im Taskmanager von Win7 auftauchen, dafür müsste man den Button "Prozesse aller Nutzer" klicken (was dann eine UAC-Meldung auslöst, sofern eingeschaltet).

MfG Dalai

Aphton 21. Feb 2013 20:05

AW: Prozess verstecken / Win7x64
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir ja schon unzählige PMs geschrieben und in einem dir ne kleine Demo mit Src gegeben..
Ich hab nun rausgefunden, wie genau TaskMgr die Prozesse ermittelt, die Demo angepasst - sie versteckt sich nun ^_^

Die Demo spuckt zu Anfang 2 ShowMessage Fenster aus...
Ich möchte nur ergänzen, dass es sehr wohl auch mit 64 bit funktioniert - dafür muss halt die Dll als 64 bit kompiliert werden, was mein Kompiler aber nicht kann :P

Edit: Getestet unter Windows 7 Starter 32 bit

Medium 21. Feb 2013 21:22

AW: Prozess verstecken / Win7x64
 
Sahne, da hab' ich jemanden angefixt :mrgreen: Nochmals heissen Dank!

Mit 64bit. Wie ist das da? Kann ich nur 32bit Prozesse verstecken, oder kann ich nur auf einem 32bit Windows Dinge damit verstecken? Also an welcher Seite schlägt da die Einschränkung zu?

Aphton 21. Feb 2013 21:44

AW: Prozess verstecken / Win7x64
 
Zitat:

Zitat von msdn
SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.

Ich kann es nur in der 32 bit Version kompilieren, dadurch und wegen der Funktionsweise (siehe Msdn Erläuterung) kann ich damit nur 32 bit Prozesse hooken.
Falls dein Kompiler 64 kompilieren kann und letzendlich die Dll 64 bit ist, funktioniert es (nur) mit 64 bit Prozessen.

Medium 21. Feb 2013 21:55

AW: Prozess verstecken / Win7x64
 
Was ich meine ist: Unser Programm ist 32bit. Es läuft aber auf einem 64bit Windows. Kann ich das Programm dann hiermit verstecken?

Aphton 21. Feb 2013 22:09

AW: Prozess verstecken / Win7x64
 
Kurz: Jein!

Ein 32 Bit Prozess kann keine 64 Bit Dynamic-Link-Libraries (Dlls) laden, das muss aber geschehen, damit die Anwendung die Hooks installieren kann!

Du könntest das ganze "überbrücken" - du kannst einen Hook-installer (ne 64 Bit Exe) programmieren, der das System hookt. Das ginge - dafür müsstest du nicht einmal großartig
viel an eurem Projekt/Produkt ändern.

[Euer Produkt |32 Bit] - ruft auf - [HookInstaller mit best. Parametern|64 Bit] >setzt globalen hook

Ach noch etwas, was du unbedingt berücksichtgen solltest.
Dieser Hook modifiziert nur die zur Ausgabe ermittelten Prozesse!
Man kann immernoch locker per Cmd Befehl ala~
cmd /C taskkill /F /IM IrgendEinProzess.exe
Prozesse killen.

Ich hab halt rausgefunden, wie man den Prozess ausm TaskMgr wegbekommt, du müsstest, sofern du es nicht killbar machen willst, rausfinden,
welche APIs da systemintern verwendet werden und diese dann hooken und modifizieren!

Medium 21. Feb 2013 22:11

AW: Prozess verstecken / Win7x64
 
Okay, dann brauche ich nur noch einen 64bit Compiler :D (Könnte das eine .NET Anwendung machen?) Wenn ich zu viel frage, hau mir ruhig auf die Finger.

Aphton 21. Feb 2013 22:23

AW: Prozess verstecken / Win7x64
 
Ich habe absolut keine Erfahrung mit .NET. Sry :(
Google sagt mir, dass es Unterschiede zwischen normalen & .Net Dlls gibt.

Vlt. kennt sich da jem. besser aus?

lbccaleb 21. Feb 2013 22:27

AW: Prozess verstecken / Win7x64
 
Zitat:

Zitat von Medium (Beitrag 1204703)
Okay, dann brauche ich nur noch einen 64bit Compiler :D (Könnte das eine .NET Anwendung machen?) Wenn ich zu viel frage, hau mir ruhig auf die Finger.

Nichts leichter als daas:

http://www.pilotlogic.com/sitejoom/i...yphon-download

In Codetyphon ist unteranderem Lazarus 1.1 enthalten. Und das besotzt auch einen 64Bit Compiler.

Einfach runterladen, entpacken und dann das Setup starten. Hilfe dazu gibt ess auch auf der Seite.

JamesTKirk 22. Feb 2013 09:32

AW: Prozess verstecken / Win7x64
 
Zitat:

Zitat von Medium (Beitrag 1204703)
Okay, dann brauche ich nur noch einen 64bit Compiler :D (Könnte das eine .NET Anwendung machen?) Wenn ich zu viel frage, hau mir ruhig auf die Finger.

Für ein einfaches Hooking Tool solltest du (falls du ansonsten in Delphi arbeitest) einfach Free Pascal verwenden können. Dort gibt es einen Win32 => Win64 Cross Compiler im Downloadbereich (sogar der ganz frische 2.6.2 ;) ). Die meisten Spezialunits für Windows werden übrigens über die Jedi Units (jwa...) bereitgestellt (falls du bestimmte Funktionen nicht finden solltest).

Gruß,
Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz