СТЕКуемся? 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, - это будет интересно уже куда меньшему числу компьютерщиков. А поскольку других открытых исследований на эту тему нет, то нет и темы для споров :). |