raw сокет что это
Необработанные сокеты TCP/IP
Необработанный сокет — это тип сокета, который обеспечивает доступ к базовому поставщику транспорта. В этом разделе рассматриваются только необработанные сокеты и протоколы IPv4 и IPv6. Это связано с тем, что большинство других протоколов с исключением ATM не поддерживает необработанные сокеты. Чтобы использовать необработанные сокеты, приложение должно иметь подробную информацию об используемом базовом протоколе.
Поставщики служб Winsock для IP-протокола могут поддерживать тип сокета Сокк _ RAW. поставщик Windows sockets 2 для TCP/IP, включенный в Windows, поддерживает этот тип сокк _ необработанного сокета.
Существует два основных типа таких необработанных сокетов:
Определение поддержки необработанных сокетов
Элемент иаддрессфамили в структуре _ сведений о всапротокол должен указывать AF _ inet или AF _ INET6, а элемент исоккеттипе структуры всапротокол должен указать _ Сокк _ RAW для одного из поставщиков транспорта.
Элемент ипротокол структуры _ info Всапротокол может иметь значение ипрото _ IP. Элемент ипротокол структуры _ info всапротокол также может иметь нулевое значение, если поставщик услуг позволяет приложению использовать тип _ необработанного сокета Сокк для других сетевых протоколов, отличных от протокола Интернета для семейства адресов.
Netsh Winsock показывать каталог
Создание необработанного сокета
Чтобы создать сокет типа Сокк _ RAW, вызовите функцию Socket или всасоккет с параметром AF (семейство адресов), для которого задано значение AF _ inet или AF _ INET6, параметру Type задано значение Сокк _ RAW, а параметру протокола задано значение требуемого номера протокола. Параметр протокола становится значением протокола в IP-заголовке (например, SCTP — 132).
Необработанные сокеты предоставляют возможность управлять базовым транспортом, поэтому их можно использовать для вредоносных целей, представляющих угрозу безопасности. таким образом, только члены группы «администраторы» могут создавать сокеты типа сокк _ RAW на Windows 2000 и более поздних версиях.
Операции отправки и получения
К операциям по Сокк _ необработанным сокетам применяются следующие правила.
Функция SendTo или всасендто обычно используется для отправки данных на сокет типа Сокк _ RAW. Адресом назначения может быть любой допустимый адрес в семействе адресов сокета, включая широковещательный или многоадресный адрес. Чтобы отправить широковещательный адрес, приложение должно использовать сетсоккопт с таким образом, чтобы _ вещание было включено. В противном случае SendTo или всасендто завершится ошибкой с кодом ошибки всаеакцес. Для IP-адреса приложение может отправить на любой адрес многоадресной рассылки (без участия в группе).
При отправке данных IPv4 приложение имеет возможность указать, следует ли указывать заголовок IPv4 в начале исходящей датаграммы для пакета. Если для параметра IP- _ хдринкл Socket задано значение true для сокета IPv4 (семейство адресов AF _ iNet), приложение должно предоставить заголовок IPv4 в исходящих данных для операций отправки. Если этот параметр сокета имеет значение false (значение по умолчанию), то заголовок IPv4 не должен включаться в исходящие данные для операций отправки.
При отправке данных IPv6 приложение имеет возможность указать, следует ли указывать заголовок IPv6 в начале исходящей датаграммы для пакета. Если параметр сокета _ хдринкл IPv6 имеет значение true для сокета IPv6 (семейство адресов AF _ INET6), приложение должно предоставить заголовок IPv6 в исходящих данных для операций отправки. Значение по умолчанию для этого параметра — false. Если этот параметр сокета имеет значение false (значение по умолчанию), то заголовок IPv6 не должен включаться в исходящие данные для операций отправки. Для IPv6 не нужно включать заголовок IPv6. Если сведения доступны с помощью функций сокета, то заголовок IPv6 не следует включать, чтобы избежать проблем совместимости в будущем. Эти проблемы обсуждаются в RFC 3542, опубликованных IETF. Использование параметра сокета _ хдринкл IPv6 не рекомендуется и может быть устаревшим в будущем.
Функция реквфром или всареквфром обычно используется для получения данных на сокете типа Сокк _ RAW. Обе эти функции имеют возможность вернуть исходный IP-адрес, с которого был отправлен пакет. Полученные данные — это датаграмма неподключенного сокета.
Для IPv4 (семейство адресов AF _ iNet) приложение получает заголовок IP-адреса в начале каждой полученной датаграммы независимо от параметра IP- _ хдринкл Socket.
Полученные датаграммы копируются во все _ необработанные сокеты Сокк, которые отвечают следующим условиям:
Важно понимать, что некоторые сокеты типа Сокк _ RAW могут принимать много непредусмотренных датаграмм. Например, программа PING может создать сокет типа Сокк _ RAW для отправки эхо-запросов ICMP и получения ответов. Хотя приложение ожидает ответа ICMP, все остальные ICMP-сообщения (такие как узел ICMP, _ НЕдоступные) также могут доставляться в это приложение. Кроме того, если несколько _ необработанных сокетов Сокк открыты на компьютере одновременно, одни и те же датаграммы могут быть доставлены всем открытым сокетам. Приложение должно иметь механизм для распознавания интересующих датаграмм и пропускать все остальные. Для программы PING такой механизм может включать проверку IP-заголовка Received для уникальных идентификаторов в заголовке ICMP (например, идентификатор процесса приложения).
Для использования сокета типа Сокк _ RAW требуются права администратора. Пользователи, запускающие приложения Winsock, использующие необработанные сокеты, должны быть членами группы «Администраторы» на локальном компьютере, в противном случае вызовы необработанных сокетов завершатся ошибкой с кодом всаеакцес. в Windows Vista и более поздних версиях доступ к необработанным сокетам применяется при создании сокета. в более ранних версиях Windows доступ к необработанным сокетам применяется во время других операций сокета.
Распространенные способы использования необработанных сокетов
Ограничения для необработанных сокетов
в Windows 7, Windows Vista, Windows XP с пакетом обновления 2 (sp2) и Windows XP с пакетом обновления 3 (sp3) возможность отправки трафика через необработанные сокеты ограничена несколькими способами:
Функция BIND с необработанным сокетом разрешена для других протоколов ( _ например, ИППРОТО IP, ИППРОТО _ UDP или иппрото _ SCTP).
указанные выше ограничения не относятся к Windows server 2008 R2, Windows Server 2008, Windows Server 2003 или к версиям операционной системы, предшествующим Windows XP с пакетом обновления 2 (SP2).
реализация TCP/IP в корпорации майкрософт на Windows может открыть необработанный сокет UDP или TCP на основе указанных выше ограничений. Другие поставщики Winsock могут не поддерживать использование необработанных сокетов.
Существуют дополнительные ограничения для приложений, использующих сокет типа Сокк _ RAW. Например, все приложения, прослушивающие конкретный протокол, получат все пакеты, полученные для этого протокола. Это может быть нежелательным для нескольких приложений, использующих протокол. Это также не подходит для высокопроизводительных приложений. чтобы избежать этих проблем, может потребоваться написать Windows драйвер сетевого протокола (драйвер устройства) для конкретного сетевого протокола. в Windows Vista и более поздних версиях Winsock Kernel (WSK) — новый интерфейс сетевого программирования, не зависящий от транспорта, может использоваться для записи драйвера сетевого протокола. в Windows Server 2003 и более ранних версиях для поддержки сетевого протокола можно написать поставщик TDI (TDI) и библиотеку DLL модуля поддержки Winsock. Затем сетевой протокол будет добавлен в каталог Winsock как поддерживаемый протокол. Это позволяет нескольким приложениям открывать сокеты для этого конкретного протокола, и драйвер устройства может контролировать, какой сокет получает определенные пакеты и ошибки. сведения о создании поставщика сетевых протоколов см. в разделах WSK и TDI в комплекте Windows Driver Kit (WDK).
Приложениям также необходимо учитывать влияние параметров брандмауэра на отправку и получение пакетов с помощью необработанных сокетов.
Особенности получения пакетов через raw socket в Linux
Linux (в отличии, к примеру, от FreeBSD) позволяет использовать сырые сокеты не только для отправки, но и для получения данных. В этом месте существуют интересные грабли, на которые я наступил. Теперь спешу показать их тем, кто еще на знает, чтобы каждый, используя свой любимый язык программирования, будь то C++ или Python, мог опробовать их в деле.
Суть граблей изображена на рисунке, чтобы те, кто уже в курсе, не тратили свое время.
Я буду писать примеры на С, но вы можете перенести их и на другие языки, предоставляющие возможность низкоуровневой работы со стеком TCP\IP в Linux.
Некоторые понятия
Напомню, что для инициализации сырого сокета мы передаем параметр, обозначающий тип протокола. Например UDP:
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
Этот протокол я буду называть уровнем на котором работает сырой сокет. В примере мы создали сырой сокет на уровне UDP.
Уровень сырого сокета не ограничивает вас в формировании пакета на отправку, вы можете самостоятельно сформировать как UDP, так и IP заголовок. А вот при получении данных начинается самое интересное…
Грабли
Допустим мы создали 2 сырых сокета на уровне UDP и воспользовались одним из них для отправки UDP пакета на UDP эхо сервер. Эхо вернет нам UDP payload обратно. Так вот, Стек TCP\IP скопирует полученный пакет на все сырые сокеты того уровня, который указан в поле Protocol IP заголовка пришедшего пакета. Еще раз повторюсь — на ВСЕ, даже те, которые открыты в других приложениях (по этой причине приложение, оперирующее сырыми сокетами может быть запущено только с правами суперпользователя). Так как UDP эхо сервер отвечает UDP пакетом, то все сырые сокеты UDP уровня его получат.
Отметим еще одну важную особенность. Не зависимо от уровня сырого сокета, ему доставляется полный пакет, включающий IP заголовки.
Таким образом, каждый сырой сокет в Linux является сниффером на том уровне, на котором он был создан. Следует помнить об этом при разработке приложений.
Пример
Не стал нагружать заметку кодом. Для тех, кому интересно попробовать, я
выложил свой пример на github. Там cmake проект, который собирает простенький UDP эхо-сервер и приложение, создающее 2 сырых сокета уровня UDP, один из которых посылает данные, но оба отправляются в epoll в ожидании ответа. Для чистоты эксперимента эхо-сервер и пример желательно пустить на разных машинах (не забудьте поправить код в соответствии вашим IP-шникам). Для интереса можно запустить несколько экземпляров примера.
Для внешкольного чтения есть хорошая статья.
Raw сокет что это
Уровень IPv4 генерирует заголовок IP при посылке пакета, если только для сокета не включён параметр IP_HDRINCL. Если он включён, то пакет должен содержать заголовок IP. Принимаемые пакеты всегда содержат заголовок IP.
Открывать неструктурированные сокеты могут только процессы с идентификатором эффективного пользователя, равным 0, или имеющие мандат CAP_NET_RAW.
Все пакеты или ошибки, совпадающие с номером протокола protocol, указанным неструктурированному сокету, передаются этому сокету. Список допустимых протоколов назначается списком IANA и содержится в getprotobyname(3).
Протокол IPPROTO_RAW подразумевает включённый параметр IP_HDRINCL и позволяет отправлять любой протокол IP, который указан в передаваемом заголовке. Приём любых протоколов IP посредством IPPROTO_RAW через неструктурированные сокеты невозможен.
Поля заголовка IP, изменяемые IP_HDRINCL при передаче | |
IP Checksum | всегда заполняется |
Source Address | заполняется, если значение равно нулю |
Packet Id | заполняется, если значение равно нулю |
Total Length | всегда заполняется |
Если указан IP_HDRINCL и заголовок IP имеет ненулевой адрес назначения, то для маршрутизации пакета используется адрес назначения сокета. Если указан MSG_DONTROUTE, то адрес назначения должен ссылаться на локальный интерфейс, иначе в любом случае будет производиться поиск в таблице маршрутизации, но маршруты со шлюзами будут игнорироваться.
Если IP_HDRINCL не указан, то параметры заголовка IP в неструктурированных сокетах могут быть установлены с помощью setsockopt(2); более подробная информация приведена в ip(7).
Начиная с Linux 2.2 все поля заголовка IP и параметры могут быть заданы с помощью параметров сокета IP. Это означает, что неструктурированные сокеты, как правило, необходимы лишь для новых протоколов или протоколов без интерфейса пользователя (например, ICMP).
Принятый пакет передаётся всем подключенным (bound) к этому протоколу неструктурированным сокетам до того, как он будет передан другим обработчикам протоколов (например, протокольным модулям ядра).
Формат адреса
Параметры сокета
Кроме этого, поддерживаются все датаграммные параметры сокетов ip(7) для IPPROTO_IP.
Обработка ошибок
ОШИБКИ
ВЕРСИИ
Код неструктурированных сокетов в версии Linux 2.0 при установленном параметре SO_BSDCOMPAT был специально сделан совместимым с BSD «вплоть до ошибок». Из Linux 2.2 это было удалено.
ЗАМЕЧАНИЯ
Неструктурированный сокет может быть подключён к определённому локальному адресу с помощью вызова bind(2). Если он не подключён, то принимаются все пакеты указанного протокола IP. Кроме того, неструктурированный сокет может быть подключён к определённому сетевому устройству с помощью SO_BINDTODEVICE; смотрите socket(7).
Сокет IPPROTO_RAW предназначен только для отправки. Если вы хотите получать все пакеты IP, используйте сокет packet(7) с протоколом ETH_P_IP. Заметим, что пакетные сокеты, в отличие от неструктурированных сокетов, не собирают пакеты из фрагментов IP.
Если вы хотите получать все пакеты ICMP для датаграммного сокета, то лучше использовать IP_RECVERR на определённом сокете; смотрите ip(7).
Неструктурированные сокеты могут перехватывать в Linux все протоколы IP, даже имеющие протокольный модуль в ядре (такие, как ICMP или TCP). В этом случае пакеты передаются как модулю ядра, так и неструктурированным сокетам. На это нельзя закладываться в переносимых программах, так как многие другие реализации сокетов BSD так не делают.
Linux никогда не изменяет заголовки, полученные от пользователя (за исключением обнуления некоторых полей, как описано в случае с IP_HDRINCL). Такое поведение отличается от поведения многих других реализаций неструктурированных сокетов.
Неструктурированные сокеты, в общем случае, не являются переносимыми, поэтому следует избегать их использования в переносимых программах.
Передача через неструктурированный сокет должна осуществляться с помощью протокола IP из sin_port; эта возможность исчезла в Linux 2.2. Метод обхода — использовать IP_HDRINCL.
ДЕФЕКТЫ
Если установлен параметр IP_HDRINCL, датаграммы не будут фрагментированы и их размер будет ограничен MTU интерфейса.
В Linux 2.2 отсутствует настройка протокола IP для отправки sin_port — всегда используется тот протокол, к которому был подключён сокет или который был указан при первом вызове socket(2).
Raw sockets и безопасность сетей
Вечером 4 мая сеть Gibson Research Corporation (GRC) подверглась атаке. Злоумышленник не старался скопировать секретную информацию или воспользоваться ресурсами компании для своих нужд. Хакер преследовал исключительно деструктивные цели: вывести из строя сеть, наводнив ее UDP-пакетами. Атака с целью вывода служб из строя — не редкость в наше время, однако это достаточно тривиальное событие стало, тем не менее, причиной бурной дискуссии, развернувшейся в прессе и Internet-форумах.
Как это начиналось
Объектом очередной атаки хакеры выбрали компанию, президентом которой является Стив Гибсон — известный специалист в области компьютерной безопасности, вполне способный проанализировать ситуацию и раскрыть механизм атаки.
Пакеты, которыми злоумышленник наводнил каналы, соединяющие GRC с провайдером (две линии T1), поступали с различных узлов, принадлежащих разным сетям, — налицо типичная атака DDoS. Анализируя поступившие пакеты, Гибсон выявил 474 атакующих компьютера. Справедливо предположив, что на эти машины была внедрена программа-«зомби», он отправил администраторам сетей почтовые сообщения с просьбой проверить свои машины на наличие «троянских коней». Вскоре в руках Гибсона оказался файл rundlI.exe (последняя буква — заглавная латинская «И»), который и выполнял функции посредника между злоумышленником и его жертвой.
Будучи запущенной в системе, «зомби» немедленно обращалась к определенному Chat-серверу и ожидала инструкций. Затем по команде из «центра управления атакой» она начинала генерировать UDP-пакеты большого размера и посылать их по адресу жертвы.
Зная механизм атаки и адреса инфицированных машин, Гибсон смог построить и установить у провайдера фильтр, «отсекающий» трафик атакующих компьютеров. Счастливый конец, как в рождественских сказках? Увы, по мнению Гибсона, только начало.
Приют для «зомби»
Все машины, участвовавшие в атаке против GRC, работали под управлением Windows. Этого и следовало ожидать. Ведь главным условием является наличие «зомби»-программы, которая как-то должна попасть на машину и быть запущенной в системе. Как известно, Windows богата недостатками, работает на совместимых аппаратных платформах, а ее «администрированием», если можно так выразиться, занимаются сами владельцы, в массе своей не слишком искушенные в вопросах защиты. Если учесть постоянный рост парка машин под Windows, становится ясно, почему именно этой системе выпала роль стать главным кандидатом на «зомбирование».
Всем хороша Windows для организаторов DDoS, за исключением одной существенной детали: доступные в этой системе типы «гнезд» (socket — логическая конструкция, инкапсулирующая основные операции при сетевом взаимодействии) ограничиваются потоковыми «гнездами» (SOCK_ STREAM) и «гнездами» дейтаграмм (SOCK_DGRAM). Поддержка так называемых raw sockets (SOCK_RAW) в системе отсутствует.
Этот тип «гнезд» обеспечивают доступ к протоколам наиболее низкого уровня и даже к сетевым интерфейсам. В частности, в системе Unix raw sockets используются инструментом getethers, предназначенным для сбора информации о компьютерах, подключенных к сети Ethernet. Один из побочных эффектов поддержки raw sockets — возможность замены обратного адреса в IP- и ICMP-пакетах.
Фактически именно благодаря отсутствию в системе поддержки raw sockets Гибсон смог проследить источники DDoS-атаки и настроить фильтр (хотя даже на это ушло несколько дней). Была бы у хакера возможность произвольно подставлять обратный IP-адрес, выбранный по случайному закону,— и для ликвидации атаки потребовались бы гораздо большие усилия. Казалось бы, сама судьба хранит владельцев персональных компьютеров от незавидной роли посредника в подобных инцидентах. Однако ситуация грозит измениться к худшему.
Raw sockets и Windows XP
На 25 октября сего года намечен выпуск Windows XP. Ожидается, что новая ОС, которая будет поставляться в двух редакциях — Home Edition и Professional Edition, достаточно быстро завоюет признание не только корпоративных, но и домашних пользователей.
Среди большого количества новых средств, которые собираются реализовать создатели очередной версии операционной системы, внимание Гибсона привлекла одна деталь. В Windows XP планируется восполнить недостатки реализации Berkeley Sockets, в частности обеспечить поддержку raw sockets. Следовательно, по мере распространения Windows XP противодействовать атакам, подобным той, которой подверглась GRC, станет значительно труднее.
Гибсон выступил с предложением, спор вокруг которого не утихает уже около двух месяцев. Суть его сводится к следующему: руководство Microsoft должно отказаться от реализации raw sockets в Windows XP. Раз Windows до сих пор вполне успешно обходилась без этого типа «гнезд», незачем включать их в новую версию и давать в руки хакерам столь мощный инструмент.
Однако предложение Гибсона не произвело на разработчиков Windows XP должного впечатления. Во-первых, аргументируют они, raw sockets уже были реализованы в Windows 2000, и, как говорится, ничего страшного не произошло. Во-вторых, безопасность за счет отклонения от стандартов — порочная практика.
Первое утверждение, безусловно, не выдерживает критики. Windows 2000, в которой поддерживаются raw sockets, в основном используется в корпоративной среде, «под присмотром» опытных администраторов. Новое программное обеспечение инсталлируется достаточно редко, зачастую централизованно, компьютеры подвергаются антивирусному контролю, сеть защищена брандмауэром. Если же «зомби»-программа по каким-либо причинам останется незамеченной и включится в атаку, администратор, скорее всего, обратит внимание на неоправданное увеличение исходящего ICMP- или UDP-трафика, проанализирует причины и примет соответствующие меры.
С Windows XP дело обстоит несколько иначе. Редакция Home Edition предназначена для домашних пользователей, которые не поддаются какому-либо контролю. Максимум, что можно сделать по отношению к такому пользователю, — отключить его от Internet. Но заинтересован ли в подобных мерах провайдер?
Что же касается второго аргумента Microsoft, то с ним трудно не согласиться. Действительно, надо не ограничивать типы «гнезд», а максимально затруднить проникновение программ, работающих в пользу хакеров, на пользовательские компьютеры. Что же предлагает в этом направлении новая ОС?
Эти возможности реализуются в рамках кампании по борьбе за безопасность, развернутой Microsoft. Основная ее цель — сделать невозможным или по крайней мере максимально затруднить проникновение вредоносного кода в систему.
Провайдеры всех стран…
28 июня состоялась телеконференция, в которой приняли участие Стив Гибсон и представители Microsoft. Как и следовало ожидать, речь шла о реализации raw sockets в Windows XP. В конце беседы каждая из сторон осталась при своем мнении. Разработчики Windows XP продолжают утверждать, что raw sockets реализовывать необходимо и что меры безопасности, принимаемые Microsoft, достаточны для того, чтобы администраторы сетей могли быть относительно спокойны. Гибсон, со своей стороны, считает, что решение Microsoft — ошибка, которая грозит неисчислимыми бедами сообществу Internet.
Судя по всему, независимо от мнения сторонних специалистов, руководство компании вряд ли станет пересматривать свое решение о реализации raw sockets. Каковы же должны быть действия пользователей и провайдеров, чтобы сети не стали беззащитными перед атаками DDoS?
Очевидно, что основная угроза исходит не от корпораций, которые будут оснащены Windows XP Professional Edition, а от индивидуальных, «неорганизованных» пользователей. Поэтому в первую очередь необходимо перекрыть каналы поступления «зомби»-программ на пользовательские компьютеры. Однако в этом направлении трудно ожидать каких-либо успехов.
Все мы были свидетелями победного шествия вирусов и почтовых «червей» по пользовательским компьютерам. Часто ли применялись антивирусы? Конечно, ряд пользователей регулярно проверяют свои машины. Попадаются даже фанатики, для которых поиск вирусов превратился в основное занятие. Но нередко встречается и совершенно противоположное отношение. Действительно, чего бояться тому, у кого самое ценное на диске — копия очередной популярной игры и ICQ-клиент, через который он обменивается впечатлениями с единомышленниками.
Так пользователи относятся к вирусам, грозящим отформатировать их жесткий диск. Что же говорить о каком-то «троянском коне», который всего лишь собирается участвовать в атаке на чужую сеть. Наивно ожидать дисциплины от тех, кто никогда ею не отличался и привык подменять знания навыками.
Теперь представьте, что, появившись на пользовательском компьютере, «зомби»-программа по команде организатора начинает атаку. Поскольку обратный адрес в пакетах будет фальсифицирован, получатель не сможет отфильтровать их традиционными способами. Для того чтобы как-то противодействовать атаке, потребуется интеллектуальный брандмауэр, анализирующий содержимое пакета. Но такой брандмауэр также не панацея. Хакеру достаточно видоизменить сценарий — не посылать пакеты непосредственно в атакуемую сеть, а отправлять ping-запросы по любому действительному IP-адресу, заменив в них обратный адрес реквизитом жертвы. Приходящий ответ будет неотличим от обычного ответа на ping-запрос. При наличии raw sockets не составит труда организовать также и SYN-наводнение.
Борьба с DDoS будет гораздо более эффективной, если она инициирована с другой стороны — из сети, которой принадлежит компьютер, участвующий в атаке. Установив в этой сети брандмауэр, можно легко избавляться от некорректных пакетов, применяя простые правила фильтрации. Достаточно уничтожать исходящие пакеты, для которых адрес источника находится за пределами сети.
В состав Windows XP входит персональный брандмауэр, но многие ли пользователи захотят инсталлировать его (к тому же пока неизвестно, будет ли он фильтровать исходящий трафик)? До тех пор пока установка брандмауэра не станет обязательным условием инсталляции операционной системы, основная нагрузка по борьбе с атаками DDoS ложится на провайдеров. Возможно, хоть они прислушаются к голосу здравого смысла. К тому же им достаточно придерживаться совсем простых и не очень обременительных правил: обязательно производить фильтрацию исходящего трафика и отказывать в обслуживании пользователям, компьютеры которых были замечены в генерации некорректных пакетов. Конечно, терять клиентов не очень приятно, но ведь вряд ли кто-то из провайдеров заинтересован в том, чтобы передавать по своим линиям хакерский трафик.
Что грозит администраторам Web-узлов
Как это ни парадоксально, на сегодняшний день уже почти безразлично, будут реализованы raw sockets в Windows XP или нет. В результате разгоревшейся дискуссии проблемой подмены обратных IP-адресов заинтересовались не только специалисты по защите, но и хакеры. На самом деле попытка подмены адресов может быть предпринята и на более низком уровне, с помощью специальных системных драйверов. Несмотря на то что в Windows XP драйверы защищаются цифровой подписью, система позволяет устанавливать продукты независимых производителей. В связи с этим даже представители Microsoft не отрицают, что в принципе хакер имеет возможность получить сертификат и использовать его для беспрепятственной установки драйвера, являющегося по сути «троянским конем». Вполне возможно, что скоро мы будем свидетелями появления нового класса программ, направленных, увы, на разрушение.
Атака DoS Атаки с целью вывода служб из строя (DoS — Denial of Service) известны давно. Обычно такая атака осуществляется путем «наводнения» компьютера-жертвы пакетами определенного типа. Иногда атака DoS предпринимается для того, чтобы замаскировать попытку взлома системы, но чаще всего она представляет собой бессмысленный акт вандализма. Одним из простейших типов атаки DoS является SYN-наводнение. Как известно, при установлении соединения используется трехэтапный процесс квитирования (handshaking). Инициатор соединения передает SYN-пакет и получает SYN/ACK-пакет. После того как инициатор отвечает ACK-пакетом, соединение считается установленным. При SYN-наводнении атакующий компьютер передает пакет SYN и получает SYN/ACK, но сам соединение не подтверждает. Запись о незавершенной процедуре квитирования хранится в буфере до истечения тайм-аута. Постоянно передавая пакеты SYN, атакующий компьютер добивается переполнения буфера, после чего установление соединения становится невозможным. Атака DDoS DDoS (Distributed Denial of Service) является модификацией DoS и отличается тем, что при проведении атаки используются скоординированные действия многочисленных компьютеров-посредников, которые играют активную роль. Для этого на машины внедряются специальные программы-«зомби», поддерживающие связь с неким управляющим центром. По его команде «зомби» начинают генерировать ICMP- или UDP-пакеты и передают их по адресу жертвы. Наиболее впечатляющим примером DDoS стала атака, предпринятая 7 февраля 2000 г. и приведшая к выходу из строя системы Yahoo! на 3 часа.
|