Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Кибератаки в подробностях: эксплуатация уязвимостей веб-сервисов

Оригинал: Cyber Attacks Explained: Web Exploitation
Автор: Prashant Phatak
Дата публикации: 25 марта 2012 г.
Перевод: А.Панин
Дата перевода: 17 декабря 2012 г.

Предыдущие статьи серии:
"Кибератаки в подробностях: DoS и DDoS",  
"Кибератаки в подробностях: спуфинг пакетов",  
"Кибератаки в подробностях: атаки с применением снифферов",  
"Кибератаки в подробностях: вмешательство в работу DNS",  
"Кибератаки в подробностях: создание пакетов".

Сайты в Интернет в наши дни стали служить не только для демонстрации "присутствия в сети", но и для выполнения коммерческих транзакций и передачи особо важной информации. Такое расширение возможностей веб-сервисов позволяет злоумышленникам отыскивать ранее неизвестные уязвимости и техники их эксплуатации. Различные группы исследователей безопасности приложений предоставляют доказательства того, что индустрия взлома веб-сервисов для получения прибыли или известности находится на подъеме. В этой статье рассматриваются различные уязвимости веб-сервисов и атаки, эксплуатирующие их. Мы также узнаем о нескольких технологиях, которые следует применять системным администраторам для защиты корпоративной веб-инфраструктуры.

Перед обсуждением видов атак на веб-серверы, рассмотрим составные части веб-портала. Начнем с того, что веб-сервер является службой, обычно ожидающей соединений на порту с номером 80. Программное обеспечение клиента, обычно браузер, соединяется с этим портом и отправляет HTTP-запросы. Веб-сервер отвечает, отправляя запрошенные данные, такие, как HTML-страницы, сценарии JavaScript, и.т.д. В некоторых случаях служба может быть настроена таким образом, что будет ожидать соединений на других портах, что является небольшим шагом в направлении повышения безопасности ее работы. Веб-серверы могут поддерживать параллельную работу и других служб, таких, как FTP или NNTP, которые работают на своих стандартных портах. Рисунок 1 показывает соответствие веб-служб уровням OSI. Протокол HTTP осуществляет работу на уровне 7 OSI, в то время, как HTTPS (уровень защищенных сокетов (Secure Sockets Layer)) работает на уровне 6.

Веб-службы и уровни OSI
Рисунок 1: Веб-службы и уровни OSI

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

Атаки на веб-сервера

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

Инфраструктура веб-портала
Рисунок 2: Инфраструктура веб-портала

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

Атаки отказа в обслуживании и использованием сниффера (DoS and sniffing)

Поскольку веб-сайт использует IP-адрес с открытым доступом из Интернет, атака отказа в обслуживании может с легкостью вывести веб-сервер из строя. Аналогично, захват пакетов при помощи сниффера может использоваться для перехвата пользовательских идентификаторов и паролей, передаваемых в текстовой форме при том условии, что шифрование и другие меры повышения безопасности не были применены при настройке. Практически все атаки, относящиеся ко 2 и 3 уровням OSI, такие, как атаки потоками пакетов, SYN-сегментов и другие возможны в отношении IP-адреса и номера порта, на которых работает веб-сервер.

Атаки отказа в обслуживании уровня протокола HTTP (HTTP DoS attack)

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

Для обслуживания каждого запроса веб-сервер резервирует системные ресурсы. При исчерпании ресурсов, сервер в конечном счете перестает отвечать на запросы. Взломщики зачастую используют простые сценарии для отправки потока HTTP GET-запросов в ходе осуществления данного типа атаки. Если веб-сайт содержит только статические HTML-страницы, эта атака не дает значительных результатов. Тем не менее, если генерируются динамические страницы и осуществляются запросы к серверу баз данных, эта атака может причинить значительный ущерб.

Хотя эта атака может закончиться, а может и не закончиться похищением данных, она без сомнения может привести к неработоспособности сайта, отпугивая посетителей и причиняя ущерб репутации. Интеллектуальные техники, которые мы обсудим позднее, должны использоваться для установления и противодействия этим атакам.

Похищение данных для входа на портал (Access control exploitation)

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

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

Атаки, основанные на вводе некорректных данных форм (Forms input invalidation)

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

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

Эксплуатация недоработок в коде (Code exploitation)

Хотя эта уязвимость и аналогична предыдущей, существует разница в том, как взломщики ее эксплуатируют. Обычно разработчики делают предположения, задавая ограничения вводимых пользователями данных. Типичными примерами являются предположения о том, что имя пользователя не должно превышать 50 символов или числовые значения всегда должны быть положительны.

Эти предположения опасны с точки зрения безопасности, поскольку взломщики могут эксплуатировать их. Например, атака может быть проведена путем заполнения поля имени пользователя 100 символами, тем самым нарушая целостность данных или путем ввода отрицательных значений в числовые поля для получения некорректных результатов расчетов.

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

Модификация кук (Cookie poisoning)

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

Хотя вмешаться в работу с куками и не так просто, профессиональный взломщик может получить контроль над ними и изменить их содержимое. Модификации чаще всего производятся при помощи вредоносного программного обеспечения (трояна или вируса), работающего в виде фонового процесса и манипулирующего куками с целью получения персональных данных пользователя и отправки их взломщику.

