Поставьте себя на место разработчика.Если вам недоплатили, вам скучно или у вас нет времени, какую программу вы напишите? Скажем, вы администратор одного из новых доменов верхнего уровня TLD (Top Level Domain). В практике администрирования широко используются формы «whois» для определения доступности домена. С их помощью можно зарезервировать домен, если он доступен. Если разработчику предоставить выбор – написать собственную программу поддержки формы «whois» или воспользоваться стандартной командного интерпретатора UNIX, то он, практически не задумываясь, выберет более легкий путь: возьмет за основу стандартную программу и адаптирует ее для нужд своего приложения.
Обнаружение неполадок в сетевых службах и локальных приложениях
В мире существует не только бесчисленное множество Web-приложений. Приведем несколько советов по поиску неполадок в сетевых службах.
1. Если сетевой сервис использует опубликованный протокол (например, установленный RFC (Requests for Comments) – серия документов IETF под названием «Запросы на комментарии», начатая в 1969 году и содержащая описания набора протоколов Интернет и связанную с ними информацию), то обязательно просмотрите протокол и найдите описания областей хранения строк переменной длины и массивов данных. Они могут быть уязвимы к атакам переполнения буфера.
2. Поищите спецификации протокола, определяющие, что строка не должна быть больше установленной длины. Любая из них является источником потенциальной уязвимости для атак переполнения буфера, поскольку предполагает, что никто не станет нарушать спецификации протокола.
3. Установите связь с тестируемой сетевой службой и перешлите ей большой массив случайных данных. Некоторые приложения неверно обрабатывают не описанные в протоколе данные и аварийно завершаются, что приводит к ситуации «отказ в обслуживании».
4. Установите связь с тестируемой сетевой службой и, не посылая никаких данных, узнайте, сколько времени потребуется для того, чтобы сетевая служба выдала сообщение о разрыве соединения и завершила сеанс. Некоторые приложения окажутся в состоянии постоянного ожидания, что может привести к истощению ресурсов, если злоумышленник попытается установить соединение с многочисленными копиями программы сетевой службы. Проблема усугубляется, если сетевая служба не обслуживает нескольких пользователей одновременно (одна сервисная служба обслуживает одно обращение к серверу), поскольку в этом случае обращения других пользователей сетевой службой не обрабатываются.
Но, естественно, ошибки могут быть и в локальных приложениях. При тестировании локальных утилит suid/sgid рекомендуется:
1) переслать приложению большой массив данных, задав соответствующие параметры командной строки. Многие приложения suid/sgid уязвимы к атакам переполнения буфера;
2) присвоить переменной окружения PATH значение локальной директории, в которой хранятся копии пораженных «троянцами» программ и к которым обращается приложение. Узнать о вызове приложением внешних программ можно дизассемблированием приложения или, что лучше, при помощи утилиты strings системы UNIX, позволяющей найти имена внешних программ в двоичном коде исследуемого приложения;
3) присвоить переменной окружения LD_PRELOAD ссылку на библиотеку, пораженную «троянцем». Некоторые приложения и системы позволяют с ее помощью задавать дополнительные динамические библиотеки. В результате приложение может повысить свои привилегии. Отметим, что это в большей степени ошибка операционной системы, чем приложения;
4) проверьте, не использует ли приложение функцию getenv() для чтения значения переменной окружения. Многие приложения уязвимы к атакам «переполнения буфера» (в результате присвоения переменной окружения данных большой длины) и атакам «изменение ссылки на файл» (в результате определения в переменной окружения дополнительных файлов, журналов или директории). Единственный способ удостовериться в том, что в приложении используются переменные окружения, заключается в поиске утилитой strings системы UNIX в двоичном коде исследуемого приложения имен переменных в верхнем регистре;
5) постарайтесь изменить содержимое конфигурационного файла приложения, если он может быть изменен пользователем. Во многих приложениях реализован не самый лучший вариант анализа конфигурационного файла. Цель изменения файла заключается в вызове ситуации переполнения буфера путем присваивания различным атрибутам очень длинных строковых значений.
Читать дальше
Конец ознакомительного отрывка
Купить книгу