Когда разрабатывался протокол TCP, купить большой объем оперативной памяти для компьютера было невозможно. Оперативная память размером в 4 Мбайт считалась хорошим показателем для сервера. Поэтому создатели стеков протоколов IP были крайне сдержаны по отношению к требуемым ресурсам.

Сеть Internet является развитием проекта, осуществлявшегося в 1970-х годах Министерством обороны США, и в частности ARPA (Advanced Research Projects Agency - агентство перспективных исследований и разработок). Первоначально он носил название ARPANET и представлял собой крайне ненадежную службу обмена информацией между удаленными компьютерами. В 1973-1974 годах в результате усилий различных исследовательских и образовательных организаций был разработан стандартный набор протоколов для обмена информацией в сети. Этот набор протоколов стали называть стеком протоколов TCP/IP или просто стеком !Р. Протоколы из набора TCP/IP по-

I зволили компьютерам сети ARPANET взаимодействовать независимо от их операционных систем или аппаратных средств.

Более подробную информацию по данной теме можно получить по адресу . www.ie.cuhk.edu.hk/~shlam/cstdi/hystory.html.

Давайте внимательней рассмотрим проблему утечки памяти. Для приложений наподобие FTP или telnet сокеты являются самым низким уровнем - программным интерфейсом для доступа к сетевым аппаратным средствам. Протокол IP представляет собой другой уровень и работает поверх сокетов. TCP работает поверх IP. Так как протокол TCP ориентирован на установку соединений, он должен хранить сведения о состоянии сеанса, включая размер окна и порядковый номер пакета.

Представленный ниже код на языке С взят с моей рабочей станции UNIX. Его можно считать записью в базе данных с большим количеством полей. Хранение данных каждого из этих полей требует ресурсов оперативной памяти.

struct ip {

#if defined(bsd)

u_char ip_hl:4, /* длина заголовка */

ip_V : 4 ; /* версия */

#endif

#if defined(powerpc)

u_char ip_v:4, /* версия */

ip_hl:4; /* длина заголовка */

#endif

u_char ip_tos; /* тип обслуживания */

short ip_len; /* общая длина */

u_short ip_id; /* идентификатор */

short ip_off; /* поле смещения фрагмента */

#define IP_DF 0x3000 /* флаг DF */

#define IP_MF 0x4000 /* флаг MF */

u_char ip_ttl; /* время жизни */

u_char p; /* протокол */

u_short ip_sum,- /* контрольная сумма */

struct in_addr ip_src, ip_dst; /* адреса отправителя и получателя */

} :

Приведенный выше фрагмент является фрагментом файла IP-заголовка для системы SunOS 4.1.3. Его структуру (в данном случае struct ip) можно считать записью базы данных, а внутренние элементы - полями этой записи. Каждый раз при создании нового соединения необходимо создавать такие структуры для сокета, протокола IP и других протоколов. На все это требуются ресурсы памяти. После того как сервер отвечает на SYN-пакет, область использованной памяти фиксируется и должна оставаться без изменений до истечения срока действия таймера (обычно около 60 секунд). Если за это время соединение так и не будет установлено, то память освобождается. Поскольку объем оперативной памяти не бесконечен, создателям стеков пришлось предусмотреть определенные ограничения. При атаке с помощью наводнения SYN-пакетами используется проблема установленного предела на размер очереди одновременно ожидаемых соединений для определенной службы. Хотя некоторые современные операционные системы не так подвержены подобным атакам, еще для многих платформ проблема остается актуальной. Компьютер, на котором установлена оперативная память размером 1 Гбайт, и который работает под управлением Solaris 2.5 без установленной заплаты, по-прежнему не сможет нормально работать после практически одновременного получения 32 SYN-пакетов.

Атака митника | Обнаружение нарушений безопасности в сетях | Syn-наводнение


Обнаружение нарушений безопасности в сетях



Новости за месяц

  • Июнь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс