Коллектив авторов - Защита от хакеров корпоративных сетей
- Название:Защита от хакеров корпоративных сетей
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Коллектив авторов - Защита от хакеров корпоративных сетей краткое содержание
В книге рассматривается современный взгляд на хакерство, реинжиниринг и защиту информации. Авторы предлагают читателям список законов, которые определяют работу систем компьютерной безопасности, рассказывают, как можно применять эти законы в хакерских технологиях. Описываются типы атак и возможный ущерб, который они могут нанести компьютерным системам. В книге широко представлены различные методы хакинга, такие, как поиск различий, методы распознавания шифров, основы их вскрытия и схемы кодирования. Освещаются проблемы безопасности, возникающие в результате непредсказуемого ввода данных пользователем, методы использования машинно-ориентированного языка, возможности применения мониторинга сетевых коммуникаций, механизмы туннелирования для перехвата сетевого трафика. В книге представлены основные сведения о хакерстве аппаратных средств, вирусах, троянских конях и червях. В этой книге читатель узнает о методах, которые в случае неправильного их применения приведут к нарушению законодательства и связанным с этим последствиям.
Лучшая защита – это нападение. Другими словами, единственный способ остановить хакера заключается в том, чтобы думать, как он. Эти фразы олицетворяют подход, который, по мнению авторов, позволит наилучшим образом обеспечить безопасность информационной системы.
Перевод: Александр Петренко
Защита от хакеров корпоративных сетей - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Вопрос:Какой язык программирования самый безопасный? Ответ:На этот вопрос нельзя ответить однозначно. В языках Perl and PHP реализована прекрасная возможность автоматического распределения памяти, которая позволяет разместить в памяти любое количество входных данных. Но написанные на этих языках программы плохо масштабируются из-за того, что они выполняются в режиме интерпретации. Языки программирования C/C ++ требуют от разработчика принятия дополнительных мер по обеспечению безопасности. Но написанные на языках C/C ++ программы компилируются в выполнимый код, который работает быстрее и лучше масштабируется. Окончательный выбор языка должен быть основан на предъявляемых к приложению требованиях и навыках программиста работы со средствами разработки.
Вопрос:Где можно найти дополнительные сведения об аудите исходного текста программ? Ответ:В книге «Hack Proofing Your Web Applications» издательства Syngress читатель найдет много намеков, подсказок, хитроумных приемов и указаний по аудиту исходных текстов программ для выявления в них уязвимостей.
Глава 8 Переполнение буфера
В этой главе обсуждаются следующие темы:
• Стек
• Стековый фрейм функции
• Основы переполнения буфера
• Пример программы, уязвимой к переполнению буфера
• Современные способы переполнения буфера
• Новаторские принципы построения программного кода полезной нагрузки
· Резюме
· Конспект
· Часто задаваемые вопросы
Введение
Большинство известных на сегодняшний день уязвимостей основаны на переполнении буфера. Благодаря нему возможна значительная часть удаленного использования программ в злонамеренных целях. Если в результате атаки буфер переполнится, то квалифицированный злоумышленник сможет запустить любую программу с правами атакованного процесса. Атаки на буфер часто используются для внедрения злонамеренной программы с функциями командного процессора.
Переполнение буфера – непредсказуемая ситуация, которая возникает в программах, написанных на разных языках программирования. В этой главе будут подробно рассмотрены причины возникновения переполнения буфера, способы выявления основанных на нем уязвимостей и принципы написания программ, извлекающих из него пользу.
Эта глава разделена на две части: для новичка и для квалифицированного читателя. Если читатель знаком с переполнением буфера и понимает, как им можно воспользоваться, то он может пропустить раздел для новичка. Но в любом случае рекомендуется просмотреть материал, предназначенный для квалифицированного читателя. Некоторые из вошедших в него способов входили в арсенал средств злоумышленников, например использовались при создании червя Code Red.
Стек
Стек – абстрактная структура данных, устроенная по принципу LIFO «последний вошел – первый вышел» (last in, first out – LIFO). Наглядно стек может быть представлен стопкой подносов в кафетерии. Например, если кто-то кладет поднос на вершину стопки, то этот поднос будет первым, который другой возьмет. В поддержке стека важная роль отводится внутренним компонентам процессора, прежде всего регистрам процессора ESP и EBP, которые облегчают его использование.
Стек играет важную роль при взаимодействии программ. При вызове функции программа временно сохраняет в нем адрес возврата, параметры вызываемой функции и ее локальные переменные. Стек позволяет программистам упростить передачу параметров вызываемой функции и доступ к ее локальным переменным. В основном стек подобен буферу, в котором хранится вся необходимая для работы функции информация. Стек создается при вызове функции и разрушается при ее завершении. Стек статичен в том смысле, что после его создания назначение и тип выделенной стеку памяти не меняются, хотя хранящиеся в стеке данные могут изменяться.
Примечание
Все приведенные в главе примеры откомпилированы в операционной системе Windows 2000 компилятором VC++ 6 SP5 (Msdn.microsoft.com), если об этом ничего не сказано. Для большей ясности и простоты при компиляции примеров использовалась возможность построения выполнимой версии программы с отключенными опциями оптимизации программного кода. Примеры дизассемблирования подготовлены с использованием дизассемблера IDA pro 4.18 (www.datarescue.com). Все примеры предполагают использование стандартного чипсета x86.
Рассматриваемые в главе стеки процессора Intel x86 инвертированы в том смысле, что области памяти с меньшими адресами находятся на «вершине» стека. Операция push перемещает указатель вершины стека ниже (проталкивает запись в стек), в то время как операция pop – выше (выталкивает данные из стека). Данные располагаются в области памяти, отведенной под стек, начиная со дна стека, то есть с его максимального адреса, по последовательно уменьшающимся адресам памяти. Отчасти этим объясняется переполнение буфера: при записи в буфер от младших адресов к старшим возможно затирание данных, ранее сохраненных в области памяти со старшими адресами, например подмена сохраненного в стеке содержимого расширенного регистра команд EIP (Extended Instruction Pointer). Адрес доступного верхнего элемента хранится в регистре-указателе стека ESP.
Ошибки и защита
Изучение языка ассемблера
Для того чтобы лучше понять устройство стека, нужно знать ассемблер. Прежде всего использование регистров для работы с данными стека. Как правило, при работе со стеком используются следующие три регистра:
• EIP (Extended Instruction Pointer) – расширенный регистр указателя инструкции. Содержимое регистра указывает на следующую исполняемую машинную команду (текущий программный код). При вызове функций содержимое регистра сохраняется в стеке для дальнейшего использования;
• ESP (Extended Stack Pointer) – расширенный регистр указателя вершины стека. Содержимое регистра указывает на вершину стека (текущее положение в стеке). Добавление данных в стек и их удаление из стека осуществляются командами push и pop или с помощью непосредственных операций над содержимым регистра указателя вершины стека;
• EBP (Extended Base Pointer) – расширенный регистр базового указателя (указателя основной точки стека). Во время работы функции содержимое регистра должно оставаться неизменным. Содержимое регистра и смещение позволяет адресовать хранимые в стеке переменные и данные. Почти всегда регистр указывает на вершину стека выполняющейся функции.
В последующих секциях главы будет рассказано о записи локальных переменных в стек, использовании стека для передачи параметров функции, и показано, каким образом злоумышленник может воспользоваться переполнением буфера, чтобы выполнить злонамеренный код.
Читать дальшеИнтервал:
Закладка: