Коллектив авторов - Защита от хакеров корпоративных сетей
- Название:Защита от хакеров корпоративных сетей
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Коллектив авторов - Защита от хакеров корпоративных сетей краткое содержание
В книге рассматривается современный взгляд на хакерство, реинжиниринг и защиту информации. Авторы предлагают читателям список законов, которые определяют работу систем компьютерной безопасности, рассказывают, как можно применять эти законы в хакерских технологиях. Описываются типы атак и возможный ущерб, который они могут нанести компьютерным системам. В книге широко представлены различные методы хакинга, такие, как поиск различий, методы распознавания шифров, основы их вскрытия и схемы кодирования. Освещаются проблемы безопасности, возникающие в результате непредсказуемого ввода данных пользователем, методы использования машинно-ориентированного языка, возможности применения мониторинга сетевых коммуникаций, механизмы туннелирования для перехвата сетевого трафика. В книге представлены основные сведения о хакерстве аппаратных средств, вирусах, троянских конях и червях. В этой книге читатель узнает о методах, которые в случае неправильного их применения приведут к нарушению законодательства и связанным с этим последствиям.
Лучшая защита – это нападение. Другими словами, единственный способ остановить хакера заключается в том, чтобы думать, как он. Эти фразы олицетворяют подход, который, по мнению авторов, позволит наилучшим образом обеспечить безопасность информационной системы.
Перевод: Александр Петренко
Защита от хакеров корпоративных сетей - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Но, естественно, ошибки могут быть и в локальных приложениях. При тестировании локальных утилит suid/sgid рекомендуется:
1) переслать приложению большой массив данных, задав соответствующие параметры командной строки. Многие приложения suid/sgid уязвимы к атакам переполнения буфера;
2) присвоить переменной окружения PATH значение локальной директории, в которой хранятся копии пораженных «троянцами» программ и к которым обращается приложение. Узнать о вызове приложением внешних программ можно дизассемблированием приложения или, что лучше, при помощи утилиты strings системы UNIX, позволяющей найти имена внешних программ в двоичном коде исследуемого приложения;
3) присвоить переменной окружения LD_PRELOAD ссылку на библиотеку, пораженную «троянцем». Некоторые приложения и системы позволяют с ее помощью задавать дополнительные динамические библиотеки. В результате приложение может повысить свои привилегии. Отметим, что это в большей степени ошибка операционной системы, чем приложения;
4) проверьте, не использует ли приложение функцию getenv() для чтения значения переменной окружения. Многие приложения уязвимы к атакам «переполнения буфера» (в результате присвоения переменной окружения данных большой длины) и атакам «изменение ссылки на файл» (в результате определения в переменной окружения дополнительных файлов, журналов или директории). Единственный способ удостовериться в том, что в приложении используются переменные окружения, заключается в поиске утилитой strings системы UNIX в двоичном коде исследуемого приложения имен переменных в верхнем регистре;
5) постарайтесь изменить содержимое конфигурационного файла приложения, если он может быть изменен пользователем. Во многих приложениях реализован не самый лучший вариант анализа конфигурационного файла. Цель изменения файла заключается в вызове ситуации переполнения буфера путем присваивания различным атрибутам очень длинных строковых значений.
Анализ исходных текстов программ
Аудит приложения более эффективен, если доступен исходный текст его программ. Тогда можно использовать поиск различий (диффинг) различных версий приложения (поиск различий был описан в главе 5). Поиск различий заключается в сравнении версий одного и того же приложения для нахождения в них уязвимостей или изменений. Но как найти уязвимость, вызванную передачей приложению не предусмотренных разработчиком входных данных или данных неверного формата?
Для этого следует найти вызовы системных функций и проследить, откуда берутся передаваемые им данные. Связаны ли они как-нибудь с входными данными? Если связаны, то следует попытаться определить, как именно. Часто трассировка хода выполнения приложения от точки ввода непредусмотренных данных заводит в тупик. Поэтому лучше начать с системных функций и проследить историю появления входных данных системных функций.
Синтаксис системных функций и их входных данных зависит от языка, в котором они используются. Прежде всего следует обратить внимание на точки вызова программ (функции exec, system), функции работы с файлами (open, fopen), запросы к базам данных (команды SQL). В идеале следует найти все входные данные пользователя и места их использования. Это даст возможность определить, действительно ли обработка данных пользователя представляет интерес с точки зрения обеспечения безопасности.
В качестве примера рассмотрим фрагмент приложения:Видно, что перед выполнением запроса SQL введенные пользователем данные не проверяются. Например, никак не контролируется значение параметра name перед включением его в запрос, поэтому злоумышленнику будет очень просто заставить приложение пропустить запрос SQL и выполнить нужные ему команды.
Контроль данных
Лучший способ борьбы с не предусмотренными разработчиком данными – проверка их на допустимые значения. Помня о принципе сведения проверок к минимуму, следует оценить диапазон значений тех или иных символов для каждого сообщения, передаваемого пользователем.
Например, в почтовом индексе должны присутствовать только числа и, возможно, символ дефиса для США. Телефонный номер состоит из чисел и символов форматирования (круглых скобок и дефиса). Для адреса требуются цифры и буквы, для имени – только буквы. Конечно, можно считать символы форматирования допустимыми, но с каждым символом возрастает потенциальный риск возникновения уязвимости. Хотя числа и буквы в общем-то безобидны, но тем не менее вполне возможно включение во входные данные приложения дополнительных команд SQL с использованием только букв, чисел и символа пробела. На это не потребуется много усилий, так что задумайтесь лучше об ограничении входного потока данных.
Пропуск символов
При просмотре документации по интерфейсу CGI для программистов поражает количество советов избегать применения управляющих символов командного процессора. Зачем их избегать, если они не вообще не нужны? К тому же возможны случаи, когда недостаточно просто пропустить без обработки символы командного процессора.
Например, нельзя в строке пропустить символ возврата каретки, поместив перед ним символ обратной косой черты «\». В результате действие символа возврата каретки отменено не будет, а строка закончится символом «\», который имеет особое значение для командного процессора UNIX. С символом NULL та же история. Если NULL пропустить в строке, то строка закончится символом обратной косой черты «\». В языке Perl функция open выполняется по-особенному, если имя файла завершается символом со специальным значением «I», невзирая на наличие символа обратной косой черты «\» перед ним.
Лучше удалить опасные символы данных, чем попытаться их пропустить или обезвредить. Не всегда понятно, как будут восприняты те или иные символы, поэтому с точки зрения обеспечения безопасности сомнительные символы лучше удалить.
Естественно, в каждом языке предусмотрены свои собственные средства контроля опасных символов данных. Рассмотрим некоторые популярные языки и встроенные в них средства контроля.
Язык Perl
В языке Perl оператор замены строк с ключом удаления (tr///d)хорошо справляется с удалением символов из обрабатываемой строки. Совместное использование ключей удаления и инверсии (tr///cd)позволяет удалить из обрабатываемой строки все символы, кроме указанных. Оператор замены строк не использует нотацию регулярных выражений regex,а обрабатывает строку посимвольно. Например, чтобы оставить в строке только цифры, следует выполнить следующий оператор:$data =~ tr/0-9//cd
Диапазон чисел /0-9 / совместно с ключами дополнения и инверсии cd, заданными в операторе замены строк tr, указывают на необходимость удаления любых нечисловых символов из обрабатываемой строки (вместо замены их на другой символ). Оператор подстановки текста (s///) языка Perl хотя и медленнее, но предоставляет программисту больше возможностей. Он позволяет использовать всю мощь регулярных выражений regex для изощренной обработки строк по шаблонам в соответствии с форматом. Например, чтобы в строке сохранить только цифры, следует выполнить следующий оператор:
Читать дальшеИнтервал:
Закладка: