Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Crawlector — Crawlector ist ein Threat-Hunting-Framework, das zum Scannen von Websites auf schädliche Objekte entwickelt wurde. | Kitploit
Tools/GitHubGitHub/mfmokbel/crawlector
OSINT (Open-Source-Intelligence)SchwachstellenscannerBedrohungsfeeds & AggregatorenInformationsbeschaffungWebsicherheitMalware-AnalyseBedrohungsanalyseCrawler
GitHubmfmokbel/crawlector

Crawlector

Crawlector ist ein Threat-Hunting-Framework, das zum Scannen von Websites auf schädliche Objekte entwickelt wurde.

Repository anzeigen
12310vor 8 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

Crawlector

Crawlector (der Name Crawlector ist eine Kombination aus Crawler & Detector) ist ein Threat-Hunting-Framework, das zum Scannen von Websites auf schädliche Objekte entwickelt wurde.

Hinweis-1: Das Framework wurde erstmals auf der No Hat Konferenz in Bergamo, Italien am 22. Oktober 2022 vorgestellt (Folien, YouTube-Aufzeichnung). Außerdem wurde es zum zweiten Mal auf der AVAR Konferenz in Singapur am 2. Dezember 2022 präsentiert.

Hinweis-2: Das begleitende Tool EKFiddle2Yara (ist ein Tool, das EKFiddle-Regeln nimmt und in Yara-Regeln umwandelt), das im Vortrag erwähnt wurde, wurde ebenfalls auf beiden Konferenzen veröffentlicht.

Hinweis-3: Version 2.0 (Photoid Build:180923), ein Meilenstein-Release, wurde am 18. September 2023 veröffentlicht.

Hinweis-4: Version 2.1 (Universe-647 Build:031023) wurde am 3. Oktober 2023 veröffentlicht. Eine wichtige Neuerung ist die Slack-Benachrichtigungsfunktion.

Hinweis-5: Version 2.2 (Hallstatt Build:051123) wurde am 5. November 2023 veröffentlicht. Eine wichtige Neuerung ist die Slack-Fernsteuerungsfunktion.

Hinweis-6: Version 2.3 (München Build:241123) wurde am 24. November 2023 veröffentlicht. Eine wichtige Neuerung ist die DNS-Nameserver-Funktion.

Hinweis-6: Version 2.3.1 {Nero Build:131225} wurde am 13. Dezember 2025 veröffentlicht. Dies ist ein Wartungs-Release.

Funktionen

  • Unterstützt das Spidern von Websites, um zusätzliche Links zum Scannen zu finden (nur bis zu 2 Ebenen)
  • Integriert Yara als Backend-Engine für den Regel-Scan
  • Unterstützt Online- und Offline-Scanning
  • Unterstützt das Crawlen nach digitalen Zertifikaten von Domains/Websites
  • Unterstützt das Abfragen von URLhaus, um bösartige URLs auf der Seite zu finden
  • Deep Object Extraction (DOE)
  • Slack-Benachrichtigungen
  • Parametrisierte Unterstützung für HTTP-Weiterleitungen
  • Abrufen von Whois-Informationen
  • Unterstützt das Hashing des Seiteninhalts mit TLSH (Trend Micro Locality Sensitive Hash) und anderen standardmäßigen kryptografischen Hash-Funktionen wie md5, sha1, sha256 und ripemd128, unter anderem
    • TLSH liefert keinen Wert zurück, wenn die Seitengröße kleiner als 50 Bytes ist oder wenn nicht genügend Zufälligkeit in den Daten vorhanden ist
  • Unterstützt das Abfragen der Bewertung und Kategorie jeder URL
  • Unterstützt die Erweiterung einer bestimmten Website, indem versucht wird, alle verfügbaren TLDs und/oder Subdomains für dieselbe Domain zu finden
    • Diese Funktion verwendet die Omnisint Labs API (diese Website ist seit dem 10. März 2023 nicht mehr erreichbar) und die RapidAPI-APIs
    • Die TLD-Erweiterungsimplementierung ist nativ
    • Diese Funktion bietet zusammen mit der Bewertung und Kategorisierung die Möglichkeit, Betrugs-/Phishing-/Schad-Domains für die ursprüngliche Domain zu finden
  • Unterstützt die Domain-Auflösung (IPv4 und IPv6)
  • Speichert gescannte Webseiten für spätere Scans (kann als ZIP-komprimiert gespeichert werden)
  • Die gesamten Einstellungen des Frameworks werden über eine einzige anpassbare Konfigurationsdatei gesteuert
  • Alle Scan-Sitzungen werden in einer gut strukturierten CSV-Datei mit einer Fülle von Informationen über die gescannte Website sowie Informationen über die ausgelösten Yara-Regeln gespeichert
  • Viele weitere Funktionen...
  • Alle HTTP(S)-Kommunikationen sind Proxy-bewusst
  • Eine ausführbare Datei
  • Geschrieben in C++

URLHaus-Scanning & API-Integration

Dies dient der Überprüfung auf bösartige URLs für jede gescannte Seite. Das Framework kann entweder die Liste der bösartigen URLs vom URLHaus-Server abfragen (Konfiguration: url_list_web) oder aus einer Datei auf der Festplatte (Konfiguration: url_list_file). Wenn Letzteres angegeben ist, hat es Vorrang vor Ersterem.

