Wie man einen Hacker verlangsamt


17

Ein Skriptkind in Delhi, Indien, versucht seit letzter Nacht, unsere Site zu hacken. Er hat ein Browser-Skript geschrieben, das Anfragen an unseren Server in massiven verschachtelten Schleifen sendet und alles unter der Sonne versucht.

Er kommt nicht weiter und überwindet nicht einmal unsere Grundverteidigungen (aber er füllt unsere Protokolldateien).

Wir senden ein 403 Unauthorizedan seine Anfragen zurück, fast sobald sie eingehen, aber je schneller wir seine Anfragen blockieren, desto schneller wird sein Skript ausgeführt.

Wir möchten eine Art "Verzögerung" einführen, bevor wir die Antwort 403 zurücksenden. Je länger, desto besser.

Frage: Wie können wir Hackversuche verzögern, ohne den Rest der Site zu beeinträchtigen?

  • Ich gehe davon aus, dass ein Sleep (15000) in seinem Thread eine schlechte Nachricht für andere Site-Besucher wäre.
  • Einen neuen Faden nur für ihn aufzuspinnen, scheint übertrieben.
  • Gibt es eine andere Möglichkeit, eine verzögerte Antwort zu senden?
  • Wie lange können wir seinen Browser zum Warten zwingen? Ich nehme an, es ist mir egal, ob er den 403 UnauthorizedFehler bekommt oder irgendwann mal ausfällt, also könnten wir wahrscheinlich sogar eine unbestimmte / unendliche Wartezeit machen.

36
Gibt es einen Grund, warum Sie Ihre Firewall nicht so konfigurieren können, dass der Datenverkehr von seiner IP-Adresse getrennt wird? Dieses Problem wäre auf Netzwerkebene besser zu lösen als auf Anwendungsebene. Wenn der Datenverkehr abfällt, muss er dort sitzen, bis die Zeit für die Verbindungsanforderung abgelaufen ist. Und überhaupt nicht zu antworten, ist viel effektiver, als "nicht autorisierte" Antworten zurückzuwerfen, da er praktisch keine Informationen zur Kontrolle hat.
cdhowie

3
Warum nicht einfach seine IP blockieren?
Hogan

2
Trennen Sie Ihren Server.
Sayed Ibrahim Hashimi

Sehen Sie sich meine Antwort an - dies ist eine Standard-Sache. Ich bin überrascht, dass Sie keine Antwort erhalten haben, die auf ein früheres Intrusion Detection-System hinweist.
Unreason

@Saged, das Entfernen des Servers ist eines der schlimmsten Dinge, die Sie tun können. Siehe auch security.stackexchange.com/q/181/33
AviD

Antworten:


37

Vor Ihrem Webserver sollte sich eine separate Firewall befinden. Sie möchten verhindern, dass die Anfragen dort jemals Ihren Server erreichen, so dass Ihr Server in Bezug auf seine IP nicht mehr existiert.


1
Hallo Joel, dies ist die "akzeptierte" Antwort, aber da die Frage von StackOverflow übertragen wurde, habe ich anscheinend nicht die Berechtigung, sie tatsächlich zu akzeptieren. Ich habe deine Antwort +1 gegeben. Genau das werde ich tun.
Flipster

2
Klicken Sie auf Ihren Namen und dann auf den Link "Konten" auf der rechten Seite. Auf diese Weise können Sie dies wieder Ihrem Stapelüberlaufkonto zuordnen und das Eigentumsrecht an der Frage zurückerlangen.
Joel Coel

1
Sie möchten dies aber auch automatisch tun - es macht keinen Sinn, sich von Fall zu Fall mit solchen Problemen zu befassen. (siehe meine Antwort)
Unreason

5

Es gibt große und kleine Intrusion Detection-Systeme, die dies abhängig von den verschiedenen Filtern, Honeypots und anderen Mechanismen automatisch für Sie erledigen

Siehe zum Beispiel fail2ban, das so konfiguriert werden kann, dass Aktionen basierend auf der Analyse von Protokollen ausgeführt werden.

