Hat "TARPIT" bekannte Schwachstellen oder Nachteile?


9

TARPIT kann verwendet werden, um die Ressourcen eines Angreifers zu verschwenden, wodurch seine Angriffe verlangsamt und seine Fähigkeit, andere Hosts anzugreifen, verringert werden. Dies scheint eine gute Idee zu sein.

Es wird als Netfilter- Addon bereitgestellt und kann wie jedes andere IPTables-Ziel verwendet werden.

Gibt es bekannte Nachteile oder Schwachstellen bei diesem Ansatz des Umgangs mit (D) DoS?


Es ist unmöglich, ein Negativ zu beweisen.
Ceejayoz

@ceejayoz Ich suche zumindest nach bekannten Nachteilen und / oder Vulns in dieser Methode.

Antworten:


5

Früher dachte ich, es sei eine gute Idee. Aber jetzt weiß ich, dass es leider eine sehr schlechte Idee ist.

Haben Sie jemals eine http-Benchmark-App wie Apache Bench ausgeführt? Auf einem einzelnen Computer können Sie festlegen, dass Hunderte von Verbindungen pro Sekunde zu einem Zielserver hergestellt werden. Wenn einige dieser Clients mit aktiviertem Tarpitting ausgeführt werden und eine Verbindung zu Ihrem Server hergestellt wird, werden Sie wahrscheinlich ein Problem feststellen.

Überlegen Sie, wie sich das Erstellen von Tausenden von Verbindungen pro Sekunde zu Ihrem Server auf den Server auswirkt, wenn jede Verbindung in einem Tarpit eingeschlossen ist.

Ihr Server verbraucht schnell alle verfügbaren Ressourcen (oder Dateihandles), sodass keine Verbindungen mehr zulässig sind. Dies ist schlimmer als nur das Schließen der Verbindung. Es wäre besser, den Täter für eine Weile fallen zu lassen, als zu versuchen, seine Ressourcen zu binden. Welches ist, was Skripte wie fail2ban erreichen.

Außerdem möchten Sie niemals, dass Ihre normalen Benutzer im Tarpit stecken bleiben. Zumindest für interaktive Sitzungen. Wie entscheidest du, wer erlaubt ist und wer nicht im Voraus? Für einige Protokolle können Sie nicht. Zum Beispiel HTTP-Verkehr. Sie müssen davon ausgehen, dass ein Client in Ordnung ist, bis Sie von ihm eine Aktivität erhalten, die Ihnen etwas anderes sagt. Dann können Sie entscheiden, es als schlecht zu behandeln, und beim nächsten Mal wird es im Tarpit hängen bleiben. Was in Ordnung zu sein scheint, außer dass viele dieser Angriffe von dynamischen ADSL-Benutzern usw. stammen können, die zufällig den neuesten Wurmvirus erhalten haben.

Angesichts der Tatsache, dass viele Angriffe auf PCs durch Wurmviren erfolgen, ohne dass der Benutzer dynamische Adressen kennt und ausführt, können Sie am Ende eine leicht veraltete Tarpit-Blacklist erstellen. Beginnen Sie einige Probleme zu sehen?


"Sie können am Ende eine leicht veraltete Tarpit-Blacklist erstellen." Man kann leicht ein Cron-Skript schreiben, um veraltete Tarpit-Regeln zu entfernen.
John B

Klar, das wird erwartet. Ich hätte schnell veraltet schreiben sollen! Der Punkt ist, dass ein Server, der Tarpit verwendet, viel einfacher ein Ziel von DoS sein kann.
Matt

8

Zusammenfassung

Das Ausführen eines Tarpits auf einem Allzweckserver birgt Risiken. Wenn Sie wissen, welche Risiken bestehen, können Sie diese je nach Komfort verringern.

  • Sie müssen sicherstellen, dass Sie Ihren Server nicht versehentlich mit Tarpit-Verkehr DOS
  • Sie müssen sicherstellen, dass Sie Ihre Statustabellen mit tarpitted Verbindungsinformationen füllen
  • Sie müssen sicherstellen, dass Sie Ihre Protokolle nicht mit Tarpit-Verbindungsinformationen überfluten
  • Sie müssen sicherstellen, dass eine lange schwarze Liste die Leistung nicht beeinträchtigt
  • Sie müssen sicherstellen, dass Ihre Blacklist Hosts automatisch abläuft
  • Sie müssen in der Lage sein, Hosts auf die Whitelist zu setzen (entweder permanent oder zeitlich begrenzt).

Zum Glück ist dies alles möglich und mit normalen iptables und ipset recht einfach.

Begrenzung der TARPIT-Ressourcennutzung