Es funktioniert, indem der Inhalt jeder Seite gegen alle URL-Einträge in url_list_web oder url_list_file durchsucht wird, um alle Vorkommen zu überprüfen. Wenn eine Übereinstimmung gefunden wird und die Konfigurationsoption check_url_api auf true gesetzt ist, sendet Crawlector eine POST-Anfrage an die in der url_api-Konfigurationsoption festgelegte API-URL, die ein JSON-Objekt mit zusätzlichen Informationen über eine übereinstimmende URL zurückgibt. Solche Informationen umfassen urlh_status (z. B. online, offline, unbekannt), urlh_threat (z. B. malware_download), urlh_tags (z. B. elf, Mozi) und urlh_reference (z. B. https://urlhaus.abuse.ch/url/1116455/). Diese Informationen werden in der Logdatei cl_mlog_<aktuelles_Datum><aktuelle_Zeit><(vormittags|nachmittags)>.csv (siehe unten) aufgenommen, jedoch nur, wenn check_url_api auf true gesetzt ist. Andernfalls enthält die Logdatei die Spalten urlh_url (Liste der übereinstimmenden bösartigen URLs) und urlh_hit (Anzahl der Vorkommen für jede übereinstimmende bösartige URL), abhängig davon, ob check_url auf true gesetzt ist.

Die URLHaus-Funktion kann vollständig deaktiviert werden, indem die Konfigurationsoption check_url auf false gesetzt wird.

Es ist wichtig zu beachten, dass diese Funktion das Scannen verlangsamen kann, angesichts der riesigen Anzahl von bösartigen URLs (~ 130 Millionen Einträge zum Zeitpunkt dieses Schreibens), die überprüft werden müssen, und der Zeit, die benötigt wird, um zusätzliche Informationen vom URLHaus-Server zu erhalten (wenn die Option check_url_api auf true gesetzt ist).

Dateien- und Ordnerstrukturen

  1. \cl_sites
    • Hier wird die Liste der zu besuchenden oder zu crawlen Sites gespeichert.
    • Unterstützt mehrere Dateien und Verzeichnisse.
  2. \crawled
    • Hier werden alle gecrawlten/gespiderten URLs in einer Textdatei gespeichert.
  3. \certs
    • Hier werden alle digitalen Zertifikate von Domains/Sites gespeichert (im .der-Format).
  4. \results
    • Hier werden besuchte Websites gespeichert. Dies ist über die Option results_dir konfigurierbar.
  5. \pg_cache
    • Programm-Cache für Seiten, die nicht Teil der Spider-Funktionalität sind. Dies ist über die Option cache_dir, Abschnitt [default], konfigurierbar.
  6. \cl_cache
    • Crawler-Cache für Seiten, die Teil der Spider-Funktionalität sind. Dies ist über die Option cache_dir, Abschnitt [spider], konfigurierbar.
  7. \yara_rules
    • Hier werden alle Yara-Regeln gespeichert. Alle Regeln, die in diesem Verzeichnis vorhanden sind, werden von der Engine geladen, analysiert, validiert und vor der Ausführung ausgewertet.
  8. cl_config.ini
    • Diese Datei enthält alle Konfigurationsparameter, die angepasst werden können, um das Verhalten des Frameworks zu beeinflussen.
  9. cl_mlog_<aktuelles_Datum><aktuelle_Zeit><(vormittags|nachmittags)>.csv
    • Logdatei, die eine Fülle von Informationen über besuchte Websites enthält.
    • Datum, Uhrzeit, Status des Yara-Scans, Liste der ausgelösten Yara-Regeln mit den Offsets und Längen jedes Treffers, ID, URL, HTTP-Statuscode, Verbindungsstatus, HTTP-Header, Seitengröße, Pfad zu einer gespeicherten Seite auf der Festplatte und andere Spalten im Zusammenhang mit URLHaus-Ergebnissen.
    • Dateiname ist pro Sitzung eindeutig.
  10. cl_offl_mlog_<aktuelles_Datum><aktuelle_Zeit><(vormittags|nachmittags)>.csv
    • Logdatei, die Informationen über offline gescannte Dateien enthält.
    • Liste der ausgelösten Yara-Regeln mit den Offsets und Längen der Treffer und Pfad zu einer gespeicherten Seite auf der Festplatte.
    • Dateiname ist pro Sitzung eindeutig.
  11. cl_certs_<aktuelles_Datum><aktuelle_Zeit><(vormittags|nachmittags)>.csv
    • Logdatei, die eine Fülle von Informationen über gefundene digitale Zertifikate enthält.
  12. \expanded\exp_subdomain_<vormittags|nachmittags>.txt

Konfigurationsdatei (cl_config.ini)

Sie müssen sich mit der Konfigurationsdatei cl_config.ini vertraut machen, bevor Sie eine Sitzung ausführen. Alle Abschnitte und Parameter sind in der Konfigurationsdatei selbst dokumentiert.

Die Yara-Offline-Scan-Funktion ist eine eigenständige Option, d.h., wenn sie aktiviert ist, führt Crawlector nur diese Funktion aus, unabhängig von anderen aktivierten Funktionen. Gleiches gilt für die Funktion zum Crawlen nach digitalen Zertifikaten von Domains/Sites. In jedem Fall wird empfohlen, alle nicht verwendeten Funktionen in der Konfigurationsdatei zu deaktivieren.

  • Abhängig von den Konfigurationseinstellungen (log_to_file oder log_to_cons): Wenn eine Yara-Regel nur die Attribute eines Moduls referenziert (z. B. PE, ELF, Hash usw.), zeigt Crawlector bei einem Treffer nur den Namen der Regel an, ohne Offset- und Längendaten.

Hinweis: Geben Sie für jede Option, die einen Pfad erwartet, immer den absoluten Pfad an.

Seitenformat-Muster

Um eine Website zu besuchen/scannen, muss die Liste der URLs in Textdateien im Verzeichnis „cl_sites“ gespeichert werden.

Crawlector akzeptiert drei Arten von URLs:

  1. Typ 1: eine URL pro Zeile
    • Crawlector weist jeder URL einen eindeutigen Namen zu, der vom Hostnamen der URL abgeleitet ist.
  2. Typ 2: eine URL pro Zeile, mit einem eindeutigen Namen [a-zA-Z0-9_-]{1,128} = <url>
  3. Typ 3: Für die Spider-Funktionalität wird ein eindeutiges Format verwendet. Eine URL pro Zeile wie folgt:

<id>[depth:<0|1>-><\d+>,total:<\d+>,sleep:<\d+>] = <url>

Zum Beispiel:

mfmokbel[depth:1->3,total:10,sleep:0] = https://www.mfmokbel.com

was äquivalent ist zu: mfmokbel[d:1->3,t:10,s:0] = https://www.mfmokbel.com

wobei <id> := [a-zA-Z0-9_-]{1,128}

depth, total und sleep können auch durch ihre Kurzformen d, t und s ersetzt werden.

  • depth: Der Spider unterstützt das Durchsuchen von zwei Ebenen, um zusätzliche URLs zu finden (dies ist eine Design-Entscheidung).
  • Ein Wert von 0 bedeutet eine Tiefe von Level 1, wobei der Wert nach „->“ ignoriert wird.
  • Eine Tiefe von Level 1 wird durch den Parameter total gesteuert. Zuerst versucht der Spider also, so viele zusätzliche URLs wie möglich von der angegebenen URL zu finden.
  • Der Wert nach „->“ stellt die maximale Anzahl von URLs dar, die für jede der gefundenen URLs (gemäß dem Parameter total) gespidert werden sollen.
  • Ein Wert von 1 bedeutet eine Tiefe von Level 2, wobei der Wert nach „->“ die maximale Anzahl von URLs darstellt, die für jede gemäß dem Parameter total gefundene URL gefunden werden sollen. Zur Verdeutlichung, wie im obigen Beispiel gezeigt, sucht der Spider zunächst nach 10 URLs (wie im Parameter total angegeben), und dann wird jede dieser gefundenen URLs bis zu maximal 3 URLs gespidert; daher würden wir im besten Fall 40 (10 + (10*3)) URLs erhalten.
  • Der Parameter sleep nimmt einen ganzzahligen Wert an, der die Anzahl der Millisekunden angibt, die zwischen jeder HTTP-Anfrage gewartet werden soll.

Hinweis 1: Eine URL vom Typ 3 kann in eine URL vom Typ 1 umgewandelt werden, indem der Konfigurationsparameter live_crawler in der Konfigurationsdatei im Spider-Abschnitt auf false gesetzt wird.

Hinweis 2: Leere Zeilen und Zeilen, die mit „;“ oder „//“ beginnen, werden ignoriert.

Die Spider-Funktionalität

Die Spider-Funktionalität ermöglicht es Crawlector, zusätzliche Links auf der Zielseite zu finden. Der Spider unterstützt die folgenden Funktionen:

  • Die Domain muss vom Typ 3 sein, damit die Spider-Funktionalität funktioniert.
  • Sie können eine Liste von Wildcard-Mustern (durch Pipe getrennt) angeben, um zu verhindern, dass URLs, die darauf passen, gespidert werden, über die Konfigurationsoption exclude_url. Zum Beispiel: *.zip|*.exe|*.rar|*.zip|*.7z|*.pdf|.*bat|*.db
  • Sie können eine Liste von Wildcard-Mustern (durch Pipe getrennt) angeben, um nur URLs zu spidern, die dem Muster entsprechen, über die Konfigurationsoption include_url. Zum Beispiel: */checkout/*|*/products/*
  • Sie können HTTPS-URLs über die Konfigurationsoption exclude_https ausschließen.
  • Sie können auch ausgehende/externe Links für die Hauptseite berücksichtigen, über die Konfigurationsoption add_ext_links. Diese Funktion berücksichtigt die Konfigurationsoptionen exclude_url und include_url.
  • Sie können auch nur ausgehende/externe Links der Hauptseite berücksichtigen, unter Ausschluss aller anderen URLs, über die Konfigurationsoption ext_links_only. Diese Funktion berücksichtigt die Konfigurationsoptionen exclude_url und .

ID-Typen

In Version 2.0 haben die IDs ihre Typen explizit zugewiesen, indem einer der folgenden Typen an die ID selbst angehängt wird:

Jede ID trägt ihren Typ bei sich, was das Durchsuchen und Filtern der Ergebnisse erleichtert. Darüber hinaus wird dies intern aus verschiedenen Gründen verwendet.

Website-Ranking-Funktionalität

  • Dies dient zur Überprüfung des Rankings der Website
  • Sie geben eine Datei mit einer Liste von Websites und deren Ranking im CSV-Dateiformat an
  • Dienste, die Listen von Website-Rankings bereitstellen, umfassen Alexa top-1m (seit Mai 2022 eingestellt), Cisco Umbrella, Majestic, Quantcast, Farsight und Tranco, unter anderem
  • CSV-Dateiformat (nur 2 Spalten): Die erste Spalte enthält das Ranking, die zweite Spalte den Domainnamen
  • Wenn eine Zelle in Anführungszeichen gesetzte Daten enthält, werden diese automatisch entfernt
  • Zeilenumbrüche sind in Anführungszeichen gesetztem Text nicht erlaubt
  • Führende und abschließende Leerzeichen werden aus den gelesenen Zellen entfernt
  • Leere und Kommentarzeilen werden übersprungen
  • Der Abschnitt site_ranking in der Konfigurationsdatei bietet einige Optionen, um zu ändern, wie die CSV-Datei gelesen wird
  • Die Leistung dieser Abfrage hängt von der Anzahl der Datensätze in der CSV-Datei ab
  • Crawlector vergleicht jeden Eintrag in der CSV-Datei mit der untersuchten Domain und nicht umgekehrt
  • Nur die registrierte/bezahlte Domain (pay-level domain) wird verglichen

Auffinden von TLDs und Subdomains – [site]-Abschnitt

  • Der Abschnitt site bietet die Möglichkeit, eine bestimmte Website zu erweitern, indem versucht wird, alle verfügbaren Top-Level-Domains (TLDs) und/oder Subdomains für dieselbe Domain zu finden. Wenn neue TLDs/Subdomains gefunden werden, werden sie wie jede andere Domain überprüft
  • Diese Funktion verwendet die Omnisint Labs (https://omnisint.io/) und RapidAPI APIs
  • Die Omnisint Labs API gibt Subdomains und TLDs zurück, während RapidAPI nur Subdomains zurückgibt (die Omnisint Labs API ist seit dem 10. März 2023 nicht mehr erreichbar; die Implementierung ist jedoch noch verfügbar, falls die Website wieder online ist)
  • Für RapidAPI benötigen Sie einen gültigen "Domains records" API-Schlüssel, den Sie von RapidAPI anfordern können, und fügen ihn in den Schlüssel rapid_api_key in der Konfigurationsdatei ein
  • Wenn find_tlds aktiviert ist, versucht das Framework zusätzlich zu den Omnisint Labs API TLD-Ergebnissen, andere aktive/registrierte Domains zu finden, indem es jeden TLD-Eintrag in entweder der tlds_file oder der tlds_url durchgeht
  • Wenn tlds_url gesetzt ist, sollte es auf eine URL verweisen, die TLDs hostet, jede in einer neuen Zeile (Zeilen, die mit einem der Zeichen ';', '#' oder '//' beginnen, werden ignoriert)
  • tlds_file enthält den Dateinamen, der die Liste der TLDs enthält (wie bei tlds_url; es ist nur die TLD ohne den Punkt vorhanden, z. B. "com", "org")
  • Wenn gesetzt ist, hat es Vorrang vor

Weiterleitungsfunktionalität

Die URL-Weiterleitungsfunktion in früheren Versionen war fehlerhaft. Diese Version bietet eine vollständige Neufassung der Weiterleitungsfunktion mit einem hohen Grad an Parametrisierung zur Steuerung ihres Betriebs. In Version 2.0 hat die Weiterleitung einen eigenen Abschnitt in der Konfigurationsdatei mit dem Namen [redirect]. Die gesamte Weiterleitungsfunktionalität kann über die Option follow_redir im Abschnitt [default] ein- oder ausgeschaltet werden.

Die Weiterleitungsfunktion prüft die HTTP-Antwortstatuscodes: 301, 302, 303, 307 und 308. Im Falle einer Übereinstimmung analysiert Crawlector den Location-Header auf die Weiterleitungs-URL, wobei sowohl absolute als auch relative Weiterleitungs-URLs berücksichtigt werden. Die Weiterleitungsfunktion in Crawlector wurde auf Leistung und Agilität ausgelegt. Der [redirect]-Abschnitt bietet die folgende Liste von Optionen:

[redirect]

  • depth = all ; (t: string)
  • max_redirect = 200 ; (t: uint16_t)
  • visit = true ; (t: bool)
  • skip_similar = true ; (t: bool)

Die Option depth akzeptiert einen der Werte last oder all. Sie steuert, welche gefundenen Weiterleitungs-URLs besucht werden, abhängig davon, ob die Option visit aktiviert ist oder nicht. all dient zum Besuchen aller gefundenen Weiterleitungs-URLs. last dient zum Besuchen der letzten Weiterleitungs-URL. Der Besuch dieser URLs erfolgt in derselben/aktuellen Sitzung. Beachten Sie, dass Crawlector unabhängig vom Wert von depth die Liste aller gefundenen Weiterleitungen zu URLs zusammen mit der Gesamtzahl in absoluter Form aufzeichnet. Sie werden in die CSV-Datei cl_mlog in den Spalten redirect_urls und redirect_total geschrieben.

Die Option max_redirect setzt eine Obergrenze für die Gesamtzahl der zu entdeckenden URL-Weiterleitungen.

Die Option skip_similar lässt sich am besten anhand des folgenden Beispiels erklären:

Angenommen, die Crawlector zum Crawlen übergebene ursprüngliche URL ist "https://www.mfa.gov.law" und eine der gefundenen redirect_urls ist "https://mfa.gov.law/". Wie Sie sehen, ist der einzige Unterschied der abschließende Schrägstrich am Ende der URL. Diese beiden URLs sind identisch, und der Server wird mit derselben Seite antworten. Wenn die Option visit auf true gesetzt ist, wird Crawlector beide URLs crawlen, was Ressourcen verschwendet und dieselbe Aufgabe zweimal ausführt. Dies mag bei 1 oder 2 URLs kein Problem darstellen, aber wenn Sie Tausende von URLs crawlen möchten und die Option visit aktiviert ist, ist die Wahrscheinlichkeit sehr hoch, dass mehr als die Hälfte von ihnen eine solche entdeckte URL aufweist. In diesem Fall wird dies zu einem dringenden Problem, das berücksichtigt werden muss. Daher hilft das Setzen der Option skip_similar auf true, dieses Problem zu lösen, indem das Besuchen ähnlicher URLs übersprungen wird. Zusätzlich zum Szenario mit dem Schrägstrich berücksichtigt die Option skip_similar auch die folgenden beiden Szenarien: wenn sich die Weiterleitungs-URL nur durch eine oder beide der Präfixe "https://" und "www." unterscheidet.

Deep Object Extraction (DOE)

Eine der wichtigsten Neuerungen in Version 2.0 ist die Möglichkeit, verschiedene Arten von Objekten aus der Seite zu extrahieren, sie auf der Festplatte zu speichern, mit Yara & URLHaus zu scannen und die Ergebnisse in der CSV-Datei zu speichern. Um diese Funktion zu aktivieren, setzen Sie die Option extract_obj im Abschnitt [page] auf true.Die Implementierung der Funktion zur tiefen Objektextraktion funktioniert, indem eine MHT-Webarchivdatei von der Webseite erstellt wird, einschließlich externer Skripte, Bilder und CSS-Dateien. Alle eingebetteten Dateien werden in den durch die Option obj_dir angegebenen Pfad extrahiert (Pfad: obj_dir/objects/), wo jede Datei gescannt wird. Die Implementierung ist nicht mit der Funktionalität eines Headless-Browsers zu verwechseln. DOE unterscheidet sich davon und beinhaltet nicht das Laden der Seite, um alle dynamisch abgefragten URLs abzurufen. Daher hat es seine Grenzen.

Alle extrahierten Objekte werden einen Teil ihrer Metadaten in die CSV-Datei schreiben. Was beim Lesen der CSV-Datei zu beachten ist: Die ID der Domain mit dem extrahierten Objekt hat ein einzigartiges Format, wie folgt, <domain_id>_<type>_p_obj_<counter> (zum Beispiel _mfa_gov_cef40bc5-ba6a-41_t1_p_obj_0_). Und die URL wird das folgende Format haben: <url>__<object_filename> (zum Beispiel https://www.mfa.gov.law\_\_bilmur.min.js).

Wenn die Option delete_obj auf true gesetzt ist, werden alle extrahierten Objekte, die nicht von Yara erkannt werden, von der Festplatte gelöscht. Wenn die Option log_all_objs auf true gesetzt ist, werden alle Metadaten der extrahierten Objekte in dieselbe cl_mlog CSV-Datei protokolliert. Wenn die Option check_urlhaus unter dem Abschnitt [page] auf true gesetzt ist, wird jedes extrahierte Objekt einem URLHaus-Scan unterzogen. Beachten Sie, dass die Optionen dieser Option vom Abschnitt [urlhaus] geerbt werden.

Hinweis: Wenn die gecrawlte Domain auf eine andere Domain weiterleitet, muss die letzte Weiterleitungs-URL an DOE übergeben werden, damit es funktioniert. Außerdem muss die Domain mit "HTTP(S)://" beginnen, damit DOE funktioniert.

Slack-Benachrichtigung

Manchmal möchten Sie Crawlector-Sitzungen ausführen, die Tage dauern können, z. B. beim Crawlen der Top-1-Million-Alexa-Websites. Für ein solches Szenario benötigen Sie eine Möglichkeit, den Betrieb und Fortschritt des Frameworks remote zu überwachen. Daher habe ich in Version 2.1 die Slack-Benachrichtigungsfunktion hinzugefügt, um einen Mechanismus zur Echtzeitüberwachung der Ausführung von Crawlector bereitzustellen, indem Yara-Warnungen, std::exit()-Ereignisse sowie Prozesswarnungen und -fehler an einen Slack-Kanal Ihrer Wahl gesendet werden. Darüber hinaus installiert Crawlector einen Konsolenhandler, um bestimmte Ereignistypen zu überwachen, darunter ctrl_c, ctrl_close, ctrl_break, ctrl_logoff und ctrl_shutdown. Es ist wichtig zu bedenken, dass Crawlector das Standardverhalten des Handlers nicht ändert; es meldet lediglich den Empfang der aufgeführten Ereignisse an den Slack-Kanal. Dies könnte in Zukunft erweitert werden, um andere Ereignistypen zu berücksichtigen.

Diese Funktion verwendet die Slack-REST-API und zur Authentifizierung mit dem Server OAuth 2.0. Sie benötigen ein Slack-API-Token zur Nutzung und einen Kanal mit den entsprechenden Berechtigungen. Diese Funktion sendet nur Nachrichten an den Slack-Kanal und empfängt oder verarbeitet keine eingehenden Nachrichten.

Der Abschnitt [slack_alert] bietet die folgende Liste von Optionen:

[slack_alert]

  • alert = true ; (t: bool)
  • api_token = ; (t: string)
  • channel = ; (t: string)
  • sleep = ; (t: uint32_t) in Millisekunden

Um diese Funktion zu deaktivieren oder zu aktivieren, setzen Sie die Option alert einfach auf true oder false. Außerdem müssen Sie das api_token mit einem channel-Namen angeben.

Hinweis-1: In der Initialisierungsphase von Crawlector wird geprüft, ob das bereitgestellte Authentifizierungstoken gültig ist oder ob der Kanal festgelegt ist. Im Fehlerfall wird diese Funktion automatisch deaktiviert.

Alle an den Slack-Kanal gemeldeten Warnungen werden unter dem Benutzernamen Crawlector v<Versionsnummer> gemeldet, z. B. Crawlector v2.1. Der Benutzer hat das Symbol eines Spinnennetzes. Darüber hinaus werden alle Warnungen verknüpft (threaded), d. h. alle nachfolgenden Warnungen nach der ersten Startnachricht werden als Antworten gepostet. Dies war eine Designentscheidung und hilft, wenn Sie mehrere Sitzungen gleichzeitig ausführen, die alle an denselben Kanal melden. Einige Warnungen verwenden die Markdown-Auszeichnungssprache zur Formatierung.

Wenn der Prozess erfolgreich beendet wird und kurz vor dem Beenden steht, wird die folgende Nachricht gepostet:

Crawlector wurde beendet und wird erfolgreich heruntergefahren

Hinweis-2: Das Slack-Ratenlimit für die Post-Nachrichten-API beträgt eine Nachricht pro Sekunde, mit Spielraum für einige Bursts. Crawlector stellt keine Nachrichten in die Warteschlange, um mehr Posts pro Sekunde zu ermöglichen. Dies könnte sich in Zukunft ändern, falls erforderlich; die Option sleep ermöglicht es dem Prozess jedoch, nach jeder erfolgreich geposteten Nachricht für eine bestimmte Zeit zu schlafen.

Slack-Fernsteuerung

Mit Version 2.2 (Codename Hallstatt) führe ich die Möglichkeit ein, Crawlector über eine ausgewählte Reihe speziell entwickelter Steuerungsbefehle fernzusteuern. Der Grund für die Einführung dieser Funktionalität ist die Überwachung und Steuerung bestimmter Verhaltensweisen von Sitzungen, die über Stunden oder Tage laufen sollen. Beispielsweise möchten Sie möglicherweise die Slack-Benachrichtigungsfunktion ein-/ausschalten, Crawlector beenden oder eine Konfigurationsdatei hochladen, um nur einige zu nennen.

Diese Funktion verwendet die Slack-REST-API und zur Authentifizierung mit dem Server OAuth 2.0. Sie benötigen ein Slack-API-Token zur Nutzung und einen Kanal mit den entsprechenden Berechtigungen. Das API-Token ist dasselbe wie das im Abschnitt [slack_alert] unter der Option api_token verwendete.

Der Abschnitt [slack_alert] bietet die folgende zusätzliche Liste von Optionen für die Fernsteuerungsfunktionalität:

[slack_alert] (Steuerungsoptionen)

  • control = true ; (t: bool)
  • ctrl_channel = ; (t: string) es muss die Kanal-ID und nicht der Kanalname sein
  • ctrl_sleep = ; (t: uint32_t) in Millisekunden

Um diese Funktion zu deaktivieren oder zu aktivieren, setzen Sie die Option control einfach auf true oder false. Der ctrl_channel-Name muss die Kanal-ID und nicht der Kanalname sein. Sie erhalten ihn, indem Sie mit der rechten Maustaste auf den Kanalnamen klicken -> Kanaldetails anzeigen -> Ganz nach unten scrollen, und Sie sehen das Feld Kanal-ID: <Kanal-ID>.

Die Option ctrl_sleep bestimmt die Häufigkeit des Aufrufs des im ctrl_channel angegebenen Steuerkanals zum Abrufen von Steuerungsbefehlen. Sie können diese Option auch über den Steuerungsbefehl cl_update_delay <Zeit_in_ms> aktualisieren.

Die Liste der unterstützten Steuerungsbefehle ist die folgende:

Hinweis-1: In der Initialisierungsphase von Crawlector wird geprüft, ob das bereitgestellte Authentifizierungstoken gültig ist oder ob der Kanal festgelegt ist. Im Fehlerfall wird diese Funktion automatisch deaktiviert.

Wenn diese Funktionalität aktiviert ist und die API-Token-Validierung bestanden hat, sendet Crawlector die Nachricht "Crawlector ist bereit, Steuerungsbefehle zu empfangen. Geben Sie den Befehl cl_help ein, um eine Liste der unterstützten Steuerungsbefehle zu erhalten." an den festgelegten ctrl_channel.

Alle Antworten auf einen bestimmten Steuerungsbefehl werden verknüpft (threaded). Darüber hinaus werden Steuerungsbefehle sitzungsbasiert gelesen, ab dem Zeitpunkt, an dem eine Sitzung gestartet wird.

Hinweis-2: Das Slack-Ratenlimit für die Abruf- (Konversationsverlauf) Nachrichten-API beträgt eine Anfrage pro Sekunde, mit Spielraum für einige Bursts. Wenn die Option ctrl_sleep auf einen Wert kleiner als eine Sekunde oder größer als eine Sekunde eingestellt ist, stellt Crawlector Nachrichten in die Warteschlange, um mehr Steuerungsbefehle pro Sekunde zu berücksichtigen, und führt sie in der Reihenfolge des Empfangs aus.

DNS-Nameserver

Mit Version 2.3 (Codename Munich) wird die Möglichkeit eingeführt, eine Liste von DNS-Nameservern für alle DNS-Abfragen und DNS-zu-IP-Auflösungen anzugeben, die von Crawlector versucht werden, mit einem hohen Maß an Kontrolle. Dies ist wichtig, falls Sie blockierte oder schädliche Websites crawlen. Diese Funktion gilt für jede Funktion in Crawlector, bei der eine DNS-Abfrage oder DNS-zu-IP-Anfrage gestellt wird. Noch wichtiger: Sie bietet die Möglichkeit, DNS over TLS für jeden Nameserver durchzuführen, der dies unterstützt.

Der Abschnitt [dns_ns] bietet die folgende Liste von Optionen zur Verwaltung dieser Funktionalität:

[dns_ns]

  • enable = false ; (t: bool)
  • name_servers = 8.8.8.8(e_tls),12.13.14.15(d_tls) ; (t: string)
  • dns_tls = yes ; (t: string) (yes, no or force)
  • keep_default = false ; (t: bool)
  • conn_time_out = 3000 ; (t: uint32_t) in Millisekunden (0 für unbegrenztes Warten)

Die Option name_servers akzeptiert eine parametrisierte Liste von DNS-Nameservern, durch Kommas getrennt. Der Wert dieser Option hat das Format: <IPv4\_Adresse>(<tls\_Option>) wobei <tls\_Option> entweder den Wert "d\_tls" oder "e\_tls" annimmt. Die Optionen "d_tls" oder "e_tls" geben an, ob der betreffende Nameserver DNS over TLS unterstützt oder nicht. Diese Option wird abhängig vom Wert der Option dns_tls durchgesetzt. Beispielsweise gibt der Eintrag 8.8.8.8(e\_tls) an, den Google-DNS-Server 8.8.8.8 mit TLS-Unterstützung zu verwenden, während der Eintrag 12.13.14.15(d\_tls) angibt, den DNS-Server 12.13.14.15 ohne TLS-Unterstützung zu verwenden.

Die Option dns_tls gibt die erforderliche Stufe der TLS-Durchsetzung an. Diese Option akzeptiert einen der Werte "yes", "no" oder "force".

  • yes
    • Zuerst werden DNS-Nameserver mit TLS-Unterstützung versucht. Wenn kein NS mit TLS-Unterstützung gefunden wird, wird stattdessen UDP/TCP-Auflösung versucht.
  • no
    • keine TLS-Unterstützung (keine DNS-Nameserver mit TLS-Unterstützung verwenden)
  • force
    • Es werden nur DNS-Nameserver mit TLS-Unterstützung verwendet, und jede von Crawlector initiierte DNS-Abfrage verwendet DoT (DNS over TLS).

Die Option keep_default gibt an, ob der/die Standard-Nameserver zur Liste der Nameserver hinzugefügt werden soll(en. Es wird angenommen, dass ein Standard-Nameserver TLS nicht unterstützt.

Die Option conn_time_out gibt die Zeit in Millisekunden an, die auf eine Antwort auf eine DNS-Abfrage gewartet werden soll.

Die Option enable schaltet diese Funktionalität ein oder aus.

Verschiedene Verbesserungen in Version 2.0

  • Die Befehlszeilenoptionen "-v" und "-c" wurden hinzugefügt. Die Option "-v" dient zum Drucken von Versionsinformationen auf der Konsole. Die Option "-c" dient zum Lesen einer anderen Konfigurationsdatei als der Standarddatei "cl_config.ini".
  • Verschiedene Code-Optimierungen und kleine Verbesserungen
  • Für jede gelesene Domain (ohne Subdomain) wird Crawlector "www." vor jeden gelesenen Site-Eintrag setzen, falls dies nicht bereits vorhanden ist. Beispielsweise muss im Fall der RapidAPI-Subdomain-Enumeration-Abfrage die abgefragte Domain mit "www." beginnen.
  • Die Optionen clear_dns und upg_2_https wurden zum Abschnitt [default] hinzugefügt. Ersteres löscht den Hostnamen-zu-IP-DNS-Cache, und Letzteres aktualisiert jede Site auf HTTPS, indem "https://" vorangestellt wird. Ebenso wurde die Option tld_upgrd_2_https zum Abschnitt [site] hinzugefügt, um aktive Domains mit verschiedenen TLDs auf https zu aktualisieren.
  • Die Optionen rapid_api_weeks und rapid_api_limit wurden zum Abschnitt [site] hinzugefügt, um die API-Anfrage an RapidAPI zu konfigurieren. Beide Optionen sind optional. Ersteres gibt die Anzahl der Wochen an, die aus der DB abgefragt werden sollen, während Letzteres die Anzahl der pro Site zurückzugebenden Subdomains angibt.
  • In Version 2.0 können Sie ein anderes Cache-Verzeichnis für die Abschnitte [spider] und [default] über die Option cache_dir angeben.
  • Viele Optionen wurden in Version 2.0 zum Abschnitt page hinzugefügt, darunter:
  • Die whois_info-Option ruft Whois-Domain-Informationen ab, einschließlich Registrar, registered_on, expires_on und updated_on. Diese Daten werden von https://www.whois.com/whois/ abgerufen. Die Daten werden in der CSV-Datei cl_mlog gespeichert.
  • Die Option page_title speichert den Seitentitel in der CSV-Datei cl_mlog.
  • Die Option results_dir wurde hinzugefügt, um die Möglichkeit zu bieten, Seiten unter einem anderen Pfad zu speichern. Wenn nicht gesetzt, wird der Ordner "results" im selben Verzeichnis wie Crawlector erstellt.
  • Yara-Engine auf 4.3.2 aktualisiert

Designüberlegungen

  • Eine URL-Seite wird abgerufen, indem eine GET-Anfrage an den Server gesendet, der Antworttext des Servers gelesen und zur Erkennung an die Yara-Engine übergeben wird.
  • Einige der GET-Anfrageattribute sind im Abschnitt [default] der Konfigurationsdatei definiert, einschließlich der User-Agent- und Referer-Header sowie des Verbindungs-Timeouts und anderer Optionen.
  • Obwohl Crawlector die Daten einer Sitzung in eine CSV-Datei protokolliert, wird die Konvertierung in eine SQL-Datei für eine bessere Leistung, Manipulation und Abruf der Daten empfohlen. Dies wird deutlich, wenn Sie Tausende von Domains crawlen.
  • Wiederholte Domains/URLs in cl_sites sind erlaubt.

Einschränkungen

  • Single-Threaded
  • Statische Erkennung (keine dynamische Bewertung des Inhalts einer bestimmten Seite). Bitte prüfen Sie stattdessen die DOE-Funktion.
  • Noch keine Headless-Browser-Unterstützung!

Verwendete Drittanbieter-Bibliotheken

  • Chilkat: Bibliothek für Website-Spidering, HTTP-Kommunikation, Hashing, JSON-Parsing und Dateikomprimierung (ZIP), unter anderem
  • Yara: zum Scannen von Regeln (v4.5.4)
  • CrossGuid: zum Generieren von GUID/UUID
  • Inih: zum Parsen von Konfigurationsdateien
  • Rapidcsv: zum Parsen von CSV-Dateien
  • Color Console: für Konsolenfärbung
  • TLSH (Trend Micro Locality Sensitive Hash) (v4.8.2)

Beitragen

Pull-Requests und Issues sind willkommen. Kommentare und Vorschläge werden sehr geschätzt.

Autor

Mohamad Mokbel (@MFMokbel)

Tool herunterladen
  • Enthält entdeckte Subdomains (Teil des [site]-Abschnitts)
  • \expanded\exp_tld_<vormittags|nachmittags>.txt
    • Enthält entdeckte Domains (Teil des [site]-Abschnitts)
  • include_url
    id_postfix (Typ)Beschreibung
    _t1_pTyp 1 ohne ID
    _sdUntertyp für Subdomains
    _tldUntertyp für TLDs
    _t2_pTyp 2 mit einer ID
    _t3_sTyp 3 gespiderte Domains
    _t3_scTyp 3 gespiderte Domains mit einem untergeordneten Knoten
    _t3_ssTyp 3, wenn eine URL vom Typ 3 (_t3_s) in eine URL vom Typ 1 umgewandelt wird
    _t3_s_eTyp 3 gespiderte Domains - externe Links
    _obj_für Tiefenscanning und Objekt-Extraktion
    _t4_rufür Weiterleitungs-URLs (für alle Typen)
    tlds_file
    tlds_url
  • tld_dl_time_out, dies dient zum Einstellen der maximalen Zeitüberschreitung für die dnslookup-Funktion, wenn versucht wird, zu überprüfen, ob die fragliche Domain aufgelöst wird oder nicht
  • tld_use_connect, diese Option aktiviert die Funktionalität, eine Verbindung zur fraglichen Domain über eine Liste von Ports herzustellen, die in der Option tlds_connect_ports definiert sind
  • Die Option tlds_connect_ports akzeptiert eine Liste von Ports, durch Komma getrennt, oder eine Liste von Bereichen, wie z. B. 25-40,90-100,80,443,8443 (Bereichsanfang und -ende sind inklusive)
    • tld_con_time_out, dies dient zum Einstellen der maximalen Zeitüberschreitung für die connect-Funktion
  • tld_con_use_ssl, aktivieren/deaktivieren der Verwendung von SSL beim Versuch, eine Verbindung zur Domain herzustellen
  • Wenn save_to_file_subd auf true gesetzt ist, werden entdeckte Subdomains in "\expanded\exp_subdomain_<vormittags|nachmittags>.txt" gespeichert
  • Wenn save_to_file_tld auf true gesetzt ist, werden entdeckte Domains in "\expanded\exp_tld_<vormittags|nachmittags>.txt" gespeichert
  • Wenn exit_here auf true gesetzt ist, bricht Crawlector nach der Ausführung dieser [site]-Funktion ab, unabhängig von anderen aktivierten Optionen. Das bedeutet, dass gefundene Sites nicht gecrawlt/gespidert werden
  • SteuerungsbefehlBeschreibung
    cl_get_dateRuft das Datum und die Uhrzeit ab, zu der Crawlector gestartet wurde, sowie das aktuelle Datum und die Uhrzeit.
    cl_pingSendet die Nachricht "Pong..." zurück. Dies dient zur Überprüfung, ob der C&C-Kanal funktioniert.
    cl_get_configLädt die aktuell verwendete Konfigurationsdatei (z. B. cl_config.ini) als Textdatei hoch.
    cl_update_delay <Ganzzahl_in_Millisekunden>Aktualisiert die Check-in-Zeit zwischen jedem Pull-Request für Steuerungsbefehle.

    - Ändert den Wert (ctrl_sleep) nur für die aktuelle Sitzung.

    cl_turn_off_slack_alertSchaltet die Slack-Benachrichtigungsfunktion für die aktuell aktive Sitzung aus.
    cl_turn_on_slack_alertSchaltet die Slack-Benachrichtigungsfunktion für die aktuell aktive Sitzung ein.
    cl_helpListet diese Hilfemeldung auf.
    cl_exitBeendet Crawlector erzwungenermaßen.