Помимо этого, вредоносное программное обеспечение может также изменить содержимое кук для наступления более серьезных последствий, таких, как отправка приобретенных товаров на адрес, доступный взломщику или соединение браузера с сайтами, на которых расположены рекламные вставки, приносящие доход взломщику, и.т.д. Если информация о сессии хранится в куках, профессиональные взломщики могут получить к ней доступ и провести атаку перехвата с участием человека (man-in-the-middle).

Похищение сессий (Session hijacking)

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

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

Модификация URL (URL query-string tampering)

Веб-сайты, которые получают данные от сервера базы данных и выводят их в форме Веб-страниц обычно используют запросы в составе URL. Например, если URL веб-сайта http://www.a.com, он может использовать http://www.a.com/showdata?field1=10&field2=15 для передачи параметров field1 и field2 вместе с их значениями - результат выполнения запроса будет представлен в виде веб-страницы.

Имея возможность без лишних сложностей модифицировать эту строку запроса, пользователи могут изменить значения параметров до перехода границы значений или заполнить параметры ничего не значащими символами. Это в конечном итоге может дать пользователям доступ к информации, которая не предназначена для них. В худшем случае если в составе запроса присутствуют поля userid и password, может быть применена атака подбора пароля по словарю для получения доступа к системе, пусть даже и в рамках протокола HTTP.

Межсайтовый скриптинг (Cross-site scripting)

Это наиболее часто встречающаяся уязвимость из области веб-технологий, приводящая к атакам, основанным на межсайтовом скриптинге (XSS) на крупные и известные ресурсы. Было установлено, что большое количество веб-сайтов подвержены этой уязвимости даже сегодня. Эта уязвимость является следствием небезопасного программирования и отсутствия мероприятий по повышению безопасности веб-инфраструктуры.

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

Для того, чтобы понять процесс осуществления атаки, представим страницу, которая принимает имя пользователя и выводит на экран сообщение "Welcome username". Представим, что в поле вводится следующая строка, представляющая сценарий JavaScript:
<script> alert ('You are in trouble') </script>

В этом случае после загрузки веб-страницы будет выполнен сценарий, выводящий диалоговое окно с сообщением "You are in trouble". Это обстоятельство может быть использовано взломщиком для модификации кук, похищения сессии и передачи сценария браузеру пользователя. После этого сценарий на JavaScript может быть выполнен в браузере пользователя, причинив возможный ущерб.

SQL-инъекции (SQL injection)

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

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

Несмотря на растущую осведомленность администраторов в области вопросов безопасности, атаки при помощи SQL-инъекций все еще осуществимы в отношении множества сайтов.

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

Атаки, основанные на "медленных" HTTP-запросах (Slow HTTP attack)

Хотя этот тип атаки и очень похож на атаку отказа в обслуживании, техника ее проведения немного отличается. В ходе атаки используется тот факт, что каждый HTTP-запрос должен быть полностью принят веб-сервером. Каждый веб-запрос начинается с поля с названием "content-lengh", которое сообщает серверу о том, сколько байт ожидается и заканчивается комбинацией символов возврата каретки и переноса строки (CRLF).

Атакующий инициирует HTTP-запрос с большим значением параметра "content-length" и вместо того, чтобы отправлять последовательность символов CRLF для завершения запроса, он просто задерживает обработку запроса, отсылая малые объемы данных веб-серверу. Такое поведение заставляет веб-сервер ожидать данных которые должны быть отправлены клиентом для завершения обработки запроса. Это приводит к потреблению ресурсов веб-сервером.

Если один запрос просто выполняется в течение времени, меньшего временного ограничения сессии, установленного в настройках сервера, то обработка множества таких запросов может занять все ресурсы сервера и привести к отказу в обслуживании. Эта цель может быть просто достигнута путем создания таких запросов из одного браузера, что делает эту атаку достаточно опасной.

Эксплуатация уязвимостей в криптографических алгоритмах (Cryptographic exploitation)

Защищенные веб-сайты используют технологию, основанную на сертификатах SSL для шифрования данных, передаваемых по сети. Это создает иллюзию полной защищенности, что, к сожалению, не соответствует действительности. Многие приложения для осуществления покупок не шифруют содержимое кук и оставляют его в простой текстовой форме. Хотя данные, передающиеся по сети и шифруются с помощью SSL, сценарий для доступа к содержимому кук, выполненный на стороне клиента, может быть использован для похищения данных или идентификатора сессии.

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

Защита систем на основе свободного программного обеспечения

Веб-сервер Apache, работающий под управлением операционных систем CentOS/RedHat, Ubuntu и Debian приобрел огромную популярность среди свободных решений для построения веб-инфраструктуры. Самым первым шагом является улучшение безопасности работы самого веб-сервера Apache; в Интернет существует масса соответствующих руководств и примеров - для каждого дистрибутива Linux вместе с примерами.

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

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

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

С точки зрения разработки, как мы узнали ранее, необходимо использовать техники безопасного программирования, а также необходимо следовать лучшим практикам для повышения безопасности, таким, как рецензирование кода и тестирование на предмет проникновения в систему. Дополнительные процессы, такие, как проверка вводимых данных на уровне сервера и базы данных также рекомендуются.

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