Auf diese Weise können Sie

  • Filtern Sie auf einfache Weise einzelne IP-Adressen, von denen ein Angriff ausgeht, ohne andere Benutzer Ihrer Website zu beeinflussen
  • Sie können Ihren eigenen regulären Ausdruck schreiben, um Protokolle zu analysieren
  • Sie können Ihre eigenen Aktionen definieren (Gas geben statt verbieten usw.)

Es gibt andere und größere Werkzeuge, siehe auch Abschnitt auf Wikipedia.

Da Ihre Frage als asp.net markiert ist, gehe ich davon aus, dass Ihre Serverplattform Windows ist. Wenn die Verwendung einer Linux-Firewall eine Option ist, können Sie dies dennoch versuchen

  • Setzen Sie eine Linux-Firewall zwischen WAN und Ihrem Server
  • Geben Sie dem Firewall-Computer Zugriff auf Ihre IIS-Protokolle
  • Schreibe Regex, um es zu analysieren
  • Stecken Sie es in vorhandene Vorlagen zum Bannen

Eine solche Firewall kann auf äußerst bescheidener Hardware ausgeführt werden - denken Sie auch an Linksys-Router (siehe hier ) für sehr anständige Verbindungsbandbreiten.


4

Wenn sie von einer bestimmten IP-Adresse oder einem bestimmten Adressblock stammen, möchten Sie möglicherweise eine Blackhole-Route hinzufügen:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

Sie können dies auch erreichen, indem Sie eine iptables-Regel verwenden. Beachten Sie jedoch, dass iptables-Regeln linear durchlaufen werden. Wenn Sie also iptables-Regeln für jeden Missetäter hinzufügen, der hinzukommt, können Sie anfangen, viel CPU zu verbrauchen. Routing-Tabellen sind für die Verarbeitung vieler, vieler Einträge optimiert. Zum Beispiel hat eine meiner Boxen 350K-Einträge in ihrer Routing-Tabelle ohne Probleme. Aber wenn ich 3K-Iptables-Regeln hätte, würde die Box mit ziemlicher Sicherheit umfallen.

Wenn Sie versuchen, etwas zu tun, bei dem Ihre Anwendung für viele Sekunden auf diesen Verbindungen ruht, binden Sie möglicherweise genügend Ressourcen, sodass legitime Anforderungen keine Ressourcen abrufen können.


1
+1. Ich mochte Ihre Informationen über die relative Effizienz von Routing vs Netfilter in dieser Situation. iptablesAuf einem Kernel mit ipsetFähigkeiten können sehr effizient große Listen von IP-Adressen gefunden werden, aber es scheint, dass keine der wichtigsten Distributionen ipsetin ihrem Kernel aktiviert ist .
Steven Montag

Gut, ipset ist etwas, das für diese Art von Dingen nützlich zu sein scheint, aber einfach nicht ohne weiteres verfügbar ist. Es gibt ein anderes System namens nf-hipac, das ein allgemeineres Optimierungsprogramm für iptables war, aber der letzte Beitrag auf der Mailingliste und der letzten Veröffentlichung stammt aus dem Jahr 2005.
Sean Reifschneider,

3

Sie möchten ihn nicht verlangsamen, da durch eine falsche Verlangsamung Ihre Website so heruntergefahren wird, als wäre sie einem DoS-Angriff ausgesetzt, da Ihre Threads damit beschäftigt sind, die Anforderungen dieser Person zu bearbeiten. Was Sie tun möchten, ist, seine IP zu blockieren und damit fertig zu sein. Es gibt keinen Grund, die Person zu ködern, die es tut.


2

Was Sie suchen, ist Apache-Modul mod_evaisve.

Installieren Sie es auf Debian-basierten Distributionen mit

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

mod_evasive verfolgt die Anforderungen, die an Apache gesendet werden, und verbietet IP mithilfe von iptables, die den Schwellenwert überschreiten. Es ist ein ultimatives Tool gegen HTTP-basierte DoS-Angriffe und sogar verteilte DoS-Angriffe, wenn Sie von einem riesigen Botnetz mit Tausenden verschiedener IP-Adressen angegriffen werden.

Es wird als Apache-Modul ausgeführt, das zur Laufzeit geladen wird, und nicht als separater Dämon.

Ein intelligenter Angreifer mit Kontrolle über ein riesiges Botnetz kann Ihren Webserver dennoch zum Erliegen bringen, indem er die von den einzelnen Zombies im Botnetz gesendeten Anforderungen so zeitlich festlegt, dass keine der IP-Adressen jemals den Schwellenwert überschreitet.

In diesem Fall müssen Sie anomaliebasiertes IDS verwenden und das System wahrscheinlich selbst trainieren. Dies ist jedoch höchst unwahrscheinlich, es sei denn, Sie haben einige wirklich große Feinde oder jemanden mit einer Unternehmensagenda.


0

Wenn Sie Linux verwenden, beschränken Sie den Typ mit iptables auf 1 Byte / s mit großen Verzögerungen und lassen Sie ihn ewig brauchen , um auch nur eine Anfrage durchzubringen. Wenn es verteilt ist, hilft das nicht viel.

Ich bin mir nicht sicher, wie Sie es unter Windows machen würden, aber Sie finden möglicherweise einige ähnliche Optionen in Ihrem Router oder Ihrer Hardware-Firewall, falls Sie eine haben.

EDIT: In Übereinstimmung mit dem oben Gesagten handelt es sich eher um eine Serverfehlerfrage.


2
Diese Technik wird manchmal bei DDoS-Angriffen verwendet - vom Angreifer. Dies auf dem Server zu tun ist kontraproduktiv. <_ <
p-static

Es ist nicht richtig zu sagen, dass es bei DDoS-Angriffen verwendet wird - diese Art von Effekt ist das Ziel von DDoS-Angriffen. Dies auf dem Server / der Firewall zu tun, aber nur um Computer anzugreifen, ist die einzig wahre Verteidigung (AFAIK).
Unreason

0

Wenn die IP-Adresse des Typen ziemlich konstant ist, können Sie ein benutzerdefiniertes HttpModule erstellen. Schließen Sie es über eine Änderung in der Datei web.config an und warten Sie, bis es als diese IP-Adresse erkannt wird. Oder Sie können ihm einige 404-Codes zurückschicken oder ihn an einen anderen Ort umleiten lassen.


0

Sie wissen, dass sie in Indien sind. Verfügt Ihre Site über bedeutende indische Benutzer, die es nicht einfach ausschließen würden, ihren gesamten IP-Bereich auf Firewall-Ebene schrittweise zu blockieren, bis der Datenfluss stoppt? Es ist sicherlich keine feste Lösung, aber wenn Sie es nur mit einem typischen "Drehbuchkind" zu tun haben, sollte es ausreichen, sie zu entmutigen und an ein anderes Ziel zu senden.

Noch besser, wenn es von einer IP stammt, können Sie mit Ihrem eigenen Denial-of-Service-Angriff antworten :)


das ist nicht wirklich eine Lösung, Gelee mit einer Axt zu schneiden. Und B, DDOS ist keine wirklich gute Empfehlung (obwohl ich vermute, dass Sie Spaß gemacht haben), kein Grund, a) etwas zu tun, illagel b) mehr Last auf Ihren Server zu setzen!
Trufa

0

Zusätzlich zu der Antwort, die Sie erhalten haben, möchten Sie Ihre Dokumentation (Protokolle, Traces) speichern und an Ihren Diensteanbieter weiterleiten. Dies ist während des Vorfalls am effektivsten, da Ihr Provider den Vorfall miterleben kann. Auch wenn Sie Ihre Maßnahmen erfolgreich durchführen, ist es wichtig, weitere Versuche einzuschränken, und es hilft Ihrem Provider, eine Anfrage an den Dienstanbieter des Angreifers weiterzuleiten. Die wohl effizienteste Maßnahme besteht darin, dass der Anbieter des Angreifers seinem Kunden, dem identifizierten Angreifer, den Dienst verweigert.


0

Wenn Sie ein Programmierer sind, können Sie mit dem .net Begin_Request-Ereignis arbeiten und dort Ihren "Schlaf" eintragen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.