СТЕКуемся?

Kirion (Kirion@winfo.org)

Спецвыпуск Xakep, номер #032, стр. 032-024-1

РЕАЛИЗАЦИЯ СТЕК ПРОТОКОЛОВ TCP/IP

"Ошибка в стеке позволяет провести эту атаку...", "Эксплоит основан на ошибке в реализации стека..." - читал такое? Наверняка даже в этом номере есть подобные фразы :). А что же это такое, стек TCP/IP, и какие в нем могут быть ошибки? И почему одни ОСи работают в сети быстрее других? А почему все не любят стек в виндах ;)? Попробуем разобраться...

История

Стек... лично мне кажется не очень корректным такое название. Как у студента-программиста, у меня стек в первую очередь ассоциируется со способом организации памяти. Так что не путай эти два понятия. Итак, что же такое стек TCP/IP? Четкого определения нет, в литературе под стеком понимаются две вещи. Во-первых, это все протоколы семейства TCP/IP. А во-вторых, это некоторый набор программ, библиотек, модулей ядра и т.д. (по-разному бывает), интегрированных в ОС (хотя бывают и самостоятельные коммерческие стеки) и отвечающих за создание, отправку, прием и обработку информации по стандартам TCP/IP. Как и многие другие сетевые стандарты, стек TCP/IP был разработан военными, а точнее ARPA (Advance Research Projects Agency) при министерстве обороны США для своего главного проекта - сети ARPAnet. Первая реализация стека появилась в 1980 году. Чтобы подтолкнуть исследовательские институты к использованию новых протоколов, агентство распространяет их реализацию по очень доступным ценам и заключает договор с институтом Беркли на внедрение стека в их популярную BSD Unix. Реализация стека получилась весьма удачной. Она быстро приобретает популярность благодаря схожести новых программных средств TCP/IP с классическими средствами Unix. Кроме того, ученые из Беркли вводят в стек такое важное понятие, как порт и сокет, что позволило активно использовать протоколы TCP/IP в приложениях. Число компьютеров, подключенных к сети, растет. Десятки компаний пытаются улучшить стек, внести свои изменения. Чтобы держать ситуацию под контролем, почти через десять лет после создания протоколов учреждаются две исследовательские группы: IRTF, занимающаяся перспективами развития Internet, и IETF, занимающаяся разработкой текущих стандартов, новых протоколов и улучшением старых. 1991 год, появляются самые первые версии Linux. Реализация стека берется из уже проверенной временем BSD, хотя в дальнейшем стек был серьезно изменен. 1993 год - Microsoft, уже поработавшая на OS/2 и собственной версией Unix (да, было и такое чудо под названием Xenix), собирается создавать новую версию Windows, однако "не видит необходимости в реализации TCP/IP". 1995 год - Windows95 со встроенным стеком TCP/IP :). Самая популярная версия о происхождении этого чуда производительности - "заимствование" все того же стека от Беркли :). Этот же стек был внедрен в Windows NT. Как оказалось, адаптировали они его плохо :). 1997 год - столько раз www.microsoft.com не висел и больше, наверное, висеть не будет. Слово Nuke быстро вошло в обиход хакеров :). Несложные в реализации и весьма эффективные, эксплоиты этого вида наводнили сеть. Впрочем, летели не только винды. Некоторым известным атакам (тот же Land) были подвержены и *nix системы. Ну а что вы хотите, стек-то в основе одинаковый :). 1998 год - четыре SP для WinNT, еще куча мелких обновлений и Windows 98 с "надежным стеком". Ага, поверили. Один баг с IGMP чего стоит. А еще и ошибки в маршрутизации, неправильная обработка фрагментированных пакетов, ошибки с NetBIOS (это, похоже, фамильная черта :))... А помнишь, сколько было в Инете прог по оптимизации стека (трояны, распространявшиеся под такими лозунгами, опустим :)), которые в основном изменяли MTU (точнее MaxMTU, maximum maximum transmission unit в терминологии MS :))? В следующей операционной системе, Windows 2000, стек был новый (почитать об этом неземном творении можно на www.microsoft.com/technet/treeview/default.asp?url=/technet/itsolutions/network/deploy/depovg/tcpip2k.asp). К чести Microsoft, стоит заметить, что новый стек получился весьма надежным и быстрым и практически полностью соответствующим стандартам. Наконец-то появились встроенные сетевые диагностические утилиты, к которым уже давно привыкли пользователи правильных осей :). Хотя и в новом стеке периодически находят уязвимости, приводящие к DoS :), все же по качеству он близок к реализации в ядрах Linux 2.4.*. И хотя линуксоиды никогда не признают этого и будут ссылаться на исследования вроде свежего майского от конторы Reasoning, которое сравнивает количество ошибок в коде стека Linux и "некоторых коммерческих систем". Мне кажется, что это чистый PR: ну кто будет давать им код стека Windows? А писать, что мы сравнили Linux и, скажем, Solaris, - это будет интересно уже куда меньшему числу компьютерщиков. А поскольку других открытых исследований на эту тему нет, то нет и темы для споров :).

Содержание  Вперед на стр. 032-024-2
Выпуски журнала "СПЕЦ Xakep"
Cпец Хакер #01Cпец Хакер #02Cпец Хакер #03Cпец Хакер #04Cпец Хакер #05Cпец Хакер #06Cпец Хакер #07Cпец Хакер #08Cпец Хакер #09Cпец Хакер #10Cпец Хакер #11Cпец Хакер #12Cпец Хакер #13Cпец Хакер #14Cпец Хакер #15Cпец Хакер #16Cпец Хакер #17Cпец Хакер #18Cпец Хакер #19Cпец Хакер #20Cпец Хакер #21Cпец Хакер #22Cпец Хакер #23Cпец Хакер #24Cпец Хакер #25Cпец Хакер #26Cпец Хакер #27Cпец Хакер #28Cпец Хакер #29Cпец Хакер #30Cпец Хакер #31Cпец Хакер #32Cпец Хакер #33Cпец Хакер #34Cпец Хакер #35Cпец Хакер #36Cпец Хакер #37Cпец Хакер #38Cпец Хакер #39Cпец Хакер #40Cпец Хакер #41Cпец Хакер #42Cпец Хакер #43Cпец Хакер #44Cпец Хакер #45Cпец Хакер #46Cпец Хакер #47Cпец Хакер #48Cпец Хакер #49Cпец Хакер #50Cпец Хакер #51Cпец Хакер #52Cпец Хакер #53Cпец Хакер #54Cпец Хакер #55Cпец Хакер #56Cпец Хакер #57Cпец Хакер #58Cпец Хакер #59Cпец Хакер #60Cпец Хакер #61Cпец Хакер #62Cпец Хакер #63Cпец Хакер #64Cпец Хакер #65Cпец Хакер #66Cпец Хакер #67Cпец Хакер #68Cпец Хакер #69Cпец Хакер #70Cпец Хакер #71Cпец Хакер #72Cпец Хакер #73Cпец Хакер #74Cпец Хакер #75