Внешние атаки

Вашему вниманию предлагается перевод статьи, классифицирующей сетевые атаки и способы их выполнения. Часть из них - уже достояние истории, часть, к сожалению, нет. Рассматриваются основные типы сетевых атак, некоторые типы атак через приложения и атаки на отказ в обслуживании (DoS).

[Eric Detoisien (valgasu@club-internet.fr). Перевод: Иван Песин (ipesin@post.lviv.ua)]

Внешние атаки

Eric Detoisien (valgasu(at)club-internet.fr)

Перевод: © Иван Песин (ipesin(at)post.Lviv.UA)

Данная статья опубликована в журнале LinuxFocus


Содержание:


Аннотация

Эта статья была опубликована в специальном выпуске Linux Magazine France, посвященном безопасности. Редактор, авторы и переводчики любезно разрешили он-лайн изданию LinuxFocus опубликовать все статьи этого выпуска. Таким образом, по мере перевода они будут появляться в LinuxFocus. Спасибо всем людям, вовлеченным в эту работу. Все переводы этих статей будут содержать данную аннотацию.

Эта статья описывает различные типы внешних атак, которые могут применить злоумышленники в сети. Мы рассмотрим основные типы сетевых атак, некоторые типы атак через приложения и атаки на отказ в обслуживании.

Сетевые атаки

Сетевые атаки базируются на уязвимостях прямо связанных с протоколами или их реализациями. Существует множество вариантов атак, однако подавляющее их большинство основано на пяти известных типах.

Атаки, основанные на IP-фрагментации

Данная атака направлена на оборудование, находящееся за защитой IP фильтрующего оборудования. Для ее реализации злоумышленники используют два разных метода: "микрофрагменты" (Tiny Fragments) и "перекрытие фрагментов" (Fragment Overlapping). Эти атаки становятся достоянием истории, поскольку современные межсетевые экраны давно успешно с ними справляются.

Микрофрагменты

Согласно документу RFC (Request For Comment) 791 (IP), все узлы (маршрутизаторы) Internet должны уметь передавать пакеты, размером 68 байт, без их фрагментации. Минимальный размер заголовка IP-пакета, без опций -- 20 байт. При заданных опциях, максимальный размер заголовка равен 60 байтам. В поле IHL (Internet Header Length) содержится длинна заголовка в 32 битных словах. Это поле использует 4 бита, потому количество возможных его значений равно 2^4 - 1 = 15 (поле не может принимать значение 0000). Следовательно, максимальный размер заголовка действительно равен 15*4 = 60 байтам. Наконец, поле смещения фрагмента (Fragment Offset), указывающее смещение первого байта фрагмента относительно всей дейтаграммы, займёт 8 байт. Таким образом данные в фрагменте занимают минимум восемь байт. Откуда и получаем размер пакета в 68 байт.

Атака состоит из запроса TCP соединения, фрагментированного на два IP-пакета. Первый IP-пакет состоит из 68 байт и содержит лишь первые восемь байт заголовка TCP (порты источника, назначения, и порядковый номер). Данные второго IP-пакета содержат запрос на TCP соединение (Флаг SYN установлен, ACK снят).

Пакетные фильтры применяют одно и то же правило ко всем фрагментам пакета. По первому фрагменту (смещение = 0) выбирается правило, в соответствии с которым обрабатываются все остальные фрагменты пакета безо всякого дополнительного контроля. Таким образом, при сборке фрагментов на целевой машине формируется пакет с запросом на соединение. В результате устанавливается соединение несмотря на то, что пакетный фильтр должен был предотвратить такую ситуацию

На рисунках 1 и 2 показаны оба фрагмента, а на третьем -- дефрагментированный пакет на целевой машине:

Рис.1: Фрагмент 1
Tiny-Frag-1
Рис.2: Фрагмент 2
Tiny-Frag-2
Рис.3: Дефрагментированный пакет
Tiny-Frag-3

Перекрытие фрагментов

В соответствии с тем же RFC 791 (IP), если два IP-фрагмента перекрываются, второй перезаписывает собой первый. Данный тип атаки также заключается в разбиении IP-пакета на два фрагмента. Пакетный фильтр пропускает первый пакет из 68 байт (по тому же принципу, что и в атаке типа "микрофрагменты") поскольку он не содержит запроса на TCP соединение (флаг SYN = 0 и флаг ACK = 0). И снова, данное правило применяется для всех фрагментов пакета. Второй фрагмент (со смещением = 1), содержащий настоящие данные о соединении, пропускается фильтром, так как он не видит, что в этом фрагменте содержится запрос на установление соединения. При дефрагментации, данные второго фрагмента замещают данные первого, начиная с восьмого байта (так как смещение = 1). Результирующий пакет получается корректным запросом на соединение для целевой машины. Соединение установлено, несмотря на присутствующий пакетный фильтр.

На рисунках 1 и 2 показаны оба фрагмента, а на третьем -- дефрагментированный пакет на целевой машине:

Рис.4: Фрагмент 1
Tiny-Frag-4
Рис.5: Фрагмент 2
Tiny-Frag-5
Рис.6: Дефрагментированный пакет
Tiny-Frag-6

Подмена адреса источника (IP Spoofing)

Целью данной атаки является узурпировать IP-адрес определенной машины. Это позволяет злоумышленнику либо скрыть источник атаки (используется в атаках типа "отказ в обслуживании"), либо извлечь какую-либо пользу из доверительных связей двух машин. Здесь мы рассмотрим второй вариант использования атаки IP Spoofing.

Для злоумышленника, базовый принцип атаки заключается в фальсификации собственных IP-пакетов (например, с помощью таких программ, как hping2 или nemesis) в которых изменяется, среди прочего, IP-адрес источника. Атака IP Spoofing часто называется "слепой подменой" (Blind Spoofing). Это связано с тем, что ответы на фальсифицированные пакеты не могут прийти машине кракера (сленговое название "любителя" сетевых взломов -- прим.ред.), ведь был изменен исходящий адрес. Следовательно, они отправляются машине, адрес которой использовал кракер для подмены. Однако, все-таки существуют два метода получения ответов:

  1. Маршрутизация от источника (Source Routing): в протокол IP существует возможность маршрутизации от источника, которая позволяет задавать маршрут для ответных пакетов. Этот маршрут представляет собой набор IP-адресов маршрутизаторов, через которые должен проследовать пакет. Для кракера достаточно предоставить маршрут для пакетов до маршрутизатора, им контролируемого. В наше время, большинство реализаций стека TCP/IP отбраковывают пакеты с маршрутизацией от источника;

  2. Перемаршрутизация (Re-routing): если маршрутизатор использует протокол RIP, то его таблицы можно изменить присылая ему RIP-пакеты с новой информацией о маршрутах. С помощью этого, кракер добивается направления пакетов на подконтрольный ему маршрутизатор.

Эти технологии трудноприменимы: атака выполняется без получения ответных пакетов целевого сервера.

Слепая подмена используется против таких сервисов, как rlogin и rsh. Их механизмы аутентификации основаны лишь на исходных IP-адресах клиентских машин. Это широко известная атака (Кевин Митник [Kevin Mitnick] применил ее против машины Цутому Шимомура [Tsutomu Shimomura] в1994) требует некоторых шагов:

  • обнаружение IP-адреса доверенной машины, например, при помощи команды showmount -e, которая выводит список хостов для которых экспортируются файловые системы, или команды rpcinfo, выдающей больше информации;

  • выполнение атаки "отказ в обслуживании" против доверенной машины, используя, например, SYN-наводнение (SYN Flooding, детальнее об атаках такого типа смотрите ниже). Это необходимо для предотвращения возможности ответа доверенной машины на пакеты от целевого сервера. В противном случае, машина пошлет серверу пакеты TCP RST, которые оборвут попытку соединения;

  • предугадывание последовательного номера TCP: каждому TCP-пакету присваивается начальный номер последовательности. Стек TCP/IP операционной системы генерирует его линейно, в зависимости от времени, случайным или псевдослучайным методом. Кракер может атаковать только те системы, которые пользуются прогнозируемыми методами (линейным или основанном на времени) для вычисления номера последовательности;

  • атака заключается в открытии TCP-соединения с желаемым портом (например rsh). Для лучшего понимания, мы напомним вам как работает механизм установления TCP-соединения. Он происходит в три шага (механизм тройного квитирования):

    1. клиент шлет серверу пакет с выставленным флагом TCP SYN и номером последовательности x ;

    2. сервер отвечает пакетом с выставленными флагами TCP SYN и ACK (с номером подтверждения x+1). Номер последовательности данного пакеты равен y;

    3. клиент шлет пакет с флагом TCP ACK (и номером подтверждения y+1) серверу.

Во время атаки, кракер не получает от сервера пакет с выставленными флагами SYN-ACK. Для того, чтобы установить соединение он прогнозирует номер последовательности y и посылает пакет с предполагаемым номером подтверждения (y+1). После этого соединение установлено. Кракер теперь может послать команду сервису rsh, такую как echo ++ >> /.rhosts и получить дополнительные права доступа. Чтобы сделать это, он шлет пакет с выставленным флагом TCP PSH (Push): полученные данные немедленно передаются протоколу более высокого уровня (в нашем случае сервису rsh). После чего, кракер может подключаться к серверу по rlogin или rsh без подмены адреса источника.

Рисунок 7 демонстрирует шаги по реализации атаки IP Spoofing:

Рис.7: Атака IP Spoofing направленная на сервис rsh
ip_spoof

Кракер использует машину A, машина C -- это доверенная система. Обозначение A(C) символизирует пакет, отправленный машиной А с адресом машины C в качестве адреса источника.

Примечание: существует программа mendax, реализующая механизмы атаки IP Spoofing.

Перехват TCP-сеанса (TCP Session Hijacking)

Перехват TCP-сеанса позволяет злоумышленнику перенаправлять поток TCP. Далее, кракер может преодолеть парольную защиту (как в telnet или ftp). Необходимость прослушивания (sniffing) ограничивает применяемость данного типа атаки до физического сегмента сети целевого хоста. Перед рассмотрением деталей этой атаки, давайте разберем некоторые базовые принципы протокола TCP.

Мы не будем детально рассматривать протокол, а сконцентрируемся на моментах, необходимых для понимания атаки. Заголовок TCP содержит различные поля:

  • порт источника и порт назначения, идентифицирующие соединение;

  • номер последовательности, идентифицирующий каждый посланный байт;

  • номер подтверждения, соответствующий последнему полученному байту;

  • различные флаги, в том числе:

    • SYN, используется для синхронизации при установлении сеанса;

    • ACK, флаг подтверждения TCP-сегмента;

    • PSH, указывает на необходимость передачи данных приложению.



На рисунке 8 представлен процесс установления TCP-соединения (механизм тройного квитирования):

Рис.8: Механизм тройного квитирования
3way

В данном примере машина A инициировала TCP-соединение с машиной B.

Рисунок 9 демонстрирует процесс передачи данных в протоколе TCP:
psh

Номер последовательности будет меняться в соответствии с количеством посланных байт. На рисунке он представлен как Seq, номер подтверждения находиться после флагов PSH и ACK, а количество посланных байт указано в скобках.

Рассматриваемая атака нарушает синхронизацию соединения на обоих концах, что позволяет выполнить перехват сеанса. Синхронизация нарушается, когда порядковый номер посылаемого машиной А байта, отличается от порядкового номера байта, который должна получить машина В. И наоборот.

В примере на рисунке 9 после первого шага, когда B получает пакет, машина A ждет ответного пакета с номером подтверждения x+60. Если пакет, посланный В будет содержать другой номер подтверждения, синхронизация соединения будет нарушена.

Итак, злоумышленник хочет выполнить с машины C перехват установленного между машинами A и B сеанса telnet. В начале он прослушивает telnet-трафик (TCP порт 23) между A и B. Когда злоумышленник решает, что А аутентифицировалось сервисом telnet машины В, он десинхронизирует соединение. Для этого, генерируется пакет с исходящим адресом машины А и номером подтверждения, который ожидает машина В. Естественно, что этот пакет принимается машиной В. Кроме рассинхронизации TCP-сеанса, этот пакет позволяет злоумышленнику выполнить команду в telnet-сеансе, установленном машиной А. Фактически, этот пакет может нести данные (флаг PSH = 1).

На рисунке 10 продемонстрирована атака:

Рис.10: Перехват TCP-сеанса
hijacking

Машина B принимает команду, посланную машиной C, и подтверждает это посылкой пакета машине А с выставленным флагом ACK. Теперь, если А пошлет пакет машине В, он будет отвергнут, поскольку у него будет номер последовательности отличный от ожидаемого машиной B.

Возникает проблема, называемая "штормом подтверждений" (Ack Storm). Генерируется множество ACK-пакетов. Это происходит, когда А шлет TCP-пакет с неверным номером последовательности (ведь A десинхронизирована), B отвергает его и шлет машине A ACK-пакет с ожидаемым номером последовательности. Машина А тоже отвергает этот пакет, ведь она тоже ожидает другой номер последовательности. И в свою очередь отправляет ACK-пакет машине B ...

Проблема шторма подтверждений может быть решена, если злоумышленник использует технологию подмены ARP-информации (ARP Spoofing). В этом случае, машина С изменит ARP-кэш машины B таким образом, чтобы IP-адресу машины А соответствовал MAC-адрес машины С. Эти технологии реализованы в программе hunt.

Подмена ARP-информации (ARP Spoofing)

Эта атака, известная также под именем ARP Redirect, перенаправляет сетевой трафик от одной или более машин к машине злоумышленника. Выполняется в физической сети жертвы. Давайте вспомним, что представляет собой протокол ARP и как он работает.

Протокол ARP (Протокол разрешения адресов, Address Resolution Protocol) реализует механизм разрешения IP-адресов в MAC-адреса Ethernet. Сетевое оборудование общается между собой путем обмена Ethernet-фреймов (естественно в Ethernet-сети), на канальном уровне. Для обеспечения возможности передачи этой информации необходимо, чтобы каждый сетевой интерфейс имел свой уникальный адрес в сети Ethernet. Он называется MAC-адресом (MAC=Media Access Control).

При посылке IP-пакета, отправляющая машина должна знать MAC-адрес получателя. Чтобы его узнать, в локальную сеть посылается широковещательный ARP-запрос. В нем спрашивается "Какой MAC-адрес соответствует такому-то IP-адресу ?". Машина с соответствующим IP-адресом отвечает ARP-пакетом, содержащим запрошенный MAC-адрес. С этого момента, отправляющая машина знает MAC-адрес соответствующий IP-адресу назначения. Это соответствие сохраняется некоторое время в кэше (чтобы не выполнять запрос каждый раз при посылке IP-пакета).

Рассматриваемая атака изменяет кэш целевой машины. Злоумышленник шлет ARP-ответы целевой машине с информацией о новом MAC-адресе, соответствующем (например) IP-адресу шлюза. На самом деле, этот MAC-адрес соответствует интерфейсу машины злоумышленника. Следовательно, весь трафик к шлюзу будет теперь получать машина злоумышленника. Теперь можно прослушивать трафик (и/или изменять его). После этого, трафик будет направляться к реальному целевому адресу и таким образом никто не заметит изменений.

Атака ARP Spoofing используется в локальной сети, построенной на коммутаторах. С ее помощью можно перенаправить поток ethernet-фреймов на другие порты, в соответствии с MAC-адресом. После чего злоумышленник может перехватывать все пакеты на своем порту. Таким образом, атака ARP Spoofing позволяет перехватывать трафик машин, расположенных на разных портах коммутатора.

Для реализации атаки ARP Spoofing, злоумышленник может воспользоваться генераторами ARP-пакетов, например ARPSpoof или nemesis.

Пример: машина-жертва с адресом 10.0.0.171, ее шлюз -- 10.0.0.1, машина злоумышленника имеет адрес 10.0.0.227. Результат выполнения команды traceroute перед атакой:

