- Behandelt das Problem von Scraper-Bots, die öffentliche Websites exzessiv anfragen und dadurch wie ein DDoS wirken, und stellt einen experimentellen Ansatz vor, der dies ausnutzt, um ihre Zeit zu verschwenden
- Ein Markov-Ketten-basierter Textgenerator wurde erstellt, um gefälschte Daten zu erzeugen, die wie
.php-Dateien aussehen, damit bösartige Bots sie herunterladen
- Anschließend wurde ein statischer Content-Server aufgebaut, der zufällig Absätze aus dem Roman Frankenstein ausliefert und über eine Linkstruktur so gestaltet ist, dass sich Crawler explosionsartig ausbreiten
- Auf allen Seiten wurden
noindex, nofollow-Attribute und ein Request-Zähler ergänzt, damit normale Suchmaschinen ausgeschlossen und nur Bots erfasst werden, die Regeln missachten
- Die Versuchsergebnisse waren interessant, doch wegen des Risikos von False Positives bei Googlebot wird das System nicht im produktiven Einsatz verwendet, sondern als Lern- und Experimentierprojekt beibehalten
Das Problem mit Scraper-Bots und die Idee für eine Gegenmaßnahme
- Scraper verursachen unbeabsichtigt eine Belastung auf DDoS-Niveau für kleine Websites
- Einige Betreiber fragten nach Schutzmaßnahmen, doch dieser Artikel konzentriert sich auf „Gegenangriff statt Verteidigung“
- Nachdem der Autor gesehen hatte, wie ein anderer Entwickler mit Markov-Ketten unendliche Fake-Daten erzeugte, um Bots zu täuschen, begann er selbst zu experimentieren
Markov-Ketten-basierter Generator für gefälschte PHP-Dateien
- In Rust wurde ein Markov-Ketten-Lerner implementiert, der auf Basis beliebiger Textdaten realistisch wirkende Inhalte erzeugt
- Für bösartige Bots, die auf anfällige Pfade wie
.env, .aws oder .php zielen, werden bedeutungslose, aber echt aussehende PHP-Dateien ausgeliefert
- Die Dateigröße wurde von 2 KB auf bis zu 10 MB erhöht, um Ressourcenverschwendung bei Bots zu provozieren
- Die Beispielausgabe sieht aus wie plausibler gefälschter PHP-Code mit gemischten WordPress-Funktionsnamen und Kommentaren
- Das Ziel ist, Zeit und Ressourcen der Bots zu verschwenden und Angreifer bei der Suche nach echten Schwachstellen aufzuhalten
Effizienz und Experimente mit statischer Datenauslieferung
- Als auf einem VPS Dateien mit mehr als 1 MB ausgeliefert wurden, kam es zu höherer Antwortlatenz und zusätzlicher Serverlast
- Um das zu lösen, wurde ein „Garbage Server“ als statische Website gebaut
- Der vollständige Roman Frankenstein wird in den Speicher geladen, und pro Request werden vier zufällige Absätze zurückgegeben
- Am Ende jeder Seite werden fünf Links hinzugefügt, um eine explosive Ausbreitung des Crawlings (Faktor 5) auszulösen
- Das Ergebnis ist unter https://herm.app/babbler/ zu sehen
Design-Details und Betriebsweise
- Der ausgewählte Roman ist Public Domain und wurde verwendet, weil daran zur Halloween-Zeit gearbeitet wurde und weil Ähnlichkeiten zwischen AI und Frankenstein gesehen wurden
- Alle Seiten erhalten das Attribut
noindex,nofollow, damit nur Bots erfasst werden, die Regeln missachten
- Am Ende jeder Seite wird ein Zähler für die Anzahl der Requests angezeigt; bei einer speicherbasierten Auslieferung wird er nach Deployment zurückgesetzt
- Es gibt auch einen separaten Server für
.php-Requests, der zufällig echte PHP-Dateien aus dem Speicher ausliefert
- Das Projekt wird mit dem Satz „Garbage for the garbage king!“ zusammengefasst
Risiken und Einschränkungen
- Bei einem Einsatz in realen Services besteht für dieses System das Risiko von False Positives bei Suchmaschinen
- Wenn Googlebot versehentlich falsche Endpunkte crawlt, könnte die Seite als Spam-Site eingestuft werden
- Das kann zu schlechterer Sichtbarkeit in der Suche oder zu Warnhinweisen in Chrome führen
- Daher wird es für suchmaschinenabhängige Websites nicht empfohlen und nur als Experiment betrieben
- Der
.php-Babbler ist kein HTML, daher hat Googlebot darauf keinen Einfluss; Ziel sind nur bösartige Bots
Abschluss und persönliches Fazit
- Um bösartige Scraper anzulocken, wurden dem Blog versteckte Links (
rel="nofollow") hinzugefügt
- Wenn das Traffic-Limit des VPS überschritten wird, wird der Einsatz des Cloudflare-Caches erwogen
- Über das Projekt wurden Markov-Ketten und die Funktionsweise von Bots gelernt; das Experiment war eine Mischung aus Spaß und Frust
- Letztlich muss nicht jeder Versuch praktisch sein; manchmal reicht es auch, wenn es einfach Spaß macht
1 Kommentare
Hacker-News-Kommentare
Auch wenn sich die Welt verändert, hat man am Ende wieder ähnliche Probleme
Vor 10–15 Jahren habe ich bereits mit Social-Media-Monitoring-Diensten gekämpft. Große Marken haben sie dafür bezahlt, die Stimmung in Foren zu überwachen, und dabei haben sie ohne Erlaubnis meine kostenlose Community gescrapt und Serverlast verursacht.
Selbst wenn ich ihre Bots blockiert habe, kamen sie mit anderen IPs und UAs zurück. Also habe ich einen Filter gebaut, der zufällig Markennamen in Beiträge einfügte und so ihre Datenqualität ruinierte. Nachdem ich diese Maßnahme aktiviert hatte, hörte das Scraping innerhalb von zwei Tagen vollständig auf.
Diese Bots parsen PHP-Dateien nicht wirklich, sondern erstellen anhand ihrer Existenz einen Fingerprint zur Schwachstellenerkennung. Sie schauen nur auf den Response-Code und verwerfen das dann sofort.
Kürzlich habe ich von einem Tarpit für AI und Scraper gehört. Dabei wird die Verbindung nicht getrennt, sondern unendlich viele Daten werden extrem langsam weitergesendet. Das Tool Nepenthes klingt interessant, ich würde damit gern experimentieren.
Früher wurde man auf HN kritisiert, wenn man Scraper blockiert hat. Die Logik war: „Es ist egal, wie ich zugreife.“
Wenn man einen Apache-Server direkt verwaltet, kann man mit RewriteEngine PHP-Requests sofort blockieren
Auf meinem Server gibt es kein PHP, also sind solche Anfragen durchweg bösartig.
Die meisten aggressiven Scraper zielen auf WordPress-Schwachstellen. Sie wollen nicht die PHP-Datei selbst, sondern deren Ausgabe. Solche Konfigurationen sind eher eine Art Honeypot, aber wenn der Bot nicht wie im Skript vorgesehen reagiert, zieht er einfach weiter.
Ich habe früher einmal die Zipbomb-Strategie auf HN gepostet, worauf der Traffic auf 100.000 Requests pro Tag explodiert ist. Mit einem VPS für 6 Dollar war das nicht zu stemmen. Heute setze ich nur gegen die aggressivsten Bots eine Zipbomb ein und gebe dem Rest 403 zurück. Die neue Strategie funktioniert gut, aber ich bin unsicher, ob ich sie wieder öffentlich machen sollte. Siehe: früherer Beitrag
Früher habe ich nur fail2ban verwendet, wollte aber etwas unterhaltsamere Abwehrmaßnahmen bauen
In
.htaccessleite ich verdächtige Pfade (/.git,/wp-login) aufdecoy.phpum und erzwinge den Download einer 10-GB-großen decoy.zip.decoy.phpsieht aus wie die angeforderte sensible Datei, streamt in Wirklichkeit aber endlos gefälschte Logs und SQL-Daten, um den Bot festzuhalten.Diese Bots scrapen keine PHP-Dateien, sondern suchen nach Framework-Schwachstellen. Wenn man unerwartete Antworten gibt, geben sie sofort auf und wechseln zum nächsten Ziel.
Manchmal denke ich darüber nach — könnte man sie mit den Ressourcen, die diese Bots verschwenden, nicht Kryptowährung minen lassen?