Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Crawlector — Crawlector — это фреймворк для охоты за угрозами, предназначенный для сканирования веб-сайтов на наличие вредоносных объектов. | Kitploit
Инструменты/GitHubGitHub/mfmokbel/crawlector
OSINT (Разведка открытых источников)Сканеры уязвимостейФиды и агрегаторы угрозСбор информацииВеб-безопасностьАнализ вредоносных программРазведка угрозКраулер
GitHubmfmokbel/crawlector

Crawlector

Crawlector — это фреймворк для охоты за угрозами, предназначенный для сканирования веб-сайтов на наличие вредоносных объектов.

Репозиторий
12310169 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Crawlector

Crawlector (название Crawlector образовано от сочетания Crawler & Detector) — это фреймворк для охоты за угрозами, предназначенный для сканирования веб-сайтов на наличие вредоносных объектов.

Примечание-1: Фреймворк был впервые представлен на конференции No Hat в Бергамо, Италия, 22 октября 2022 года (Слайды, Запись на YouTube). Также он был представлен во второй раз на конференции AVAR в Сингапуре 2 декабря 2022 года.

Примечание-2: Сопутствующий инструмент EKFiddle2Yara (инструмент, который принимает правила EKFiddle и преобразует их в правила Yara), упомянутый в докладе, также был выпущен на обеих конференциях.

Примечание-3: Версия 2.0 (Photoid Build:180923), знаковый выпуск, была выпущена 18 сентября 2023 года.

Примечание-4: Версия 2.1 (Universe-647 Build:031023) была выпущена 3 октября 2023 года. Основное дополнение — функция уведомлений Slack Alert.

Примечание-5: Версия 2.2 (Hallstatt Build:051123) была выпущена 5 ноября 2023 года. Основное дополнение — функция удаленного управления через Slack.

Примечание-6: Версия 2.3 (Munich Build:241123) была выпущена 24 ноября 2023 года. Основное дополнение — функция DNS-серверов имен.

Примечание-6: Версия 2.3.1 {Nero Build:131225} была выпущена 13 декабря 2025 года. Это исправительный выпуск.

Возможности

  • Поддержка паутинного сканирования веб-сайтов для поиска дополнительных ссылок для сканирования (только до 2 уровней)
  • Интеграция Yara в качестве внутреннего движка для сканирования по правилам
  • Поддержка онлайн и офлайн сканирования
  • Поддержка сканирования цифровых сертификатов доменов/сайтов
  • Поддержка запросов к URLhaus для поиска вредоносных URL на странице
  • Глубокое извлечение объектов (DOE)
  • Уведомления Slack Alert
  • Параметризованная поддержка HTTP-перенаправлений
  • Получение информации Whois
  • Поддержка хеширования содержимого страницы с помощью TLSH (Trend Micro Locality Sensitive Hash) и других стандартных криптографических хеш-функций, таких как md5, sha1, sha256 и ripemd128, среди прочих
    • TLSH не вернет значение, если размер страницы меньше 50 байт или если в данных недостаточно случайности
  • Поддержка запросов рейтинга и категории каждого URL
  • Поддержка расширения заданного сайта путем попытки найти все доступные TLD и/или поддомены для того же домена
    • Эта функция использует API Omnisint Labs (этот сайт недоступен с 10 марта 2023 года) и RapidAPI
    • Реализация расширения TLD является нативной
    • Эта функция, вместе с рейтингом и категоризацией, предоставляет возможность найти мошеннические/фишинговые/вредоносные домены для исходного домена
  • Поддержка разрешения доменов (IPv4 и IPv6)
  • Сохранение отсканированных страниц веб-сайтов для последующего сканирования (можно сохранить в сжатом zip)
  • Все настройки фреймворка управляются через один настраиваемый файл конфигурации
  • Все сеансы сканирования сохраняются в хорошо структурированный CSV-файл с множеством информации о сканируемом веб-сайте, а также информацией о сработавших правилах Yara
  • Многие другие функции...
  • Все HTTP(S) коммуникации учитывают прокси
  • Один исполняемый файл
  • Написан на C++

Сканирование URLHaus и интеграция с API

Это для проверки вредоносных URL на каждой сканируемой странице. Фреймворк может либо запрашивать список вредоносных URL с сервера URLHaus (конфигурация: url_list_web), либо из файла на диске (конфигурация: url_list_file), и если указан последний, он имеет приоритет над первым.

Работает следующим образом: содержимое каждой страницы сравнивается со всеми записями URL в url_list_web или url_list_file, проверяя все вхождения. Кроме того, при совпадении, если опция конфигурации check_url_api установлена в true, Crawlector отправит POST-запрос к URL API, заданному в опции url_api, которая возвращает JSON-объект с дополнительной информацией о совпавшем URL. Такая информация включает urlh_status (например, online, offline, unknown), urlh_threat (например, malware_download), urlh_tags (например, elf, Mozi) и urlh_reference (например, https://urlhaus.abuse.ch/url/1116455/). Эта информация будет включена в файл журнала cl_mlog_<текущая_дата><текущее_время><(pm|am)>.csv (см. ниже), только если check_url_api установлен в true. В противном случае файл журнала будет включать столбцы urlh_url (список совпавших вредоносных URL) и urlh_hit (количество вхождений для каждого совпавшего вредоносного URL), при условии, что check_url установлен в true.

Функция URLHaus может быть полностью отключена, установив опцию конфигурации check_url в false.

Важно отметить, что эта функция может замедлить сканирование, учитывая огромное количество вредоносных URL (~ 130 миллионов записей на момент написания), которые необходимо проверить, и время, необходимое для получения дополнительной информации от сервера URLHaus (если опция check_url_api установлена в true).

Структура файлов и папок

  1. \cl_sites
    • это место, где хранится список сайтов для посещения или сканирования.
    • поддерживает несколько файлов и каталогов.
  2. \crawled
    • где все пропарсенные/спайдерные URL сохраняются в текстовый файл.
  3. \certs
    • где хранятся цифровые сертификаты всех доменов/сайтов (в формате .der).
  4. \results
    • где сохраняются посещенные веб-сайты. Настраивается через опцию results_dir
  5. \pg_cache
    • кэш программы для сайтов, которые не являются частью функциональности паука. Настраивается через опцию cache_dir, раздел [default].
  6. \cl_cache
    • кэш сканера для сайтов, которые являются частью функциональности паука. Настраивается через опцию cache_dir, раздел [spider].
  7. \yara_rules
    • это место, где хранятся все правила Yara. Все правила, существующие в этом каталоге, будут загружены движком, разобраны, проверены и оценены перед выполнением.
  8. cl_config.ini
    • этот файл содержит все параметры конфигурации, которые можно настроить для изменения поведения фреймворка.
  9. cl_mlog_<текущая_дата><текущее_время><(pm|am)>.csv
    • файл журнала, содержащий множество информации о посещенных веб-сайтах
    • дата, время, статус сканирования Yara, список сработавших правил Yara с смещениями и длинами каждого совпадения, id, URL, код состояния HTTP, статус соединения, заголовки HTTP, размер страницы, путь к сохраненной странице на диске и другие столбцы, связанные с результатами URLHaus.
    • имя файла уникально для каждой сессии.
  10. cl_offl_mlog_<текущая_дата><текущее_время><(pm|am)>.csv
    • файл журнала, содержащий информацию о файлах, сканированных в офлайн-режиме.
    • список сработавших правил Yara с смещениями и длинами совпадений, и путь к сохраненной странице на диске.
    • имя файла уникально для каждой сессии.
  11. cl_certs_<текущая_дата><текущее_время><(pm|am)>.csv
    • файл журнала, содержащий множество информации о найденных цифровых сертификатах
  12. \expanded\exp_subdomain_<дата><время><(pm|am)>.txt
    • содержит обнаруженные поддомены (часть раздела [site])
  13. \expanded\exp_tld_<дата><(pm|am)>.txt

Файл конфигурации (cl_config.ini)

Вы должны ознакомиться с файлом конфигурации cl_config.ini перед запуском любой сессии. Все разделы и параметры задокументированы в самом файле конфигурации.

Функция офлайн-сканирования Yara является автономной опцией, то есть, если она включена, Crawlector будет выполнять только эту функцию, независимо от других включенных функций. То же самое верно и для функции сканирования цифровых сертификатов доменов/сайтов. В любом случае рекомендуется отключить все неиспользуемые функции в файле конфигурации.

  • В зависимости от настроек конфигурации (log_to_file или log_to_cons), если правило Yara ссылается только на атрибуты модуля (например, PE, ELF, Hash и т.д.), то Crawlector отобразит только имя правила при совпадении, исключая данные о смещении и длине.

Примечание: для любой опции, принимающей путь, всегда указывайте абсолютный путь.

Формат шаблонов сайтов

Чтобы посетить/отсканировать веб-сайт, список URL должен быть сохранен в текстовых файлах в каталоге "cl_sites".

Crawlector принимает три типа URL:

  1. Тип 1: один URL на строку
    • Crawlector присвоит уникальное имя каждому URL, полученное из имени хоста URL.
  2. Тип 2: один URL на строку, с уникальным именем [a-zA-Z0-9_-]{1,128} = <url>
  3. Тип 3: для функциональности паука используется уникальный формат. Один URL на строку выглядит так:

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

Например,

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

что эквивалентно: mfmokbel[d:1->3,t:10,s:0] = https://www.mfmokbel.com

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

depth, total и sleep также могут быть заменены сокращенными версиями d, t и s соответственно.

  • depth: паук поддерживает два уровня глубины для поиска дополнительных URL (это проектное решение).
  • Значение 0 указывает на глубину уровня 1, при этом значение после "->" игнорируется.
  • Глубина уровня 1 управляется параметром total. Итак, сначала паук пытается найти как можно больше дополнительных URL для указанного URL.
  • Значение после "->" представляет максимальное количество URL для паутинного сканирования для каждого найденного URL (в соответствии со значением параметра total).
  • Значение 1 указывает на глубину уровня 2, при этом значение после "->" представляет максимальное количество URL для поиска для каждого URL, найденного в соответствии с параметром total. Для пояснения, как показано в примере выше, сначала паук будет искать 10 URL (как указано в параметре total), а затем каждый из этих найденных URL будет просканирован до максимум 3 URL; следовательно, в лучшем случае мы получим 40 (10 + (10*3)) URL.
  • Параметр sleep принимает целочисленное значение, представляющее количество миллисекунд для паузы между каждым HTTP-запросом.

Примечание 1: URL типа 3 может быть превращен в URL типа 1, установив параметр конфигурации live_crawler в false в файле конфигурации, в разделе spider.

Примечание 2: Пустые строки и строки, начинающиеся с ";", "#" или "//", игнорируются.

Функциональность паука

Функциональность паука дает Crawlector возможность находить дополнительные ссылки на целевой странице. Паук поддерживает следующие возможности:

  • Домен должен быть Типа 3 для работы функциональности паука
  • Вы можете указать список шаблонов с подстановочными знаками (разделенных вертикальной чертой), чтобы предотвратить паутинное сканирование совпадающих URL через опцию конфигурации exclude_url. Например, *.zip|*.exe|*.rar|*.zip|*.7z|*.pdf|.*bat|*.db
  • Вы можете указать список шаблонов с подстановочными знаками (разделенных вертикальной чертой), чтобы паутинное сканирование выполнялось только для URL, соответствующих шаблону, через опцию конфигурации include_url. Например, */checkout/*|*/products/*
  • Вы можете исключить HTTPS URL через опцию конфигурации exclude_https
  • Вы можете учитывать исходящие/внешние ссылки только для главной страницы через опцию конфигурации add_ext_links. Эта функция учитывает опции конфигурации exclude_url и include_url.
  • Вы можете учитывать только исходящие/внешние ссылки главной страницы, исключая все остальные URL, через опцию конфигурации ext_links_only. Эта функция учитывает опции конфигурации exclude_url и .

Типы ID

В релизе 2.0 ID имеют явно назначенные типы путем добавления одного из следующих типов к самому ID:

Наличие у каждого ID своего типа упрощает просмотр и фильтрацию результатов. Кроме того, это используется внутренне по разным причинам.

Функциональность ранжирования сайтов

  • Это для проверки рейтинга веб-сайта
  • Вы предоставляете файл со списком веб-сайтов и их рейтингом в формате CSV
  • Сервисы, предоставляющие списки рейтингов веб-сайтов, включают Alexa top-1m (прекращено с мая 2022), Cisco Umbrella, Majestic, Quantcast, Farsight и Tranco, среди прочих
  • Формат CSV файла (только 2 столбца): первый столбец содержит рейтинг, второй столбец содержит имя домена
  • Если ячейка содержит данные в кавычках, они будут автоматически удалены
  • Разрывы строк не допускаются в тексте в кавычках
  • Ведущие и конечные пробелы удаляются из прочитанных ячеек
  • Пустые и комментарные строки пропускаются
  • Раздел site_ranking в файле конфигурации предоставляет некоторые опции для изменения способа чтения CSV файла
  • Производительность этого запроса зависит от количества записей в CSV файле
  • Crawlector сравнивает каждую запись в CSV файле с исследуемым доменом, а не наоборот
  • Сравнивается только зарегистрированный/домен верхнего уровня

Поиск TLD и поддоменов - раздел [site]

  • Раздел site предоставляет возможность расширения заданного сайта путем попытки найти все доступные домены верхнего уровня (TLD) и/или поддомены для того же домена. Если найдены, новые TLD/поддомены будут проверены как любые другие домены
  • Эта функция использует API Omnisint Labs (https://omnisint.io/) и RapidAPI
  • API Omnisint Labs возвращает поддомены и TLD, тогда как RapidAPI возвращает только поддомены (API Omnisint Labs недоступен с 10 марта 2023 года; однако реализация все еще доступна на случай, если сайт снова заработает)
  • Для RapidAPI вам нужен действительный ключ API "Domains records", который можно запросить в RapidAPI, и вставить его в ключ rapid_api_key в файле конфигурации
  • При включенном find_tlds, в дополнение к результатам TLD от API Omnisint Labs, фреймворк пытается найти другие активные/зарегистрированные домены, проходя по каждой записи TLD в tlds_file или tlds_url
  • Если задан tlds_url, он должен указывать на URL, который содержит TLD, каждый на новой строке (строки, начинающиеся с символов ';', '#' или '//', игнорируются)
  • tlds_file содержит имя файла со списком TLD (аналогично tlds_url; присутствует только TLD, без '.', например, "com", "org")
  • Если задан tlds_file, он имеет приоритет над

Функциональность перенаправления

Функция перенаправления URL в предыдущих версиях была сломана. Этот релиз предоставляет полную переработку функции перенаправления с высокой степенью параметризации для управления её работой. В версии 2.0 перенаправление имеет выделенный раздел в файле конфигурации с именем [redirect]. Вся функциональность перенаправления может быть включена/отключена через опцию follow_redir в разделе [default].

Функция перенаправления проверяет коды состояния HTTP-ответа: 301, 302, 303, 307 и 308. В случае совпадения Crawlector анализирует заголовок Location для URL перенаправления, учитывая как абсолютные, так и относительные URL. Функциональность перенаправления в Crawlector разработана для производительности и гибкости. Раздел [redirect] предоставляет следующий список опций:

[redirect]

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

Опция depth принимает одно из значений: last или all. Она контролирует, какие найденные URL перенаправления посещать, в зависимости от того, включена ли опция visit. all предназначена для посещения всех найденных URL перенаправления. last предназначена для посещения последнего URL перенаправления. Посещение этих URL происходит в той же/текущей сессии. Имейте в виду, что независимо от значения depth, Crawlector записывает список всех найденных перенаправлений на URL вместе с общим количеством в абсолютной форме. Они будут записаны в CSV файл cl_mlog в столбцы redirect_urls и redirect_total.

Опция max_redirect устанавливает верхний предел общего количества обнаруженных перенаправлений URL.

Опция skip_similar лучше всего объясняется на следующем примере:

Предположим, исходный URL, переданный Crawlector для сканирования, — "https://www.mfa.gov.law", и один из найденных redirect_urls — "https://mfa.gov.law/". Как вы можете заметить, единственное отличие — косая черта в конце URL. Эти два URL одинаковы, и сервер ответит одной и той же страницей. Если опция visit установлена в true, Crawlector просканирует оба URL, тем самым тратя ресурсы и выполняя одну и ту же задачу дважды. Это может быть не проблемой для 1 или 2 URL, но если у вас тысячи URL для сканирования и опция visit включена, то вероятность того, что более половины из них будут иметь такой обнаруженный URL, очень высока, и в этом случае это становится насущной проблемой. Таким образом, установка опции skip_similar в true поможет решить эту проблему, пропуская посещение похожих URL. В дополнение к сценарию с косой чертой, опция skip_similar также учитывает следующие два сценария: если URL перенаправления отличается только одним или обоими префиксами "https://" и "www.".

Глубокое извлечение объектов (DOE)

Одним из основных дополнений в версии 2.0 является возможность извлекать различные типы объектов со страницы, сохранять их на диск, сканировать с помощью Yara и URLHaus и сохранять результаты в CSV файл. Для включения этой функции установите опцию extract_obj в true в разделе [page].Реализация функции глубокого извлечения объектов работает путем создания MHT-архива веб-страницы, включая внешние скрипты, изображения и CSS-файлы. Все встроенные файлы будут извлечены в путь, указанный в опции obj_dir (путь: obj_dir/objects/), где каждый файл будет просканирован. Данная реализация не является функционалом headless-браузера. DOE отличается и не включает загрузку страницы для получения всех динамически запрашиваемых URL. Поэтому у нее есть свои ограничения.

Все извлеченные объекты будут иметь часть своих метаданных, записанных в CSV-файл. О чем следует помнить при чтении CSV-файла: идентификатор домена с извлеченным объектом имеет уникальный формат: <domain_id>_<type>_p_obj_<counter> (например, _mfa_gov_cef40bc5-ba6a-41_t1_p_obj_0_). А url будет иметь следующий формат: <url>__<object_filename> (например, https://www.mfa.gov.law\_\_bilmur.min.js).

Если опция delete_obj установлена в true, то все извлеченные объекты, не обнаруженные Yara, удаляются с диска. Если опция log_all_objs установлена в true, то все метаданные извлеченных объектов записываются в тот же CSV-файл cl_mlog. Если опция check_urlhaus в разделе [page] установлена в true, то каждый извлеченный объект будет проверен через URLHaus. Обратите внимание, что параметры этой опции наследуются из раздела [urlhaus].

Примечание: если сканируемый домен перенаправляет на другой домен, то последний URL перенаправления должен быть передан DOE для работы. Более того, домен должен начинаться с "HTTP(S)://", чтобы DOE работал.

Slack-уведомления

Иногда может потребоваться запускать сеансы Crawlector, которые могут длиться несколько дней, например, при сканировании топ-1 миллиона сайтов Alexa, и в таком сценарии нужен способ удаленного мониторинга работы фреймворка и его прогресса. Поэтому в релизе 2.1 я добавил функцию Slack-уведомлений, чтобы обеспечить механизм мониторинга выполнения Crawlector в реальном времени, отправляя предупреждения Yara, события std::exit(), а также предупреждения и ошибки процесса в выбранный Slack-канал. В дополнение к этому, Crawlector устанавливает обработчик консоли для попытки мониторинга определенных типов событий, включая ctrl_c, ctrl_close, ctrl_break, ctrl_logoff и ctrl_shutdown. Важно помнить, что Crawlector не изменяет поведение обработчика по умолчанию; он лишь сообщает в Slack-канал о получении любого из перечисленных событий. В будущем это может быть расширено для других типов событий.

Эта функция использует Slack REST API, а для аутентификации на сервере использует OAuth 2.0. Для её использования потребуется токен Slack API и канал с соответствующими правами. Эта функция только отправляет сообщения в Slack-канал и не принимает и не обрабатывает входящие сообщения.

Раздел [slack_alert] предоставляет следующий список опций:

[slack_alert]

  • alert = true ; (t: bool)
  • api_token = ; (t: string)
  • channel = ; (t: string)
  • sleep = ; (t: uint32_t) в миллисекундах

Чтобы отключить или включить эту функцию, просто установите опцию alert в true или false. Кроме того, необходимо указать api_token и имя channel.

Примечание-1: На этапе инициализации Crawlector проверяет, действителен ли предоставленный токен аутентификации и задан ли канал. В случае неудачи эта функция автоматически отключается.

Все предупреждения, отправляемые в Slack-канал, публикуются под именем пользователя Crawlector v<номер_версии>, например, Crawlector v2.1. У пользователя иконка паутины. Кроме того, все предупреждения объединяются в треды, то есть все последующие предупреждения после первого стартового сообщения публикуются как ответы. Это было дизайнерским решением и помогает, если вы одновременно запускаете несколько сеансов, все сообщающих в один канал. Некоторые предупреждения используют язык разметки markdown для форматирования.

Когда процесс успешно завершается и готовится к выходу, он публикует следующее сообщение:

Crawlector завершил работу и корректно выключается

Примечание-2: Ограничение Slack на отправку сообщений через API — одно сообщение в секунду с возможностью коротких всплесков. Crawlector не ставит сообщения в очередь для обработки большего количества сообщений в секунду. В будущем это может измениться при необходимости; однако опция sleep позволяет процессу засыпать на указанное время после каждого успешно отправленного сообщения.

Удаленное управление через Slack

С выходом версии 2.2 (кодовое имя Hallstatt) я представляю возможность удаленного управления Crawlector с помощью специально разработанных контрольных команд. Причина внедрения этой функциональности — мониторинг и управление определенными аспектами сеансов, которые должны работать часами или днями. Например, вы можете захотеть включить/выключить функцию Slack-уведомлений, завершить Crawlector или загрузить файл конфигурации и другое.

Эта функция использует Slack REST API, а для аутентификации на сервере использует OAuth 2.0. Для её использования потребуется токен Slack API и канал с соответствующими правами. Токен API тот же, что используется в разделе [slack_alert], опция api_token.

Раздел [slack_alert] предоставляет следующий дополнительный список опций для функции удаленного управления:

[slack_alert] (опции управления)

  • control = true ; (t: bool)
  • ctrl_channel = ; (t: string) должен быть идентификатором канала, а не его именем
  • ctrl_sleep = ; (t: uint32_t) в миллисекундах

Чтобы отключить или включить эту функцию, просто установите опцию control в true или false. Поле ctrl_channel должно содержать идентификатор канала, а не его имя. Вы можете получить его, щелкнув правой кнопкой мыши по имени канала -> Просмотреть детали канала -> Прокрутить вниз до конца окна, и вы увидите поле Channel ID: <channel_id>.

Опция ctrl_sleep определяет частоту обращения к каналу управления, указанному в опции ctrl_channel, для получения команд управления. Вы также можете обновить эту опцию с помощью команды управления cl_update_delay <time_in_ms>.

Список поддерживаемых команд управления следующий:

Примечание-1: На этапе инициализации Crawlector проверяет, действителен ли предоставленный токен аутентификации и задан ли канал. В случае неудачи эта функция автоматически отключается.

Если эта функция включена и после успешной проверки токена API, Crawlector отправляет сообщение "Crawlector готов к приему команд управления. Введите команду cl_help для списка поддерживаемых команд управления." в указанный ctrl_channel.

Все ответы на заданную команду управления объединяются в треды. Кроме того, команды управления читаются для каждого сеанса отдельно, с момента его запуска.

Примечание-2: Ограничение Slack на получение (историю сообщений) через API — один запрос в секунду с возможностью коротких всплесков. Таким образом, если опция ctrl_sleep установлена на значение меньше секунды или больше секунды, Crawlector ставит в очередь сообщения для обработки большего количества команд управления в секунду и выполняет их в порядке поступления.

DNS-серверы имен

С выходом версии 2.3 (кодовое имя Munich) появилась возможность указать список DNS-серверов для всех DNS-запросов и разрешений DNS-в-IP, выполняемых Crawlector, с высоким уровнем контроля. Это важно, если вы сканируете заблокированные или вредоносные сайты. Эта функция применяется ко всем функциям Crawlector, где выполняется DNS-запрос или запрос DNS-в-IP. Более того, она предоставляет возможность выполнять DNS через TLS для каждого сервера, который его поддерживает.

Раздел [dns_ns] предоставляет следующий список опций для администрирования этой функции:

[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 или force)
  • keep_default = false ; (t: bool)
  • conn_time_out = 3000 ; (t: uint32_t) в миллисекундах (0 — ожидать бесконечно)

Опция name_servers принимает параметризованный список DNS-серверов, разделенных запятыми. Значение этой опции имеет формат: <IPv4_адрес>(<tls_опция>) где <tls_опция> принимает одно из значений "d_tls" или "e_tls". Опции "d_tls" или "e_tls" указывают, поддерживает ли данный сервер DNS через TLS или нет, соответственно. Эта опция будет принудительно применяться в зависимости от значения, установленного для опции dns_tls. Например, запись 8.8.8.8(e_tls) означает использование DNS-сервера Google 8.8.8.8 с поддержкой TLS, тогда как запись 12.13.14.15(d_tls) означает использование DNS-сервера 12.13.14.15 без поддержки TLS.

Опция dns_tls задает требуемый уровень принудительного использования TLS. Эта опция принимает одно из значений: "yes", "no" или "force".

  • yes
    • Сначала будут использоваться DNS-серверы с поддержкой TLS, а если таких серверов не найдено, то будет использоваться разрешение через UDP/TCP.
  • no
    • Без поддержки TLS (не использовать DNS-серверы с поддержкой TLS).
  • force
    • Будут использоваться только DNS-серверы с поддержкой TLS, и любой DNS-запрос, инициированный Crawlector, будет использовать DoT (DNS через TLS).

Опция keep_default определяет, добавлять ли сервер(ы) по умолчанию в список серверов. Предполагается, что сервер по умолчанию не поддерживает TLS.

Опция conn_time_out задает время ожидания ответа на DNS-запрос в миллисекундах.

Опция enable включает или выключает эту функциональность.

Прочие улучшения в версии 2.0

  • Добавлены параметры командной строки "-v" и "-c". Параметр "-v" выводит информацию о версии в консоль. Параметр "-c" предназначен для чтения другого файла конфигурации, отличного от файла по умолчанию "cl_config.ini".
  • Различные оптимизации кода и мелкие улучшения.
  • Для каждого прочитанного домена (не с поддоменом) Crawlector добавляет "www." к каждой записи сайта, если его там еще нет. Например, в случае запроса перечисления поддоменов RapidAPI, запрашиваемый домен должен начинаться с "www.".
  • Добавлены опции clear_dns и upg_2_https в раздел [default]. Первая очищает кэш DNS (преобразование имени хоста в IP), а вторая обновляет каждый сайт до HTTPS, добавляя "https://" в начало. Аналогично, опция tld_upgrd_2_https добавлена в раздел [site] для обновления активных доменов с разными TLD до https.
  • Добавлены опции rapid_api_weeks и rapid_api_limit в раздел [site] для настройки API-запроса к RapidAPI. Обе опции необязательны. Первая указывает количество недель для запроса из БД, а вторая — количество поддоменов для возврата на каждый сайт.
  • В релизе 2.0 можно указать отдельный каталог кэша для разделов [spider] и [default] с помощью опции cache_dir.
  • В раздел page в релизе 2.0 добавлено множество опций, включая:
  • Опция whois_info извлекает информацию whois о домене, включая регистратора, дату регистрации, дату истечения и дату обновления. Эти данные извлекаются с https://www.whois.com/whois/. Данные сохраняются в CSV-файл cl_mlog.
  • Опция page_title сохраняет заголовок страницы в CSV-файл cl_mlog.
  • Добавлена опция results_dir для возможности сохранения страниц в другом пути. Если не задана, папка "results" будет создана в той же директории, что и Crawlector.
  • Движок Yara обновлен до версии 4.3.2

Особенности проектирования

  • URL-страница загружается путем отправки GET-запроса к серверу, чтения тела ответа сервера и передачи его движку Yara для обнаружения.
  • Некоторые атрибуты GET-запроса определяются в разделе [default] файла конфигурации, включая заголовки User-Agent и Referer, тайм-аут соединения и другие опции.
  • Хотя Crawlector записывает данные сеанса в CSV-файл, рекомендуется преобразовывать его в SQL-файл для лучшей производительности, манипулирования и извлечения данных. Это становится очевидным при сканировании тысяч доменов.
  • Повторяющиеся домены/URL в cl_sites допускаются.

Ограничения

  • Однопоточность
  • Статическое обнаружение (нет динамической оценки содержимого страницы). Вместо этого обратите внимание на функцию DOE.
  • Поддержка headless-браузера пока отсутствует!

Используемые сторонние библиотеки

  • Chilkat: библиотека для веб-скрейпинга, HTTP-коммуникаций, хэширования, парсинга JSON и сжатия файлов (ZIP) и др.
  • Yara: для сканирования правил (v4.5.4)
  • CrossGuid: для генерации GUID/UUID
  • Inih: для парсинга файла конфигурации
  • Rapidcsv: для парсинга CSV-файлов
  • Color Console: для цветной консоли
  • TLSH (Trend Micro Locality Sensitive Hash) (v4.8.2)

Вклад

Приветствуются pull request'ы и issue. Комментарии и предложения очень ценятся.

Автор

Мохамад Мокбель (@MFMokbel)

Скачать инструмент
<время>
  • содержит обнаруженные домены (часть раздела [site])
include_url
id_postfix (тип)описание
_t1_pтип 1 простой без id
_sdподтип для поддоменов
_tldподтип для tld
_t2_pтип 2 простой с id
_t3_sтип 3 сканированные пауком домены
_t3_scтип 3 сканированные пауком домены с дочерним узлом
_t3_ssтип 3, когда URL типа 3 (_t3_s) преобразуется в URL типа 1
_t3_s_eтип 3 сканированные пауком домены внешние ссылки
_obj_для глубокого сканирования и извлечения объектов
_t4_ruдля URL перенаправления (для всех типов)
tlds_url
  • tld_dl_time_out, для установки максимального тайм-аута для функции dnslookup при попытке проверить, разрешается ли домен
  • tld_use_connect, эта опция включает функциональность подключения к домену через список портов, определенных в опции tlds_connect_ports
  • Опция tlds_connect_ports принимает список портов, разделенных запятыми, или список диапазонов, например, 25-40,90-100,80,443,8443 (начало и конец диапазона включительно)
    • tld_con_time_out, для установки максимального тайм-аута для функции подключения
  • tld_con_use_ssl, включить/отключить использование SSL при попытке подключения к домену
  • Если save_to_file_subd установлен в true, найденные поддомены будут сохранены в "\expanded\exp_subdomain_<дата><время><(pm|am)>.txt"
  • Если save_to_file_tld установлен в true, найденные домены будут сохранены в "\expanded\exp_tld_<дата><время><(pm|am)>.txt"
  • Если exit_here установлен в true, то Crawlector завершает работу после выполнения этой функции [site], независимо от других включенных опций. Это означает, что найденные сайты не будут сканироваться/парситься.
  • Команда управленияОписание
    cl_get_dateПолучает дату и время запуска Crawlector и текущую дату и время.
    cl_pingОтправляет обратно сообщение "Pong...". Служит для проверки работоспособности канала C&C.
    cl_get_configЗагружает текущий используемый файл конфигурации (например, cl_config.ini) в виде текстового файла.
    cl_update_delay <целое_число_в_миллисекундах>Обновляет время между каждым запросом на получение команд управления.

    - Изменяет значение (ctrl_sleep) только для текущего сеанса.

    cl_turn_off_slack_alertОтключает функцию Slack-уведомлений для текущего активного сеанса.
    cl_turn_on_slack_alertВключает функцию Slack-уведомлений для текущего активного сеанса.
    cl_helpВыводит это справочное сообщение.
    cl_exitПринудительно завершает Crawlector.