Skip to main content

Kann Snyk schwache kryptografische Algorithmen finden? Adieu, MD5

Artikel von
blog feature snyk code green

25. Februar 2025

0 Min. Lesezeit

Der Einsatz starker Kryptografie ist für den Datenschutz und die Anwendungssicherheit unerlässlich, etwa beim Hashen von Passwörtern (was technisch gesehen keine klassische Kryptografie zur Verschlüsselung ist). In manchen älteren Codebeständen kommen jedoch möglicherweise noch immer schwache und veraltete kryptografische Algorithmen in der Produktion zum Einsatz, die bislang unentdeckt blieben. Wie kann Snyk Code Ihnen dabei helfen, diese anfälligen Anwendungen zu finden?

Die Gefahren schwacher kryptografischer Algorithmen

Schwache und veraltete Algorithmen für Verschlüsselung oder Hashing bergen erhebliche Sicherheitsrisiken und können vertrauliche Informationen für Angreifer offenlegen. Wer sich auf unzureichende Implementierungen verlässt, wiegt sich in falscher Sicherheit und setzt Systeme damit Risiken aus. Es ist unerlässlich, die Grenzen älterer Algorithmen zu kennen und moderne, sichere kryptografische Verfahren einzusetzen.

Mehrere kryptografische Algorithmen gelten inzwischen als unsicher und sollten vermieden werden. MD5 ist beispielsweise kryptografisch gebrochen und für Sicherheitsanwendungen ungeeignet – insbesondere zum Hashen von Passwörtern. Da sich Kollisionen leicht finden lassen, können unterschiedliche Eingaben denselben Hashwert erzeugen. So können Angreifer das ursprüngliche Passwort herausfinden oder ein gefälschtes Passwort erstellen, das zum gespeicherten Hash passt. Weitere Beispiele für schwache Algorithmen sind DES und RC4. Beide weisen bekannte Schwachstellen auf und sollten nicht mehr verwendet werden.

Schwacher MD5-Algorithmus in Java

Sehen Sie sich die folgende Java-Anwendung an, die MD5 zum Hashen von Benutzerpasswörtern verwendet:

    @PostMapping("/login")
    public String loginUser(@RequestParam String username, @RequestParam String password) {
        String hashedPassword = userDatabase.get(username);
        if (hashedPassword != null && hashedPassword.equals(hashPassword(password))) {
            return "Login successful";
        }
        return "Invalid username or password";
    }

    private String hashPassword(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
            byte[] digest = md.digest();
            return DatatypeConverter.printHexBinary(digest).toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            return "Error: Hashing algorithm not found";
        }
    }

Hinweis: Den vollständigen Quellcode auf GitHub finden Sie hier.

Wahrscheinlich wissen Sie, dass MD5 nicht zum Hashen von Passwörtern verwendet werden sollte. Doch was passiert, wenn Sie zahlreiche Anwendungen warten müssen und in einer Vielzahl von Code-Repositories Hunderttausende Codezeilen schnell durchsuchen sollen?

Wenn Sie Snyk mit Ihren Code-Repositories verbinden oder anderweitig integrieren, kann Snyk schnell und unkompliziert nach anfälligem Code suchen – ganz gleich, ob dieser in einer älteren Anwendung schlummert oder durch GenAI und andere KI-Code-Assistenten fehlerhaft generiert wurde.

Snyk findet den schwachen MD5-Algorithmus und zeigt den Source-to-Sink-Aufrufpfad in Ihrem Code:

Snyk Code erkennt einen schwachen MD5-Algorithmus in Java-Code.

Wie beheben wir den schwachen MD5-Algorithmus in Java?

Snyk ergänzt die Sicherheitsergebnisse um weitere Informationen. Neben der Erkennung anfälligen Codes bietet Snyk auch eine Analyse zur Behebung. Das folgende Beispiel zeigt, wie die MessageDigest-API in einem Open-Source-Projekt (hier: owasp security logging) korrigiert und der veraltete Hashing-Algorithmus SHA-1 durch die aktuellere Variante SHA-256 ersetzt wurde:

Screenshot einer beispielhaften Snyk-Code-Fix-Analyse. Snyk Code liefert Details, Best Practices zur Prävention und Beispiele für Korrekturen.

Snyk stellt außerdem Best Practices für den Einsatz starker Algorithmen beim Hashing und in der Kryptografie bereit und erläutert die Risiken, die entstehen, wenn vertrauliche Informationen im Klartext gespeichert werden.

Sicherheitsempfehlungen und Best Practices für Algorithmen

Wählen Sie für Ihre Aufgabe den passenden Algorithmus. Wenn Sie Passwörter hashen, sollten Sie einen sicheren kryptografischen Algorithmus wählen, der vor Brute-Force-Angriffen schützt und sich hinsichtlich der Leistung für den Einsatz in realen Anwendungen eignet. Zu den etablierten Branchenstandards zählen seit Jahrzehnten Bcrypt sowie PBKDF2 und das besonders verbreitete Argon2.

Beachten Sie die Best Practices für Kryptografie, etwa die Ressourcen von OWASP.

Starten Sie jetzt mit Snyk (kostenlos!) und sammeln Sie Sicherheitspunkte, indem Sie anfälligen Code, veraltete Abhängigkeiten, schwache Kryptografie und weitere Sicherheitsprobleme finden und erkennen.

Kostenloses Online-Tool zur Codeprüfung

Sichern Sie Ihren Code, bevor Sie Ihren nächsten Commit erstellen.

Gepostet in: