|
Сетевой контроль
Xakep, номер #047, стр. 047-054-2 Все! Червяк написан! Правда, это простейший вариант, работающий порой очень неэффективно, но этого пока достаточно. Можно его запустить, подождать пару дней, а потом наслаждаться количеством инфицированных машин. Но пока только наслаждаться... В данном случае не получится воспользоваться зараженными хостами в каких-то своих целях. Да, конечно, можно прикрутить к червю бэкдор и тем самым получить некоторый акцесс к тому или иному зараженному хосту, но это не позволит использовать их для других целей (распределенное выполнение задач) - придется коннектиться к каждой машине, исполнять там определенную команду, а затем мониторить ее выполнение. Если машин тысячи, то весь процесс становится довольно затруднительным. И, кроме того, это очень несекьюрно: такого хакера смогут вычислить на раз-два - ведь между ним и зараженной машиной ничего не стоит (можно заюзать проксю, но это не избавит от проблемы, а лишь немного затруднит процесс вычисления взломщика). Создание сети Чтобы решить эту проблему, необходимо организовать сеть из зараженных машин. Идея состоит в том, что, контактируя только с одной машиной сети, хакер имеет доступ ко всей сетке. Все хорошо, только вот проблема - необходимо разработать структуру, топологию и принципы работы сети, да еще с тем расчетом, что в эту структуру время от времени должны будут автоматически вписываться новые зараженные машины. Задача, пожалуй, самая сложная из всех, касающихся создания платформы решения распределенных задач. Рассмотрим модель, когда все машины в сети равноправны. Как будет происходить организация сети? Допустим, есть машина, сканирующая сеть на наличие других машин с багами и заражающая их. Теперь допустим, что она успела заразить 10 машин и должна организовать из них сеть. В целях безопасности каждая машина сети должна обладать как можно меньшим количеством информации о сети в целом. Другими словами, нельзя позволить, чтобы каждая из 11 машин (10 зараженных и одна заражающая) знала адреса всех других. Один из самых простых вариантов - создать кольцо из зараженных машин, т.е. каждая машина знает адреса двух машин, находящих "сзади" и "спереди", а самая последняя машина знает адрес предпоследней и первой машин. Как это работает? Предположим, хакер соединяется с первой машиной, заразившей остальные 10, и ему нужно, чтобы определенная команда распространилась по всей сети. Он шлет ее на эту машину. Она передает ее первой зараженной, которая, в свою очередь, второй и т.д. Десятая машина передает этот пакет на ту машину, с которой его отправили, и он благополучно "уничтожается" на ней. Чтобы сделать работу сети более надежной, распараллеливается передача команд по сети. Здесь каждая машина будет знать адреса двух (или более) предыдущих, двух (или более) следующих и одной (или более) стоящей на одном уровне с ней машины. На деле это будет выглядеть примерно так: хакер соединяется с одной из машин сети и отправляет команду на нее. Она передает ее всем машинам, стоящим на одном с ней уровне (пусть это будет машина №1 из всех 10 зараженных), откуда она никуда дальше не передается. Затем она пытается передать пакет "вперед" по сети. Пусть спереди находятся машины 2 и 3. Она сначала пытается его послать на вторую машину, а если не получается (машина в дауне), то на третью. Если ей удалось передать пакет на вторую машину, то вторая передает его третьей, т.к. это машина одного со второй уровня, четвертой и пятой, стоящим спереди. Если вторая машина в дауне и хакер смог переслать пакет только третьей, то теперь третья машина вместо второй пересылает пакет четвертой и пятой. Весь этот процесс повторяется до тех пор, пока пакет по кольцу не достигнет одной из машин того уровня, с которого он был запущен. Хотелось бы добавить, что в относительно больших сетях (до нескольких десятков тысяч машин) вероятность ухода в даун какой-либо машины сети сильно возрастает. Следовательно, чтобы сделать работу сетки более или менее надежной, а путь пакета менее длинным, на каждом уровне кольца должно быть больше двух (как было в рассмотренном выше примере) машин. |