Thread Perl anfällig für DoS bei Webanwendungen die Hashing verwenden?
(13 answers)
Opened by GwenDragon at 2011-12-29 12:10
Es geht um Hash-Tables. Das sind Datenstrukturen, die z.B intern bei Perl vorkommen um Hashes zu implementieren. Auch PHP nutzt sie für ihre Arrays. Wann immer Daten ungeordnet aber strukturiert abgelegt werden sollen, kommen Hash-Tables in irgendeiner Form vor.
Die Idee ist den zu speichernden Wert zu hashen, also für diesen Wert eine eindeutige Nummer zu erzeugen und diese zu benutzen um den Speicherort für den Wert fest zu legen. Da kein Hash-Algorithmus perfekt ist, kann es vorkommen, das zwei Werte den selben Hash erzeugen und damit den selben Speicherort beanspruchen. Um das Problem zu lösen werden Die Werte als verlinkte Liste an diesem Speicherort hinterlegt. Der Angriff hat das Ziel die verlinkte Liste für einen Hashwert immer länger werden zu lassen und immer wieder darauf zuzugreifen. Das abarbeiten der verlinkten Liste dauert immer länger und zieht immer mehr Prozessorleistung an sich. Da das auflösen einer solchen Liste meist ununterbrechbar implementiert ist, kann das Programm auf keine weiteren Aktionen reagieren. Ist die verlinkte Liste also lang genug, kann es das System aus bremsen und das angegriffene Programm zum stehen bringen. Es gibt ein paar Möglichkeiten einem solchen Angriff entgegenzuwirken. Eine ist es für jedes gestartete Programm ein Wert zu generieren, der dem Hash-Algorithmus mitgegeben wird und die erzeugten Ids für diese Instanz einzigartig zu machen. Um das für ältere Perl Versionen (oder PHP etc.) zu simulieren, erzeuge ein Zufallszahl und wende sie mit XOR auf den hash-key an, oder füge ihn vor den Wert, oder hänge ihn an den Wert an. Aber einen solchen Angriff zu führen ist nicht einfach. Dazu muss man sich mit den Interna des anzugreifenden Programms und seinen Libs auskennen. Nur selten werden die einkommenden Daten unverändert in einem Hash-Table hinterlegt, auch wird nicht immer der selbe Hash-Algorithmus verwendet. Wenn man die Struktur kennt muss man Daten generieren, die eine Kollision im Hash-Table auslösen. So was lohnt sich nur wenn genügend Ziele vorhanden sind. Last edited: 2011-12-30 12:27:50 +0100 (CET) |