Настольная книга компьютерного исследователя


Active network (pre alfa)

  Итак, проблема следующая: создать сеть, полностью автоматизированную, способную к саморасширению, самовосстановлению, подверженную различным сетевым атакам как можно меньше и привлекающую человека для решения различных проблем её функционирования как можно реже (в идеальном случае — никогда). Так как данная сеть будет работать в рамках какой-нибудь глобальной сети, чтобы органично и незаметно вйти в работу этой WAN, наша сетка должна быть реализована на самом высоком уровне протоколов — прикладном. Самое главное в такой сети — её структура. Именно от неё зависит успех реализации основных принципов сети. 

1. Структура сети.

Можно предложить несколько вариантов построения сети. Первый — полностью или частично копирующий традиционные сети. То есть, допустим, есть у нас подсеть из n-ого количества машин, являющаяся частью глобальной сети (интернета, например). Напрямую (т.е. на канальном уровне) они могут общаться только между собой. Если же у них возникнет необходимость в работе с остальным интернетом, то они будут слать свои данные на роутер или маршрутизатор, который реализовывает взаимодействие машин подсети с интернетом. Такая схема не совсем подходит для активной сети. Узкое место — это то, что хосты в сетях с такой структурой выполняют разную по ответственности роль. То есть, если из строя выйдет роутер, то это нанесёт сети значительно больший урон, чем выход из строя машины какого-нибудь Дяди Пети. Для автоматизированной сети больше подходила бы структура, в которой ВСЕ хосты обладали равными и минимальными привилегиями. Я бы предложил следующую структуру.

Так как постоянное нахождение машины online — труднодостижимое состоянии (тачки виснут, перезагружаются и т.д.), то я бы предложил делить сеть не на реальные единицы (хосты), а на логические — группы хостов (в принципе, можно провести аналогию между группой и обычной подсетью). Каждый хост группы знает адреса других хостов группы. Причём, каждый хост обладает одними и теми же правами в группе. Если какие-либо данные поступают на определённый хост, то в его обязанности входит распространить эти данные по группе (разослать на каждый хост). Если даже половина группы выйдет из строя, то сама группа останется и всё равно будет нормально интегрироваться с остальной сетью. Для обеспечения секурности в каждой группе существует свой уникальный ключ, которым шифруются все данные, циркулирующие в пределах этой группы. Количество хостов в группе — величина переменная, вырабатывающаяся во время функционирования сети. Эта величина зависит от того, насколько стабильно работает группа. Под стабильностью подразумевается то время, на протяжении которого хосты находятся online. Чем стабильнее группа (чем больше времени хосты постоянно висят в сети), тем меньше количество хостов, находящихся в ней. Если хосты часто «вылетают», да ещё и при следущем соединении с Сетью меняют свой IP, то для включения в работу сети, они должны обладать большим количеством информации о ней, то есть в группе должно быть больше членов (единственная информация о сети, которой обладают хосты — информация о их группе). Если же хосты постоянно «висят» в Сети, то для уменьшения нагрузки на канал и уменьшения их роли в сети (больше секурности) они должны обладать меньшим количеством информации о ней, т.е. в группе должно быть меньше членов. Этим достигается соотношение между стабильностью сети и её устойчивостью к различным атакам. Большинство атак как раз и производятся с учётом того, что в сети существуют хосты, от которых зависит работа значительно большей части сети, чем от других хостов.

Необходимо, чтобы группы могли взаимодействовать между собой (т.е. делать то, для чего они собственно и существуют — строить сеть), т.е. передавать друг другу данные. Для этого каждая группа делится на 3 секции с равным количеством хостов в каждой. Хосты, являющиеся членами одной секции, могут одновременно состоять в одних и тех же двух группах. Каким же образом происходит распространение данных по сети? Допустим, у нас сеть из трёх групп (обозначим их как «1″, «2″ и «3″), ПОСЛЕДОВАТЕЛЬНО соединённых друг с другом посредством секций (Если каждую группу представить как треугольник, в котором каждая сторона — секция, то соседние группы — треугольники с общей стороной). Если группа «1″ «получит» определённые данные, то, поступив в секцию, являющуюся членом группы «1″ и группы «2″, они перекодируются при помощи ключа группы «2″ и отправятся всем хостам, входящим в группу «2″. Так как некоторые хосты из группы «2″ являются членами и группы «3″, то эти хосты снова перекодируют данные только при помощи ключа группы «3″ и отправят их в группу «3″. Вот и всё. По сути дела, каждый хост обладает полномочиями роутера.
Теперь цифры… по данной системе, в группе минимум может быть 3 члена (3 стороны треугольника). Максимум же нам необходимо просчитать, причём просчитать в максимально нестабильной сети. Так как каждый хост обладает информацией о двух группах, то он может знать минимум 4 адреса других хостов(может и меньше, но об этом потом).
В чём плюсы такой системы? Каждый заражённый хост обладает информацией только о двух группах, т.е. если кто-то узнает алгоритм его работы, то этот кто-то на первых порах сможет блокировать только незначительную часть всей сети, да и то, делая это очень расторопно. Теперь о минусах… Время от времени будут происходить большие нагрузки на сеть, особенно в больших группах, что может выявить существование сети . Второй минус: вышеприведённая схема построена с учётом обеспечения устойчивой сетевой работы. Слабым местом являются сами агенты. Если кто-то разберётся в алгоритме его работы, получит доступ к различным данным (ключ, адреса членов группы), то станет возможным внедрения в сеть «раковой опухоли», т.е. такого агента, который будет распространять по сети ложную информацию и таким образом дестабилизировать эту сеть. В принципе, этот минус — минус практически всех существующих сетей.

2. Механизмы передачи данных

Данные, передаваемые по сети можно разделить на 3 категории: данные, касающиеся внутренней структуры агентов сети; информация о конфигурации сети и обычные данные. Различаются они по степени защищённости.

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

Информация о конфигурации сети включает сообщения о настройке «роутинга» и т.д. Она тоже дополнительно не криптуется, но у неё есть радиус действия, т.е. определённое количество хопов от её оправителя, которое может пройти пакет с такими данными. Данная мера нужна для уменьшения нагрузки на сеть — инфа о конфигурации сети самая объёмная и при больших масштабах распространения сеть может стать слишком заметной. Кроме того при внедрении «раковой опухоли» из-за ограниченности радиуса действия такой информациибудет дестабилизирована только небольшая часть сетки.

Наконец, третий тип данных — данные о самих агентов. К ним относятся различные апдейты агентов, новые модули и т.д. Доставка таких данных — самая болезненная для сети операция. Получив контроль над одним из агентов, можно разослать по сети «левые» апдейты, «убивающие» агентов. Чтобы свести к минимуму ущерб от действий такого рода, распространение апдейтов можно сделать многопоточным да ещё и дополнительно закриптовать передаваемые данные. Один из вариантов этого — изначально поделить все хосты сети на фиксированное количество групп. Группы будут отличаться внутренней структурой агентов, входящих в них.
Агент, входящий в такую группу будет обладать ключом, позволящим только расшифровать данные, а ключ, позволяющий зашифровывать их, будет находится у самих разработчиков сети :-)). При помощи этого ключа будут шифровать только данные, касающиеся внутренностей агентов, обновления ключа расшифровки и другая инфа такого рода. Для апдейта агентов будет нужно зашифровать код апдейта отдельным ключом для каждой группы и послать в сеть все полученные зашифровыванные сообщения. При поступлении к любому агенту любого зашифрованного сообщения, он должен будет разослать его всем своим соседям, а затем попытаться расшифровать его при помощи ключа. Если ему это удаётся, то он «тихо» апдейтится, а если же нет, то он так же «тихо» удаляет эти данные. Таким образом строится сеть на агентах с совершенно разной структурой, поддерживащих один и тот же протокол передачи данных, а благодаря тому, что все действия по апдейту производятся «по-тихому», ни один из агентов не будет знать, каким типом внутренней структуры обладают его соседи, что затруднит уничтожение сети.

3. Распространение сети

Едиственная информация о сети, которую имеет новый агент, попавший на незаражённую машину — информация об адресах хостов группы, агенты которой произвели данное заражение. При первом запуске, агент посылает всем хостам группы запрос о вхождении в группу. Если в группе имеются «вакансии», то этот агент принимается в неё, если же нет, то группа редиректит запрос своим соседям. Если соседи не могут принять нового члена, то они отсылают запрос своим соседям, и так происходит пока не будет найдена «вакансия» или же не будет исчерпан лимит хопов. При нахождении свободных мест в группах новому агенту передаются адреса агентов групп, которые находятся online. Агент выбирает любую из групп, после чего вступает в неё. Но если «вакансий» не обнаружено, агент присоединяется к породившей его группе. В этом случае, при превышении определённого количества агентов в группе, происходит деление, после которого из старой появляются две новые группы с общей секцией. Группы-соседи старой группы распределяются по двум новым: одной достаётся два соседа, а другой — один. Если у породившей группы имеется свободная секция, то деления не происходит, а просто создаётся новая группа, в которую входят хосты из секции и новый агент.

4. Маскировка

Для запудривания мозгов врагам можно применить 2 вещи. В первом случае сделать маскировку под какой-нибудь распространённый простокол, к примеру DNS, и используя некоторые поля пакета этого протокола (в случае с DNS поля из секций QUESTION, ANSWER, AUTHORITY и ADDITIONAL), помещать в них нужные данные. Второй способ — создать небольшой фон из фэйковых пакетов, т.е. отсылать запросы на незаражённые хосты или же, наоборот, подменив source address IP-пакетов, рассылать эти дейтаграммы другим хостам группы. Будет создана иллюзия того, что в группе гораздо больше членов, чем есть на самом деле, что распылит усилия врага :-). Минус последнего способа: при подмене IP-адреса, если админы подсети не поленились нормально настроить роутер, сразу же будет выявлен MAC-адрес сетевого интерфейса, с которого был послан левый пакет, что наоборот уменьшит усилия, затрачеваемые на поиск и блокировку агента.



©2013 Журнал Хакера Entries (RSS) and Comments (RSS)