Малварь по шагам [№1] Протокол бота

Перед вами первый выпуск серии статей по написанию малвари, поддержите нас ретвитами и, возможно, следующая часть выйдет пораньше.

=Оболочка протоколов=

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

Для сокрытия факта общения с сервером мы “заворачиваем” (на ином языке “инкапсулируем”) полезное сообщение в структуру, с дополнительной информацией (вроде её контрольной суммы), которую мы накрываем слоем шифра.

При необходимости, данные можно сжать.

Защитные продукты (на подобии Snort) имеют сигнатуры трафика и отсекают вредоносный, так что чем меньше есть способов (для вашего бота) выделить паттерн трафика – тем веселей!

Достигается это следующим:

  • самостоятельное шифрование трафика
  • tls-обёртка (ssl)
  • дописывание случайного количества случайных байт к сообщению
  • стеганография

Выбор конкретного алгоритма зависит от характера (частоты) общения бота с сервером, ресурсы коего не безграничны.

Ключ шифрования не должен передаваться вместе с сообщением. Есть 3 варианта:

  1. записывать жёсткий ключ в тело бота
  2. выдавать ключ при регистрации бота
  3. криптография  с открытым ключём

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

С одной стороны, общение через SSL немного усложнит исследователям жизнь, с другой стороны это дополнительная нагрузка на сервер. А системы автоматического анализа (см Cuckoo) уже умеют вскрывать ssl.

Запись дополнительных данных рандомизирует сообщение, на случай если мы отправляем типовые управляющие последовательности, вроде “есть команда?” – “нет”, дабы после шифрования одно и тоже сообщение выглядело по разному.

Трафик можно вычленить и по длине, так что её так же следует рандомизировать.

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

Есть и более экзотические примеры, например в Zeus-GameOver, конфиг был спрятан в конец JPG файла, для обхода автматики, которая такой оверей пропускала.

=Виды протоколов=

Как было отмечено выше, протокол зависит от задачи, однако подхода к его построению всего два:

  1.  текстовый протокол
  2.  бинарный

Текстовый протокол хорошо расширяем и подходит для бурно развивающегося софта, когда каждый день вы учите ваш бот новым трюкам. Из них нужно особенно отметить XML и JSON. Парсеры этих протоколов есть во всех серверных языках программирования, так что работа с ним не составит труда. Из достоинств – лёгкость отладки, из недостатков – невозможность передачи бинарных данных без перекодирования их в base64 или иные аналоги. Говоря коротко – излишний трафик при передаче сырых данных.

Бинарный протоколы, отнюдь, спокойно относяться к сырой информации, но мене читабельны на глаз. Исключая такие уникумы как BSON, самопальные бинарные протоколы очень тяжело расшияряемы.

И пара примеров для наглядности:
Бинарный:

Текстовый:

=Заключение=

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

11 thoughts on “Малварь по шагам [№1] Протокол бота

  1. Довольно интересный цикл статей нас ожидает 🙂 Но у меня все это вызывает противоричивые чувства..
    В общем поживем-увидим. Автору однозначано респект 😉

      1. При выборе типа протокола (Бинарный или текстовый), я бы отталкивался от используемого ЯП. К примеру если новый стандарт C++ поддерживает легкую и удобную работу с JSON, то почему бы этим не воспользоваться!? В случае использования бинарного протокола на C++, это сериализация массивов, снижает наглядность и масштабируемость допиливания возможностей бота!

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