Многие инструментальные средства так или иначе имеют отношение к обработке непредусмотренных данных. Некоторые из них полезны программистам для отладки их кода, другие - злоумышленникам или консультантам при обнаружении прорех в системе защиты. Поскольку подобных инструментальных средств очень много, то далее будут рассмотрены лишь самые популярные.

Программа Web Sleuth

Web Sleuth (сыщик сети) - разработанная Дэйвом Циммером (Dave Zimmer) программа для Windows, позволяющая пользователю модифицировать HTTP-запросы и HTML-формы. Программа Web Sleuth широко использует возможности ядра Internet Explorer, добавляя свои собственные. Последняя версия программы Web Sleuth стала расширяемой благодаря применению подключаемых программ (plug-ins). В настоящий момент в число доступных подключаемых программ входят программы вскрытия HTTP-сессий методом «грубой силы», исследования Web-сайтов и тестирования SQL-запросов с помощью внесения в них изменений. Программа свободно доступна по адресу http://geocities.com/dizzie/sleuth.

Программа CGIAudit

CGIAudit - автоматизированная программа тестирования интерфейса CGI методом «черного ящика», которая получает от пользователя HTML-форму и методично тестирует каждый ее элемент на известные уязвимости: переполнение буфера, выполнение метасимволов и внесение изменений в запросы SQL. В программе реализованы возможности Web-паука и поддерживается модуль доступа к сети Интернет (прокси-поддержка). CGIAudit написан на языке С и доступен по адресу www.innu.org/~super.

Инструментарий RATS

RATS (Rough Auditing Tool for Security - инструментарий первичного аудита безопасности) - средство анализа исходных текстов программ на языках С, C++, Python, Perl и РНР. RATS просматривает исходный текст программ и сообщает о любых потенциально опасных ситуациях, включая статически размещаемые буфера и небезопасные функции. Инструментарий первичного аудита безопасности RATS не решает всех проблем, но помогает снизить потенциальные угрозы безопасности. RATS доступен по адресу www.securesw.com/rats.

Сценарий Flawfinder

Flawfinder (определитель уязвимостей) - сценарий на языке Python, по своим функциональным возможностям схожий с RATS, но анализирует только программы на языке С. Создатель сценария Дэвид Уэллер (David Wheeler) отмечает, что Flawfinder распознает уязвимости там, где RATS бессилен. Его конечная цель - объединиться с RATS, но пока этого не случилось. Сценарий Flawfinder можно найти по адресу www.dhwheeler.com/flawfinder.

Сканер Retina

Retina - разработанный еЕуе коммерческий сканер уязвимостей позволяет исследователю сканировать приложения для выявления уязвимостей. В основе продукта лежат основные методы атак хакеров СНАМ (Common Hacking Attack Methods), основанные на идеях «искусственного интеллекта», в основном автоматизирующие рутинный процесс поиска уязвимостей, например поиск переполнения буфера и схожих проблем в общедоступных сетевых сервисах. Сканер Retina можно приобрести по адресу www.eeye.com.

Программа Hailstorm

Программный продукт Hailstorm разрекламирован как «средство поиска неисправностей в работе программ», основанный на методах, схожих с методами СНАМ сканера Retina, предоставляющими исследователю дополнительные возможности. В состав Hailstorm входят написанная на языке Perl машина сценариев и инструментальные средства создания практически любых тестов поиска аномалий в приложениях. Продукт Hailstorm почти не ограничен в потенциальных возможностях поиска ошибок в программе, но требует квалификации в этой области. Программный продукт Hailstorm можно приобрести по адресу www.clicktosecure.com.

Программа Pudding

Программа-посредник протокола HTTP (прокси-HTTP) Pudding написана Рольфом Теммингом (Roelef Temmingh) на языке Perl. Программа Pudding позволяет внести закодированные хитроумные вставки в проходящие через нее унифицированные указатели информационных ресурсов URL в запросах по протоколу HTTP вне зависимости от источника запросов: Web-браузера пользователя или инструментария оценки работы сети. Наиболее широко в программе используются кодировки UTF-8/Unicode. Программа Pudding может быть использована для уклонения от систем обнаружения вторжений IDS. Она доступна по адресу www.securityfocus.com/tools/1960.

Резюме

Проблемы безопасности возникают преимущественно из-за непредвиденных действий злоумышленника по отношению к приложению с целью обмана системы безопасности, логики работы приложения и т. д. Переполнение буфера происходит при пересылке в него большего количества данных, чем предусматривалось разработчиком программы. В результате изменения запроса SQL в запрос добавляются дополнительные команды SQL. К сожалению, во многих приложениях не предусмотрена даже простейшая фильтрация неверных данных. Похвалы достойны те, которые выполняет ее. Фильтрация данных позволит выиграть отдельные сражения, но не всю войну в целом. Для разработки действительно надежного и безопасного приложения следует сместить центр усилий от «удаления плохого» к «сохранению хорошего». Только тогда приложение сможет противостоять различным неправильным, поврежденным или непредсказуемым либо непредвиденным данным.

Непредсказуемые данные могут поразить любое приложение, начиная от программ с интерфейсом командной строки и заканчивая Web-приложениями интерфейса CGI, работающими в оперативном режиме. Процедуры аутентификации, сравнения данных и формирования SQL-запросов уязвимы по своей сути. Для определения уязвимости приложения широко используется метод «черного ящика», который позволяет найти, или, как некоторые говорят, разгадать, хитроумные уловки в конструкции приложения, изучая реакцию приложения на входные данные. Просмотр исходного текста программ приложения (подход, при котором программный код приложения внимательно анализируется с целью выявления уязвимостей) сулит исследователю больше выгоды.

К счастью, противостояние непредвиденным данным - не та область, где каждый сам за себя. В большинстве из общедоступных языков программирования (Perl, CFML и РНР) предусмотрены средства противодействия непредвиденным и поврежденным данным пользователя. Вдобавок ко всему есть еще дополнительные инструментальные средства, которые оказывают широкий спектр услуг исследователю от анализа исходного текста программ и выявления в нем уязвимостей до оказания помощи по правильному применению метода «черного ящика».

В заключение следует особо отметить, что неверные данные являются серьезной проблемой. Поэтому программистам следует внимательно относиться к вопросам корректной обработки неверных данных пользователя и исключить появление непредвиденных данных.

Конспект

Опасность непредвиденных входных данных

• Почти все приложения взаимодействуют с пользователем, получая от него данные.

• В приложении должен быть предусмотрен контроль действий пользователя.

• Особое внимание в приложении должно быть обращено на предотвращение переполнения буфера, изменение логики работы и контроль данных, передаваемых системным функциям.

Поиск обусловленных непредвиденными входными данными уязвимостей

• Любое приложение, взаимодействующее с пользователем или другим непроверенным приложением, может стать жертвой непредвиденных данных. С непредвиденными данными чаще всего сталкиваются:

- локальные приложения suid/sgid системы UNIX;

- серверы HTTP и другие Web-технологии построения приложений;

- запросы SQL;

- средства аутентификации приложений;

- методы маскировки данных, используемые при построении программ противодействия системам обнаружения вторжения IDS.

Методы поиска и устранения уязвимостей, обусловленных непредвиденными входными данными

• Просмотр исходного текста программы и метод «черного ящика» помогут обнаружить уязвимости и являются главным средством поиска потенциальных проблем.

• С непредвиденными данными можно бороться правильной фильтрацией данных или пропуском неверных символов. Во многие языки программирования (например, Perl, CFML, ASP, РНР и даже API SQL) встроены подобные возможности.

• Полезным средством борьбы с непредвиденными данными или данными неверного формата являются такие уловки программирования, как подмена символа, централизованные функции фильтрации или удаление неверных данных без выдачи диагностических сообщений.

Использование средств безопасности языков программирования для обработки непредвиденных данных

• Встроенные средства безопасности многих языков программирования позволяют во всеоружии встретить неверные данные.

• Своевременная установка нужных опций конфигурации (установка режимов проверки «дыр» в Perl или безопасной работы «safe mode» в РНР, настройки «песочницы» (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.

Часто задаваемые вопросы

Вопрос: Стоит ли заботиться о проверке и фильтрации входных данных?

Ответ: Все поступающие данные должны быть проверены и отфильтрованы. Никаких исключений. Не следует надеяться на то, что входные данные программы не содержат ошибок. Проверено на практике, что проверку данных выполняет небольшой фрагмент программного кода за ничтожно малое время. Поэтому глупо не предусмотреть в программе фильтр данных.

Вопрос: Какой язык программирования самый безопасный? Ответ: На этот вопрос нельзя ответить однозначно. В языках Perl and РНР реализована прекрасная возможность автоматического распределения памяти, которая позволяет разместить в памяти любое количество входных данных. Но написанные на этих языках программы плохо масштабируются из-за того, что они выполняются в режиме интерпретации. Языки программирования С/С ++ требуют от разработчика принятия дополнительных мер по обеспечению безопасности. Но написанные на языках С/С ++ программы компилируются в выполнимый код, который работает быстрее и лучше масштабируется. Окончательный выбор языка должен быть основан на предъявляемых к приложению требованиях и навыках программиста работы со средствами разработки.

Вопрос: Где можно найти дополнительные сведения об аудите исходного текста программ? Ответ: В книге «Hack Proofing Your Web Applications» издательства Syngress читатель найдет много намеков, подсказок, хитроумных приемов и указаний по аудиту исходных текстов программ для выявления в них уязвимостей.

Использование средств безопасности языков программирования для обработки непредвиденных данных | Защита от хакеров корпоративных сетей | Переполнение буфера


Защита от хакеров корпоративных сетей



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс