Ich habe einen Server mit Apache und ich habe vor kurzem mod_security2 installiert, weil ich von diesem oft angegriffen werde:
Meine Apache-Version ist Apache v2.2.3 und ich verwende mod_security2.c
Dies waren die Einträge aus dem Fehlerprotokoll:
[Wed Mar 24 02:35:41 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:31 2010] [error]
[client 202.75.211.90] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:48:03 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Hier sind die Fehler aus dem access_log:
202.75.211.90 - -
[29/Mar/2010:10:43:15 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:11:40:41 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:12:37:19 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
Ich habe versucht, mod_security2 folgendermaßen zu konfigurieren:
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Die Sache in mod_security2 ist, dass SecFilterSelective nicht verwendet werden kann, es gibt mir Fehler. Stattdessen verwende ich eine Regel wie diese:
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Auch das geht nicht. Ich weiß nicht mehr, was ich tun soll. Hat jemand einen Rat?
Update 1
Ich sehe, dass niemand dieses Problem mit mod_security lösen kann. Bisher scheint die Verwendung von IP-Tabellen die beste Option zu sein, aber ich denke, die Datei wird extrem groß, da sich die IP-Adresse mehrmals am Tag ändert.
Ich habe mir 2 andere Lösungen ausgedacht, kann sich jemand dazu äußern, ob man gut ist oder nicht.
Die erste Lösung, die mir in den Sinn kommt, ist das Ausschließen dieser Angriffe aus meinen Apache-Fehlerprotokollen. Dadurch kann ich andere dringende Fehler leichter erkennen, wenn sie auftreten, und muss kein langes Protokoll durchspucken.
Die zweite Option ist meiner Meinung nach besser und blockiert Hosts, die nicht in der richtigen Weise gesendet werden. In diesem Beispiel wird der w00tw00t-Angriff ohne Hostnamen gesendet, sodass ich denke, dass ich die Hosts blockieren kann, die nicht in der richtigen Form vorliegen.
Update 2
Nachdem ich die Antworten durchgesehen hatte, kam ich zu den folgenden Schlussfolgerungen.
Benutzerdefinierte Protokollierung für Apache zu haben, wird einige unnötige Ressourcen in Anspruch nehmen, und wenn es wirklich ein Problem gibt, möchten Sie wahrscheinlich das vollständige Protokoll anzeigen, ohne dass etwas fehlt.
Es ist besser, die Treffer einfach zu ignorieren und sich auf eine bessere Analyse Ihrer Fehlerprotokolle zu konzentrieren. Verwenden Sie dazu Filter für Ihre Protokolle.
Letzte Gedanken zum Thema
Der oben erwähnte Angriff wird Ihren Computer nicht erreichen, wenn Sie zumindest ein aktuelles System haben, sodass Sie sich im Grunde keine Sorgen machen müssen.
Es kann schwierig sein, alle falschen Angriffe nach einer Weile aus den echten herauszufiltern, da sowohl die Fehlerprotokolle als auch die Zugriffsprotokolle extrem umfangreich werden.
Wenn Sie verhindern, dass dies in irgendeiner Weise geschieht, werden Sie Ressourcen kosten, und es wird empfohlen, Ihre Ressourcen nicht für unwichtige Dinge zu verschwenden.
Die Lösung, die ich jetzt benutze, ist Linux Logwatch . Es sendet mir Zusammenfassungen der Protokolle, die gefiltert und gruppiert werden. Auf diese Weise können Sie das Wichtige leicht vom Unwichtigen trennen.
Vielen Dank für die Hilfe, und ich hoffe, dieser Beitrag kann auch jemand anderem weiterhelfen.
quelle
IPs zu filtern ist keine gute Idee, imho. Warum filtern Sie nicht die Zeichenfolge, die Sie kennen?
Ich meine:
quelle
Ich habe auch begonnen, diese Arten von Nachrichten in meinen Protokolldateien zu sehen. Eine Möglichkeit, diese Art von Angriffen zu verhindern, besteht darin, fail2ban ( http://www.fail2ban.org/ ) einzurichten und bestimmte Filter einzurichten, um diese IP-Adresse in Ihren iptables-Regeln aufzulisten.
Hier ist ein Beispiel für einen Filter, der die mit der Erstellung dieser Nachrichten verbundene IP-Adresse blockiert
[Di Aug 16 02:35:23 2011] [Fehler] [Client] Datei existiert nicht: /var/www/skraps/w00tw00t.at.blackhats.romanian.anti-sec :) === apache w00t w00t messages jail - Regex und Filter === Gefängnis
Filter
quelle
w00tw00t.at.blackhats.romanian.anti-sec ist ein Hacking-Versuch und verwendet gefälschte IPs, so dass Suchanfragen wie VisualRoute China, Polen, Dänemark usw. gemäß der zu diesem Zeitpunkt abgeordneten IP melden. Das Einrichten einer Verweigern-IP oder eines auflösbaren Hostnamens ist nahezu unmöglich, da sich dieser Wert innerhalb einer Stunde ändert.
quelle
Ich habe persönlich ein Python-Skript geschrieben, um IPtables-Regeln automatisch hinzuzufügen.
Hier ist eine leicht abgekürzte Version ohne Protokollierung und anderen Müll:
quelle
Ich glaube, der Grund, warum mod_security für Sie nicht funktioniert, ist, dass Apache die Anforderungen selbst nicht analysieren konnte, da sie nicht den Spezifikationen entsprechen. Ich bin nicht sicher, ob Sie hier ein Problem haben - Apache protokolliert seltsame Scheiße, die im Internet passiert. Wenn es sie nicht protokolliert, werden Sie nicht wissen, dass es überhaupt passiert. Die zum Protokollieren der Anforderungen erforderlichen Ressourcen sind wahrscheinlich minimal. Ich verstehe, dass es frustrierend ist, dass jemand Ihre Protokolle füllt - aber es wird frustrierender sein, wenn Sie die Protokollierung deaktivieren, nur um festzustellen, dass Sie sie wirklich benötigen. Als ob jemand in Ihren Webserver eingebrochen wäre und Sie die Protokolle benötigen, um zu zeigen, wie er eingebrochen ist.
Eine Lösung besteht darin, ErrorLogging über syslog einzurichten und dann mithilfe von rsyslog oder syslog-ng diese RFC-Verstöße in Bezug auf w00tw00t gezielt zu filtern und zu verwerfen. Alternativ können Sie sie auch in eine separate Protokolldatei filtern, damit Ihr Hauptfehlerprotokoll leicht lesbar ist. Rsyslog ist in dieser Hinsicht unglaublich leistungsfähig und flexibel.
In httpd.conf könnten Sie also Folgendes tun:
dann in rsyslog.conf haben Sie vielleicht:
Beachten Sie, dass dieser Ansatz tatsächlich ein Vielfaches der Ressourcen beansprucht, die ursprünglich für die direkte Protokollierung in einer Datei verwendet wurden. Wenn Ihr Webserver sehr ausgelastet ist, kann dies zu einem Problem werden.
Es wird empfohlen, alle Protokolle sowieso so schnell wie möglich an einen Remote-Protokollierungsserver zu senden. Dies kommt Ihnen zugute, falls Sie jemals in das Protokoll einbrechen sollten, da es sehr viel schwieriger ist, den Audit-Trail zu löschen, der durchgeführt wurde.
Das Blockieren von IPTables ist eine Idee, aber es kann vorkommen, dass Sie eine sehr große iptables-Blockierungsliste haben, die Auswirkungen auf die Leistung haben kann. Enthält die IP-Adresse ein Muster oder stammt es von einem großen verteilten Botnetz? Es müssen X% der Duplikate vorhanden sein, bevor Sie von iptables profitieren können.
quelle
Sie sagen in Update 2:
Aus meiner vorherigen Antwort ging hervor, dass Apache aufgrund einer schlecht geformten HTML 1.1-Abfrage eine Fehlermeldung zurückgibt. Alle Webserver, die HTTP / 1.1 unterstützen, sollten wahrscheinlich einen Fehler zurückgeben, wenn sie diese Nachricht erhalten (ich habe den RFC nicht doppelt überprüft - vielleicht teilt uns RFC2616 dies mit).
Wenn Sie w00tw00t.at.ISC.SANS.DFind haben: Auf Ihrem Server bedeutet dies nicht unbedingt "Sie sind in Schwierigkeiten" ... Wenn Sie die Datei w00tw00t.at.ISC.SANS.DFind erstellen: in Ihrem DocumentRoot oder sogar DefaultDocumentRoot spielt keine Rolle ... der Scanner sendet eine fehlerhafte HTTP / 1.1-Anfrage und Apache sagt "Nein, das ist eine schlechte Anfrage ... auf Wiedersehen". Die Daten in der Datei w00tw00t.at.ISC.SANS.DFind: werden nicht geliefert.
Die Verwendung von mod_security für diesen Fall ist nicht erforderlich, es sei denn, Sie möchten wirklich (kein Punkt?). In diesem Fall können Sie das Patchen manuell überprüfen (Link in anderer Antwort).
Eine andere Sache, die Sie möglicherweise mit ansehen könnten, ist die RBL-Funktion in mod_security. Möglicherweise ist eine RBL online, die w00tw00t-IPs (oder andere bekannte bösartige IPs) bereitstellt. Dies würde jedoch bedeuten, dass mod_security für jede Anforderung eine DNS-Suche durchführt.
quelle
Wie wäre es, wenn Sie der ModSecurity eine Regel hinzufügen? Etwas wie das:
quelle
Ich sehe, dass die meisten Lösungen bereits oben behandelt wurden. Ich möchte jedoch darauf hinweisen, dass nicht alle vom Client gesendeten HTTP / 1.1-Anfragen ohne Hostnamenangriffe direkt auf Ihren Server gerichtet sind. Es gibt viele verschiedene Versuche, das Netzwerksystem vor Ihrem Server mit einem Fingerabdruck zu versehen und / oder auszunutzen:
So ist es manchmal hilfreich, Ihren Fokus zu erweitern und Ihre Verteidigungsbemühungen auf alle Systeme mit gleichem Anteil aufzuteilen, z. B .: Routerregeln implementieren, Firewallregeln implementieren (hoffentlich hat Ihr Netzwerk eine), Server-Firewall / IP-Tabelle implementieren Regeln und verwandte Dienste, zB mod_security, fail2ban und so weiter.
quelle
Wie wäre es damit ?
funktioniert gut für mich.
quelle
Wenn Sie einen
hiawatha
Webserver verwenden, werdenreverse proxy
diese Scans automatisch als Papierkorb und gesperrt gelöschtclient
. Es filtertXSS
undCSRF
nutzt auch.quelle