Спонсор: Microsoft
Опубликован: 25.06.2010 | Уровень: специалист | Доступ: платный
Лекция 16:

Анализ защищенности информационной системы на основе выявления уязвимостей и обнаружения вторжений

Аннотация: Рассматривается методология анализа защищенности системы на основе выявления уязвимостей информационной системы и обнаружения вторжений.
Ключевые слова: уязвимость, информационная атака, аппаратное обеспечение, АС, buffer overflow, переполнение буфера, SQL Injection, SQL-запрос, format string, информационные системы, бизнес-процессы, конфиденциальность, целостность, ущерб, парадигма, злоумышленник, атака, очередь, политика безопасности, ПО, значимость, переполнение, стек, подпрограмма, Интернет, im-черви, сетевые службы, intel, x86, хранение данных, микропроцессор, гигабайт, LIFO, блок данных, инструкция, push, pop, сегменты, SP, ESP, регистр указателя, вершина стека, элемент данных, ebps, U-кадры, локальная переменная, сегментный регистр, адрес, завершение работы, регистр, EIP, extending, instruction pointer, значение, процессор, размерность, код программы, char, байт, strcpy, строковый, массив, объявление переменной, символьный массив, избыточность, компиляция, вредоносный код, code-named, консоль, хост, сетевые приложения, интерактивность, сетевой протокол, входные данные, CGI, PHP, ASP, хранимая процедура, Хакер, активность, blaster, WORM, DCOM, RPC, windows 2000, Microsoft SQL Server, инъекция, операции, запрос, СУБД, structure, query language, идентификация и аутентификация, аутентификация, sqlquery, UserName, извлечение данных, UNION, выборка данных, insertion, Top, fieldname, персональные данные, имя таблицы, БД, функция, управляющий символ, параметр, аргумент, входной параметр, вариант использования, доступ, guest, anonymity, программный компонент, уровень привилегий, нарушение информационной безопасности, информационная безопасность, аудит, анализ, объём, программные средства, сканер, пассивный, вывод, serviceability, совместность, service pack, hotfix, patching, вторжение, рабочая станция, коммуникационное оборудование, кража, конфиденциальная информация, топология, traceroute, IP-адрес, маршрутизатор, DNS, RFC, сетевой сервис, SNMP, MIB, конфигурация, жизненный цикл, цель атаки, программное обеспечение, сетевой датчик, системное событие, хостовый датчик, информация, анализ данных, сигнатурный метод, сигнатура, сигнатура атаки, строка символов, выражение, математическая модель, алгоритм, точность, поведенческий метод, множества, сервер, доступ к файлу, поиск, land, NFR, сигнатурный анализ, экспертная система, автомат, пользователь, пароль, абстракция, база фактов, логический вывод, база правил, нейросетевой алгоритм, генетический алгоритм, оптимальность, селекция, мутация, критерий оптимальности, вектор, искусственный нейрон, нейрон, сумматор, нейросеть, коэффициенты, загрузка, отказ в обслуживании, команда, базы данных
Презентацию к лекции Вы можете скачать здесь.

Цель лекции

В рамках лекции рассматриваются:

  • Классификация уязвимостей, информационных атак и их возможных последствий.
  • Технологические и эксплуатационные уязвимости программно-аппаратного обеспечения АС. Технологические уязвимости типа " buffer overflow " (переполнение буфера), " SQL Injection " (модификация SQL-запроса), " format string " (форматирующая строка).
  • Основные способы реализации информационных атак.
  • Сетевые и хостовые системы анализа защищённости.
  • Методы сбора и анализа информации, реализуемые в системах анализа защищённости.

Уязвимость - "ахиллесова пята" современных информационных систем

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

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

Любые атаки нарушителей реализуются путём активизации той или иной уязвимости, которая присутствует в системе. Это в свою очередь создаёт условия для успешной реализации информационных атак на ИС. Примерами уязвимостей могут являться некорректным образом составленная политика безопасности, отсутствие определённых средств защиты или ошибки в используемом программном обеспечении (ПО). На рис. 23.1 показаны примеры уязвимостей, атак и возможные последствия их успешной реализации.

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

Рис. 23.1. Примеры уязвимостей, информационных атак и их последствий

Значимость "Ахиллесовой пяты" для ИС, а так же эффективность методов выявления и устранения уязвимостей легче проследить на ряде широко известных примеров.

Уязвимости "buffer overflow"

В основе уязвимости типа " buffer overflow " (переполнение буфера) лежит возможностью переполнения стека атакуемой подпрограммы, в результате чего нарушитель получает возможность выполнить любые команды на стороне хоста, где запущена эта подпрограмма. Наличие именно такой возможности позволило провести первую крупномасштабную атаку в сети Интернет в 1988 году, которая впоследствии получила название - "Интернет-червь Ч. Морриса". Базируясь на уязвимости в сетевой службе fingerd, буквально за несколько дней, эта атака фактически парализовала работу более половины всех компьютеров, подключённых к сети Интернет. И по сей день уязвимость класса " buffer overflow " считается одним из наиболее распространённых и весьма опасных типов уязвимостей, имеющихся в общесистемном и прикладном ПО. Для более полного представления особенностей уязвимости этого типа рассмотрим основные принципы организации стека процессора семейства Intel x86.

Стек представляет собой область памяти, специально выделенной для временного хранения данных подпрограмм. В защищённом режиме работы микропроцессора максимальный размер стека ограничивается четырьмя Гигабайтами. Структура стека организована в соответствии с принципом LIFO ( Last In First Out - "последним пришел, первым ушел"). Это означает, что при чтении информации из стека извлекается блок данных, который был записан в стек последним, а не первым. Для записи информации в стек используется инструкция процессора PUSH, а для чтения - POP. При этом одна из особенностей стека заключается в том, что при записи данных в стек он увеличивается в сторону младших адресов памяти.

