среда, 27 января 2016 г.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[0x74724534][0x00][0x01]
-id бота
-версия протокола
-номер команды

Текстовый:

{"bot": "1953645876", "protocol": 0, "cmd_id":1}

=Наш протокол=

Наш учебный бот будет уметь делать скриншот и отправлять его нам, дабы мы могли следить за удалённой машиной. У нас будет простой бинарный протокол, пригодный для маленькой бот-сети.

  • магическая константа
  • версия протокола
  • ид бота
  • номер команды
  • blob с данными

Blob – это структура вида:

;псевдкод
DWORD data_size
BYTE data[data_size]

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

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

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

Запись Малварь на Си по шагам [№1] Протокол бота впервые появилась VxLab.



from VxLab http://ift.tt/1PEq8gm
via IFTTT

Комментариев нет:

Отправить комментарий