Перед вами первый выпуск серии статей по написанию малвари, поддержите нас ретвитами и, возможно, следующая часть выйдет пораньше.
=Оболочка протоколов=
Полезная нагрузка в нашем сообщении (команда что делать боту или украденная информация, отправляемая на сервер) в чистом виде легко опознаётся как живым аналитиком, так и автоматикой.
Для сокрытия факта общения с сервером мы “заворачиваем” (на ином языке “инкапсулируем”) полезное сообщение в структуру, с дополнительной информацией (вроде её контрольной суммы), которую мы накрываем слоем шифра.
Защитные продукты (на подобии Snort) имеют сигнатуры трафика и отсекают вредоносный, так что чем меньше есть способов (для вашего бота) выделить паттерн трафика – тем веселей!
Достигается это следующим:
- самостоятельное шифрование трафика
- tls-обёртка (ssl)
- дописывание случайного количества случайных байт к сообщению
- стеганография
Выбор конкретного алгоритма зависит от характера (частоты) общения бота с сервером, ресурсы коего не безграничны.
Ключ шифрования не должен передаваться вместе с сообщением. Есть 2 варианта:
- записывать жёсткий ключ в тело бота
- выдавать ключ при регистрации бота
В первом случае мы либо выдаём один общий ключ на всю сеть, либо забиваем информацию о каждом боте персонально, что не подходит для массовой малвари.
С одной стороны, общение через SSL немного усложнит исследователям жизнь, с другой стороны это дополнительная нагрузка на сервер. А системы автоматического анализа (см Quckoo) уже умеют вскрывать ssl.
Запись дополнительных данных рандомизирует сообщение, на случай если мы отправляем типовые управляющие последовательности, вроде “есть команда?” – “нет”, дабы после шифрования одно и тоже сообщение выглядело по разному.
Трафик можно вычленить и по длине, так что её так же следует рандомизировать.
В случае больших ботнетов, с которыми будут воевать все, включая майкрософт, следует добавлять цифровую подпись ко всем сообщениям от сервера, дабы их нельзя было подделать.
Есть и более экзотические примеры, например в Zeus-GameOver, конфиг был спрятан в конец JPG файла, для обхода автматики, которая такой оверей пропускала.
=Виды протоколов=
Как было отмечено выше, протокол зависит от задачи, однако подхода к его построению всего два:
- текстовый протокол
- бинарный
Текстовый протокол хорошо расширяем и подходит для бурно развивающегося софта, когда каждый день вы учите ваш бот новым трюкам. Из них нужно особенно отметить 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
Комментариев нет:
Отправить комментарий