Для работы со стеком используются три регистра процессора (рис. 23.2):

  1. ss - сегментный регистр, содержащий адрес начала сегмента стека;
  2. sp / esp - регистр указателя стека, который всегда указывает на вершину стека, т.е. содержит смещение, по которому в стек был занесен последний элемент данных. Если стек пуст, то значение sp / esp равно адресу последнего байта сегмента, выделенного под стек;
  3. bp / ebp - регистр указателя базы кадра стека, который обычно используется для хранения адреса стека, где хранятся локальные переменные. При использовании регистров sp / esp и bp / ebp их значения являются смещениями относительно сегментного регистра ss.

Схема организации стека

Рис. 23.2. Схема организации стека

Рассмотрим порядок записи данных в стек при вызове функций на примере программы, исходный текст которой приведён в листинге 23.1.

void test(int a, int b, int c)
{
char p1[6];
char p2[9];
}
void main() 
{
test(1,2,3);
}
Листинг 23.1. Пример программы, в которой вызывается функция test()

При вызове функции test в стек сначала записываются значения трёх параметров - a, b и c в обратном порядке. Затем в стек помещается адрес возврата, в котором указывается адрес инструкции, которая должна быть выполнена процессором после завершения работы функции test. При выходе из функции test этот адрес возврата автоматически копируется в регистр EIP ( Extended Instruction Pointer ), значение которого считывает процессор и передаёт управление на команду по адресу этого регистра. Также в реестре сохраняется значение регистра EBP, который указывает на вершину локальные переменные функции main(). Далее в стек записываются локальные символьные массивы p1 и p2, которые определены в функции test. Итоговая структура стека функции test() показана на рис. 23.3.

Структура стека функции test()

Рис. 23.3. Структура стека функции test()

Уязвимость " buffer overflow " вызвана отсутствием в программе проверки размерности данных, которые записываются в стек. Это может позволить потенциальному нарушителю записать в стек избыточную информацию, которая смогла бы изменить значение адреса возврата и передать управление на фрагмент ранее внедрённого вредоносного кода. В листинге 23.2 приведён исходный код программы, который демонстрирует изменения содержимого стека при попытке переполнения одной из его переменных.

#include 
int main(int argc, char **argv){
char a1[4]="abc";
char a2[8]="defghij";
strcpy(a2, "0123456789");
printf("%s ", a1);
return 0;
}
Листинг 23.2. Пример программы, демонстрирующей изменения в стеке при его переполнении

В приведённой программе определено два символьных массива типа char - a1 и a2. Размер первого массива a1 составляет четыре, а второго - восемь байт. После определения переменных в программе при помощи функции strcpy выполняется операция записи строкового значения "0123456789" в массив a2. При этом записываемое значение на семь байт превышает размер массива a2, что приводит к его переполнению и изменению значения массива a1, который размещён в стеке до a2. На рис. 23.4 показано состояние фрагмента стека с переменными a1 и a2 до и после вызова функции strcpy.

Состояние фрагмента стека с переменными a1 и a2

Рис. 23.4. Состояние фрагмента стека с переменными a1 и a2

В левой части рис.23.4 показано расположение в стеке содержимого двух переменных - a1 и a2. Значения обеих переменных завершаются символом "?", что является признаком окончания строки. При этом с учётом последовательности объявления переменных в программе первым в стеке размещается символьный массив a1, а затем массив a2. После вызова функции strcpy происходит переполнение массива a2, поскольку в него записывается на семь символов больше, чем предусмотрено его размером. В результате этого переполнения часть избыточной информации записывается в массив a1, который размещён в стеке сразу вслед за массивом a2. После компиляции и запуска программы, приведённой в листинге 23.2, на экране будет выведено значение изменённого массива a1, которое будет принимать значение "89".

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

Уязвимости " buffer overflow " могут содержаться как общесистемном, так и прикладном программном обеспечении. В общем случае можно выделить следующие основные категории программ, которые могут содержать уязвимость этого типа:

  • программы, которые запускаются локально на хосте. Активизация уязвимости в программах этого типа может позволить нарушителю несанкционированно расширить свои права доступа к ресурсам локальной системы. Переполнение буфера программ осуществляется путём их запуска пользователем и ввода данных, приводящих к переполнению стека;
  • сетевые приложения, которые обеспечивают интерактивное взаимодействие с пользователем на основе сетевых протоколов. Для активизации уязвимости в сетевых приложениях нарушитель может сформировать удалённый запрос, содержащий входные данные, необходимые для переполнения стека в уязвимой программе. Примером сетевых программ являются Web -приложения, такие как CGI -модули, PHP -сценарии, активные серверные страницы ASP и др.;
  • хранимые процедуры серверов СУБД. Активизация уязвимости на таких серверах возможна как путём локального запуска хранимых процедур, так и формирования удалённого запросу к соответствующей процедуре.

Уязвимости " buffer overflow " часто используются хакерами для создания Интернет-червей - самореплицирующихся программ, распространяющихся по сети и, как правило, приводящие к нарушению работоспособности ИС. Наиболее яркими примерами Интернет-червей, несанкционированная активность которых наблюдалась во второй половине 2003 года, являются:

  • Интернет-червь " W32.Blaster.Worm ", который базировался на уязвимости " buffer overflow " в службе DCOM RPC ОС Windows 2000/XP ;
  • Интернет-червь " W32.Slammer ", распространение которого по сети осуществлялось на основе переполнения буфера в одной из подпрограмм сервера СУБД Microsoft SQL Server 2000.
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Денис Овчинников
Денис Овчинников
Россия
Павел Артамонов
Павел Артамонов
Россия, Москва, Московский университет связи и информатики, 2016