Hallo.
Ich habe mir mal ein paar Gedanken zu zwei Sicherheitsthemen gedanken gemacht und überlegt, ob es denn nicht machbar wäre, dass man dem Betriebssystem einige Sicherheitsaspekte nachträglich durch Patches der
API beibringen kann.
Folgende 2 Themen sind für Entwickler problematisch und würden gut zum Aufgabengebiet eines Betriebssystems passen:
1. Daten werden nicht sicher gelöscht
Es gibt zwar viele Tools, teils kostenpflichtig, teils kostenlos, die Daten sicher vernichten sowie den freien Speicherplatz der Festplatte reinigen. Das Problem ist nun, dass diese Vorgehen alle Rückwirkend geschehen. Besonders wenn man seinen PC "Persilrein" halten will, müsste man ja jeden Tag den freien Speicherplatz überschreiben und das am besten noch mehrfach (wegen Randmagnetisierung etc). Umständlich, uneffektiv und stresst die Festplatte.
Es wäre doch eine tolle Sache, wenn das Betriebssystem auf Wunsch alle Lösch- und Überschreibaktionen sicher machen würde. Dies kostet zwar Laufzeit, ist aber sehr sicher, wenn man Daten stets endgültig löschen möchte. Und Sicherheit ist in manchen Fällen tatsächlich viel wichtiger als Laufzeit.
Eine Idee von mir wäre jetzt:
Die Windows-
API-Funktionen "DeleteFileA" und "DeleteFileW" überschreiben (Code an die
DLL anhängen und Sprungpunkt umlenken?).
Ggf. ein Daemon erstellen, der die System-DLLs automatisch neu patched, wenn sie z.B. aufgrund eines Updates ersetzt werden.
Ob da Windows wegen dem Dateischutz mitmacht? Wenn nicht, dann in der WinInit-Phase die Dateien ersetzen.
Man sollte beachten, die Daten mehrfach zu überschreiben, damit man von Randmagnetisierungen möglichst wenig Informationen entnehmen kann. Das ist aber bereits etwas vorgegriffen.
Weitere Problematiken:
- Nicht nur beim Löschen, sondern auch beim Überschreiben von Dateien müssen vorher die Daten vernichtet werden.
- Zusätzlich muss das komplette Cluster zuerst vernichtet werden, bevor eine Datei verändert wird! Wenn wir eine Datei mit 200 Byte in einem 1024 Byte Cluster haben, dann sind im Cluster 824 Byte der Vorgängerdatei oder der Vorgängerversion der Datei. (Clusterüberhang)
- Werden alle Dateimodifikationen/Schreibzugriffe immer über die API abgewickelt? Wenn nein, dann muss ein extra Servicedienst hinzukommen, der für uns Dateiveränderungen überwacht (Daemon)
Wenn das ganze mit der
API gar nicht machbar wäre, könnte man auch einen permanenten Daemon erstellen, der alle Aktivitäten auf der Festplatte überwacht und den Speicherplatz bei gelöschten Dateien nachträglich sicher freigibt. Die Variante wäre aber widerum nicht so schön wie die oben genannte. Ebenfalls muss auf das Überschreiben von Dateien reagiert werden. Hier müsste der Daemon sich die Datei komplett merken (
RAM), dann alle Daten vernichten und wieder zurückschreiben. Mh... naja, das wäre dann aber die Super-Sicher-Einstellung, denn eigentlich ist die Randmagnetisierungsentschlüsselung super kompliziert und kostenspielig. Bei der normalen Variante müsste der Watch-Daemon aber auf jeden Fall den Clusterüberhang leeren, wenn eine Datei in irgendeiner Form verändert wurde.
2. Passwörter können mit Keyloggern ausspioniert werden.
Ein anderes Problem ist, dass Passwörter ausspioniert werden können. Das Betriebssystem bietet Möglichkeiten zum Keyboard-Hook, bietet aber auch Edit-Felder mit Masken an, die für Passwörter geeignet (gedacht) sind. Wieso unterbindet das Betriebssystem dann Hooks bei Passwortfeldern nicht?
Es gibt zwar Methoden zur Keylogger-Prävention, jedoch sind diese zum Einen nicht wirklich das gelbe vom Ei, zum anderen müssen sie von jedem Entwickler separat implementiert werden und nicht im Betriebssystem dabei, was ja eigentlich wünschenswert in der heutigen Zeit der IT-Sicherheit wäre.
Übliche Methoden zur Keylogger-Abwehr wären
1. Datenmüll senden und den selbst produzierten Datenmüll verwerfen. Scheint auf den ersten Blick zu funktionieren, jedoch macht es den PC langsam und 2 Prozesse könne nicht gleichzeitig Eingaben schützen (wobei man ja eh nicht 2 Mal einen Focus haben kann). Bei der Implementierung kam aber hinzu, dass es oft zu Grenzwertproblemen der Zeit kam, sodass der Datenmüll genau dann gesendet wurde, in dem eine Tastatureingabe statt fand. In diesen Fällen wurde der Datenmüll aufgenommen und der Tastendruck verworfen. Und solche Fälle treten um so öfter auf, um so mehr Datenmüll man versendet, was die Sicherheit erhöht.
2. Per Windows
API einem Tastendruck eine Information mitgeben. Wehrt native Keylogger ab und ist effektiv, keine Grenzfälle. Problem: Keylogger können diesen Schutz einfach umgehehn, in dem sie die Information beachten. Ebenfalls ein Problem: Ein echter Tastendruck hat immer die Extrainformation 0, weswegen es nun wirklich nicht schwer ist, das zu überprüfen, wenn man einen alternativen Keylogger schreibt.
(3. Anstelle eines masked Editfeldes eine virtuelle Tastatur darstellen, die man mit der Maus bedient. Ist zwar umständlicher aber sicherer. Das ist jedoch nur eine verschiebung des Problems und keine wirkliche Lösung. Außerdem bietet Windows kein Framework für eine eingebettete (MFC, .net,
ActiveX, ...) virtuelle Tastatur an)
(4. Die Funktionalität einstellen, sobald ein Keylogger mitschreibt... Das ist nun wirklich die Aufgabe eines Antivirenprogramms und wird daher nicht weiter beleuchtet)
Wie könne man aber nun Windows modifizieren, sodass es Keylogger unterbindet, wenn ein maskiertes Feld markiert ist? Ich weiß leider nicht genau, wie das bei Tastendrücken mit den Messages/Hooks genau funktioniert. Da ich aber selbst mal etwas geschrieben habe (bzw. zukünftig noch weiterarbeiten werde), das Maustastendrücke ignoriert, könnte ich mir vorstellen, dass das bei Tastatureingaben analog funktioniert. Die eigene Anwendung empfängt den Tastendruck, danach wird die Message verworfen und keine andere Anwendung wie z.B. ein Keylogger empfängt die Daten.
Funktionstasten sowie andere Steuerbefehle sollte man aber durchlassen.
Bitte um weitere Ideen/Vorschläge/Realisierungsideen.
Gruß
blackdrake
// Edit: Titel abgeändert