Network Overflow Detection



  • Mein Titel klingt vielleicht etwas merkwürdig, wenn ich jetzt erkläre worum es geht, aber ich muss das halt trotzdem mal fragen. Da ich zwar einen vagen Plan habe wie ich mich schütze, aber mir das auch nicht so effektiv erscheint. Hab ihn dem Bereich leider keine Vorkenntnisse.

    Folgendes... ich habe eine Serveranwendung die sich mit einer MySql Datenbank verbindet. Der entsprechende Client kann über die Konsole einen Befehl senden um sich auf dem Server zu registrieren. Die Daten werden dann in der Datenbank abgelegt.

    Mit Sicherheit gibt es aber Kobolde, die es sicher lustig finden, wenn sie ein Skript in eine Dauerschleife packen und nur Registrierungen an den Server senden. Das würde heißen, dass in kürzester Zeit meine Datenbank voll gemüllt wird. Nun möchte ich mich davor schützen. Im Internet funktioniert es ja schonmal ganz gut, dass man eine gültige Email angibt und einen Registrierungslink sendet.

    Ich möchte aber zu dem User keine Informationen auf dem Server speichern. Ein Username und ein Passwort sollen genügen.

    Jetzt habe ich mir gedacht, ich könnte bei der ersten Registrierung, einfach die IP Adresse in der Datenbank speichern und von diesem Client keine weiteren erlauben. Zumindest für 24h oder länger.

    Hat da vielleicht jemand anderes irgendwelche Ansätze was ich tun kann? Gerne auch Links wo ich das nachlesen kann.



  • Bennisen schrieb:

    Jetzt habe ich mir gedacht, ich könnte bei der ersten Registrierung, einfach die IP Adresse in der Datenbank speichern und von diesem Client keine weiteren erlauben. Zumindest für 24h oder länger.

    Schlecht, denn über die selbe IP können viele verschiedene potentielle User daherkommen.

    Bennisen schrieb:

    Hat da vielleicht jemand anderes irgendwelche Ansätze was ich tun kann? Gerne auch Links wo ich das nachlesen kann.

    Die einfachste Variante wäre das erstmal zu vertagen. Erstmal was machen was interessant genug ist angegriffen zu werden. Keine Probleme lösen die man nicht hat und u.U. auch nie haben wird. (Ausgenommen natürlich das Auftreten des Problems wäre sofort fatal. Also z.B. Totalausfall einer HDD mit wichtigen Daten drauf wenn man kein Backup hat. Das ist dann eine Problemkategorie wo andere Regeln gelten - wo es durchaus Sinn macht Probleme zu lösen die man noch nicht hat.)

    Ansonsten gibt es schon viele Möglichkeiten. Was Sinn macht hängt aber stark davon ab wie gut der Schutz sein soll/muss und was man dem User zumuten kann.
    Eine Standard-Möglichkeit wäre ein Captcha zu verwenden.
    Dummerweise gibt es für die meisten schon Programme die sie lösen können. Aber egal welches du verwendest, du erhöhst damit auf jeden Fall den Aufwand den man treiben müsste um deinen Server zuzuspammen. Was u.U. schon reichen kann.

    Eine andere Möglichkeit wäre vom User zu verlangen einen bestimmten "Betrag" an Rechenleistung zu erbringen. Beispielsweise kannst du dem User nen Block an Zufallsdaten schicken, und verlangen dass er dir nen 2. Block Zufallsdaten zurückschickt, so dass wenn man beide zusammen hasht, die letzten N Bit des Hashcode 0 sind. Ist aber natürlich nur praktikabel wenn du ne Client-Anwendung hast die das übernimmt, die der User sowieso bereit ist zu installieren. (Bzw. im Browser müsste es auch gehen, JavaScript ist bei solchen Sachen überraschend schnell. Dummerweise "bestrafst" du damit dann User die nen Browser mit ner langsameren JavaScript-Engine verwenden.)



  • hustbaer schrieb:

    Eine andere Möglichkeit wäre vom User zu verlangen einen bestimmten "Betrag" an Rechenleistung zu erbringen. Beispielsweise kannst du dem User nen Block an Zufallsdaten schicken, und verlangen dass er dir nen 2. Block Zufallsdaten zurückschickt, so dass wenn man beide zusammen hasht, die letzten N Bit des Hashcode 0 sind. Ist aber natürlich nur praktikabel wenn du ne Client-Anwendung hast die das übernimmt, die der User sowieso bereit ist zu installieren.

    Kannst du das näher erläutern? Ich verstehe das nicht so ganz. Ist das ein bekanntes Verfahren? Kann ich da irgendwo was drüber nachlesen?



  • Ja, ist ein bekanntes Verfahren, nennt sich "Proof of Work".

    https://en.wikipedia.org/wiki/Proof-of-work_system



  • hustbaer schrieb:

    Die einfachste Variante wäre das erstmal zu vertagen. Erstmal was machen was interessant genug ist angegriffen zu werden. Keine Probleme lösen die man nicht hat und u.U. auch nie haben wird. (Ausgenommen natürlich das Auftreten des Problems wäre sofort fatal. Also z.B. Totalausfall einer HDD mit wichtigen Daten drauf wenn man kein Backup hat. Das ist dann eine Problemkategorie wo andere Regeln gelten - wo es durchaus Sinn macht Probleme zu lösen die man noch nicht hat.)

    Wobei man darauf achten sollte, dass sich entsprechende Schutzmaßnahmen nachträglich überhaupt noch ordentlich implementieren lassen.
    Wenn es nicht zu kompliziert ist, würde ich es besser von Anfang an einbauen.

    Warum nicht ein Request/etc.-Limit per IP? zb. max. 2 Registrierungen pro Minute / 5 in 10 Minuten etc. Da wird's dem Angreifer sicher schnell zu blöd.
    Ansonsten kann man ja auch regelmäßig (völlig) "inaktive" Accounts löschen.



  • Das hört sich gut an. Sowas könnte man doch eigentlich leicht umsetzen. Vielleicht kombiniere ich auch verschiedene Sachen.

    Danke schonmal


Log in to reply