Thilo Fester: Brute Force attacken auf Webserver erkennen und ver-/ behindern

Huhu allerseits!

Der Thementitel sagt es bereits. Ich suche nach verschiedenen Möglichkeiten.
Sehr zufriedenstellend wäre ich über einen Konfigurationstipp für den Apache oder etwas ähnlich Elementares.

Konkret geht es darum zu verhindern, dass jemand Passworte ausspäht. Bisher verhindere ich das, indem ich in meiner Skriptsprache einer IP den Zugriff auf ein sensibles Skript nur protokolliert, im Verdachtsfall mit einer Info an mich, und nur in einem Interval ermögliche, der eine Brute-Force-Attacke derart ausdehen würde, dass ich "frühzeitig" dagegen vorgehen kann.

Das löst aber nicht wirklich mein Problem. Ich möchte den Störenfried zeitnah loswerden. So eine Attacke müllt meine Logs zu. Das kostet Performance und Platz.

Hat sich damit schon jemand detaillierter befasst? Ich freue mich über jeden kleinen Tipp!

Beste Grüße
  ~ Thilo

  1. Hallo,

    Konkret geht es darum zu verhindern, dass jemand Passworte ausspäht. Bisher verhindere ich das, indem ich in meiner Skriptsprache einer IP den Zugriff auf ein sensibles Skript nur protokolliert, im Verdachtsfall mit einer Info an mich, und nur in einem Interval ermögliche, der eine Brute-Force-Attacke derart ausdehen würde, dass ich "frühzeitig" dagegen vorgehen kann.

    Und was machst Du, wenn der Angreifer bei jedem Angriff eine andere IP-Adresse verwendet?

    Viele Grüße,
    Horst Haselhuhn

    1. Und was machst Du, wenn der Angreifer bei jedem Angriff eine andere IP-Adresse verwendet?

      Da stehen trotz Proxies aber auch nicht unendlich viele zur Verfügung...

      Tipp: Meist hat der Angreifer immer den gleichen User Agent :-)

      1. Und was machst Du, wenn der Angreifer bei jedem Angriff eine andere IP-Adresse verwendet?

        Da stehen trotz Proxies aber auch nicht unendlich viele zur Verfügung...

        Tipp: Meist hat der Angreifer immer den gleichen User Agent :-)

        Achso, dann hilft vielleicht eine User-Agent-Sperre? Oder doch eine

        IP-Sperre?

        Hotte

        1. Hey Hotte!

          Wie realisierst Du so eine IP-Sperre?
          Würde das gerne abseits von PHP und dergleichen tun. Schön wäre, wenn ein Rechner mit einer bestimmten IP gar nicht erst meinen Apache mit einer Anfrage nerven darf.

      2. Tipp: Meist hat der Angreifer immer den gleichen User Agent :-)

        Das kann ich in der Tat als Indiz verwenden.
        Aber es gibt verdammt viele einfache User, die alle den gleichen User Agent haben.

        Außerdem ist so ein User Agent leicht modifizierbar. Ich glaube, es ist wesentlich wahrscheinlicher, dass eine Attacke mit Tausenden verschiedenen User Agents auftritt als mit verschiedenen IPs.

        ~ Thilo

      3. hi,

        Und was machst Du, wenn der Angreifer bei jedem Angriff eine andere IP-Adresse verwendet?

        Da stehen trotz Proxies aber auch nicht unendlich viele zur Verfügung...

        Tipp: Meist hat der Angreifer immer den gleichen User Agent :-)

        Bruteforce wechselt seine IPs(proxys) und Useragents ständig, das kannste erstmal vergessen
        Damit hab ich mich schon vor jahren beschäftigt...meine lösung war
        ein perl script wo der nutzer seine user passwort daten eingeben musste ehe er den richtigen link zum memberbereich der dann htaccess geschützt war erfuhr,wo er nochmal seine daten eingeben musste.
        Da bruteforce eigentlich nur mit htaccess geschützten bereich was anfangen kann, ist eine attacke nicht unbedingt möglich via perl login script...aber selbst da hab ich was eingebaut und zwar ist es zeitabhängig, wenn jemand zweimal innerhalb einer bestimmten zeit falsche daten eingibt, dann wird seine IP via htaccess gesperrt und ich bekomme eine email...wenn das formular zum script unvollständig ausgefüllt ist, reagiert das script überhaupt nicht...es sind aber noch andere dinge eingebaut.Wichtig ist das die berechtigten nutzer sich trotzdem einloggen können.
        Heute hab so gut wie keine emails von solchen attacken mehr und der log ist sauber.
        MfG

    2. Und was machst Du, wenn der Angreifer bei jedem Angriff eine andere IP-Adresse verwendet?

      Ich hatte das Glück noch nicht. ^^

  2. Wie wäre es einfach mit einer IP-Sperre? Und bei 100 falschen Versuchen die IP gleich mit automatisch in die .htaccess reinschreiben lassen via PHP?

    Ich denke mal es geht um ein Login-Script...

    1. Wie wäre es einfach mit einer IP-Sperre? Und bei 100 falschen Versuchen die IP gleich mit automatisch in die .htaccess reinschreiben lassen via PHP?

      Ich denke mal es geht um ein Login-Script...

      Ja richtig. Ich habe jetzt gelesen, dass ab einer gewissen Anzahl von IPs der Server ziemlich belastet wird. Aber mal schaun, vielleicht lässt sich das nach einer Woche ja einfach säubern.

      Problematisch ist eben immernoch, dass so ein Vorfall geloggt wird. Das kann ich gar nicht brauchen.

      Gibt es denn irgendeine Möglichkeit eingehende Verbindungen an den Rechner derart zu blocken, dass für den Angreifer der Rechner quasi aussieht, als wäre er gar nicht mehr am Netz?

      1. Hi Thilo,

        Gibt es denn irgendeine Möglichkeit eingehende Verbindungen an den Rechner derart zu blocken, dass für den Angreifer der Rechner quasi aussieht, als wäre er gar nicht mehr am Netz?

        Wenn du einen Root-Server oder entsprechende Berechtigungen hast, ja. Dann kannst du nämlich die Firewall des Servers so konfigurieren, dass Packete der entsprechenden IP direkt verworfen werden.

        Für die Firewall Iptables von Linux sollte sich das mit folgendem Komando machen lassen (ohne Gewähr):

        iptables -t filter -A INPUT -s 123.456.789.1 -j DROP

        Das bewirkt, dass in der INPUT-Kette der Tabelle filter eine Regel eingefügt wird, welche besagt, dass alle von der IP 123.456.789.1 kommenden Packete verworfen und somit nicht weiter beachtet werden. Die Daten kommen somit gar nicht erst bei einem Apache Webserver o.ä. an.

        Inwiefern dieses Verfahren in der Praxis Bestand haben mag, weiß ich nicht. Ich gehe davon aus, dass du damit nicht allzu weit kommst, da die meisten Angreifer wohl mit wechselnder IP kommen werden. Für einen einzelnen User mit statischer IP mag obiges aber doch sehr wirksam sein ;-)

        Viele Grüße,
          ~ Dennis.

        1. Hey Dennis!

          Für die Firewall Iptables von Linux sollte sich das mit folgendem Komando machen lassen (ohne Gewähr):

          iptables -t filter -A INPUT -s 123.456.789.1 -j DROP

          Das bewirkt, dass in der INPUT-Kette der Tabelle filter eine Regel eingefügt wird, welche besagt, dass alle von der IP 123.456.789.1 kommenden Packete verworfen und somit nicht weiter beachtet werden. Die Daten kommen somit gar nicht erst bei einem Apache Webserver o.ä. an.

          Ich denke das ist es, wonach ich suche! Vielen Dank! : )

          Inwiefern dieses Verfahren in der Praxis Bestand haben mag, weiß ich nicht. Ich gehe davon aus, dass du damit nicht allzu weit kommst, da die meisten Angreifer wohl mit wechselnder IP kommen werden. Für einen einzelnen User mit statischer IP mag obiges aber doch sehr wirksam sein ;-)

          Naja, ich sehe das mal so. Ich gebe jeder IP 30 Versuche. 1000 IP-Adressen geben dem Angreifer 30.000 Versuche.
          Die zu suchenden Logins bestehen aus Pseudonymen und Kennworten aus allerlei Zeichen ( dürften bald an die 100 sein) und ich prüfe jedes Passwort auf seine Stärke, sodass 30.000 Versuche bei einer Mindestkennwortlänge von 8 Zeichen nicht viel sind.

          Mir ist wichtig, dass mir die Webserverlogs nicht mit lautet "Access denied"-Einträgen überschwemmt werden, daher ist Deine Lösung mit der Firewall echt optimal. Falls dabei Logs angelegt werden, kann ich die ohne weiteres auch mal eben abstellen, weil die für mich jetzt weiter kein Gewicht haben.

          Nochmal vielen Dank und beste Grüße
            ~ Thilo