Security How To's und CodeClips auf MSDN Solve
"Na endlich!", wird der ein oder andere denken und recht hat er: Ab sofort schmückt sich msdn-solve.de mit einem ersten(!!!) Schwung How To's und CodeClips zum Thema Security.
Dominick Baier erläutert immer wieder auftauchende Fragen ganz allgemein zum Thema Security und ganz speziell zur sicheren Client Entwicklung. Alles inklusive Quellcode, Text, Bild und Ton!
Allgemeine Security
Wie entschlüssele ich Daten mit einem Zertifikat?
Daten können prinzipiell auf zwei Arten (symmetrisch oder asymmetrisch) verschlüsselt werden. Bei der sogenannten asymmetrischen Verschlüsselung werden Daten mit einem Public Key verschlüsselt und nur die Person, die im Besitz des dazugehörigen Private Keys ist, kann die verschlüsselten Daten wieder entschlüsseln. Dieses Verhalten ist in den Standards X509 und PKCS#7 festgelegt. Dominick Baier, Sicherheits-Berater bei thinktecture, zeigt in diesem CodeClip wie asymmetrisch verschlüsselte Daten in .NET entschlüsselt werden können.
Wie verschlüssele ich Daten mit einem Zertifikat?
Daten können prinzipiell auf zwei Arten (symmetrisch oder asymmetrisch) verschlüsselt werden. Bei der sogenannten asymmetrischen Verschlüsselung werden Daten mit einem Public Key verschlüsselt und nur die Person, die im Besitz des dazugehörigen Private Keys ist, kann die verschlüsselten Daten wieder entschlüsseln. Dieses Verhalten ist in den Standards X509 und PKCS#7 festgelegt. Dominick Baier, Sicherheits-Berater bei thinktecture, zeigt in diesem CodeClip wie Daten in .NET verschlüsselt werden können.
Wie überprüfe ich digitale Signaturen?
Daten werden in der Regel digital signiert um deren Integrität sicherzustellen (siehe CodeClip „Wie kann ich Daten digital signieren?“). Dazu werden häufig X509 Zertifikate verwendet. In diesem CodeClip lernen Sie, wie die digitale Signatur von Daten und das signierende Zertifikat mit .NET überprüft werden kann.
Wie signiere ich Daten digital?
Mit Hilfe von privaten Schlüsseln können Daten digital signiert werden. Ein häufiger Anwendungs-Fall ist einen privaten Schlüssel zu verwenden, der mit einem Zertifikat aus dem Zertifikats-Speicher assoziiert ist. Wie das mit .NET funktioniert sehen Sie in diesem CodeClip.
Wie greife ich auf den Windows Zertifikat-Speicher zu?
Windows legt typischerweise Zertifikate im sog. Zertifikatsspeicher ab. Um zertifikatsbasierte Sicherheits-APIs nutzen zu können, beispielsweise im Zusammenhang mit SSL, WCF oder CAS, muss man auf Zertifikate aus dem Zertifikatsspeicher zugreifen können. Dominick Baier, Sicherheitsspezialist bei leastprivilege.com zeigt in diesem CodeClip die notwendigen Schritte.
Wie erzeuge ich einen Schlüssel aus einem Passwort?
Es gibt Situationen, in denen Sie kryptografisches Schlüsselmaterial aus einem Passwort erzeugen müssen. Dies ist oft der Fall wenn Endbenutzer involviert sind. Ein populäres Beispiel wäre das Verschlüsseln von Daten mithilfe eines Passworts was Gegenstand dieses CodeClips ist.
Wie erzeuge ich einen zufälligen Schlüssel für symmetrische Kryptografie?
Es gibt diverse Situationen in denen zufällige Werte benötigt werden. Dies ist vor allem der Fall bei kryptografischen Algorithmen (Verschlüsselung, Salts, Nonces). Die Qualität dieser Algorithmen hängt in entscheidendem Maße von der Qualität der erzeugten Zufallszahlen ab.
Wie speichere ich sicher ein Passwort?
Passwörter sind nach wie vor das üblichste Authentifizierungs-Merkmal und werden von vielen Anwendungen genutzt. Dies hat zur Folge, dass Benutzer täglich mit einer Vielzahl von Passwörtern konfrontiert werden. Aus diesem Grund tendieren Benutzer dazu einfache, weil leicht zu merkende und damit häufig schwache Passwörter zu verwenden, bzw. Passwörter in mehreren Anwendungen wiederzuverwenden.
Vor diesem Hintergrund sollten Passwörter niemals im Klartext gespeichert werden, da eine evtl. Kompromitierung der Passwort-Datenbank nicht nur Passwörter dieser Anwendung offenlegt, sondern evtl. auch Passwörter anderer Anwendungen.
Client Entwicklung
Wie kann ich vorübergehend die Identität eines anderen Benutzers annehmen?
Manchmal kann es hilfreich sein, wenn ein Programm temporär in dem Sicherheitskontext eines anderen Benutzers ausgeführt wird. So kann beispielsweise eine Verbindung zu einer Datenbank aufgebaut werden ohne dass Benutzername und Passwort in dem Connection String angegeben werden müssen. Dieser CodeClip zeigt, wie der Sicherheitskontext eines Programms vorübergehend geändert werden kann.
Wie kann ich ein Windows Passwort überprüfen?
Es gibt Situationen in denen man das Passwort eines Windows Accounts manuell überprüfen möchte. Wie die genaue Vorgehensweise ist beleuchtet dieser kurze CodeClip.
Wie kann ich einen Prozess mit einem anderen Benutzerkonto starten?
Jeder Prozess läuft unter einem bestimmten Sicherheits-Kontext. Im Normalfall wird der Sicherheits-Kontext des interaktiv angemeldeten Benutzers auf Kind-Prozesse vererbt. Wie ein Prozess in einem anderen Sicherheits-Kontext gestartet werden kann ist Gegenstand dieses CodeClips?
Wie schreibe ich die Zugriffs-Kontrolllisten einer Datei?
Jedes Windows Objekt, das unter Kernel-Verwaltung steht, besitzt eine sog. Zugriffskontrollliste (ACL). Diese Datenstruktur beschreibt den Besitzer des Objekts, die erlaubten Zugriffe sowie welche Zugriffe protokolliert werden.
In diesen CodeClip zeigt Dominick Baier wie ACLs mit .NET geschrieben werden können.
Wie lese ich die Zugriffs-Kontrolllisten einer Datei?
Jedes Windows Objekt, das unter Kernel-Verwaltung steht, besitzt eine sog. Zugriffskontrollliste (ACL). Diese Datenstruktur beschreibt den Besitzer des Objekts, die erlaubten Zugriffe sowie welche Zugriffe protokolliert werden.
In diesem CodeClip sehen Sie wie Sie ACLs mit .NET auslesen können.
Wie kann ich die Informationen eines Benutzers aus Active Directory lesen?
Das Active Directory ist ein Verzeichnis-Dienst für Intranet-Objekte (Computer, Benutzer etc.). Jedes dieser Objekte speichert diverse Zusatzinformationen. Wie Sie in Ihren Programmen auf Daten aus dem Active Direcrory zugreifen können sehen Sie in diesem CodeClip.
Wie ermittle ich Information über den aktuell angemeldeten Benutzer?
Häufig werden Anwendungen auf den entsprechend angemeldeten Benutzer angepasst. Ist der angemeldete Benutzer beispielsweise Mitglied in der Gruppe der Administratoren werden ihm weitere Bereiche der Anwendung freigeschalten. Dieser CodeClip zeigt, wie Sie den Benutzernamen sowie die Gruppenzugehörigkeit des aktuell angemeldeten Anwenders ermitteln können.