JARM


Описание JARM

JARM – это инструмент идентификации серверов Transport Layer Security (TLS), особенностью которого является активное сканирование.

Хеш JARM по целям использования является аналогом JA3S и JA4S.

Отпечатки JARM можно использовать для:

  • Быстрой проверки того, что все серверы в группе имеют одинаковую конфигурацию TLS.
  • Группировки разнородных серверов в Интернете по конфигурации, например, для идентификации того, что сервер может принадлежать Google, Salesforce или Apple.
  • Определения приложений или инфраструктуры со стандартными настройками.
  • Определения инфраструктуры управления и контроля (command and control, C2) вредоносного ПО и других вредоносных серверов в Интернете.

Домашняя страница:

Авторы:

  • John Althouse — оригинальная идея, концепция и руководитель проекта
  • Andrew Smart — концепция и тестирование
  • RJ Nunnally — программирование и тестирование
  • Mike Brady — программирование и тестирование

Лицензия: BSD-3-Clause license

Справка по JARM

Использование:

jarm.py [-h] [-i INPUT] [-p PORT] [-v] [-V] [-o OUTPUT] [-j] [-P PROXY] [scan]

Для сканирования обязательным является указание цели (единичный IP или файл со списком целей), также вы можете указать опционально порт, который будет просканирован.

Опции:

Позиционные параметры:
  scan                  Введите IP или домен для сканирования.

Прочие опции:
  -h, --help            показать справку и выйти
  -i ФАЙЛ, --input ФАЙЛ
                        Укажите список IP-адресов или доменов для сканирования, по
                        одному домену или IP-адресу на строку. Необязательно: укажите порт
                        для сканирования, отделив его запятой (например, 8.8.4.4,853).
  -p ПОРТ, --port ПОРТ  Введите порт для сканирования (по умолчанию 443).
  -v, --verbose         Вербальный режим: показать результат значения, которые будут использоваться
                        для вычисления хеша JARM.
  -V, --version         Напечатать версию и выйти.
  -o ФАЙЛ, --output ФАЙЛ
                        Укажите имя файла для вывода/добавления результатов в CSV
                        файл.
  -j, --json            Вывод формате NDJSON (Newline-delimited JSON) (в файл или stdout;
                        эта опция переопределяет --output по умолчанию установленный на вывод в формате CSV)
  -P ПРОКСИ, --proxy ПРОКСИ
                        Использовать SOCKS5 прокси, укажите адрес:порт.

Руководство по JARM

Страница man отсутствует.


Как работает JARM

Прежде чем изучать, как работает JARM, важно понять, как работает TLS. TLS и его предшественник SSL используются для шифрования связи как для обычных приложений, таких как интернет-браузеры, чтобы защитить ваши данные, так и для вредоносных программ, чтобы они могли спрятаться в шуме сетевого трафика.

Чтобы инициировать сеанс TLS, клиент отправит сообщение TLS Client Hello после трёхстороннего рукопожатия TCP. Этот пакет и способ его генерации зависят от пакетов и методов, используемых при создании клиентского приложения. Сервер, если принимает соединения TLS, ответит пакетом TLS Server Hello.

Серверы TLS формируют свой пакет Server Hello на основе данных, полученных в пакете TLS Client Hello. Способ, которым Server Hello формулируется для любого заданного Client Hello, может различаться в зависимости от того, как было создано приложение или сервер, на это могут влиять в том числе:

  • Операционная система
  • Версия операционной системы
  • Используемые библиотеки
  • Версии этих библиотек
  • Порядок, в котором вызывались библиотеки
  • Пользовательская конфигурация

Все эти факторы приводят к тому, что каждый TLS Server отвечает уникальным образом. Сочетания факторов делают маловероятным, что серверы, развёрнутые разными организациями, будут иметь одинаковый ответ.

JARM работает так: эта утилита генерируют и активно отправляет 10 пакетов TLS Client Hello с различными конфигурациями на целевой TLS-сервер и захватывая определённые атрибуты ответов TLS Server Hello. На пакеты с различными настройками TLS Client Hello сервер может отвечать разнообразными ответами. Затем агрегированные ответы TLS-сервера хэшируются определенным образом для создания отпечатка JARM.

JARM создала та же команда, что и в 2017 году разработала JA3/S — пассивный метод клиент-серверного отпечатка TLS, который теперь можно найти в большинстве инструментов сетевой безопасности. Но если JA3/S пассивен, то есть он делает отпечатки клиентов и серверов во время прослушивания сетевого трафика, то JARM — это активный сканер отпечатков серверов.


10 пакетов TLS Client Hello в JARM были специально созданы для извлечения уникальных ответов на серверах TLS. JARM отправляет различные версии TLS, шифры и расширения в разном порядке для сбора уникальных ответов. Поддерживает ли сервер TLS 1.3? Будет ли он согласовывать TLS 1.3 с шифрами 1.2? Если мы упорядочим шифры от самого слабого к самому сильному, какой шифр он выберет? Это типы необычных вопросов, которые JARM по сути просит сервер извлечь самые уникальные ответы. Затем 10 ответов хэшируются для получения отпечатка JARM.

Хэш отпечатка JARM — это гибридный нечёткий хеш, он использует комбинацию обратимого и необратимого алгоритма хеширования для создания 62-символьного отпечатка. Первые 30 символов состоят из шифра и версии TLS, выбранных сервером для каждого из 10 отправленных клиентских приветствий. «000» означает, что сервер отказался согласовывать это клиентское приветствие. Остальные 32 символа — это усечённый хеш SHA256 кумулятивных расширений, отправленных сервером (при этом игнорируются данные сертификата x509). При сравнении отпечатков JARM, если первые 30 символов одинаковы, а последние 32 отличаются, это будет означать, что серверы имеют очень похожие конфигурации, принимающие одинаковые версии и шифры, хотя и не совсем идентичные, учитывая, что расширения разные.

После получения каждого сообщения приветствия сервера TLS, JARM корректно закрывает соединение с помощью FIN, чтобы не оставлять сокеты открытыми.

Важно отметить, что JARM — это высокопроизводительная функция отпечатка пальца, и её не следует считать или путать с безопасной криптографической функцией. Отпечатки JARM созданы исходя из цели, чтобы он был доступен для восприятия как людьми, так и пригоден для машинной обработки. Это означает, что он достаточно мал, чтобы его можно было визуально отличить от отпечатка другого сервера, либо чтобы им поделиться в коротком сообщении, и при этом у него достаточно места для контекстных деталей.

Примеры запуска JARM

Просканировать хост w-e-b.site на стандартном порту и вывести результаты на экран:

python jarm.py w-e-b.site

Просканировать IP 185.117.153.79 на стандартном порту и вывести результаты на экран:

python jarm.py 185.117.153.79

Просканировать хост hackware.local на порту 50443 и вывести результаты на экран:

python jarm.py hackware.local -p 50443

Просканировать хост suip.biz и кроме финального хеша вывести собранные данные, используемые для получения хеша:

python jarm.py suip.biz -v

Просканировать все цели из файла targets.txt и вывести результаты на экран:

python jarm.py -i targets.txt

Пример содержимого файла targets.txt:

hackware.ru
kali.tools
suip.biz
suip.biz,443
157.245.118.66
157.245.118.66,443
w-e-b.site
t.me
google.com
youtube.com
hackware.local,50443

Просканировать все цели из файла targets.txt и сохранить результаты в файл в формате CSV (-o results.csv):

python jarm.py -i targets.txt -o results.csv

Пример содержимого файла results.csv:

cat results.csv
hackware.ru,185.26.122.82,29d29d00029d29d00042d42d0000002059a3b916699461c5923779b77cf06b
kali.tools,185.26.122.59,29d29d00029d29d00042d42d0000002059a3b916699461c5923779b77cf06b
suip.biz,185.117.153.79,29d2ad00029d29d00042d43d00000051af7d8070a18e002eaaedf620fa118c
suip.biz,185.117.153.79,29d2ad00029d29d00042d43d00000051af7d8070a18e002eaaedf620fa118c
157.245.118.66,157.245.118.66,29d2ad00029d29d00042d43d000000ad9bf51cc3f5a1e29eecb81d0c7b06eb
157.245.118.66,157.245.118.66,29d2ad00029d29d00042d43d000000ad9bf51cc3f5a1e29eecb81d0c7b06eb
w-e-b.site,157.245.118.66,29d2ad00029d29d00042d43d00000051af7d8070a18e002eaaedf620fa118c
t.me,149.154.167.99,29d29d15d29d29d00042d42d0000005fd00fabd213a5ac89229012f70afd5c
google.com,142.251.223.78,27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d
youtube.com,172.217.26.78,27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d
hackware.local,127.0.0.1,07d19d1ad21d21d07c42d43d000000112e88add4281e6a02c1102a6e18e86a

Просканировать все цели из файла targets.txt и сохранить результаты в файл (-o results.json) в формате JSON (-j):

python jarm.py -i targets.txt -o results.json -j

Установка JARM

Установка в Kali Linux

git clone https://github.com/salesforce/jarm
cd jarm
python jarm.py -h

Установка в BlackArch

git clone https://github.com/salesforce/jarm
cd jarm
python jarm.py -h

Установка в Ubuntu, Linux Mint, Debian

git clone https://github.com/salesforce/jarm
cd jarm
python jarm.py -h

Скриншоты JARM

Инструкции по JARM

Ссылки на инструкции будут добавлены позже.


Близкие программы:

  • JA3S-JA4S-scanner (100%)
  • JA4+ (100%)
  • TShark (96.8%)
  • JA3-JA4-scanner (68.1%)
  • testssl.sh (57.2%)
  • webanalyze (RANDOM - 50.4%)
  • Рекомендуется Вам:

    Comments are Closed