JARM
Описание JARM
JARM – это инструмент идентификации серверов Transport Layer Security (TLS), особенностью которого является активное сканирование.
Хеш JARM по целям использования является аналогом JA3S и JA4S.
Отпечатки JARM можно использовать для:
- Быстрой проверки того, что все серверы в группе имеют одинаковую конфигурацию TLS.
- Группировки разнородных серверов в Интернете по конфигурации, например, для идентификации того, что сервер может принадлежать Google, Salesforce или Apple.
- Определения приложений или инфраструктуры со стандартными настройками.
- Определения инфраструктуры управления и контроля (command and control, C2) вредоносного ПО и других вредоносных серверов в Интернете.
Домашняя страница:
- https://github.com/salesforce/jarm
- https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a/
Авторы:
- 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
Ссылки на инструкции будут добавлены позже.
- TLS fingerprinting: методы идентификации клиентского и серверного программного обеспечения
- TLS fingerprinting клиентов: типы хешей, утилиты для показа TLS отпечатков клиентов
- БЕСПЛАТНЫЙ ОНЛАЙН сканер JARM хеша для TLS fingerprinting (идентификации по свойствам TLS): https://suip.biz/ru/?act=jarm
- Онлайн сканер JARM (зеркало): https://w-e-b.site/?act=jarm
Comments are Closed