- Регистрация
- Окт 16, 2022
- Сообщения
- 1,233
- Реакции
- 214
- Награды
- 2
Лектор : lljullell
(12:13:25) lljullell: Разработка ботнета под свои нужды
(12:13:43) lljullell: ВЫБОР ЯЗЫКА, ИСПОЛНИТЕЛЯ И ОСНОВЫ РАЗРАБОТКИ
Если вам все-таки мало представленных на рынке ботнетов, или вы уже выросли и решили стать трушными ботоводами, то пора запускать свой продукт.
Но, сначала его надо разработать.
(12:14:03) lljullell: Кто хоть как-то сталкивался с разработкой, сейчас невольно скривился, полагаю.
Потому как если вы или кто-то из ваших близких кодером не являетесь (а оба этих варианта исключены, ибо вас бы тут просто не было), процесс разработки любого ПО - это боль.
(12:14:19) lljullell: Иметь дело придется с фрилансерами. А хуже людей, чем они, найти очень тяжело. За многие годы работы в IT, начиная с позиции джуниора, тимлида, проджекта и СТО, я практически не встречал вменяемых, исполнительных и чистоплотных фрилансеров.
(12:14:55) lljullell: Специально преподношу именно так потому что, во-первых, это чистая правда, а, во-вторых, чтобы вы были готову к бою с обстоятельствами иной раз непреодолимой силы.
От лирики - к делу. Поехали.
(12:15:17) lljullell: Запомните! Исходный код ВСЕГДА должен быть открыт.
Если вы сами не в состоянии его прочитать (а вы, скорее всего, не в состоянии), то подумайте заранее, кто сможет прочитать код за вас и выдать вам вердикт.
(12:16:08) lljullell: Наиболее подходящим языком для создания ботнета небольшого размера по праву считается С++ (в обиходе - “плюсы”).
Это архаичный язык, который входит в обязательную программу изучения различного рода учебных заведений, и до сих пор активно используется.
(12:16:29) lljullell: Язык не перспективный и, по сути, является тупиковой ветвью развития программирования.
Так что найти реально хорошего кодера, который, во-первых, согласится написать вашу малварь, а, во-вторых, еще и сможет это грамотно сделать, будет довольно трудно.
(12:17:18) lljullell: Язык не является низкоуровневым, но очень близок к нему. Этим он и прекрасен. На нем можно написать огромное количество разных штук для практически всех платформ.
Относительно труда программиста, язык довольно требователен и в белых направлениях вакансий на С++ очень мало.
(12:17:39) lljullell: Проще, быстрее и эффективнее сделать большую часть проекта на C# или java на server-side или Ruby on Rails, php и прочее, прочее, прочее.
Хорошие разрабы, которые владеют этим фундаментальным языком, сейчас на вес золота.
(12:18:18) lljullell: Почему плюсы больше всего подходят под наши нужды?
Я исхожу из того, что мы будем писать ботнет не самых больших размеров, максимум - до 100к онлайн-машин.
Тут есть одно ограничение: у жертвы должен быть установлен .Net Framework, чтобы бот запустился. Во времена Windows 10 это особых проблем не составляет, но все же стоит помнить.
(12:18:52) lljullell: Я, опять таки, пожалуй, повторюсь и скажу, что не нужна тебе, братишка, такая машина (зачеркнуто). Не нужно вам миллион миллиардов функций все-в-одном. Не нужно.
Помните о специализации!
Если хотите все и сразу, то вы либо слишком молоды, либо не поняли принципов этого бизнеса.
(12:19:26) lljullell: Наверняка ведь слышали: куча всяких функций = хороший ботнет.
К сожалению, это так не работает.
Хороший ботнет это тот, который не падает и эффективно справляется со своей задачей. Поэтому, как и любой продукт, сначала необходимо писать минимально необходимый функционал.
(12:20:06) lljullell: Вы должны знать, что программиста бывает очень сложно остановить. Они - маньяки. Им хочется писать все больше и больше кода.
Если при этом и заказчик хочет нагородить дофига абсолютно нерелевантной ерунды, то получится настоящий ахтунг, а не продукт. Вы его, во-первых, никогда не закончите, а, во-вторых, это вероятнее всего будет жутко забагованная несуразная ерунда, которая хрен знает, для чего вообще была сделана.
(12:21:03) lljullell: Тем временем, деньги, время и нервы потрачены. А на руках, по факту, ничего путного.
Такой подход неправилен. Писать необходимо сначала каркас и обязательно закладывать возможность расширения функционала.
Это прописные истины любой разработки и управления IT-проектов.
(12:21:48) lljullell: А поскольку вы, скорее всего, будете иметь дело с людьми, отродясь не имевшими отношения к академическим кругам и корпоративной среде, то хотя бы вы должны быть в курсе. Чтобы смочь проконтролировать разработку вашего продукта на всех уровнях.
Я не сторонник продолжительной разработки подобных продуктов.
(12:22:17) lljullell: Базовый функционал должен быть готов за несколько дней.
Да, не удивляйтесь.
Потом вы сможете допиливать любой функционал, дебажить и фиксить ваш софт сколько угодно. Но базовую штуку надо сделать быстро.
При условии, конечно, что кодер опытный.
(12:22:44) lljullell: Это показатель того, что вы понимаете, в каком направлении развиваться, и указывает на серьезность вашего предприятия.
Есть мнение, что написать ботнет может средней руки программист, который понимаеткак функционируют сети, протоколы (особенно HTTP), минимально разбирается в криптографии (типа SSL) и примерно понимает модель Объектно Ориентированного Программирования.
(12:23:36) lljullell: Господа, это все чушь. Такой кодер напишет вам соответствующий продукт. Чудес не бывает.
Теперь ближе к делу. Какие задачи ставим перед кодером?
Абсолютнейший минимум для нашего зверька в самой базовой его конфигурации должен выглядеть следующим образом:
(12:24:26) lljullell: 1) Наличие билда, который по указанному пути берет команду для ботов;
2) Возможность копирования самого себя в автозагрузку (авторан);
3) Обход UAC и AV;
4) Запрет завершения процесса;
5) Поддержку первый команды “Update” - команда которая просто будет обновлять наш текущий клиент новой версией;
6) Обфускацию исходников.
(12:25:05) lljullell: И, поверьте мне, все это не требует недель разработок! Это можно реализовать одному человеку за несколько дней.
Что дальше?
После того, как сделали каркас, следует прикрутить следующие функции: проверку на наличие админских прав у юзера, добавить try-catch, шифрование, функцию удаления. Также нужно скрыть бота из запущенных процессов.
(12:25:38) lljullell: Используем криптографию через стабы (stub) - использование определенного набора сигнатур, с помощью которых осуществляется шифрование билда алгоритмом RC4.
Пару слов хотелось бы сказать про авторан. Это, по факту, одна из наиболее важных функций. Вам надо как-то закрепиться в системе и пережить перезагрузку.
(12:26:05) lljullell: К сожалению, самым быстрым способом получения технического преимущества в этом отношении является выдирание модуля из тела более успешной малвари.
Это, в принципе, практика распространенная, поэтому не бейте своего кодера, если он признался, что скоммуниздил модуль у соседа (хотя я бы не говорил конечно)).
(12:26:42) lljullell: Если у вас действительно рукодельный кодер, то с этим он разберется без проблем: аналитики помещают в отчеты md5 и sha1 хеши пойманных семплов, которые можно нагуглить или стянуть со всяких av-отстойников.
То есть, по факту, все придумано за вас, но требует навыков отладки и дизассемблирования. Однако с учетом того, что код пишете не вы, то нам пофиг. Просто нужно это знать.
(12:27:09) lljullell: Отдельно хочу выделить вопрос оболочки протоколов. Как заказчик вы должны понимать, каким образом бот общается с сервером и какие соответствующие задачи ставить перед кодером.
Какие вообще есть методы коммуникации в ботнет-сети? Как мы можем контролировать свою сеть?
(12:27:37) lljullell: Первым делом рассмотрим управление через сервер.
Это - самый простой и довольно архаичный способ. Запускаем свой http или IRC сервер и с него работаем. Боты получают с него команды и туда же отправляют результаты о выполненной работе.
(12:28:24) lljullell: Из плюсов: реализуется просто, скорость общения высокая, можно отдавать команду как всему пулу, так и одному боту, содержать дешево.
Теперь о минусах. Если сеть большая, то нагрузка на сервер будет приличной. Придется раскошелится. Также риски связаны с одним контрольным узлом: отключили его - отключили всю сеть. Кроме того, легко поддается анализу и блокировке.
(12:28:54) lljullell: Есть управление через IRC-сеть (она сейчас не используется, но я-таки расскажу, поскольку иметь об этом представление действительно важно).
Заметьте, речь идет не об одном IRC-канале, а о сети. Логично, что для устранения предыдущих минусов, целесообразно поднять несколько серверов с IRC-сетью, сделав ее ответственной за передачу данных.
(12:29:25) lljullell: Из плюсов: также просто реализуется; скорость общения; возможность коммуникации с отдельным ботом; защита сети (распределение нагрузки, защита от DDoS); возможность создать несколько каналов и задавать разные команды различным частям сети.
Минусы: приличное количество серверов и их минимальная отладка; подвергается простому анализу и блокировке; история общения для новоприбывших ботов будет недоступна.
(12:29:57) lljullell: Следующий вариант - трастинг.
Слово происходит от английского словосочетания trust ring - то есть, “кольцо доверия”.
По сути, мы просто перекладываем функцию серверов на часть ботнета. В реальности такое случается редко, хотя можно устроить. По крайней мере, это гораздо лучше чем два предыдущих варианта.
(12:30:17) lljullell: Смысл подхода в том, что мы наделяем привилегированными правами ряд ботов внутри сети, которые осуществляют всю коммуникацию внутри нашего ботнета.
(12:31:16) lljullell: Из плюсов: нет потребности в содержании серверов; траст узлов может быть огромное количество; нет необходимости постоянного коннекта ботами к трастам; большое распределение трастовых узлов среди сети создает дополнительные условия безопасности и стабильности работы сети; возможность гибкой настройки сети (создание новых трастов одной командой); небольшое количество трастовых пиров для поддержания большой сети ввиду распределения нагрузки; возможность отдавать команды как одному конкретному боту, так и группе ботов; скорость коммуникации и реакции.
(12:31:50) lljullell: Из минусов: сложность реализации.
Ну, и последнее, p2p-сети (пиринговые, одноранговые) - это наиболее предпочтительный метод, однако, и самый продвинутый, далеко не всем по зубам.
Смысл схемы в том, что каждый узел в сети знает и контактирует с ограниченным количеством пиров. Ботмастер посылает команду одному пиру, а тот, впоследствии, ретранслирует ее дальше по сети.
(12:32:19) lljullell: Из плюсов: минимальная нагрузка на узлы в сети; неограниченный размер ботнет-сети; высокий уровень безопасности; отсутствие постоянных коннектов.
Минусы: низкая скорость коммуникации и сложность реализации.
Допустимы разные комбинации из двух последних вариантов. Можно продумать очень интересные методы коммуникации и обезопасить себя и свою сеть максимально.
Есть много тонкостей, касающихся коммуникации внутри и вне сети.
(12:32:52) lljullell: Есть еще ряд моментов относящихся к связи, на которые я хочу указать и на которые надо обращать внимание при написании ботнета.
Не все боты могут входить в сеть (быть онлайн) из-за фаервола или потому, что находятся за NATом. Соответственно, надо продумать механизм, при котором коммуникация с такими ботами будет возможна. Как минимум, мы должны знать о наличии проблемы. Например, можно заставить бота самого периодически обращаться к соседям.
(12:33:19) lljullell: Имейте ввиду, что все команды, посылаемые в сети, априори прослушиваются. Так что обязательно надо трафик шифровать, а наши команды подписывать цифровой подписью.
(12:33:48) lljullell: Никакие пароли тут не работают, ибо легко перехватываются.
Целесообразно, помимо команды обновления бота и обновления ключа ботмастера, также иметь команду самоуничтожения сети.
В случае трастинга, бот должен подключиться к случайному пиру из кольца. Никакой жесткой привязки к спискам.
(12:34:24) lljullell: Любые открытые сообщения между ботом и сервером моментально распознаются как аналитиком, так и автоматикой. Это говорит о том, что факт общения бота с сервером в обязательном порядке должен быть скрыт.
Само общение я буду называть “полезным сообщением”, для сокрытия которого кодер должен инкапсулировать (завернуть) в структуру дополнительную информацию (вроде ее контрольной суммы), которую накрывает слоем шифра.
(12:35:00) lljullell: Неплохо будет, если данные при этом будут сжаты.
Все защитные продукты в обязательном порядке имеют сигнатуры трафика и отсекают вредоносный.
Соответственно, чем меньше существует способов выделить паттерн трафика вашего бота, тем лучше.
(12:35:26) lljullell: Вариантов не очень много, но они стабильно работают:
- самостоятельное шифрование трафика;
- TLS-обёртка в SSL;
- дописывание случайного количества случайных байт к сообщению;
- стеганография.
(12:35:55) lljullell: Прошу меня извинить за довольно углубленное проникновение в тему, но вы, будучи заказчиком, должны знать,как это работает!
Выбор конкретного алгоритма зависит от характера общения бота с сервером, ресурсы которого не безграничны.
Запомните и не забудьте спросить кодера: ключ шифрования не должен передаваться вместе с сообщением!
(12:37:09) lljullell: Если кодер против внедрения SSL, то, в принципе, от него можно отказаться.
Обязательно рандомизируйте трафик. Команды по большей части однотипные, без рандомизации вам крышка.
В более продвинутых продуктах следует следует добавлять цифровую подпись ко всем сообщениям от сервера, дабы их нельзя было подделать. Обсудите этот момент с кодером отдельно.
(12:37:35) lljullell: Это то, что касается базовой версии софта. Дальше идем по списку.
Детекты. В частности, большое внимание на проактивную защиту. Важна не конкретная реализация конкретного AV, которая может и будет меняться, а принципиальный обход этого рода технологий.
Принцип создания сигнатур должен быть известен вашему кодеру.
(12:38:04) lljullell: Дизассемблирующий код может быть очень умным, но обработать ситуации кроме стандартных API-call он не в состоянии.
Соответственно, генерируем мусор и компилируем на здоровье.
Далее идут сигнатуры по байткоду и сигнатуры по хидерам. Просто уточните у кодера, как он решает эти вопросы. Оставил без внимания - гнать в шею.
Резюмируя, хочу сказать, что, по существу, есть три подхода.
(12:38:17) lljullell: Первый - это когда вы ничего не понимаете и покупаете готовое решение на рынке.
Сейчас огромное количество всевозможной малвари, которую вам радостно продадут, с поддержкой или без.
(12:38:52) lljullell: Понятно, что решение - паблик, со всеми вытекающими отсюда последствиями.
Второй вариант - вы заказываете скрипт у кидди или у “кодера” (который на техническом уровне ушел не очень далеко), чтобы он вам написал вашего зверька.
Такого исполнителя ловите на тех же сайтах, где нашли готовые решения.
(12:39:55) lljullell: Примечательно, что люди, презентующие себя как разработчики малвари, с напускной важностью проебут все сроки или и вовсе не возьмуться ничего делать.
Будете неприятно удивлены, но исполнители такого уровня все как один - птицы чрезвычайно важные. Там не до шуток и смеха.
(12:40:10) lljullell: Ну, и третий вариант - найти на самом деле квалифицированного разработчика, который сам, в одну морду грамотно напишет то, что вам нужно.
Долго и дорого. Зато действенно.
(12:40:39) lljullell: Не закладывайте меньше $10к на это дело. Если решили писать с нуля.
Где найти таких людей? Точно не на форумах. Их там попросту нет. Исключительно через знакомых.
(12:13:25) lljullell: Разработка ботнета под свои нужды
(12:13:43) lljullell: ВЫБОР ЯЗЫКА, ИСПОЛНИТЕЛЯ И ОСНОВЫ РАЗРАБОТКИ
Если вам все-таки мало представленных на рынке ботнетов, или вы уже выросли и решили стать трушными ботоводами, то пора запускать свой продукт.
Но, сначала его надо разработать.
(12:14:03) lljullell: Кто хоть как-то сталкивался с разработкой, сейчас невольно скривился, полагаю.
Потому как если вы или кто-то из ваших близких кодером не являетесь (а оба этих варианта исключены, ибо вас бы тут просто не было), процесс разработки любого ПО - это боль.
(12:14:19) lljullell: Иметь дело придется с фрилансерами. А хуже людей, чем они, найти очень тяжело. За многие годы работы в IT, начиная с позиции джуниора, тимлида, проджекта и СТО, я практически не встречал вменяемых, исполнительных и чистоплотных фрилансеров.
(12:14:55) lljullell: Специально преподношу именно так потому что, во-первых, это чистая правда, а, во-вторых, чтобы вы были готову к бою с обстоятельствами иной раз непреодолимой силы.
От лирики - к делу. Поехали.
(12:15:17) lljullell: Запомните! Исходный код ВСЕГДА должен быть открыт.
Если вы сами не в состоянии его прочитать (а вы, скорее всего, не в состоянии), то подумайте заранее, кто сможет прочитать код за вас и выдать вам вердикт.
(12:16:08) lljullell: Наиболее подходящим языком для создания ботнета небольшого размера по праву считается С++ (в обиходе - “плюсы”).
Это архаичный язык, который входит в обязательную программу изучения различного рода учебных заведений, и до сих пор активно используется.
(12:16:29) lljullell: Язык не перспективный и, по сути, является тупиковой ветвью развития программирования.
Так что найти реально хорошего кодера, который, во-первых, согласится написать вашу малварь, а, во-вторых, еще и сможет это грамотно сделать, будет довольно трудно.
(12:17:18) lljullell: Язык не является низкоуровневым, но очень близок к нему. Этим он и прекрасен. На нем можно написать огромное количество разных штук для практически всех платформ.
Относительно труда программиста, язык довольно требователен и в белых направлениях вакансий на С++ очень мало.
(12:17:39) lljullell: Проще, быстрее и эффективнее сделать большую часть проекта на C# или java на server-side или Ruby on Rails, php и прочее, прочее, прочее.
Хорошие разрабы, которые владеют этим фундаментальным языком, сейчас на вес золота.
(12:18:18) lljullell: Почему плюсы больше всего подходят под наши нужды?
Я исхожу из того, что мы будем писать ботнет не самых больших размеров, максимум - до 100к онлайн-машин.
Тут есть одно ограничение: у жертвы должен быть установлен .Net Framework, чтобы бот запустился. Во времена Windows 10 это особых проблем не составляет, но все же стоит помнить.
(12:18:52) lljullell: Я, опять таки, пожалуй, повторюсь и скажу, что не нужна тебе, братишка, такая машина (зачеркнуто). Не нужно вам миллион миллиардов функций все-в-одном. Не нужно.
Помните о специализации!
Если хотите все и сразу, то вы либо слишком молоды, либо не поняли принципов этого бизнеса.
(12:19:26) lljullell: Наверняка ведь слышали: куча всяких функций = хороший ботнет.
К сожалению, это так не работает.
Хороший ботнет это тот, который не падает и эффективно справляется со своей задачей. Поэтому, как и любой продукт, сначала необходимо писать минимально необходимый функционал.
(12:20:06) lljullell: Вы должны знать, что программиста бывает очень сложно остановить. Они - маньяки. Им хочется писать все больше и больше кода.
Если при этом и заказчик хочет нагородить дофига абсолютно нерелевантной ерунды, то получится настоящий ахтунг, а не продукт. Вы его, во-первых, никогда не закончите, а, во-вторых, это вероятнее всего будет жутко забагованная несуразная ерунда, которая хрен знает, для чего вообще была сделана.
(12:21:03) lljullell: Тем временем, деньги, время и нервы потрачены. А на руках, по факту, ничего путного.
Такой подход неправилен. Писать необходимо сначала каркас и обязательно закладывать возможность расширения функционала.
Это прописные истины любой разработки и управления IT-проектов.
(12:21:48) lljullell: А поскольку вы, скорее всего, будете иметь дело с людьми, отродясь не имевшими отношения к академическим кругам и корпоративной среде, то хотя бы вы должны быть в курсе. Чтобы смочь проконтролировать разработку вашего продукта на всех уровнях.
Я не сторонник продолжительной разработки подобных продуктов.
(12:22:17) lljullell: Базовый функционал должен быть готов за несколько дней.
Да, не удивляйтесь.
Потом вы сможете допиливать любой функционал, дебажить и фиксить ваш софт сколько угодно. Но базовую штуку надо сделать быстро.
При условии, конечно, что кодер опытный.
(12:22:44) lljullell: Это показатель того, что вы понимаете, в каком направлении развиваться, и указывает на серьезность вашего предприятия.
Есть мнение, что написать ботнет может средней руки программист, который понимаеткак функционируют сети, протоколы (особенно HTTP), минимально разбирается в криптографии (типа SSL) и примерно понимает модель Объектно Ориентированного Программирования.
(12:23:36) lljullell: Господа, это все чушь. Такой кодер напишет вам соответствующий продукт. Чудес не бывает.
Теперь ближе к делу. Какие задачи ставим перед кодером?
Абсолютнейший минимум для нашего зверька в самой базовой его конфигурации должен выглядеть следующим образом:
(12:24:26) lljullell: 1) Наличие билда, который по указанному пути берет команду для ботов;
2) Возможность копирования самого себя в автозагрузку (авторан);
3) Обход UAC и AV;
4) Запрет завершения процесса;
5) Поддержку первый команды “Update” - команда которая просто будет обновлять наш текущий клиент новой версией;
6) Обфускацию исходников.
(12:25:05) lljullell: И, поверьте мне, все это не требует недель разработок! Это можно реализовать одному человеку за несколько дней.
Что дальше?
После того, как сделали каркас, следует прикрутить следующие функции: проверку на наличие админских прав у юзера, добавить try-catch, шифрование, функцию удаления. Также нужно скрыть бота из запущенных процессов.
(12:25:38) lljullell: Используем криптографию через стабы (stub) - использование определенного набора сигнатур, с помощью которых осуществляется шифрование билда алгоритмом RC4.
Пару слов хотелось бы сказать про авторан. Это, по факту, одна из наиболее важных функций. Вам надо как-то закрепиться в системе и пережить перезагрузку.
(12:26:05) lljullell: К сожалению, самым быстрым способом получения технического преимущества в этом отношении является выдирание модуля из тела более успешной малвари.
Это, в принципе, практика распространенная, поэтому не бейте своего кодера, если он признался, что скоммуниздил модуль у соседа (хотя я бы не говорил конечно)).
(12:26:42) lljullell: Если у вас действительно рукодельный кодер, то с этим он разберется без проблем: аналитики помещают в отчеты md5 и sha1 хеши пойманных семплов, которые можно нагуглить или стянуть со всяких av-отстойников.
То есть, по факту, все придумано за вас, но требует навыков отладки и дизассемблирования. Однако с учетом того, что код пишете не вы, то нам пофиг. Просто нужно это знать.
(12:27:09) lljullell: Отдельно хочу выделить вопрос оболочки протоколов. Как заказчик вы должны понимать, каким образом бот общается с сервером и какие соответствующие задачи ставить перед кодером.
Какие вообще есть методы коммуникации в ботнет-сети? Как мы можем контролировать свою сеть?
(12:27:37) lljullell: Первым делом рассмотрим управление через сервер.
Это - самый простой и довольно архаичный способ. Запускаем свой http или IRC сервер и с него работаем. Боты получают с него команды и туда же отправляют результаты о выполненной работе.
(12:28:24) lljullell: Из плюсов: реализуется просто, скорость общения высокая, можно отдавать команду как всему пулу, так и одному боту, содержать дешево.
Теперь о минусах. Если сеть большая, то нагрузка на сервер будет приличной. Придется раскошелится. Также риски связаны с одним контрольным узлом: отключили его - отключили всю сеть. Кроме того, легко поддается анализу и блокировке.
(12:28:54) lljullell: Есть управление через IRC-сеть (она сейчас не используется, но я-таки расскажу, поскольку иметь об этом представление действительно важно).
Заметьте, речь идет не об одном IRC-канале, а о сети. Логично, что для устранения предыдущих минусов, целесообразно поднять несколько серверов с IRC-сетью, сделав ее ответственной за передачу данных.
(12:29:25) lljullell: Из плюсов: также просто реализуется; скорость общения; возможность коммуникации с отдельным ботом; защита сети (распределение нагрузки, защита от DDoS); возможность создать несколько каналов и задавать разные команды различным частям сети.
Минусы: приличное количество серверов и их минимальная отладка; подвергается простому анализу и блокировке; история общения для новоприбывших ботов будет недоступна.
(12:29:57) lljullell: Следующий вариант - трастинг.
Слово происходит от английского словосочетания trust ring - то есть, “кольцо доверия”.
По сути, мы просто перекладываем функцию серверов на часть ботнета. В реальности такое случается редко, хотя можно устроить. По крайней мере, это гораздо лучше чем два предыдущих варианта.
(12:30:17) lljullell: Смысл подхода в том, что мы наделяем привилегированными правами ряд ботов внутри сети, которые осуществляют всю коммуникацию внутри нашего ботнета.
(12:31:16) lljullell: Из плюсов: нет потребности в содержании серверов; траст узлов может быть огромное количество; нет необходимости постоянного коннекта ботами к трастам; большое распределение трастовых узлов среди сети создает дополнительные условия безопасности и стабильности работы сети; возможность гибкой настройки сети (создание новых трастов одной командой); небольшое количество трастовых пиров для поддержания большой сети ввиду распределения нагрузки; возможность отдавать команды как одному конкретному боту, так и группе ботов; скорость коммуникации и реакции.
(12:31:50) lljullell: Из минусов: сложность реализации.
Ну, и последнее, p2p-сети (пиринговые, одноранговые) - это наиболее предпочтительный метод, однако, и самый продвинутый, далеко не всем по зубам.
Смысл схемы в том, что каждый узел в сети знает и контактирует с ограниченным количеством пиров. Ботмастер посылает команду одному пиру, а тот, впоследствии, ретранслирует ее дальше по сети.
(12:32:19) lljullell: Из плюсов: минимальная нагрузка на узлы в сети; неограниченный размер ботнет-сети; высокий уровень безопасности; отсутствие постоянных коннектов.
Минусы: низкая скорость коммуникации и сложность реализации.
Допустимы разные комбинации из двух последних вариантов. Можно продумать очень интересные методы коммуникации и обезопасить себя и свою сеть максимально.
Есть много тонкостей, касающихся коммуникации внутри и вне сети.
(12:32:52) lljullell: Есть еще ряд моментов относящихся к связи, на которые я хочу указать и на которые надо обращать внимание при написании ботнета.
Не все боты могут входить в сеть (быть онлайн) из-за фаервола или потому, что находятся за NATом. Соответственно, надо продумать механизм, при котором коммуникация с такими ботами будет возможна. Как минимум, мы должны знать о наличии проблемы. Например, можно заставить бота самого периодически обращаться к соседям.
(12:33:19) lljullell: Имейте ввиду, что все команды, посылаемые в сети, априори прослушиваются. Так что обязательно надо трафик шифровать, а наши команды подписывать цифровой подписью.
(12:33:48) lljullell: Никакие пароли тут не работают, ибо легко перехватываются.
Целесообразно, помимо команды обновления бота и обновления ключа ботмастера, также иметь команду самоуничтожения сети.
В случае трастинга, бот должен подключиться к случайному пиру из кольца. Никакой жесткой привязки к спискам.
(12:34:24) lljullell: Любые открытые сообщения между ботом и сервером моментально распознаются как аналитиком, так и автоматикой. Это говорит о том, что факт общения бота с сервером в обязательном порядке должен быть скрыт.
Само общение я буду называть “полезным сообщением”, для сокрытия которого кодер должен инкапсулировать (завернуть) в структуру дополнительную информацию (вроде ее контрольной суммы), которую накрывает слоем шифра.
(12:35:00) lljullell: Неплохо будет, если данные при этом будут сжаты.
Все защитные продукты в обязательном порядке имеют сигнатуры трафика и отсекают вредоносный.
Соответственно, чем меньше существует способов выделить паттерн трафика вашего бота, тем лучше.
(12:35:26) lljullell: Вариантов не очень много, но они стабильно работают:
- самостоятельное шифрование трафика;
- TLS-обёртка в SSL;
- дописывание случайного количества случайных байт к сообщению;
- стеганография.
(12:35:55) lljullell: Прошу меня извинить за довольно углубленное проникновение в тему, но вы, будучи заказчиком, должны знать,как это работает!
Выбор конкретного алгоритма зависит от характера общения бота с сервером, ресурсы которого не безграничны.
Запомните и не забудьте спросить кодера: ключ шифрования не должен передаваться вместе с сообщением!
(12:37:09) lljullell: Если кодер против внедрения SSL, то, в принципе, от него можно отказаться.
Обязательно рандомизируйте трафик. Команды по большей части однотипные, без рандомизации вам крышка.
В более продвинутых продуктах следует следует добавлять цифровую подпись ко всем сообщениям от сервера, дабы их нельзя было подделать. Обсудите этот момент с кодером отдельно.
(12:37:35) lljullell: Это то, что касается базовой версии софта. Дальше идем по списку.
Детекты. В частности, большое внимание на проактивную защиту. Важна не конкретная реализация конкретного AV, которая может и будет меняться, а принципиальный обход этого рода технологий.
Принцип создания сигнатур должен быть известен вашему кодеру.
(12:38:04) lljullell: Дизассемблирующий код может быть очень умным, но обработать ситуации кроме стандартных API-call он не в состоянии.
Соответственно, генерируем мусор и компилируем на здоровье.
Далее идут сигнатуры по байткоду и сигнатуры по хидерам. Просто уточните у кодера, как он решает эти вопросы. Оставил без внимания - гнать в шею.
Резюмируя, хочу сказать, что, по существу, есть три подхода.
(12:38:17) lljullell: Первый - это когда вы ничего не понимаете и покупаете готовое решение на рынке.
Сейчас огромное количество всевозможной малвари, которую вам радостно продадут, с поддержкой или без.
(12:38:52) lljullell: Понятно, что решение - паблик, со всеми вытекающими отсюда последствиями.
Второй вариант - вы заказываете скрипт у кидди или у “кодера” (который на техническом уровне ушел не очень далеко), чтобы он вам написал вашего зверька.
Такого исполнителя ловите на тех же сайтах, где нашли готовые решения.
(12:39:55) lljullell: Примечательно, что люди, презентующие себя как разработчики малвари, с напускной важностью проебут все сроки или и вовсе не возьмуться ничего делать.
Будете неприятно удивлены, но исполнители такого уровня все как один - птицы чрезвычайно важные. Там не до шуток и смеха.
(12:40:10) lljullell: Ну, и третий вариант - найти на самом деле квалифицированного разработчика, который сам, в одну морду грамотно напишет то, что вам нужно.
Долго и дорого. Зато действенно.
(12:40:39) lljullell: Не закладывайте меньше $10к на это дело. Если решили писать с нуля.
Где найти таких людей? Точно не на форумах. Их там попросту нет. Исключительно через знакомых.

