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/)
-   -   Delphi Feststellen ob jemand in meinem Speicherbereich liest (https://www.delphipraxis.net/130115-feststellen-ob-jemand-meinem-speicherbereich-liest.html)

cst_07 3. Mär 2009 18:29


Feststellen ob jemand in meinem Speicherbereich liest
 
Hallo,

ist es möglich festzustellen, ob irgendjemand in meinem Speicherbereich (Applikationsspeicher) liest. Wenn ja, bekomme ich heraus welche Anwendung es ist und ist es verhinderbar, dass eine andere Anwendung auf meinem Speicherbereich zugreift?

Vielen Dank schon mal im Voraus.

Neutral General 3. Mär 2009 18:30

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Hi,

Also die einzige Möglichkeit die eventuell funktionieren könnte ist, wenn du die Funktion ReadProcessMemory hookst.

mleyen 3. Mär 2009 18:32

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Ich sag mal zu 90% gibt es keine Möglichkeit.
Und falls es eine gibt, ist die auch nicht 100% abgedeckt bzw umgehbar.
(Das war zumindest mein Erbegnis meiner damaligen Recherche)

cst_07 3. Mär 2009 18:37

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Danke. Wie kann ich denn ReadProcessMemory hooken? ;)

Apollonius 3. Mär 2009 18:40

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Wenn jemand den Systemcall selbst ausführt, bist du schutzlos. Am Ende hilft nur ein Treiber.

Es geht aber ziemlich einfach, wenn du deinem Prozess einen vernünftigen Security Descriptor verpasst. Die DACL kann dann das Lesen verhindern und mit der SACL kannst du automatisch Logs erstellen lassen. Zumindest den Teil mit der DACL habe ich hier beschrieben.

himitsu 3. Mär 2009 18:40

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Zitat:

Zitat von Neutral General
Also die einzige Möglichkeit die eventuell funktionieren könnte ist, wenn du die Funktion ReadProcessMemory hookst.

das müßte man dann aber doch global machen?

Denn ein anderer Prozess würde ja seine eigene Funktion nutzen und nicht die aus dem eigenem Programm (wo das überwacht werden soll)

PS: wenn man z.B. eine DLL reinschuggeln kann, ohne ReadProcessMemory zu nutzen, dann könnte diese direkt lesen.

cst_07 3. Mär 2009 18:43

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Eigentlich würde mir schon ausreichen, wenn ich wüsste, welches Programm gerade meinen Speicherbereich ausliest.

Luckie 3. Mär 2009 18:49

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Was hast du denn zu verbergen?

Cyf 3. Mär 2009 18:50

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Such mal nach Inline Hooking bei Google, ich weiß nicht wies ausschaut und wie nahe darauf hier eingegangen werden soll, weil sowas in den meisten Fällen nur von Rootkits und ähnlichem Spaß benutzt wird.
Ein Angreifer könnte diesen Schutz auf die selbe Art wieder umgehen.
Du solltest, wenn du es probierst, GENAU wissen was du machst, da das ganze sich im Ring 0 abspielt und sich sowas logischerweise auf alle Programme auswirkt und mit unter die Systemstabilität und -integrität gefährdet.
Auch solltest du bedenken, dass sich (ungetestet) eventuell Antivirenscanner auf sowas zu Wort melden werden.
Allerdings könnte dein Code ohnehin nur von Administratoren ausgelesen werden und falls es um reverse engineering geht, lässt sich das ziemlich sicher umgehen.
Ansonsten bleibt dir nicht viel übrig außer ein eigenes Betriebssystem für eine trusted platform zu schreiben. :wink:
Wobei selbst dann bestimmt immernoch mit teuren equipment, das keiner hat, der Speicher hardwaremäßig ausgelesen werden könnte. :mrgreen:

cst_07 3. Mär 2009 18:54

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Ich möchte verhindern, dass sicherheitsrelevante Daten von anderen Programmen (wie z.B.: WinHex) gelesen werden können.

cst_07 3. Mär 2009 19:07

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Kann man dem Prozess irgendwie sagen, dass nur ich darauf zugreifen darf?

himitsu 3. Mär 2009 19:16

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Wenn du deinen Prozess mit höheren Rechten laufen hast, als das Programm, welches darauf zugreifen könnte, dann schön.

Meflin 3. Mär 2009 19:39

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Zitat:

Zitat von cst_07
Kann man dem Prozess irgendwie sagen, dass nur ich darauf zugreifen darf?

Zitat:

Zitat von himitsu
Wenn du deinen Prozess mit höheren Rechten laufen hast, als das Programm, welches darauf zugreifen könnte, dann schön.

Also effektiv: Nein.

Cyf 3. Mär 2009 20:00

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Man könnte ihm doch prinzipiell Adminrechte geben oder ihn als Systemdienst laufen lassen?
(ob das sinnvoll ist, ist eine andere Sache)

Meflin 3. Mär 2009 21:50

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Zitat:

Zitat von Cyf
Man könnte ihm doch prinzipiell Adminrechte geben oder ihn als Systemdienst laufen lassen?
(ob das sinnvoll ist, ist eine andere Sache)

Im Endeffekt liegen die Daten physikalisch im RAM. Wenn ich als Angreifer einen Weg finden will, an die Daten zu kommen, dann schaff ich das, und seis über einen hardwarebasierten Angriff.

Bernhard Geyer 3. Mär 2009 22:12

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
100% Schutz gibt es nicht. Wie Meflin schon angemerkt hat: Sobald Daten im RAM liegen sind sie angreifbar. Du kannst die Schwierigkeit nur erhöhen. Z.B. bei erkennen von aktiven Debugger Rechner einfrieren lassen oder ähnliche "unschönheiten". Oder fertige SW wie Cryptkey kaufen die eine vielzahl der Möglichkeiten schon verhindern. Jedoch ist ein PC mit Cryptkey schon fast selbst als Virus/Schadsoftware anzusehen da er sehr tief und umfangreich das System verändert damit er seine Schutzaufgabe erfollen kann.

himitsu 3. Mär 2009 22:26

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Zitat:

Zitat von Bernhard Geyer
Z.B. bei erkennen von aktiven Debugger Rechner einfrieren lassen oder ähnliche "unschönheiten".

Dann möchte die Erkennung aber fehlerfrei funktionieren.
nicht das da z.B. eine der injizierten Maus-DLLs falsch erkannt wird und massig PC versehendlich zum Absturz gebracht werden.

mschaefer 4. Mär 2009 07:43

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Hm das ist doch wie im Tresorraum : Hier kann ich alles von einem
Regal in ein anderes schieben, ohne große Probleme. Aber die große
Tür nach aussen kann man recht effektiv verschliessen...

Grüße in die Runde // Martin


PS: Wenn der Bankräuber schon die Kontrolle bis zur Bank (Rechner)
übernommen hat kann er auch gleich die ganze Bank klauen.

Bernhard Geyer 4. Mär 2009 07:47

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Bernhard Geyer
Z.B. bei erkennen von aktiven Debugger Rechner einfrieren lassen oder ähnliche "unschönheiten".

Dann möchte die Erkennung aber fehlerfrei funktionieren.
nicht das da z.B. eine der injizierten Maus-DLLs falsch erkannt wird und massig PC versehendlich zum Absturz gebracht werden.

Davon muß man ausgehen wenn man solchen Schutz versucht zu realisieren. Siehe Probleme bei diversen DVD-Kopierschutzen (Sony-Rootkit etc.).

cst_07 4. Mär 2009 09:06

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
99% würde schon ausreichen. Ein 100%tiger Schutz ist nicht notwendig. Es soll ja nur erschwert werden, so dass ein Anwender nicht einfach, beispielsweise mit WinHex, Daten auslesen kann.

Wie kann ich Programme wie WinHex erkennen, ohne auf den EXE-Namen zu gehen, denn diesen kann man leicht umbenennen?
Gibt es dafür Events, wenn ein neues Programm gestartet wird, denn ich möchte nicht laufend mit einem Timer scannen, ob neue Anwendungen gestartet wurden?

himitsu 4. Mär 2009 09:34

Re: Feststellen ob jemand in meinem Speicherbereich liest
 
Du kannst ja deinen RAM mit vielen Pseudodaten zumüllen, deine Daten zusätzlich noch verschlüsseln (ein kleines XOR könnte da schon ausreichen) und diese nicht an einer Stelle, sondern schön zufällig verteilt ablegen.
Vielleicht noch die Daten über mehrere "verschlüsselte" Pointer referenzieren und der Position und die der Pseudodaten ständig ändern.
Dazu dann noch die CPU schön stark auslasen, daß sonst fast nix mehr läuft (damit die anderen Programme kaum Zeit für was haben).

Wobei Letzeres wohl nicht unbedingt "schön" ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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