Софт для Windows    Программы для смартфонов и планшетов, мобильный софт    Софт для Линукс, Unix, Linux
 

Атаки на сеть через переполнение буфера – технологии и способы борьбы

[ Содержание ]

  Введение
  Глупый продавец
  По страницам моей памяти
  Атаки на стек
  Атаки на формат строки
  Кучи проблем
  Защита: о жуках и канарейках
  Что вы можете сделать с переполнением буфера

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

  Переполнения буфера, как ни прискорбно встречаются везде, даже в коде, в котором по заверениям разработчиков все потенциальные возможности этой встречи исследованы и устранены. Возможно, вы слышали о таких вариантах переполнения буфера, как формат строки или атаки на хип. В этой статье, используя аналогии из повседневной жизни, я попытаюсь объяснить, как работают эти атаки. Я позаимствую идею, почерпнутую мною из книги Брюса Шнеера Секреты и ложь (Bruce Schneier Secrets and Lies), хотя, как типичный хакер, эту идею разовью и обобщу.

Глупый продавец

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

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

По страницам моей памяти

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

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

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

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

  Позиции внутри этой виртуальной памяти (страницы в тетради) в программе ли, в стеке, в хипе или между ними, задаются адресами, выраженными в шестнадцатеричном формате. Например, самый старший адрес в памяти размером в два гигабайта будет равным 8FFFFFFF. Небольшие области этого адресного пространства служат для ввода данных в программу. Эти области, которые могут иметь адреса в стеке или хипе, называются буфера-ми. Ага! Мы нашли первую разгадку на пути того, почему атаки называются переполнения буфера. Если вы услышите, как кто-то говорит это переполнение буфера в стеке или это нападение на стек или это переполнение буфера хипа - это значит, он хочет указать на проблему с памятью, выделенной программе.

Атаки на стек

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

  Если мы будем говорить о компьютерах, то там, конечно, нет листков бумаги, а есть просто память (RAM). Данные действительно добавляются в стек сверху и потом извлекаются. При атаке переполнение буфера, направленной на стек, нарушитель добавляет в него больше данных, чем предусмотрено, при этом лишняя часть перезаписываются поверх данных, для которых разработчик программы не предусмотрел такой вариант.

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

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

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

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

Атаки на формат строки

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

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

Кучи проблем

Предотвращение сетевых атак: технологии и решения
Системы предотвращения атак (IPS) сегодня очень популярны. Они объединяют целый ряд технологий безопасности и достаточно далеко шагнули от своих предков - систем обнаружения вторжений. Тем не менее, некоторые аналитики критикуют IPS за объективные недостатки и даже предсказывают скорую смерть таких систем. Рассмотрению современных технологий предотвращения атак, анализу их сильных и слабых сторон, а также перспектив их существования посвящена данная статья

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

Защита: о жуках и канарейках

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

  Простейшая схема основана на том, что в стеке и хипе должны быть только данные, компьютер никогда не должен выполнять найденные там инструкции. Этот подход прекрасно работает во многих UNIX-системах, однако, он не может использоваться в Windows. Более того, эта схема заставляет UNIX-администраторов изменять параметры конфигурации на каждом сервере. Легче всего это сделать на неинтеловских процессорах (например Sun Microsystem's Sparc).

  Другая популярная схема защищает от переполнения буфера, но, только того, который связан со стеком. Эта защита основана на использовании канареек. Помните рассказы про шахтеров, которые брали с собой в угольные шахты канареек? В шахтах часто выделяется опасный газ - метан, который не имеет запаха и ядовит. Если шахтеры будут углублять шахту в ту сторону, где выделяется метан, канарейки умрут первыми, чем дадут шахтерам шанс покинуть опасную зону.

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

  Идея использования канареек принадлежит группе разработчиков Linux, создавших версию Linux (Immunix.com), использующую Stackguard для встраивания канареек в операционную систему и прилагающиеся программы. Новый компилятор Microsoft для среды Visual C тоже имеет возможность добавлять канареек в стек.

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

Что вы можете сделать с переполнением буфера

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

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

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

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

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

  Служба SMTP прокси проверяет, что бы все строки, полученные при использовании этого протокола, являлись его частью. Служба также следит за тем, чтобы ни одна строка не была длиннее, чем заранее задано. Количество символов можно изменить при помощи WatchGuard Policy Manager, по умолчанию оно равно 1000. По длине адреса документом RFC 2822 рекомендовано ограничение в 256 символов. Чем больше это ограничение, т.е. чем короче адрес, тем сложнее произвести атаку.

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

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

Источник: Rainbow Technologies  

 

Последние новости

Сюрприз Центробанку: Банк "Открытие" в последний момент удвоил долю в Qiwi
Банк 'Открытие' удвоил долю в Qiwi Банк 'Открытие' оказался владельцем 18% акций платежной системы Qiwi, следует из материалов, размещенных на сайте Американской комиссии по ценным бумагам...
Стоимость Microsoft превысила $600 млрд впервые за 17 лет
В этот раз без 'пузырей'На момент закрытия торгов на высокотехнологичной бирже NASDAQ 19 октября 2017 г...
Руководители Минкомсвязи, РЖД, Сбербанка, "Аэрофлота" выступят на CNews FORUM
9 ноября 2017 г. в юбилейный десятый раз состоится CNews FORUM 2017...
Разработчики "Эльбрусов" создают многокристальный процессор для дешевых ноутбуков
Многокристальный процессор Создатели отечественных микропроцессоров 'Эльбрус' ведут разработку многокристального процессора для тонких клиентов, дешевых ноутбуков и встраиваемых систем (вспомогательн
В США успешно испытали замену РД-180
Американская Blue Origin провела первые огневые испытания ракетного двигателя BE-4. Тестирование агрегата, считающегося заменой российского РД-180, прошло успешно...

Блог о софте

AVG 2013 Christmas Collection Mega Pack Final Version-FL
AVG 2013 Christmas Collection Mega Pack Final Version-FL | 761 MBAVG 2013 Christmas Collection Mega Pack Final VersionYou Have a Complete Collection of AVG 2013 SoftwareMega Pack Contains:AVG Antiviru
Zoner Photo Studio v15 Build 7 PRO Final
О программе:Zoner Photo Studio Pro - приложение, созданное для качественной обработки цифровых снимков...
Sophos Virus Removal Tool 2.3 DC 14.06.2013
Sophos Virus Removal Tool - антивирусный сканер проведет диагностику вашего ПК на наличие вирусов, программ-шпионов, руткитов и поддельных антивирусов и удалит их...
Photo Collage Max 2.2.0.8 Portable by Invictus (RUS)
Photo Collage Max – программа, которая создает фотоколлажи. Так же создает альбомы, календари и т.п. Содержит в себе множество шаблонов, фигур, масок, фоторамок...
Дизайн Календарей 7.25 (Rus/ RePack by KaktusTV)
Дизайн Календарей - это доступная и удобная программа для создания красивых календарей с фотографиями на любой год или месяц...