Sie können iptables verwenden, um die Anzahl der Hosts zu begrenzen, die Sie TARPITEN, ohne zu viele Systemressourcen zu verwenden. Siehe Beispiel unten. Dies umfasst Netzwerkbandbreite, Systemspeicher, statusstabile Einträge und andere Systemressourcen. Holen Sie sich zu viele Tarpitted-Verbindungen und ignorieren Sie sie. Wenn Sie Ihren Regelsatz in der richtigen Reihenfolge organisieren, landet keine der tarpitierten Verbindungen in Ihren Statustabellen. Stellen Sie außerdem sicher, dass Sie nicht protokollieren, es sei denn, Sie erstellen Echtzeitstatistiken mit einem benutzerdefinierten ulog - Direct iptables-Tarpit-Protokolle können eine Festplatte schnell füllen.

Nach meiner Erfahrung können meine aktuellen Hosts problemlos mehr als 200 Hosts in einem Tarpit speichern, ohne dass sich dies merklich auf die Speichernutzung, die Verkehrsnutzung oder die CPU-Auslastung auswirkt. Wahrscheinlich könnte ich das weiter vorantreiben, aber bisher bin ich im Durchschnitt nur ungefähr 130 Hosts in einem bestimmten Moment gefangen.

Der Grund, warum ich die Grenzwerte implementiert habe, war, wie in einem anderen Vorschlag angegeben, weil mein erster Tarpit-Host überflutet wurde. Dies war eine triviale Problemumgehung. Ich habe seitdem keine Probleme mehr gehabt.

Verwenden von ipset für effiziente Blacklists

ipset ist ein großartiges kleines Tool, mit dem Sie Gruppen von Objekten erstellen können, die in iptables-Regeln verwendet werden. Nicht nur das, sondern da es die Objekte in einer Hash-Tabelle enthalten kann, ist es umso schneller, je größer das ipset ist, verglichen mit dem entsprechenden linearen Satz von iptables-Regeln.

Darüber hinaus können die Listen Zähler (Pakete / Bytes), Zeitlimit und Ausschluss pro Objekt enthalten.

Sie können ipset mit den meisten automatisch blockierenden Programmen hinzufügen / entfernen, z. B. fail2ban, ossec und mehr. Da Sie ein Standardzeitlimit festlegen können, können Sie sicherstellen, dass Einträge abgelaufen sind, unabhängig davon, welches Programm den Eintrag festgelegt hat.

Beispiel

Hier ist ein Beispiel basierend auf meiner Verwendung auf von mir verwalteten Servern, das die oben aufgeführten Risiken mindert:

Vorbehalt

### Note:  This does not account for all possible traffic you might need or want
###        This is only an example of mitigating common risks of using a tarpit
###        Use at your own risk

Ipset konfigurieren

# Create the ipset blacklist
# options:
# - create         : create a new ipset
# - blacklist      : Name of the ipset we'll reference in the iptables rule
# - hash:net       : Make blacklist type hash to hold network (ip/mask) data
# - family inet    : This is for IPv4 data (inet6 for IPv6)
# - counters       : We want packet/byte stats counted for each entry
# - comment        : So we can add a comment with each entry (handy)
# - timeout 604800 : Set a default timeout of 604800 seconds (1 week) for each new entry
# - nomatch        : Allow us to enter exclusion entries (never match an entry)
ipset create blacklist hash:net family inet counters comment timeout 604800 nomatch

# Create an entry to never blacklist a trusted network
# options:
# - timeout 0      : entry never expires
# - nomatch        : Tells IPset to never match this entry (whitelist, in our usage)
ipset add blacklist 123.45.67.0/24 comment "Trusted subnet, causes breakage if blocked" timeout 0 nomatch

# Example to blacklist hosts
# no netmask implies /32 (or /128 for ipv6)
ipset add blacklist 34.56.78.90 comment "SSH Bruteforce"
ipset add blacklist 23.45.67.89 comment "SQL Injection" timeout 12345
# etc...

Iptables konfigurieren

# Flush the input table
iptables -F INPUT

# Drop the custom flow TAR
iptables -X TAR

# Set default INPUT policy to DROP
iptables -P INPUT DROP

# Create the chain TAR
iptables -N TAR

# Send all blacklisted hosts to the tarpit
iptables -A INPUT -m set --match-set blacklist src -j TAR

# Allow established connections
# Note: after the blacklist so newly blacklisted threats are immediately ignored
#       Yes, that will cause the server to hold the state open until it times out.
#       Would you rather have a malicious host continuing its attack?
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Allow the services we want
# Note:  These create new state table entries/use up memory
# Note:  We do not account for synflood prevention in this example
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m tcp --syn -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

# Send everything else to tarpit chain
iptables -A INPUT -j TAR

# This is the tarpit chain

# Tarpit up to 10 unique connections a second, any more, and pass to next rule
# Note: 10/s limit is arbitrary, adjust to your preference (experiment)
iptables -A TAR -p tcp -m limit --limit 10/sec -j TARPIT --tarpit 

# Drop everything else that makes it this far
# You can also set to REJECT which will immediately tell all connections to buzz off
iptables -A TAR -j DROP

Betrachtet gefangene Hosts in Echtzeit

$ sudo tcpdump -npi eth0 'src YOUR.HOST.IP and (tcp[14] = 0 && tcp[15] = 0)'
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.