Удаленное проникновение: состояние DoS и переполнение буфера
Контрмеры: защита от переполнения буфера
Лучшим ответом на атаки с применением переполнения буфера является профессиональное программирование. Упоминавшиеся выше статьи предоставляют опытному программисту некоторые идеи, реализация которых позволит избежать подобной угрозы при написании приложений (при их изучении пригодится знание языка С и низкоуровневого языка программирования Assembler). Однако поскольку создание программных продуктов, подобных системе Windows, выполняется практически без непосредственного участия пользователей, то ответственность за устранение выявленных проблем должна ложиться на плечи группы разработчиков.
Для разрешения проблемы переполнения буфера могут использоваться различные программные продукты. Одним из самых новых средств этой категории является программа BOWall Андрея Колишака (Andrey Kolishak). Программа BOWall предотвращает переполнение буфера двумя способами.
- Замещает библиотеки DLL их двоичными копиями, в которые включены процедуры мониторинга вызовов потенциально уязвимых функций (например, strcpy, wstrcpy, strncpy, wstrncpy, strcat, wcscat, strncat, wstrncat, memcpy, memmove, sprintf, swprintf, scanf, wscanf, gets, getws, fgets, fgetws). После этого вызовы таких функций проверяются на предмет целостности возвращаемого адреса стека (stack return address).
- Ограничивает выполнение функций динамических библиотек из сегмента данных и стека (data and stack memory).
Замещение системных динамически подключаемых библиотек для предотвращения переполнения буфера является несколько кардинальным, однако все же такой подход, очевидно, достоин внимания.
Программа eNTercept от компании ClickNet Software Corp. представляет собой систему предотвращения вторжений, которая может использоваться в качестве оболочки ядра системы NT, которая обеспечивает мониторинг всех вызовов. Это приложение хорошо подходит для выявления и предотвращения известных атак, направленных на переполнение буфера.
По адресу http://immunix.org/ можно получить улучшенную версию компилятора GNU С (gcc) StackGuard. С его помощью можно генерировать исполняемые файлы, которые более устойчивы к разрушению стека, чем обычные программы. Это достигается путем помещения слова-признака (canary word) за адресом возврата при вызове функции. Если после завершения выполнения функции это слово-признак оказалось другим, значит, была предпринята попытка переполнения буфера. При этом программа, скомпилированная с помощью StackGuard, помещает соответствующую запись в системный журнал. Поскольку в рассмотренном случае требуется использование компилятора gcc, то описанный подход неприменим в системе NT. Однако, возможно, некоторые из читателей все же будут вдохновлены…
Впоследствии для устранения подобных атак потребуются кардинальные изменения в программных моделях (например, язык Java, в котором отсутствуют внутренние структуры, затрагиваемые при этом) или в самой архитектуре центральных процессоров.
Отказ в обслуживании (DoS)
Атаки, приводившие к генерации состояния DoS, были чрезвычайно популярны в 1997-1998 годах, что объясняется появлением многочисленных утилит, предназначенных для повреждения стека TCP/IP на самых различных платформах. Некоторые из них были направлены исключительно на систему Windows. Мы не будем тратить время на описание всех используемых при этом недостатков реализации стека протоколов TCP/IP, поскольку все они уже устранены в пакетах обновления. Кроме того, обсуждению атак DoS посвящена целая глава (см. главу 11, а также часть главы 4, где были рассмотрены методы предотвращения подобных угроз для платформы WIN 9х).
Генерация состояния отказа в обслуживании не всегда преследует цель вызвать раздражение сетевого администратора. Зачастую такой подход используется для того, чтобы добиться перезагрузки системы и автоматического запуска требуемых утилит. Как вы увидите позднее, изучение кода многочисленных файлов загрузки Windows NT является одним из эффективных методов проникновения в систему.
Контрмеры: предотвращение состояния DоS
Установка самого последнего сервисного пакета (при написании книги – версии 6А) позволяет защитить систему NT от большинства известных способов генерации состояния DoS. Кроме того, следите также за появлением промежуточных пакетов обновления, особенно, если они относятся непосредственно к стеку протоколов TCP/IP систем NT/2000, tcpip.sys. (Естественно, обновление используемой операционной системы до WIN 2000 позволяет достигнуть того же результата.) Многие серьезные атаки DoS, связанные с применением средств land, newtear и ООВ, стали недоступными после установки промежуточных пакетов обновления, появившихся после SP3. Конечно, обновление до WIN 2000 представляет собой самый лучший сервисный пакет, в котором нашли отражение все выпущенные ранее пакеты обновления.
Для получения более подробной информации о ключах системного реестра, с помощью которых от атак DoS можно защитить серверы Internet под управлением Windows, читайте главу 6.
Мы рекомендуем познакомиться также с другими программными продуктами, направленными на предотвращение атак DoS на стек TCP/IP, таких как teardrop, land, OOB и т.д. Они подробно рассматриваются в главе 12.
Модули обновления, появившиеся после сервисного пакета SP3, позволяют устранить угрозу атак DoS с применением таких средств, как snork и nrрс (обоим утилитам требуется доступ к портам с номерами 135-139).
Теперь снова вернемся к обсуждению приемов получения статуса администратора.