[root@cible -> ~]$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 40 byte packets
 1  10.0.0.1  (10.0.0.1)  1.218 ms  1.061 ms  0.849 ms

ARP-кэш машины:

[root@cible -> ~]$ arp
Address     HWtype  HWAddress       Flags Mask  Iface
10.0.0.1    ether   00:b0:c2:88:de:65   C       eth0
10.0.0.227  ether   00:00:86:35:c9:3f   C       eth0

Злоумышленник запускает программу ARPSpoof:

[root@pirate -> ~]$ arpspoof -t 10.0.0.171 10.0.0.1
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f

Посылаемые пакеты -- это ARP-ответы, изменяющие кэш машины 10.0.0.171. Они несут информацию, что с адресом 10.0.0.1 теперь ассоциирован MAC-адрес 00:00:86:35:c9:3f.

Теперь ARP-кэш машины 10.0.0.171 выглядит так:

[root@cible -> ~]$ arp
Address     HWtype  HWAddress       Flags Mask  Iface
10.0.0.1    ether   00:00:86:35:c9:3f   C       eth0
10.0.0.227  ether   00:00:86:35:c9:3f   C       eth0

Чтобы убедится, что весь трафик теперь проходит через машину 10.0.0.227, достаточно еще раз запустить traceroute к шлюзу 10.0.0.1 :

[root@cible -> ~]$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 40 byte packets
 1  10.0.0.227  (10.0.0.227)  1.712 ms  1.465 ms  1.501 ms
 2  10.0.0.1  (10.0.0.1)  2.238 ms  2.121 ms  2.169 ms

Теперь злоумышленник может прослушивать трафик между машинами 10.0.0.171 и 10.0.0.1. Он должен не забыть активировать маршрутизацию на своей машине 10.0.0.227.

Подмена DNS (DNS Spoofing)

Система DNS (Domain Name System) преобразует доменное имя (например, www.test.com) в его IP-адрес (например, 192.168.0.1) и наоборот. Данная атака использует технологию отправки фальшивых ответов на DNS-запросы жертвы. Атака основывается на двух основных методах.

Подмена DNS ID (DNS ID Spoofing)

Заголовок пакета DNS-протокола содержит идентификационное поле для соответствия запросов и ответов. Целью подмены DNS ID является посылка своего ответа на DNS-запрос до того, как ответит настоящий DNS-сервер. Для выполнения этого, нужно спрогнозировать идентификатор запроса. Локально это реализуется простым прослушиванием сетевого трафика. Однако, удаленно выполнить эту задачу гораздо сложнее. Существуют различные методы:

  • проверка всех доступных значений идентификационного поля. Не очень практично, поскольку общее количество возможных значений составляет 65535 (размер поля 16 бит);

  • посылка нескольких сотен DNS-запросов в правильном порядке. Очевидно, что этот метод не очень надежен;

  • нахождение сервера, генерирующего прогнозируемые идентификаторы (например, увеличивающиеся на 1). Этот тип уязвимости присущ некоторым версиям Bind и системам Windows 9x.

В любом случае, необходимо ответить до настоящего DNS-сервера. Этого можно достичь, например, выполнив против сервера атаку типа "отказ в обслуживании".

Для проведения успешной атаки, злоумышленник должен контролировать DNS-сервер (ns.attaquant.com), авторитетный для зоны attaquant.com. Целевой DNS-сервер (ns.cible.com) предположительно генерирует прогнозируемые идентификационные номера (увеличивающиеся на 1 при каждом запросе).

