Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ИПОВС_МСЗИ.doc
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
1.79 Mб
Скачать

Взлом с помощью cookie

Ниже описана структура эксплоита, который позволяет использовать cookie как механизм доставки для атаки DoS. Кроме того, если его использует опытный взломщик, данный эксплоит позволяет получить доступ в систему с полномочиями суперпользователя.

Описание протокола CGI

Протокол CGI (Common Gateway Interface— общий интерфейс шлюзов) является фактическим стандартом, который позволяет пользователю Web-узла выполнять программы, которые находятся на нем. Обычно Web-сервер позволяет запускать CGI-программы всем. В отличие от статических страниц CGI-программы позволяют динамически создавать Web-страницы, которые реагируют на действия пользователей.

Как работает CGI

Взаимодействие на основе CGI может происходить четырьмя способами: посредством переменных среды, посредством командной строки, а также за счет стандартного вводам стандартного вывода.

Переменные среды бывают двух типов: относящиеся к определенному запросу и относящиеся ко всем запросам. Кроме того, клиент может помещать строки заголовков в переменные среды. Такие строки должны начинаться со слова НТТР_. В данном методе нас будут интересовать переменные среды под названием HTTP_COOKIES.

Взаимодействие посредством командной строки может проводится только с запросом ISINDEX. Этот тип запроса характерен тем, что в его строке нет символа = в строке запроса.

Если броузер клиента присылает команду HTTP POST или PUT, она перенаправляется на стандартный ввод, при этом переменная CONTENT_LENGTH содержит сведения о количестве кодированных байтов, а переменная CONTENT_TYPE содержит значение applica-tion/x-www-form-urlencoded.

Возврат информации броузеру клиента происходит по каналу стандартного вывода. Стандартный вывод в CGI поддерживает три типа директив: content type, location и status.

Директива content type описывает тип MIME документа, который пересылается клиенту. Директива location возвращает адрес, и если это URL, клиент переходит по адресу, указанному в нем. Директива status возвращает клиенту информацию о состоянии запроса, например "страница не найдена" или "неверный адрес". Строка статуса имеет такой формат: nnn xxxxxx, где nnn является номером ошибки, а хххххх — сообщением об ошибке.

Недостатки протокола CGI

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

Существуют специальные символы, заставляющие сервер запускать указанные команды. Например, чтобы выполнить на сервере команду eval, которая входит в PERL, или команду оболочки, достаточно, чтобы строка данных начиналась с символа ";". Сбои в обработке экранированных метасимволов могут также быть опасными, если в программах используются вызовы функций pop () или system(). Если включены расширения со стороны сервера, они могут быть использованы взломщиками. И наконец, что самое важное для данного эксплоита, существует возможность использования некорректно написанных программ, которые позволяют переполнение буфера. В результате взломщик может получить шанс вывести сервер из строя и даже создать плацдарм для дальнейшей атаки в сети жертвы.

Описание протокола cookie

Использование cookie — это простой способ, позволяющий передавать текстовую информацию о состоянии пользователя между серверами, которые он посещает. Протокол HTTP, который используется для передачи информации в среде Web, позволяет передачу одиночных сообщений. Клиент открывает TCP-соединение с Web-сервером, посылает запрос и закрывает соединение. Web-сервер готовит ответ, открывает собственное ТСР-соединение с клиентом, посылает запрос и закрывает соединение. В протоколе HTTP со стороны сервера не предусмотрена возможность принимать какую-либо дополнительную информацию от клиента. Это означает, что протокол HTTP не предназначен для организации сеансов работы клиента и сервера, которые состоят из нескольких транзакций между клиентом и сервером.

Когда Web-узел должен предоставить службы или информацию, которая требует знания того, что клиент делал раньше, он может пойти двумя путями: сохранять информацию о действиях клиента в базе данных или пересылать ее броузеру клиента, который будет сохранять ее на компьютере клиента. Поскольку количество посетителей многих узлов может быть очень большим, обработка и хранение информации о действиях всех пользователей на стороне сервера может обойтись очень дорого.

Чтобы обеспечить хранение информации о состоянии соединения и действиях пользователей и при этом не перегружать сервер, компания Netscape разработала спецификацию объектов, позволяющих сохранять информацию о состоянии взаимодействия. Такие объекты называются cookie и сохраняются на компьютере пользователя.

Как работает протокол cookie

По своей природе cookie — это текстовые файлы, которые принимаются, сохраняются и возвращаются броузером. Содержимое cookie формируется Web-сервером. Запрос на пересылку cookie имеет заголовок Set-Cookie. Этот заголовок указывает броузеру сохранить информацию в системе пользователя.

Когда клиент подключается к Web-узлу, его броузер проверяет, есть ли у него какие-либо cookie для данного сервера. Если есть, их содержимое распаковывается и пересылается серверу. Таким образом, сервер имеет возможность получать информацию о предыдущих действиях и состоянии пользователя.

Файлы cookie могут содержать любую информацию. Спецификация Netsacape требует, чтобы данные хранились в формате переменная=значение. В cookie должна содержаться как минимум информация о том, когда он должен быть уничтожен, указан домен, из которого он получен, и путь к компьютеру домена, которому нужно передавать cookie. Кроме того, в cookie может содержаться информация о том, нужно ли для его пересылки устанавливать защищенное соединение. За безопасность пересылки информации отвечает Web-узел.

Недостатки протокола cookie

Несмотря на то, что использование cookie не имеет принципиальных недостатков, многие пользователи предпочитают отключать их по причине неправильного их использования программистами Web-узлов. Многие считают, что cookie нарушают их конфиденциальность, поскольку существует возможность отслеживать действия пользователей в пределах Web-узла. Такое мнение сложилось после того, как стало известно, что такие компании, как DoubleClick, используют подобную информацию в целях проведения со­циологических исследований. Как мы увидим в дальнейшем, сама по себе концепция cookie является безопасной, однако с помощью cookie можно принести вред Web-узлу.

Основные недостатки cookie следующие:

  • cookie — это текстовой файл;

  • файлы cookie хранятся на компьютере пользователя вне зоны прямого контроля Web-сервера;

  • клиент может изменить cookie с помощью простого текстового редактора, например Notepad.

Принцип работы эксплоита

Описываемый эксплоит нацелен на CGI-программы, в которых использованы некорректные методы программирования, и использует cookie как механизм передачи данных. Мишенью эксплоита в CGI-программе является любая функция, которая не проверяет длину переменных, помещаемых в буфер. Если такая функция найдена, задачей взломщика является посылка переменной большей длины, чем предусматривал программист. Это типичный пример взвешивания 10 кг мяса на 5-килограммовых весах, который известен под названием переполнение буфера. При переполнении буфера используются некорректные методы обработки данных и разрушение структуры памяти компьютера.

Данный эксплоит работает по той причине, что существует возможность переполнения буфера. Этот метод приводит к аварийной остановке программы. Правильно разработанная программа переполнения позволяет взломщику запускать любые команды от имени владельца Web-сервера.

Не существует точных признаков взлома с использованием переполнения. Часто в процессе взлома пересылается длинная строка символов, поскольку взломщик пытается увеличить вероятность попадания в адрес возврата. Строка, в которой находится большое количество инструкций NOP (no operation), возможно содержит программу взлома с использованием переполнения. В архитектуре Intel операция NOP имеет длину 1 байт и в машинных кодах имеет значение 0x90.

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

Если бы буфер не был переполнен, произошел бы возврат в функцию, которая выполняла вызов. Однако проводится переполнение буфера командами NOP, а затем программой взлома. Вероятность попадания инструкции NOP в адрес возврата достаточно высока, и указатель команды переходит дальше по стеку, пока не достигает программы взлома.

Методы защиты

Многие приложения были тщательно проверены и было выпущено много заплат, предотвращающих данный взлом. Для наиболее надежной защиты нужно пересмотреть набор своих приложений и обновить их с помощью последних версий заплат.

Кроме того, стоит помнить, что наиболее общим методом защиты от взлома с переполнением являются надежные методики программирования. Вы не можете отказаться от пути, через который происходит взлом, однако вы можете избежать использования программ, которые являются целью этих эксплоитов. В частности, нужно перепроверить все CGI-программы и убедиться в том, что входящие данные для них соответственно проверяются, с тем чтобы переполнение буфера было невозможно.

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

  • strca();

  • strcpy()

  • sprintf();

  • vsprintf();

  • gets();

  • scanf();

  • циклы while (которые принимают входящие данные, однако не проводят проверку на переполнение).

Таким образом, тщательное программирование является лучшей защитой от взлома с переполнением. Это защита не только от взлома с переполнением посредством cookie. Кроме того, поскольку основным недостатком cookie является то, что их можно подменить, пока они хранятся на компьютере клиента, их также стоит защищать.

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