Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie "offen" ist ein Password (String) im Arbeitsspeicher (https://www.delphipraxis.net/70573-wie-offen-ist-ein-password-string-im-arbeitsspeicher.html)

heri 1. Jun 2006 08:19


Wie "offen" ist ein Password (String) im Arbeitssp
 
Ich habe eine DLL programmiert welche ein Textdokument - mit einem Password verschlüsselt - speichern und wieder öffnen kann. Juhee, das funktioniert auch prima - sie macht sogar noch einiges mehr!

Doch heute Nacht kam mir mit schrecken plötzlich folgender Gedanke:
wie "offen" für Hacker ist meine Variable mit dem Passwort in einer DLL überhaupt?

Beispiel - Funktionen der DLL:

- Open(AFilename, APassword: WideString)
öffnet die Textdatei und schreibt das Password in eine private Variable (weil ich diese in der DLL sonst noch mehrmals benötige)

- Close
speichert die Textdatei durch das Passwort verschlüsselt wieder ab


Schön und gut - doch nun ist während dem Open und dem Close das Password in der Variablen doch für "jeden" ersichtlich?
da wird meine Verschlüsselung ja überflüssig?
Was denkt ihr dazu?

Vielen Dank für eure Hilfe

Bernhard Geyer 1. Jun 2006 08:26

Re: Wie "offen" ist ein Password (String) im Arbei
 
Wieso werden wohl auch aktuelle Sicherheitssysteme unter Windows geknackt: Weil man mit einem Debugger oft ran kommt.

Willst Du es sicherer muss sich deine Anwendung beenden wenn ein Debugger aktiv ist. Auch mußt du jeden Hook erkennen da ja aufgrund des DLL-Funktionsnamens diese Funktion wie auf dem Präsentierteller liegt. Hier wirst Du u.U. mittels Obfuscation/Verschleierung etwas verbesserung bekommen.

chaosben 1. Jun 2006 10:00

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zufällig beschäftige ich mich grad mit DLL-Injection und Function-Intercepting (meist tagsüber, selten nachts ;) ). Dabei bin ich zu folgendem Schluss gekommen: Wenn es einem "schlechten" Programm gelingt, die Rechte zu erlangen, eines anderen Prozesses Memory zu lesen (ReadProcessMemory, ...), ist Schluss mit lustig. Diese Rechte hat ein Administrator auf NT-Systemen automatisch.
Mit diesen Rechten kann man alle Variablen lesen, die eine Prozess benutzt. Idealerweise kann man auch allen anderen Speicher inklusive der Instructions (also den eigentlichen Code) lesen (und wenn man will auch schreiben). Das führt dazu, das man nachverfolgen kann, wie du zu deinem Passwort kommst.

Was sollte man daraus folgern? Eine gewisse Sicherheit gegen Attacken von Boon's geben folgende 2 Hinweise:
1. Man sollte die Rechtestruktur von Windows(NT) nutzen. (Wenn es um Prozesse geht, die nicht unter der eigenen UID laufen). Sie hat ihren Sinn.
2. Man sollte in regelmäßigen Absänden die Liste dergeladenen Module durchsehen und prüfen ob alle diese Module ihre Daseinsberechtigung haben (wenngleich man diese Informationen auch fälschen kann; aber das ist was für richtige Insider).

Man sollte aber darüber nachdenken, wie hoch die Wahrscheinlichkeit eines Angriffes ist. Ein Programm, das 100 Menschen nutzen verdient imho keinen Extra-Aufwand für Sicherheitsmechanismen von 100 Stunden.

negaH 1. Jun 2006 12:03

Re: Wie "offen" ist ein Password (String) im Arbei
 
Ich führe am besten einen Vergleich an:

Du sicherst dein Haus mit einem Vorhängeschloß und hängst den Schlüssel für das Schloß direkt daneben an einem Nagel. So wie dieser Schlüssel "an den Mann" gehört (mein Uffz der BW lässt grüßen), gehört dein Passwort in den Kopf des Anwenders, alles andere muß im Falle deines kryptographischen Verfahrens unsicher sein.

Am besten ist der Gedanke das deine Anwendung/DLL/EXE nur eine andere Form deines Sources darstellt. Dh. alles was du in deinem Source lesen kannst kann man auch direkt aus deiner Anwednung/EXE/DLL herauslesen. Wenn du in deinem Source dein hardcoded Passwort lesen kannst so kann man dies auch ohne Probleme aus der fertigen Anwendung herauslesen

Du musst also grundsätzlich dein Konzept des Datenschutzes überdenken. Aus meiner Sicht möchtest du Anwenderdaten per Verschlüsselung schützen. Also lass einfach den Anwender das Passwort selber auswählen und per Dialog fragst du es ab. Damit lösst du nicht nur dein eigentliches Problem sondern du erhöhst sogar die Sicherheit enorm. Denn jeder Anwender deiner Software schützt seine Daten mit eigenen Passwörtern. Dh. es gibt deinem "General-Schlüssel" nicht mehr. Die Frage die sich jetzt stellt ist ob dies deinem Konzept/Ziel entspricht.

Gruß Hagen

SirThornberry 1. Jun 2006 12:16

Re: Wie "offen" ist ein Password (String) im Arbei
 
du kannst auch per PHP-Script etc. die Verschlüsselung vornehmen, dann kommt keiner ran. Du müsstest dann die Rohdaten an das Scriptschicken und das Script schickt dann das verschlüsselte Ergebnis zurück. So sollte niemand an den verschlüsselungscode ran kommen.

negaH 1. Jun 2006 12:18

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

1. Man sollte die Rechtestruktur von Windows(NT) nutzen. Sie hat ihren Sinn.
2. Man sollte in regelmäßigen Absänden die Liste dergeladenen Module durchsehen und prüfen ob alle diese Module ihre Daseinsberechtigung haben (wenngleich man diese Informationen auch fälschen kann; aber das ist was für richtige Insider).
3. Man sollte darüber nachdenken, wie hoch die Wahrscheinlichkeit eines Angriffes ist. Ein Programm, das 100 Menschen nutzen verdient imho keinen Extra-Aufwand für Sicherheitsmechanismen von 100 Stunden.
1.) bietet keinerlei Schutz. Der Angreifer hat definitiv die höchsten Privilegien auf seinem Rechner auf dem Deine Anwendung läuft. Diese Privilegien sind sogar überdurchschnittlich größer als ein bloßer Admin/SYSTEM Account. Mit Hilfe der entsprechenden Werkzeuge, wie SoftICE, SandBox'en und VM's hat der Angreifer die TOTALE Kontrolle. Ergo: Punkt 1.) ist irrelevant und hilft garnichts. Erst mit der Einführung von kryptographischer und einbruchsicherer Hardware in die Systeme (TCP, DRM, HDTV lassen grüßen) ändert sich das. Einfach weil der Angreifer, bzw. JEDER Benutzer solcher Hardware, keinen Vollzugriff mehr auf ihre eigenen Ssysteme haben.

2.) Das funktioniert ebenfalls nicht. Treiber wie LogiTech Mäuse, Keyboard Treiber, Grafik Treiber, DCOM, Protected Storage etc. pp. injezieren ihre DLLs permanent in die eigene Anwendung. Davon abgesehen kann ein Angreifer auf seinem System sehr wohl diese Treiber DLLs durch eigene DLLs oder durch die "Side by Side" Technik, austauschen. Dh. aus Sicht deiner Anwendung hast du keine Möglichkeit zu erkennen welche DLLs sich mit welchem Ziel in deine Anwendung injeziert hat. Ergo: Punkt 2.) ist ebenfalls untauglich.

3.) Man kann über die Wahrscheinlichkeit eines Angriffs viele Jahre lang sinnieren, analysieren und rumgrübeln. Man wird immer zu dem Schluß kommen das selbst die billigste Software mit den schlechtesten Features denoch ein Angriffziel eines Angreifers sein kann. Die Gründe warum ein Angreifer einen Angriff startet haben sehr oft rein garnichts mit Geld, Know How oä. zu tuen. Fazit: auch Punkt 3.) ist Zeitverschwendung.

Gruß Hagen

negaH 1. Jun 2006 12:27

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

du kannst auch per PHP-Script etc. die Verschlüsselung vornehmen, dann kommt keiner ran. Du müsstest dann die Rohdaten an das Scriptschicken und das Script schickt dann das verschlüsselte Ergebnis zurück. So sollte niemand an den verschlüsselungscode ran kommen.
Ähm ??? Also falls das PHP auf deinem eigenem und einbruchsicher geschützten Server läuft könnte dies unter Umständen funktionieren. Alledings handelt man sich enorm viele Probleme für nichts damit ein.

- man muß eine sicherer Datenübertragung im INet sicherstellen
- man benötigt zu jeder Zeit eine INet Verbindung, ohne das Proxies, Rooter, Firewalls etc.pp. dazwischen funken
- man benötigt einen INet Server samt Software

So und wenn man dies alles hat muß man noch das Problem lösen das man ja mit einem General-Schlüssel der für alle Benutzer identisch ist, arbeiten möchte. Dh. selbst mit dem sicheren PHP, mit sicherer Kommunikation übers INet, mit einem sicheren Server, wird der Angreifer EINMALIG diesen General-Schlüssel legal abfragen, und kann dann JEDE Anwendungskopie ohne weitere Abfragen entschlüsseln. Dh. alleine die Benutzung eines General-Schlüssels für alle Benutzer ist unischer und tödlich. Das identische Problem tritt zb. bei den Serialnummern/Registrationsschlüsseln von Software-CDs auf. Auch hier ist der technische Aufwand JEDE dieser CD-ROMs individuell zu serialisieren enorm, und deshalb benutzt man bei solche CDs eben auch "General-Schlüssel" in Form von Schlüssel-Ableitungs-Funktionen == Registrations-Funktionen. Hat man diese Funktionen einmalig reverse-engieneered kann man sich seine eigenen Schlüssel erzeugen.

Gruß Hagen

thetrue 1. Jun 2006 12:31

Re: Wie "offen" ist ein Password (String) im Arbei
 
nja ist sehr leich ein hardcore(einprogrammierten) password zu finden
ich habe mich schon etwas mit cracken beschäftigt, und ich weis es ;)
debugger starten und die PWs gehören dir ;)

hboy 1. Jun 2006 12:52

Re: Wie "offen" ist ein Password (String) im Arbei
 
gibt es nicht die pgp en/decoder als commandline ?

negaH 1. Jun 2006 13:17

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

gibt es nicht die pgp en/decoder als commandline ?
Was nützt dir dies ? Du möchtest von der symmetischen Kryptographie und die a-symmetrische Kryptrographie eines PGPs wechseln. Leider lösst das nicht das konzeptionelle Problem.

Der Anwender der Software oder die Software des Anwenders muß für diesen Anwender als erstes beim Setup einen eigenen a-symmetrischen Schlüssel erzeugen, zb. eben RSA Schlüssel. Der Anwender muß nun

1.) den rivaten Teil dieses Schlüssel per Passwort schützen und auf Platte/USB Stick öä. speichern
2.) dann muß der Anwender den öffentlichen Teil dieses Schlüssel zum Server übertragen/senden
3.) der Server benötigt nun die Möglichkeit die Authentizität, sprich die Zuordnung -> öffentl. Schlüssel zum berechtigten Benutzer, sicherzustellen.

Gerade Punkt 3.) ist aber das Problem. Man benötigt eine Dritte Partei, einen sogenannten Trust der die Authentizität sicherstellen kann. Ist dies NICHT möglich so kann ein Angreifer ohne Probleme sich als regulärer Benutzer ausgeben und der Server wird somit wiederum an das "Gerneral-Passwort" zu Verschlüsselung der Daten rankommen.

Effektiv hat man also nur die Komplexität des gesammten Prozessings erhöht aber rein garnichts an Sicherheit gewonnen. Denn ein einfaches Benutzergewähltes Passwort (wie oben schon beschrieben) wäre identisch sicher. Denn bei all den Verkomplizierungen muß der Anwender ja nun seinen privaten Schlüssel schützen und da er viel größer ist als ein im Kopf gespeichertes Passwort muß er diesen sogar noch extern irgendwo speichern. Satt diesem Umweg kann man ja dann gleich das identische Passwort benutzen.

Gruß Hagen

chaosben 1. Jun 2006 13:41

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von negaH
Treiber wie LogiTech Mäuse, Keyboard Treiber, Grafik Treiber, DCOM, Protected Storage etc. pp. injezieren ihre DLLs permanent in die eigene Anwendung.

Wer hat denn was von Treibern, Mäusen oder anderem Getier gesagt? Es geht hier um die eigene Anwendung.
Zitat:

Zitat von negaH
Dh. aus Sicht deiner Anwendung hast du keine Möglichkeit zu erkennen welche DLLs sich mit welchem Ziel in deine Anwendung injeziert hat.

Falsch, denn ich weiß, welche Module ich geladen habe. Alle anderen sind falsch an der Stelle.
Zitat:

Zitat von negaH
Ergo: Punkt 2.) ist ebenfalls untauglich.

Ergo: Auch dieser Teil deiner Aussage ist falsch.

Und btw: Selbst wenn man fachlich kompetent ist, muss man nicht reden als ob man der Schöpfer der Welt ist. Manchmal hilft es auch, einen Moment länger über die Meinung eines Anderen nach zu denken.

Neotracer64 1. Jun 2006 14:06

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Falsch, denn ich weiß, welche Module ich geladen habe. Alle anderen sind falsch an der Stelle.
Wieso? Hagen hat doch gesagt, dass "Treiber wie LogiTech Mäuse, Keyboard Treiber, Grafik Treiber, DCOM, Protected Storage..." ihre DLLs in DEINE Anwendung injezieren. Und DAS ist definitiv gewollt, damit zum Beispiel bei der Logitech-Maus auch der Extra-Knopf in deinem Programm funktioniert. Wie unterscheidest du, die vom User gewollten DLLs von den des Angreifers?

chaosben 1. Jun 2006 14:19

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zum einen denke, ich das das sehr selten ist. Hast du schon mal sowas gesehen?
Zum anderen kann ich dafür einen Schalter einbauen, mit dem der Nutzer wählen kann:
- Secure Mode: alle ungewollten Module rausschmeißen (also auch Logitech und Konsorten)
- Unsecure Mode: nicht empfohlen, aber wenn der Nutzer es so will

himitsu 1. Jun 2006 14:19

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von chaosben
Falsch, denn ich weiß, welche Module ich geladen habe. Alle anderen sind falsch an der Stelle.

Du weißt aber nicht welche Module wirklich geladen werden ... die "Maus-DLL hab ich auch schon lange entdeckt und heute Früh sind mir noch mehr aufgefallen, die nicht direkt von meinem Programm geladen werden ... wenn ich richtig gezählt hatte waren das 3, oder 4, welche kurz nach dem Programmstart plötzlich aufgetaucht sind.
Und was für Module von der VCL und anderen Teilen, die du verwendets geladen werden, darauf hast du ja auch keinen Einfluß.

chaosben 1. Jun 2006 14:20

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von himitsu
Und was für Module von der VCL und anderen Teilen, die du verwendets geladen werden, darauf hast du ja auch keinen Einfluß.

Das nicht, aber ich kann nachsehen, was von mir (oder der VCL) ist und alles andere ist ungewollt.

Aber ehe wir uns hier total in OT verrennen: Ich wollte mit meinem ersten Post genau eine Sache sagen(auch wenn sie scheinbar nicht so rübergekommen ist): Es gibt imho keine(0, nil, null :) ) Sicherheit für ein Passwort im RAM.
Und das ist wohl die Frage, um die es hier geht.

negaH 1. Jun 2006 17:14

Re: Wie "offen" ist ein Password (String) im Arbei
 
@chaosben:

es ist eben nicht selten sondern eher der normale Vorgang. Und seit dem es die "side by side" Technik gibt gibt es auf OS Ebene ein API das es ermöglicht zb. die WinSock DLL so zu laden das sie unbemerkbar durch eine Angreifer-WinSock-DLL geladen wird. Dh. selbst wenn deine Anwendung WinSock lädt, und das auch gewünscht ist durch deine Anwendung, so kann ein Angreifer eine "Side by Side" DLL für WinSock installieren die dann mit Hilfe des APis vollkommen transparent die originalen Funktionen der originalen WinSock DLL ersetzt. Die Anwendung selber hat dabei keine Möglichkeit zu erkennen das es eine "Side by Side" DLL ist. Somit stellt das OS von Hause aus einen Weg zur Verfügung ganz regulär eigenen Code in andere Anwendungen zu injezieren. Also selbst wenn die eigene Anwendung WinSock absichtlich und STATISCH lädt. Und dann gibts noch die "Delayed Load" DLLs die erst zu einem Zeitpunkt nachgeladen werden. Bei sowas ist es denn wichtig das deine Anwendung auch korrekt zeitlich synchron die Überprüfung der geladenen DLLs durchführt, da sie ansonsten solche DLLs garnicht detektieren kann.

