Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

iLinuxBot: Проектируем ботнеты для управления Linux-клиентами

Оригинал: iLinuxBot: Designing Botnets to Manage Linux Clients
Автор: Nishant Sharma
Дата публикации: 1 Мая 2012 г.
Перевод: А.Панин
Дата перевода: 12 октября 2012 г.

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

Я предполагаю, что вы хорошо знакомы с клиент-серверным программированием на языке C в соответствии со стандартами Berkley UNIX. В том случае, если этот материал вам не знаком, обратитесь к серии статей о прикладном интерфейсе программирования socket API.

Я взял идею своей системы управления из ботнетов (да, вы не ошиблись, это технология, которую используют взломщики для проведения атак отказа в обслуживании в отношении интернет-сайтов). Ботнет представляет собой ни что иное, как группу зараженных вредоносным ПО компьютеров, контролируемых взломщиками и канал контроля для выполнения таких задач, как DDoS-атаки или вставка рекламы для получения прибыли. Для того, чтобы узнать больше о DDoS-атаках, обратитесь к различным материалам на эту тему, опубликованным ранее.

Давайте спроектируем и разработаем систему, функционирующую как ботнет(бот или клиент и сервер). Наш сервер будет отвечать за управление клиентами и отправку команд клиентам или ботам, в то же время бот будет принимать команды и исполнять их на каждом компьютере. Для разработки нам понадобятся следующие инструменты:
  • Компилятор GNU C
  • Любой текстовый редактор
  • Любой дистрибутив Linux

Код

Теперь давайте приступим к разработке программ, использующих протокол TCP, ориентированный на установление постоянного соединения (server.c и client.c).

 

Для понимания приведенного кода обратитесь, пожалуйста, к уже упоминавшейся серии статей о прикладном интерфейсе программирования socket API, опубликованной ранее. Мы изменим код клиента и вставим вызов функции выполнения команды после получения сообщения - она выглядит так:
system (команда_и _аргументы);
Поскольку наш клиент получает номер порта и IP-адрес из параметров командной строки, для простоты напишем сценарий командной оболочки с именем start.sh следующего содержания:
. /client -p port_no ip_of_server

Развертывание системы

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

Как только клиент запускается, он подключается к серверу и ожидает команд для выполнения. На рисунке 1 показан процесс запуска сервера и выполнения команд (здесь видно, что я назвал программу iLinuxBot).

Процесс работы ботнет-сервера
Рисунок 1: Процесс работы сервера

На рисунке 2 показан процесс приема и исполнения команд клиентом.

Процесс работы ботнет-клиента
Рисунок 2: Процесс работы клиента

Возможности программы

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

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

Поскольку это моя первая статья, мне хотелось бы также услышать ваше мнение о ней. Оставляйте комментарии с вашими вопросами и предложениями. (Хотелось бы выразить признательность Ankit Sharma за его участие в процессе написания этой статьи.)

Мыслите открыто и нестандартно - так, как это должен делать техно-фрик. Долгих лет жизни СПО!