Проблемы обеспечения безопасности приложений Тема 20
Уязвимости приложений Переполнение буфера «Гонки» Использование привилегий серверных компонент Манипуляции с данными на клиентской стороне
Получение контроля над объектом атаки Местонахождение атакующего В разных сегментах с объектом атаки Используемые уязвимости Цель Ошибки реализации Степень риска Запуск кода на атакуемом узле Механизм реализации Переполнение буфера - наиболее распространённая атака уровня приложений Высока я
Переполнение стека адрес возврата local[2] local[1] local[0] Стек Буфер f_vulner() { char local[3] ……}
int f_vulner (char arg) { char local[100] char local[100] //обработка //обработка return 0 return 0} void main() { char arg[200] char arg[200] gets (arg) gets (arg).. f_vulner (arg) f_vulner (arg) printf(arg) printf(arg) return 0 return 0} адрес возврата [100] local Стек Обычный ход выполнения программы «Переполнение стека» Переменная arg [100] strcpy(local, arg)
int f_vulner (char arg) { char local[100] char local[100] //обработка //обработка return 0 return 0} void main() { char arg[200] char arg[200] gets (arg) gets (arg).. f_vulner (arg) f_vulner (arg) printf(arg) printf(arg) return 0 return 0} адрес возврата [100] local Данные [200] Переполнение стека «Переполнение стека» Стек strcpy(local, arg) Ошибка ! Вместо возврата запуск кода
Данные [200] «Переполнение стека» Вызов функций ядра (программное прерывание INT 0x80) Вызов функций из модулей DLL Использование функции «WinExec» Использование переполнения стека
Причины переполнения буфера Отсутствие необходимых проверок на корректность аргументов Отсутствие средств вычисления длины буфера при работе с указателями strcpy(local, arg) Abcd……….?
Последствия переполнения буфера Чтение ячеек памяти, не принадлежащих массиву Модификация ячеек памяти Системные данные (адрес возврата и т. д.) Системные данные (адрес возврата и т. д.) Другие переменные Другие переменные Исполняемый код Исполняемый код Несуществующая (свободная область) Несуществующая (свободная область)
Предотвращение ошибок переполнения Использование механизма структурных исключений Использование «Heap» для указателей Использование языков программирования, делающих невозможным переполнение буфера Несуществующая область Буфер Отказ от индикатора завершения
Методы защиты Установка пакетов исправления Исправление исходного кода с перекомпиляцией Тестирование программ специальными утилитами
«Гонки» Гонки можно определить как некорректное поведение программы, вызванное неожидаемой последовательностью зависящих друг от друга событий. Другими словами, разработчик программы ошибочно полагает, что одно событие всегда должно предшествовать другому, но реально может возникнуть ситуация, когда это будет не так. Гонками также называются ситуации, при которых два или более процессов (потоков) обрабатывают разделяемые данные (файлы или переменные), и конечный результат зависит от соотношения скоростей процессов (потоков). В общем случае, процесс (поток) не выполняется атомарно. Его выполнение может быть прервано, и другой процесс может выполнить свои действия между двумя любыми операции прерванного процесса. В защищённом приложении любая пара операций должна работать корректно, даже если между ними выполняется произвольный код других процессов (потоков).
«Гонки» Проблемы, причиной которых являются гонки, можно поделить на две категории: Вмешательство со стороны недоверенного процесса. В этом случае критичными являются либо последовательность выполнения операций, либо «атомарность» (неделимость) двух операций. Вмешательство со стороны доверенного процесса (с точки зрения защищённого приложения). Такие ситуации называют взаимными блокировками, а также дедлоками (deadlocks), клинчами (clinch) или тупиками.
«Гонки» - пример уязвимости Name CAN (under review) Description The kernel module loader in Linux kernel 2.2. x before , and 2.4. x before , allows local users to gain root privileges by using ptrace to attach to a child process that is spawned by the kernel.
Практическая работа 25 Уязвимость загрузчика модулей ядра в ОС Linux
Сетевой сканер Nessus Тема 21
Сетевой сканер Nessus Nessus-сервер (UNIX) Nessus-клиент (Windows, UNIX) Сканируемая сеть
ПРИЛОЖЕНИЯ СУБД ОС СЕТЕВЫЕ СЛУЖБЫ ПОЛЬЗОВАТЕЛИ Сетевой сканер Nessus около 1000 проверок
Сетевой сканер Nessus Характеристики Модульная архитектура Язык описания атак NASL Система генерации отчётов Идентификация служб
Параллельное подключение и сканирование Nessus-сервер (UNIX) Nessus-клиент Сканируемая сеть Nessus-клиент
Практическая работа 20 Изучение возможностей сканера Nessus
Обеспечение безопасности сетей - - итог Для защиты сети необходимо использовать комплекс средств защиты, включающий в себя: Средства защиты узлов и ЛВС, обеспечивающие аутентификацию, разграничение доступа, шифрование и т.д. Средства анализа защищённости и устранения уязвимостей Средства обнаружения атак
Средства защиты периметра Внутренние серверы Рабочие места DMZ-1 DMZ-2 Филиал Мобильные сотрудники РесурсыInternet Пользователи Internet МЭ ID
Средства анализа защищённости DMZ-1 DMZ-2 Филиал Мобильные сотрудники РесурсыInternet Пользователи Internet МЭ Сканербезопасности
Средства обнаружения атак DMZ-1 DMZ-2 Филиал Мобильные сотрудники РесурсыInternet Пользователи Internet МЭ