
Активный инструмент для снятия отпечатков TLS-серверов, который отправляет специально сформированные пакеты Client Hello для генерации уникальных хэшей JARM с целью идентификации конфигураций серверов, группировки инфраструктуры и обнаружения вредоносных серверов.
Пожалуйста, прочитайте первоначальную статью в блоге JARM для получения дополнительной информации.
JARM — это активный инструмент для снятия отпечатков серверов Transport Layer Security (TLS).
Отпечатки JARM можно использовать для:
Поддержка JARM была добавлена или добавляется в:
SecurityTrails
Shodan
BinaryEdge
RiskIQ
Palo Alto Networks
Censys
360
python3 jarm.py [-h] [-i INPUT] [-p PORT] [-v] [-V] [-o OUTPUT] [-j] [-P PROXY] [domain/IP]
Пример:
% python3 jarm.py www.salesforce.com
Domain: www.salesforce.com
Resolved IP: 23.50.225.123
JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
Для использования с Python 2 потребуется модуль ipaddress:
pip install -r requirements.txt
./jarm.sh <list> <output_file>
Пример:
% ./jarm.sh alexa500.txt jarm_alexa_500.csv
Прежде чем изучать, как работает JARM, важно понять, как работает TLS. TLS и его предшественник SSL используются для шифрования связи как в распространенных приложениях, например, интернет-браузерах, для защиты ваших данных, так и в вредоносном ПО, чтобы оно могло скрыться в общем шуме. Для установления сеанса TLS клиент отправляет сообщение TLS Client Hello после TCP-рукопожатия из трех шагов. Этот пакет и способ его генерации зависят от пакетов и методов, используемых при создании клиентского приложения. Сервер, если он принимает TLS-соединения, ответит пакетом TLS Server Hello.
Серверы TLS формируют свой пакет Server Hello на основе деталей, полученных в пакете TLS Client Hello. Способ формирования Server Hello для любого заданного Client Hello может варьироваться в зависимости от того, как было создано приложение или сервер, включая:
Все эти факторы приводят к тому, что каждый TLS-сервер отвечает уникальным образом. Комбинации факторов делают маловероятным, что серверы, развернутые разными организациями, будут иметь одинаковый ответ.
JARM работает путем активной отправки 10 пакетов TLS Client Hello целевому TLS-серверу и захвата определенных атрибутов ответов TLS Server Hello. Затем агрегированные ответы сервера хешируются определенным образом для получения отпечатка JARM.
Это не первый раз, когда мы работаем с TLS-отпечатками. В 2017 году мы разработали JA3/S — пассивный метод снятия отпечатков TLS-клиентов/серверов, который сейчас используется в большинстве инструментов сетевой безопасности. Но в то время как JA3/S является пассивным, снимая отпечатки клиентов и серверов путем прослушивания сетевого трафика, JARM — это активный сканер отпечатков серверов. Вы можете узнать больше о TLS-согласовании и пассивном снятии отпечатков JA3/S здесь.
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 таким образом, чтобы он был удобен как для человека, так и для машины. Это означает, что он достаточно мал, чтобы его можно было просмотреть, поделиться и написать в твите, оставляя достаточно места для контекстных деталей.
Серверы управления и контроля (C2) вредоносных программ и вредоносные серверы настраиваются их создателями как любые другие серверы, а затем развертываются в их инфраструктуре. Поэтому они, как правило, производят уникальные отпечатки JARM. Ниже приведены примеры распространенных вредоносных программ и инструментов атак, а также пересечение JARM с Alexa Top 1M веб-сайтов (по состоянию на октябрь 2020 г.):
При небольшом или нулевом пересечении с Alexa Top 1M веб-сайтов маловероятно, что хост внутри организации подключится к серверу с этими отпечатками JARM.
John Althouse — автор идеи, концепции и руководитель проекта
Andrew Smart — концепция и тестирование
RJ Nunnally — программирование и тестирование
Mike Brady — программирование и тестирование
Переписано на Python для оперативного использования Caleb Yu
| Domain | JARM |
|---|
| salesforce.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| force.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| google.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| youtube.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| gmail.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| facebook.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| instagram.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| oculus.com | 29d29d20d29d29d21c41d43d00041d741011a7be03d7498e0df05581db08a9 |
| Вредоносный сервер C2 | Отпечаток JARM | Пересечение с Alexa Top 1M |
|---|
| Trickbot | 22b22b09b22b22b22b22b22b22b22b352842cd5d6b0278445702035e06875c | 0 |
| AsyncRAT | 1dd40d40d00040d1dc1dd40d1dd40d3df2d6a0c2caaa0dc59908f0d3602943 | 0 |
| Metasploit | 07d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042d | 0 |
| Cobalt Strike | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 | 0 |
| Merlin C2 | 29d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38 | 303 |