Атака требует выполнения четырех шагов:

  1. атакующий шлет DNS-запрос от имени www.attaquant.com к DNS-серверу домена cible.com, как показано на рисунке 11;


    Рис.11: DNS-запрос посланный к ns.cible.com
    dnsspoof1

  2. целевой DNS-сервер перенаправляет запрос к серверу домена attaquant.com;

  3. злоумышленник прослушивает запросы на предмет получения идентификаторов (в нашем примере ID равен 100);

  4. злоумышленник фальсифицирует IP-адрес соответствующий имени. В примере машина-жертва это www.spoofed.com, адрес которой должен быть 192.168.0.1. Злоумышленник посылает DNS-запрос на разрешение имени www.spoofed.com серверу ns.cible.com. И сразу же шлет группу фальсифицированных DNS-ответов (передавая в качестве IP-адреса, один из адресов злоумышленника -- 10.0.0.1) на свой же запрос с подмененным IP-адресом источника на адрес одного из DNS-серверов домена spoofed.com. В каждом ответе ID увеличивается на 1 по сравнению с идентификатором, полученным во время второго этапа атаки (ID = 100) для увеличения вероятности нахождения правильного номера ID. Сервер ns.cible.com мог ответить на запросы других клиентов и, соответственно, увеличить свой DNS ID. На рисунке 12 показано, как выполняются два последних этапа атаки.

    Рис.12: Подмена DNS ID
    dnsspoof2

В результате, кэш целевого DNS-сервера будет содержать соответствие, необходимое злоумышленнику и следующим клиентам запрашивающим адрес www.spoofed.com будет сообщен адрес машины злоумышленника. На ней может быть размещена копия настоящего сайта, с помощью которого злоумышленник может красть конфиденциальную информацию.

 

Изменение DNS Cache Poisoning

DNS-сервера используют кеш для хранения результатов предыдущих запросов в течении некоторого времени. Это делается чтобы избежать постоянных повторов запросов к авторизированным серверам соответствующих доменов. Второй вариант атаки, направленной на подмену DNS, заключается в изменении кэша DNS сервера. Вот пример:

Используем те же данные, что и в предыдущем примере. Вот ключевые моменты этого варианта атаки:

  • послать DNS-запрос на разрешение имени www.attaquant.com DNS-серверу домена cible.com;

  • целевой DNS-сервер шлет запрос на разрешение имени www.attaquant.com DNS-серверу злоумышленника;

  • DNS-сервер злоумышленника шлет ответ, с фальсифицированными записями, что позволяет задавать имени соответствие с IP-адресом злоумышленника. Например, сайт www.cible.com может иметь фальсифицированную DNS-запись, соответствующую IP-адресу сайта www.attaquant.com.

Атаки на приложения

Атаки на приложения основываются на специфических уязвимостях, обнаруженных в некоторых программах. Однако, некоторые из них могут быть классифицированы.

Конфигурационные проблемы (The configuration problem)

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

Программное обеспечение, такое как веб-сервера, в установке по-умолчанию часто содержат примеры сайтов, которые может использовать злоумышленник для доступа к конфиденциальной информации. Например, такие установки могут содержать интерфейсы удаленного администрирования с паролем по-умолчанию (который можно найти в руководстве администратора по данному приложению). В результате злоумышленник получает полный доступ к сайту.

Наиболее распространенная уязвимость -- это неправильные списки доступа. Из-за этого злоумышленник может получить доступ к конфиденциальной информации.

Классическим примером ошибочной конфигурации приложения, является настройка веб-сервера Lotus Domino. После установки этого сервера, в его конфигурации отсутствуют списки доступа. То есть, к базе names.nsf можно получить доступ непосредственно из браузера без какой-либо аутентификации.

Ошибки

Некачественное программирование всегда ведет к ошибкам в ПО. Это и есть наиболее критические уязвимости. Их обнаружение позволяет выполнять несанкционированные команды, получать исходный код динамических страниц, выводить сервис из строя, получать контроль над машиной и т.п. Наиболее известные из этих ошибок, и наиболее интересные в смысле их использования, это ошибки переполнения буфера.

Переполнение буфера

Переполнение буфера это уязвимость, появляющаяся в результате некачественного программирования. Ошибка переполнения буфера происходит, когда переменная переданная функции в качестве аргумента копируется в буфер без проверки размера. Если размер переменной больше буфера, получается переполнение. Чтобы использовать данную уязвимость в переменную посылают фрагмент программы. Если злоумышленнику удается выполнить переполнение буфера, он может удаленно выполнять команды на машине-жертве с правами атакованного приложения. Эта тема детально рассмотрена в серии статей посвященных безопасному программированию:



Скрипты

Низкокачественное написание скриптов часто влияет на безопасность системы в целом. Существует возможности использования уязвимостей в Perl-скриптах для доступа к файлам вне пределах файловой системы веб-сервера или выполнения несанкционированных команд. Эти проблемы обсуждаются в вышеприведенной статье, часть 6.

Атака "Посредник" (Man in the Middle)

Главной целью атаки является перенаправление трафика между двумя машинами. Это нужно для перехвата, модификации или уничтожения данных, которыми обмениваются системы. Эта атака, скорее концептуальная, нежели практическая. Существует множество типов атак, реализующих принцип "Посредника" , например "посредник" в DNS, использующая подмену DNS для перенаправления трафика между веб-сервером и клиентом. Недавно созданы программы для перенаправления SSH-трафика.

Отказ в обслуживании

Название этих атак хорошо отражает их суть, поскольку результатом данных атак является недоступность того или иного сервиса (определенного приложения) или целевой машины. Мы рассмотрим два типа отказа в обслуживании: один, основанный на ошибке в приложении, и другой, основанный на плохой реализации или уязвимости протокола.

Отказ в обслуживании приложения

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

Сетевой отказ в обслуживании

Существует несколько типов атак "отказ в обслуживании", основывающихся на особенностях стека протоколов TCP/IP.

SYN-наводнение

Мы уже рассматривали механизм установления TCP-соединения (механизм тройного квитирования). SYN-наводнение использует этот механизм. Как вы помните, есть три состояния: посылка SYN-пакета, получение пакета SYN-ACK и посылка ACK-пакета. Идея атаки состоит в создании большого количества не до конца установленных TCP-соединений. Для реализации этого, злоумышленник посылает множество запросов на установление соединения (пакеты, с выставленным флагом SYN), целевая машина отвечает пакетами SYN-ACK. Злоумышленник же не завершает процесс установки соединения, а оставляет их в полу-открытом состоянии. Следовательно, для каждого полученного SYN-пакета сервер выделяет ресурсы и вскоре они исчерпываются. В результате, новые соединения не могут быть открыты. Этот тип отказа в обслуживании направлен только на целевую машину.

Для реализации атаки SYN-наводнения злоумышленник может использовать программу synk4, передавая ей в качестве параметра целевой хост, порт и случайный адрес источника. Последнее затрудняет определение машины злоумышленника.

UDP-наводнение

Этот тип атаки "отказ в обслуживании" использует бессеансовый режим протокола UDP. Злоумышленник генерирует большое количество UDP-пакетов ("шторм UDP-пакетов") направленных на одну или две машины. В результате происходит перегрузка сети и целевых машин. Эффективность данной атаки особенно высокая, поскольку UDP-трафик приоритетнее TCP-трафика. В протоколе TCP есть механизмы предотвращения перегрузок, если подтверждения приема пакетов приходят с значительной задержкой, передающая сторона замедляет скорость передачи TCP-пакетов. В протоколе UDP такой механизм отсутствует, и после начала атаки, UDP-трафик быстро захватит всю доступную полосу пропускания, и TCP-трафику останется лишь малая ее часть.

Наиболее известный пример UDP-наводнения это атака на сервис chargen. Реализация этой атаки проста: достаточно установить связь между сервисами chargen на одной машине и сервисом echo на другой. Сервис chargen генерирует символы, а сервис echo дублирует полученные данные. Злоумышленник посылает UDP-пакеты на порт 19 (chargen) одной из машин-жертв, подделывая IP-адрес и порт источника. В данном случае, портом источника будет UDP-порт 7 (echo). Атака UDP-наводнение приводит к перегрузке сети на отрезке между двумя машинами. В результате, пострадать может вся сеть.

Пакетная фрагментация

Отказ в обслуживании, достигаемый с помощью пакетной фрагментации использует уязвимости некоторых стеков TCP/IP, связанных с дефрагментацией пакетов (сборкой IP-фрагментов).

Известная атака, использующая этот подход -- это Teardrop. Фрагментарное смещение второго сегмента меньше размера первого сегмента. Это означает, что при сборке фрагментов первый сегмент должен будет содержать данные второго сегмента, происходит перекрытие фрагментов. Во время сборки таких пакетов, некоторые системы не могут обработать сложившуюся ситуацию, что приводит к отказу в обслуживании. Существуют разные варианты этой атаки, например bonk, boink и newtear. Атака отказ в обслуживании "пинг смерти" использует некорректную обработку ICMP-фрагментов, посылая больше данных, чем максимальный размер IP-пакета. Разные типы атак "отказ в обслуживании" ведут к отказам целевой системы.

Smurfing

Данная атака использует ICMP-протокол. При посылке ping-пакета (сообщение ICMP ECHO) по широковещательному адресу (например, 10.255.255.255), он доставляется каждой машине в этой сети. Принцип атаки заключается в посылке пакета ICMP ECHO REQUEST с адресом-источником машины-жертвы. Злоумышленник шлет постоянный поток ping-пакетов по сетевому широковещательному адресу. Все машины, получив запрос, отвечают источнику пакетом ICMP ECHO REPLY. Соответственно, размер ответного потока пакетов возрастает в пропорциональное количеству хостов число раз. В результате, вся сеть подвергается отказу в обслуживании из-за перегрузки.

Распределенная атака типа "отказ в обслуживании"

Распределенная атака "отказ в обслуживании" перегружает целевую сеть или систему. Идея атаки, заключается в использовании разных источников (демонов) для атаки, и "владельцев" для управления. Наиболее известные утилиты организации DDoS (распределенный отказ в обслуживании, Distributed Denial of Service) -- это Tribal Flood Network (TFN), TFN2K, Trinoo и Stacheldraht. На рисунке 13 приведен пример организации DDoS:

Pic.13: Распределенная атака "отказ в обслуживании"
ddos

Злоумышленник использует "хозяинов" (masters) для управления источниками. Очевидно, что ему необходимо подключится (TCP) к "хозяинам" для того, чтобы их настроить и приготовить атаку. "Хозяева" лишь пересылают команды источникам по протоколу UDP. Без "хозяев", злоумышленнику пришлось бы устанавливать соединение с каждым из источников. Таким образом, происхождение атаки можно было бы легко обнаружить, а реализация ее занимала бы больше времени.

Каждый источник обменивается с "хозяином" специфическими сообщениями. В зависимости от используемых утилит, общение может быть с использованием механизма авторизации и/или шифрования. Для установки источников и "хозяев", злоумышленник использует известные уязвимости (переполнение буфера таких сервисов, как RPC, FTP, и т.п.). Сама же атака являет собой либо SYN-наводнение, либо Smurf и приводит к отказу в обслуживании целевой сети или системы.

Заключение

В наши дни значительное внимание уделяется внешним атакам, а вопросы внутренней безопасности, к сожалению, незаслуженно обходят стороной. Это невнимание к защите от злоумышленников оставляет неплохие шансы проведения локальных атак. таких как перехват TCP-сеанса, подмена ARP и DNS. Более того, прогнозируемые номера последовательности (сердце подмены адреса источника) и варианты фрагментных атак проходят только лишь из-за найденных ошибок в операционных системах. Что касается атак на приложения, то у них впереди большое будущее из-за все возрастающей сложности сетевых приложений и все уменьшающихся сроков разработки программных проектов, что ведёт к увеличению количества ошибок в коде. Атака на отказ в обслуживании будет оставаться грозной в своей распределенной форме, пока пользователи не осознают необходимости защищать свои собственные машины.


Ссылки


Copyright © Eric Detoisien


Оригинал статьи можно найти по адресу: http://gazette.linux.ru.net/rus/articles/externalAttacks.html

[ опубликовано 24/03/2004 ]

Eric Detoisien (valgasu@club-internet.fr). Перевод: Иван Песин (ipesin@post.lviv.ua) - Внешние атаки   Версия для печати