Eine gute Vorgehensweise besteht darin, Kennwörter in der Datenbank nicht zu verschlüsseln und zu speichern.Sie sollten sie mit einem zufälligen Salt-Hash (verwenden Sie die kryptografische RandomNumberGenerator-Klasse, nicht die mathematische Random-Klasse) gegen Rainbow-Table-Angriffe und nur die Hashes und Salze speichern. Wer diesen Tisch ergreift, wird es immer noch schwer haben, sich als legitimer Benutzer auszugeben. Denken Sie nicht einmal daran, Kreditkartendaten zu speichern, wenn Sie dem DBA nicht vertrauen können. Einige Web-Services ermöglichen es, dass die Zahlung funktioniert, ohne dass Sie jemals vernünftige Anmeldeinformationen wie PayPal-Umleitung und Ähnliches erhalten. Andere sensible Daten (E-Mails) sollten mit anderen Daten auf Benutzerebene wie dem Benutzernamen und einem konstanten Salt wie folgt verschlüsselt werden: "[email protected]+username+AayRUIOH283uID".
All dies sind nur kleine Dinge, die Ihr Leben sehr erschweren, aber auch das Leben eines nicht vertrauenswürdigen Administrators. Ziehen Sie auch in Betracht, Intranetverbindungen nur von Ihrem eigenen Cloud-Cluster (vertrauenswürdige IP-Tabelle) zu akzeptieren, SSL sogar zwischen Ihren eigenen Knoten zu verwenden und Assemblydateien mit asymmetrischen Schlüsseln zu signieren, sodass eine DLL nicht ersetzt werden kann.
Dennoch ist ALLES ein großer Aufwand an Zeit und Aufwand für einen fragwürdigen Sicherheitsvorteil. Wie bei allen Aspekten ist Sicherheit kein Merkmal eines Systems, sondern ein Kompromiss von Kosten/Nutzen.
Die beste Option ist, keine ominösen Entscheidungen zu treffen, sondern alternative, weniger riskante Lösungen zu finden (wie NICHT, die Passwörter speichern). Und denken Sie daran, dass es Tools zum Manipulieren von Binärdateien (DLL) gibt, um freigegebenen MSIML-Code (kompiliertes .NET wie C# auch ohne Debugsymbol-Tabellen) und Tools zum Manipulieren des Speichers während der Ausführung der App zu inspizieren. Es gibt Techniken, um Speichermanipulation sehr kostspielig zu machen, wie nicht sensible Daten (wie Passwörter) in Strings zu speichern, sondern sie in einem einzelnen Zeichen an einem gepinnten Speicherort zu streamen und jedes Mal das gleiche Zeichen zu überschreiben, um den Hash an Ort und Stelle zu rekombinieren "on the fly" mit einem inkrementellen Hash-Algorithmus (SHA-256 wäre gut).
Dennoch kann man sich nicht wirklich vor allen Arten von Angriffen schützen, wenn ein Admin nicht vertrauenswürdig ist. Er wird immer in der Lage sein, Ihre Maschine physisch auszuschalten und nach Hause zu bringen, um Spaß in seinem Keller zu haben ...
Wenn Sie den Leuten mit Administratorzugriff auf die Maschinen nicht vertrauen können, wo Ihr Code/Daten ist, das ist ein Menschenproblem, kein technisches. –
investieren Sie nicht Ihre Zeit in verlorene Schlacht. entsprechend den Tags, die Sie in .net entwickeln, und selbst wenn Sie ein teures Verschleierungsprogramm auf Ihren Binärdateien verwenden werden, macht das nur Dinge für potentielle ataccker _harder_. Also mach weiter und denke über die Sicherheit deines Benutzers nach und nicht über Binärdateien. – Tigran
Wenn Sie Shared Hosting aus Kostengründen verwenden, sind Ihre Daten noch nicht so wertvoll, dass sie mit großem Aufwand geschützt werden können. Nichts tun. – usr