- 1 Abschnitt
- 11 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
alles ausklappenalles einklappen
- Software & Security12
- 1.1Einführung in die Software-Sicherheit
- 1.2Sicherheitsarchitekturen und -modelle
- 1.3Sichere Softwareentwicklung (Secure Software Development Lifecycle – SSDLC)
- 1.4Bedrohungsanalyse und Risikomanagement
- 1.5Sichere Programmierung
- 1.6Authentifizierung und Autorisierung
- 1.7Kryptographie
- 1.8Sicherheitsprüfungen und -tests
- 1.9Datenschutz und Compliance
- 1.10Software & Security9 Fragen
- 1.11Aufgaben
- 1.12Lösungen
Authentifizierung und Autorisierung
Authentifizierung und Autorisierung sind zwei wesentliche Sicherheitsmechanismen in der Softwareentwicklung. Authentifizierung ist der Prozess der Überprüfung der Identität eines Benutzers oder Systems, während Autorisierung bestimmt, welche Ressourcen und Aktionen einem authentifizierten Benutzer oder System gestattet sind.
Authentifizierung
1. Authentifizierungsmethoden:
- Passwort-basierte Authentifizierung:
- Benutzername und Passwort werden zur Verifizierung der Identität verwendet.
- Best Practices: Verwendung starker Passwörter, regelmäßige Passwortänderungen, Hashing und Salting von Passwörtern.
Beispiel:
import hashlib
import os
def hash_password(password):
# Erzeuge einen zufälligen Salt
salt = os.urandom(16)
# Erzeuge den Hash des Passworts unter Verwendung des Salts
hashed_password = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
return salt + hashed_password
def verify_password(stored_password, provided_password):
# Extrahiere den Salt und den Hash aus dem gespeicherten Passwort
salt = stored_password[:16]
stored_hash = stored_password[16:]
# Erzeuge den Hash des bereitgestellten Passworts unter Verwendung des Salts
new_hash = hashlib.pbkdf2_hmac('sha256', provided_password.encode(), salt, 100000)
return new_hash == stored_hash
# Beispiel für die Verwendung
hashed = hash_password("mein_sicheres_passwort")
print(verify_password(hashed, "mein_sicheres_passwort")) # Ausgabe: True
print(verify_password(hashed, "falsches_passwort")) # Ausgabe: False
- Multi-Faktor-Authentifizierung (MFA):
- Kombination von zwei oder mehr Authentifizierungsfaktoren (z.B. Passwort + SMS-Token).
- Best Practices: Implementierung von mindestens zwei Faktoren (z.B. Wissen, Besitz, Inhärenz).
Beispiel (Pseudo-Code):
authenticate_user(username, password, token):
if verify_password(username, password) and verify_token(token):
return True
return False
- Biometrische Authentifizierung:
- Verwendet biometrische Merkmale wie Fingerabdrücke, Gesichtserkennung oder Iris-Scans.
- Best Practices: Regelmäßige Aktualisierung und Überprüfung der biometrischen Daten, Datenschutzmaßnahmen.
Veranschaulichung:
+---------------------+--------------------------+
| Authentifizierungs- | Beschreibung |
| methode | |
+---------------------+--------------------------+
| Passwort | Benutzername und Passwort|
| MFA | Passwort + SMS-Token |
| Biometrisch | Fingerabdruck, Gesicht |
+---------------------+--------------------------+
Autorisierung
1. Autorisierungskonzepte:
- Role-Based Access Control (RBAC):
- Benutzer werden Rollen zugewiesen, und Rollen haben bestimmte Berechtigungen.
- Vorteile: Einfache Verwaltung, klare Trennung der Zugriffsrechte.
Beispiel (Pseudo-Code):
authorize_user(user, action):
roles = get_user_roles(user)
permissions = get_permissions_for_action(action)
if roles intersect permissions:
return True
return False
- Access Control Lists (ACLs):
- Definieren, welche Benutzer oder Gruppen auf bestimmte Ressourcen zugreifen dürfen.
- Vorteile: Granulare Kontrolle über Zugriffsrechte.
Beispiel:
class ACL:
def __init__(self):
self.acl = {}
def add_permission(self, user, resource, permission):
if resource not in self.acl:
self.acl[resource] = {}
self.acl[resource][user] = permission
def check_permission(self, user, resource, permission):
if resource in self.acl and user in self.acl[resource]:
return self.acl[resource][user] == permission
return False
# Beispiel für die Verwendung
acl = ACL()
acl.add_permission("user1", "file1", "read")
print(acl.check_permission("user1", "file1", "read")) # Ausgabe: True
print(acl.check_permission("user1", "file1", "write")) # Ausgabe: False
- Attribute-Based Access Control (ABAC):
- Berechtigungen basieren auf Attributen des Benutzers, der Ressource und des Kontextes.
- Vorteile: Flexible und kontextsensitive Zugriffskontrolle.
Veranschaulichung:
+-------------------+---------------------------------+
| Zugriffskontroll- | Beschreibung |
| modell | |
+-------------------+---------------------------------+
| RBAC | Rollenbasiert, einfache Verwaltung|
| ACL | Zugriffskontrolllisten, granular |
| ABAC | Attributbasiert, flexibel |
+-------------------+---------------------------------+
Best Practices für Authentifizierung und Autorisierung
1. Prinzip der geringsten Privilegien:
- Benutzer und Systeme erhalten nur die minimal notwendigen Rechte.
- Beispiel: Ein Benutzerkonto erhält nur Lesezugriff auf bestimmte Daten, anstatt vollständige Lese- und Schreibrechte.
2. Starke Passwortrichtlinien:
- Verwendung von starken, komplexen Passwörtern und regelmäßige Passwortänderungen.
- Beispiel: Passwortanforderungen umfassen mindestens 12 Zeichen, Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen.
3. Verwendung von verschlüsselten Verbindungen:
- Einsatz von TLS/SSL für sichere Datenübertragungen.
- Beispiel: Alle Verbindungen zu den Authentifizierungsservern verwenden HTTPS.
4. Überwachung und Protokollierung:
- Kontinuierliche Überwachung von Anmeldeversuchen und Zugriffen sowie Protokollierung verdächtiger Aktivitäten.
- Beispiel: Protokollierung aller fehlgeschlagenen Anmeldeversuche und Benachrichtigung bei ungewöhnlich hoher Fehlerrate.