Ich erwähne dies (auch wenn es teil-OT) ist nur aus einem Grunde: nämlich um fehlendes Wissen nachzuliefern das deutlich zeigt das deine 3 postulierten Taktiken wirkungslos sind.

Der Trend der "Treiber" Programmierer Funktionalitäten über injezierte DLLs zur Verfügung zu stellen wird dabei immer stärker. Dh. gabs sowas vor Jahren noch nicht so häufig so stelle ich heutzutage immer öfter fest das von den vielen DLLs in meinen Prozessen die meisten injezierte DLLs oder "side by side" geladene DLLs sind. Ein sehr hilfreiches Tool dafür ist der Dependency Walker. Alleine die fucking Treiber für die HP Drucker werden injeziert. Zwar nicht über Hooks dafür durch das OS selber wenn man Drucker-APIs in der Anwendung aufruft. Deine Aussage zeigt also das du selber noch niemals sowas beobachtet hast.

Besteht noch die zweite große Frage: WIE und WANN will die eigene Anwendung erkennen welche DLLs im eigenen Prozess geladen wurden ? Hört sich trivial an ist es aber weiß Gott nicht. Denn der Weg über ToolHelp ist durch einen Angreifer so enorm leicht auszuhebeln (globale Hooks) das deine Anwendung garnicht die Chance hat eine Angreifer DLL zu entdecken. Desweiteren besteht das Problem nicht nur zu verifizieren das eine spezielle DLL tatsächlich geladen wurde sondern zu verifizieren ob diese DLL noch das Original darstellt. Da helfen auch keine digitalen Signaturen da diese NUR und ausschließlich NUR auf dem Image der Festplatte arbeiten und NICHT auf dem Code der geladenen DLL im Speicher !

Ergo: so bald es um DLLs geht kann sich eine Anwendung in nichts sicher sein. Und mal erhlich, wer hat von euch nicht schon mit SetWindowsHookEx() rumgespielt und seine eigene KeyBoard-Hook-DLL gebastelt. Das ist wohl eines der offensten Geheimnisse und selbst für Visual Basic for Applications gibts Beispielcode im WEB.

Wir können aber gleich auf eine höhere Ebene wechseln, ins Kernel, dann Treiber und dann, oh Gott finden wir raus das das komplette OS nur rein virtuell in einer Sandbox, VM, in SoftICE oder auf einem Hardware Debugger läuft.

Ergo: das Passwort in der Anwendung zu speichern ist schlecht.
Ergo: ein Passwort als General-Schlüssel der für alle Anwendungskopien identisch ist ist eine unsichere Idee.

Ich empfehle das Passwort durch den Anwender eingeben zu lassen und damit auch Anwenderbezogen seine Daten zu verschlüsseln.

Klar ein kompromittiertes, unsicheres System wird mit keiner Lösung einen Schutz bieten. Ausnahme ist einbruchsichere Hardware. Alledings greift man so nur EIN Anwenderpasswort auf EINEM System an und nicht ALLE Anwender der gleichen Software in einem Rutsch und das auch noch OFFLINE.

Gruß Hagen

Vjay 1. Jun 2006 19:04

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von chaosben
Wer hat denn was von Treibern, Mäusen oder anderem Getier gesagt? Es geht hier um die eigene Anwendung.
Falsch, denn ich weiß, welche Module ich geladen habe. Alle anderen sind falsch an der Stelle.
Ergo: Auch dieser Teil deiner Aussage ist falsch.

Also zuallererst würde ich prinizpiell einfach mal unterstellen, dass Hagen sich damit auskennt.
Und da ich selber über genügend Kenntnisse verfüge, kann ich mir dessen sogar sicher sein.

Man braucht übrigens nicht einmal eine DLL verwenden, openProcess und createRemoteThread tuen es auch. Und zu dem Vorschlag, eines Securemodus, der sich nur mit bestimmten DLLs aktivieren lässt... Erstens: siehe Hagens Thread und zweitens: Wie findest du denn heraus was geladen ist? Ein komplettes Speicherabbild vergleichen? Und sagen wir rein theoretisch, du würdest es schaffen, so vertausche man ein true und false in deinem Programm und es denkt der Securemodus ist aktiv... Rest siehe Hagens thread.

Zitat:

Zitat von chaosben
Und btw: Selbst wenn man fachlich kompetent ist, muss man nicht reden als ob man der Schöpfer der Welt ist. Manchmal hilft es auch, einen Moment länger über die Meinung eines Anderen nach zu denken.

Dazu sage ich jetzt mal nichts...

chaosben 1. Jun 2006 20:40

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von chaosben
Ich wollte mit meinem ersten Post genau eine Sache sagen(auch wenn sie scheinbar nicht so rübergekommen ist): Es gibt imho keine(0, nil, null :) ) Sicherheit für ein Passwort im RAM.


negaH 1. Jun 2006 23:18

Re: Wie "offen" ist ein Password (String) im Arbei
 
Siehst du und ich will klarstellen das man nicht nur "scharz & weiß" sieht.

Zitat:

ch wollte mit meinem ersten Post genau eine Sache sagen(auch wenn sie scheinbar nicht so rübergekommen ist): Es gibt imho keine(0, nil, null ) Sicherheit für ein Passwort im RAM.
denn auch diese Aussage ist absolutistisch. Mit der Entwicklung neuer Hardware stimmt diese Aussage eben auch nicht mehr. Zur Zeit vollzieht sich nämlich im HW Sektor ein Trend der durchgängigen "Digitalisierung" und Integration der Kryptographie. Das sind solche Sachen wie Änderungen an Datenprotokollen, die Verwendung schneller serieller Datenübertragungen wie SPDIF, DVI und Speicherbausteien.
Dh. überall gibt es Entwicklung die Kryptographie direkt in die HW integrieren.

- DVI, HD-TV, SPDIF Datenübertragungen mit Entschlüsselung im Endgerät
- Sachen wie TCP im Betriebssystemen wie Palladium, Linux
- Hardware wie Secure Digital Speichermedien, Compact Flash Karten, xD Pixture Cards, Sony Memory Stick
- Datenübertragungsstandards wie Bluetooth, ZigBee, WLAN
- IDE ATA/ATAPI-7 Standard mit Hardwareverschlüsselungen direkt in der Festplatte (ein großes Ärgernis bei originalen xBox HDs)
- serieller SRAM Speicher für Grafikkarten und PCs die ihre Daten ebenfalls live verschlüsseln
- selbst Druckerpatronen nutzen kryptographische Protokolle heutzutage

Es gibt also fast in jedem Sektor Bestrebungen Kryptographie direkt in HW zu integrieren nachdem die komplette Datenübertragung/haltung digitalisert ist. Die nötigen Schlüssel liegen dabei NICHT in den Händen des Besitzers der gespeicherten Daten sondern bei den Herstellern von HW und SW und TrustCentern.

Es gibt also auch schon Speicherchips die zwar ausgelesen werden können, aber das was man da ausließt ist live verschlüsselt worden und kann nur innerhalb einer entsprechenden CPU mit Krypto-Co-Prozessor real verwertet werden.
Die Aussage das ein Passwort im RAM absolut unsicher und ungeschützt wäre ist also ebenfalls nicht mehr "ganz" richtig. Vielleicht noch heute aber nicht mehr in 4-5 Jahren.

Technologisch und auch vom Know How her gesehen wissen die heutigen Experten sehr genau was sie wie entwickeln müssen damit unsere Hardware in Zukunft vor UNS als Benutzer ABSOLUT sicher wird. Das kann vorteilhaft für uns als Anwender sein weil ein entsprechendes OS dann wirklich sicher vor Viren/Trojanern etc.pp. sein könnte. ABER! eher nehme ich an das solche "Features" nur zum Zwecke der Profitmaximierung benutzt werden, sprich zur Kontrolle unserer Daten oder unseres Verhaltens.

Aus dieser Sicht könnte man ja eigentlich froh sein das unsere heutige Technik so "unsicher" ist, da wir damit auch noch die absolute Kontrolle über unsere private HW haben. Denn eines steht fest: die Entwicklung und Vermarktung solcher krypto-gebundener-Hardware wird von Experten die wissen was sie tuen forciert. Dh. die Hoffnung das es intelligente Hacker in Zukunft gibt die dann immernoch überall einbrechen können (was ich schon heute für ein Gerücht halte) ist absolut falsch. Sollte in Zukunft jeder Schritt der Herstellung von Informationen/Daten, zur Vermarktung, über deren Speicherung und Datenübertragung bis hin zum Abspielen auf dem digitalem HD-TV Fernseher digitalisiert, kryptographisch geschützt und authentifiziert worden sein, so wird es mit den schon heute bekannten mathematischen Verfahren KEINERLEI effiziente Möglichkeit mehr geben ein solches System zu knacken.

Bestes Beispiel sind die bedauernswerten Benutzer der xBox die ihre persönlichen Daten auf Platte speicherten und später beim Einbau dieser HD in andere Rechner keinen Zugriff mehr auf diese, IHRE Daten haben.

Also gibt es Möglichkeiten ein Passwort sicher auf einem Rechner zu speichern, das Problem dabei ist es dieses Passwort sicher in der eigenen Anwendung zu speichern und zum Anwender zu transportieren. Das geht bisher noch nicht sicher. Wenn man also heute feststellen muß das ein Passwort in einer EXE absolut unsicher ist so liegt das nur daran das es noch keine durchgängige "Kryptographisierung" der Daten vom Hersteller einer Software bis hin zum Endkunden-Gerät existiert. Aber das wird kommen. Man kann also heute über die Protected Storage und dem Cryptographic Service Provider im Windows sehr wohl Daten sicher im Speicher ablegen. Das Problem ist nur wie man diese Daten über die eigene Anwendung dahin tranportiert. Falls diese Daten durch die Anwendung dynamisch erzeugt wurden so ist dies kein Problem. Ein Passwort hardcoded in der EXE gespeichert ist damit aber immer noch nicht sicher.

Gruß Hagen

chaosben 2. Jun 2006 05:25

Re: Wie "offen" ist ein Password (String) im Arbei
 
Ach Hagen ... das wir 2 uns immer in die Wolle bekommen ist komisch. :? (Vielleicht sind unsere Charaktäre zu unterschiedlich: du mit deinem gegen mich mit keinem ;) )

Natürlich hast du Recht. Theoretisch besteht die Möglichkeit auf einem PC ein Passwort im RAM sicher abzulegen.
Aber versteh bitte auch mich. Wenn hier jemand fragt, ob sein Passwort im RAM sicher ist, dann gehe ich davon aus, das wir hier von Windows(darüber könnte man sich nocht streiten, aber muss man ja nicht) und aktuell gängiger Hardware reden. Und wie wir schon festgestellt haben, gibt es auf einem solchen System keine Sicherheit dafür, das ein Passwort nicht erschnüffelt werden kann. Warum sollte ich also eine andere Antwort als diese geben? Nur weil es theoretisch möglich wäre, wenn man spezielle HW nutzen würde?
Ich denke, der Thread-Ersteller wollte eine präzise Antwort, die er beim nächsten Programmieren nutzen kann. Und eine solche wollte ich ihm geben.

negaH 2. Jun 2006 13:55

Re: Wie "offen" ist ein Password (String) im Arbei
 
Benjamin, ich glaube du nimmst das alles zu persönlich. Klar greife ich eine spezifische Meinung/Aussage an, bzw. versuche einfach nur Irrtümer aufzuklären oder noch zusätzlich interessantes Wissen mit zu geben. Das hat aber rein garnichts damit zu tun WER diese Meinung/Aussage getroffen hat. Es ist mir also Schnuppe ob du oder ein Anderer oder sogar ich selbst diese Aussage getroffen hat.

Es ist zwar richtig wenn man versucht ausschließlich nur auf die Frage zu antworten und dabei nicht Offtopic zu werden. Aber das ist mir einfach zu trocken und verdirbt mir jeglichen Spaß an einem Forum. Also gerade weil man hier in den Threads Persönlichkeiten/Menschen antrifft die natürlich auch ihre persönlichen Meinungen offenbaren macht mir das so viel Spaß.

Wenn also meine Ausführungen über die, meiner Meinung nach, in naher Zukunft existenten Möglichkeiten zwar Off Topic sind so finde ich es denoch interessant. Und ich meine eben das das nicht nur für mich interessant sein dürfte. Ergo: poste ichs hier.

Die eigentliche Eingangsfrage ist ja auch schon mit den ersten 3-4 Postings beantwortet worden und die nachfolgenden Postings betrachte ich nur noch als interessante Randinformationen.

Zitat:

Ach Hagen ... das wir 2 uns immer in die Wolle bekommen ist komisch.
Siehst du, und exakt das wäre mir niemals aufgefallen. Ich kann mich nicht daran erinnern das wir beide schon öfters aneinander geraten wären. Einfach weil es für mich uninteressant ist WER eine Aussage/Meinung vertritt die kontrahär zu meiner Meinung ist. Ich bin quasi in keinster Weise nachtragend und verschwende meine eh schon wenigen Hirnzellen nicht an solche Dinge ;)

Aus meiner Sicht sind wir eben NICHT aneinander geraden sondern nur unsere unterschiedlichen Ansichten. Tja, und es ist auch gut so das es unterschiedliche Ansichten gibt, das ist doch das Normalste der Welt.

Gruß Hagen

chaosben 3. Jun 2006 21:59

Re: Wie "offen" ist ein Password (String) im Arbei
 
Committed;
:)

Phoenix 4. Jun 2006 14:43

Re: Wie "offen" ist ein Password (String) im Arbei
 
Zitat:

Zitat von negaH
Ich empfehle das Passwort durch den Anwender eingeben zu lassen und damit auch Anwenderbezogen seine Daten zu verschlüsseln.

Was unser Problem aber nicht löst:
Ab dem Zeitpunkt der Eingabe befindet sich das Passwort im Speicher der Applikation, wobei gefragt wurde wie sicher eben genau dies ist (unabhängig davon, ob die Verschlüsselung nun in einer DLL oder wo auch immer stattfindet).

Zitat:

Doch heute Nacht kam mir mit schrecken plötzlich folgender Gedanke:
wie "offen" für Hacker ist meine Variable mit dem Passwort in einer DLL überhaupt?

Beispiel - Funktionen der DLL:

- Open(AFilename, APassword: WideString)
öffnet die Textdatei und schreibt das Password in eine private Variable (weil ich diese in der DLL sonst noch mehrmals benötige)
Ich gehe nämlich gerade davon aus, dass nur der algorithmus in der DLL liegt und das PW dort übergeben wird - ob das nun hardcoded drin war oder vom User vorher eingegeben wurde - davon wird hier gar nix gesagt. Also gehen wir mal davon aus, es wurde erst frisch eingegeben...

negaH 5. Jun 2006 13:32

Re: Wie "offen" ist ein Password (String) im Arbei
 
@Phoenix:

ja dies stimmt auch ;) Ich gehe also davon aus das der Computer des Clients NICHT kompromittiert wurde.
Denoch betrachte ich auch den Worstcase und der ist erreicht wenn ich davon ausgehen muß das der Client und sein Rechner ein Angreifer sind.

Und wenn wir nun beide Annahmen vergleichen so ergibt sich folgendes Bild:

1.) Generalschlüssel in der EXE hardcoded gespeichert:
- Angreifer kann erfolgreich ALLE Benutzer der Software kompromittieren, offline
- Angreifer kann somit an ALLE Benutzerdaten rankommen

2.) kein Generalschlüssel und Benutzer verschlüsseln ihre Daten mit einem eigenen Passwort
- Angreifer muß alle Clienten/Rechner kompromittieren, ein ungleich höherer Aufwand, meistens online
- Angreifer kommt bei einem kompromitierten System/Client nur an dessen Daten ran

Also selbst unter der Annahme das die Clients und deren Rechner Angreifer darstellen ergeben sich auf Grund des unterschiedlichen kryptographischen Konzeptes ganz andere Sicherheitsschrabken.

Gruß Hagen


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

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