К счастью, противостояние непредвиденным данным – не та область, где каждый сам за себя. В большинстве из общедоступных языков программирования (Perl, CFML и PHP) предусмотрены средства противодействия непредвиденным и поврежденным данным пользователя. Вдобавок ко всему есть еще дополнительные инструментальные средства, которые оказывают широкий спектр услуг исследователю от анализа исходного текста программ и выявления в нем уязвимостей до оказания помощи по правильному применению метода «черного ящика».
В заключение следует особо отметить, что неверные данные являются серьезной проблемой. Поэтому программистам следует внимательно относиться к вопросам корректной обработки неверных данных пользователя и исключить появление непредвиденных данных.
Опасность непредвиденных входных данных
· Почти все приложения взаимодействуют с пользователем, получая от него данные.
· В приложении должен быть предусмотрен контроль действий пользователя.
· Особое внимание в приложении должно быть обращено на предотвращение переполнения буфера, изменение логики работы и контроль данных, передаваемых системным функциям.
Поиск обусловленных непредвиденными входными данными уязвимостей
· Любое приложение, взаимодействующее с пользователем или другим непроверенным приложением, может стать жертвой непредвиденных данных. С непредвиденными данными чаще всего сталкиваются:
– локальные приложения suid/sgid системы UNIX;
– серверы HTTP и другие Web-технологии построения приложений;
– запросы SQL;
– средства аутентификации приложений;
– методы маскировки данных, используемые при построении программ противодействия системам обнаружения вторжения IDS.
Методы поиска и устранения уязвимостей, обусловленных непредвиденными входными данными
· Просмотр исходного текста программы и метод «черного ящика» помогут обнаружить уязвимости и являются главным средством поиска потенциальных проблем.
· С непредвиденными данными можно бороться правильной фильтрацией данных или пропуском неверных символов. Во многие языки программирования (например, Perl, CFML,ASP, PHP и даже API SQL) встроены подобные возможности.
· Полезным средством борьбы с непредвиденными данными или данными неверного формата являются такие уловки программирования, как подмена символа, централизованные функции фильтрации или удаление неверных данных без выдачи диагностических сообщений.
Использование средств безопасности языков программирования для обработки непредвиденных данных
· Встроенные средства безопасности многих языков программирования позволяют во всеоружии встретить неверные данные.
· Своевременная установка нужных опций конфигурации (установка режимов проверки «дыр» в Perl или безопасной работы «safe_mode» в PHP, настройки «песочницы» (sandbox) в CFML) поможет предотвратить опасные последствия непредвиденных данных пользователя.
· Соответствующие настройки сервера, например отключение опции Enable Parent Pathsинформационного сервера Интернет IIS, помогут предотвратить доступ приложения к файлу вне корневой Web-директории.
· Установка нужных привилегий пользователь / запрос в MySQL предотвращает вызов из запросов запрещенных функций, например функций доступа к файлам.
Инструментарий обработки непредвиденных данных
· Программа Web Sleuth используется для взаимодействия и работы с Web-приложениями, предоставляя различные механизмы обхода и взлома протокола HTTP. Программа CGIAudit автоматически находит известные уязвимости интерфейса CGI.
· Программы RATS и Flawfinder просматривают исходные тексты программ, выявляя в них потенциально опасные места.
· Коммерческие продукты Retina и Hailstorm предназначены для методического зондирования и провоцирования сетевых приложений для обнаружения уязвимостей и возможности их использования.
· Прокси-HTTP Pudding маскирует запросы HTTP при помощи различных форм кодирования URL, включая сверхдлинное кодирование Unicode/UTF-8.
Вопрос:Стоит ли заботиться о проверке и фильтрации входных данных?
Ответ: Все поступающие данные должны быть проверены и отфильтрованы. Никаких исключений. Не следует надеяться на то, что входные данные программы не содержат ошибок. Проверено на практике, что проверку данных выполняет небольшой фрагмент программного кода за ничтожно малое время. Поэтому глупо не предусмотреть в программе фильтр данных.
Читать дальше
Конец ознакомительного отрывка
Купить книгу