Алгоритмы генерации доменов

Представим ситуацию, что у вас есть бот, в котором зашит адрес гейта. В силу abuse хостеру или других причин, вы теряете доступ к серверу. Каких размеров не была бы ваша сеть, событие это не из приятных. Для таких случаев и нужна генерация доменов.

Domain Generation Algorithm

В самом банальном варианте, генератор преобразует входное число или строку (т.н. seed) в другую строчку.

Получая на выходе список доменов:

Таким образом, мы можем генерировать огромное количество доменов из первоначального. В ряде случаев функция генерации может зацикливаться, поэтому генератор нужно тестировать на больших выборках или использовать отлаженные ГСЧ.

Откуда брать seed?

Есть 2 основных подхода:

  1. Начальное значение жёстко прошито в теле бота
  2. Генерируется из текущей даты

Первый подход хорош для небольших сетей, когда на вас не будут точить зубы и домены будут жить долго. Домены можно регистрировать по факту изъятия предыдущего, однако все боты будут перебирать все больше адресов пока не найдут рабочий. Так же это может служить сигналом о наличии бота в системе, если антивирус увидит обращение к уже известному dga-адресу.

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

Account Generation Algorithm

Если семпл делает кучу запросов на несуществующие домены, это может насторожить администратора, поэтому можно использовать сторонние сервисы, такие как социальные сети и блоги.

К примеру, заместо “.org” подставляем “.blogspot.com”. В данном случае мы получаем не адрес гейта а прокладку, из html-кода которой необходимо извлечь требуемые данные. Обычно, в текст полезного сообщения вставляются специальные маркеры.

Итоговый код страницы может выглядеть так:

Интересующее нас сообщение скрыто под слоем base64, “LOL” используется в качестве маркеров, для его поиска в html.
Неоспоримым плюсом данного метода является то что у AV пока нет автоматики, рассылающей абузы подобным серверам.

Защита от обнаружения

Не так давно (в этом тысячелетии) на хабре вышла статья от PT
Так же советую обратить внимание на другие алгоритмы для детекта DGA

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

Поэтому мы создаем небольшой словарик и учим dga новым трюкам:

И получаем на выходе:

Генерацию домена можно усложнить:

  • Расширить словарь из существующих слов
  • Добавлять в конце цифры
  • Ставить знаки разделения между словами
  • Расширить список доменов “.org” до 20-30

Дополнения

Заключение

Генерация доменов будет жить, а использование словаря гарантированно обойдет детекты.
Используйте воображение, генерировать имена юзеров можно фактически в любом сервисе\сайте.
Никто не застрахован от изменений шаблона html или url, так что всегда необходимо иметь запасные варианты.
На это всё, приятных выходных =)

Поддержите нас в твиттере!

One thought on “Алгоритмы генерации доменов

Добавить комментарий