Ищем RAT'ов по их же сертификатам

Ищем RAT'ов по их же сертификатам

Недавно коллеги из Censys выкатили разбор семейства AsyncRAT, описав целое генеалогическое древо: AsyncRAT → DCRAT (DarkCrystal RAT) → VenomRAT → еще десятки форков вплоть до LMTeamRAT, Alfa Red Fox, EchoRAT, Gh0stRAT (не путать с оригинальным Gh0st RAT 2008 года) и т. д. Всего насчитали около 40 именованных вариантов, 13 из них — с живой C2-инфраструктурой на момент исследования.

Ключевая мысль их исследования: форки почти никогда не переписывают TLS-сертификат сервера, доставшийся от родителя. DCRAT принес в семью структуру O=<Name> By <author> , L=SH , C=CN , и это наследуется вплоть до самых мелких потомков — даже если сам билд больше никак не забрендирован. Именно этот паттерн Censys называет самым надежным сигналом для всей линейки, независимо от конкретного варианта.

У нас, отдела сетевой экспертизы антивирусной лаборатории, уже был опыт детектирования VenomRAT по его дефолтовому сертификату, и мы даже отдали в сообщество сигнатуру для Suricata в рамках проекта PT Rules .

Именно поэтому нас это исследование, само собой, зацепило — и мы решили прогнать похожую логику не по интернет-скану, а по трафику из собственных песочниц: а вдруг мы что-то упустили?

Взяли любимый NTA и сделали в нем следующий запрос (аналогичный хант можно сделать где угодно, хоть в базе данных):

(исключения нужны, потому что corporated , corporation или integrator тоже с радостью матчатся на RAT — привет, ложные срабатывания)

Результат — реально интересный: помимо вышеупомянутого VenomRAT куча других C2-серверов буквально сами себя подписывают.

Вот например прародитель AsyncRAT не стесняется подписываться как AsyncRAT Server :

PureRAT притворяется PureRAT Agent :

LiberiumRAT подписал сам себе сертификат под именем Liberium RAT Authority :

Еще ряд менее известных семплов — все радостно светят своим назначением прямо в сертификате.

Как детектить в Suricata?

Аналогично нашему правилу на VenomRAT можно зацепиться за байты |3082| — встречаются в начале сертификата, далее |550403| — это закодированный ASN.1 Object ID 2.5.4.3 (id-at-commonName) , и в завершение — искомая строка, например:

А как хантить, на что смотреть

Issuer/Subject вида CN=.*RAT.* — как видно выше, срабатывает идеально.

Issuer/Subject вида CN=.*RAT.* — как видно выше, срабатывает идеально.

Комбинация L=SH , C=CN + O=* By * на нестандартном порту.

Комбинация L=SH , C=CN + O=* By * на нестандартном порту.

Самоподписанные сертификаты в целом — malware-C2, в отличие от фишинговых сайтов, не боится браузерных ошибок, поэтому самоподпись используется массово.

Самоподписанные сертификаты в целом — malware-C2, в отличие от фишинговых сайтов, не боится браузерных ошибок, поэтому самоподпись используется массово.

Признаки дефолтной генерации — пустые O/L/ST , CN продублирован в SAN или Issuer — CN= example.com , O=Acme .Из истории вопроса — похожий трюк еще в 2023 году проворачивали с Quasar RAT: там дефолтный сертификат CN=Quasar Server CA через Shodan/Censys вывел исследователей сразу на 60+ живых серверов. Nuff said.

Признаки дефолтной генерации — пустые O/L/ST , CN продублирован в SAN или Issuer — CN= example.com , O=Acme .Из истории вопроса — похожий трюк еще в 2023 году проворачивали с Quasar RAT: там дефолтный сертификат CN=Quasar Server CA через Shodan/Censys вывел исследователей сразу на 60+ живых серверов. Nuff said.

Мораль : TLS-сертификат, при наличии, конечно, — это метаданные, которые остаются в открытом виде, даже когда весь остальной трафик зашифрован. Авторы билдеров RAT'ов почему-то регулярно об этом забывают 🙂

Мораль : TLS-сертификат, при наличии, конечно, — это метаданные, которые остаются в открытом виде, даже когда весь остальной трафик зашифрован. Авторы билдеров RAT'ов почему-то регулярно об этом забывают 🙂

Happy hunting!

( Источник: https://t.me/ptescalator )

← Cybersecurity