На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Шаблон атаки: делаем клиента невидимым

Удаляем клиента из цикла взаимодействия, обращаясь непосредственно к серверу. Мож­но попытаться выяснить, какие данные сервер принимает, а какие нет. Можно выдать себя за клиента.
Любое доверие, которое оказывается сервером клиенту, — это залог успеха атаки. Безопасное серверное приложение должно крайне подозрительно относиться к лю­бым данным, которые поступают из сети, предполагая, что действует вредоносное клиентское приложение. По этой причине в практике создания безопасных прило­жений никогда не должны применяться решения, основанные на скрытых полях или проверке данных в формах JavaScript. По этой же причине никогда нельзя доверять данным, которые предоставляет пользователь клиентской программы. Более под­робно о том, как избежать доверия к входным данным, описано в книгах Writing Secure Code и Bulding Secure Software.
Расширение привилегий
ДЛЯ некоторых компонентов системы устанавливаются доверительные отноше­ния (иногда явные, иногда неявные) с другими частями системы. В некоторых слу­чаях эти доверительные отношения имеют возможности "расширения доверия", т.е. для компонентов могут быть сняты внутрисистемные ограничения. Чтобы разо­браться в этом, представим, что происходит, когда обычное приложение использует системный вызов уровня ядра. Очевидно, что ядро заслуживает значительно боль­шего доверия, чем обычная программа.
Когда мы говорим о параметрах для "надежных" команд, мы должны думать о расширении привилегий в системе. Где принимается надежный параметр и где он используется? Находится ли используемая точка в области кода с большим довери­ем, чем точка входа? Если да, значит, мы нашли путь расширения привилегий»

Доверие на уровне привилегий процесса
Предоставленные процессу привилегии можно считать пределом возможностей программы атаки на этот процесс, но программа атаки не ограничивается одним процессом. Не забывайте, что вы атакуете систему. Вспомните о ситуациях, когда низкопривилегированные процессы взаимодействуют с процессами с более высоки­ми привилегиями. Взаимодействие может осуществляться с помощью вызовов про­цедур, обработчиков файлов или сокетов. Интересно, что взаимодействие посредст­вом файлов данных освобождается от большинства обычных ограничений по време­ни. Так действуют многие базы данных, т.е. в системе можно разместить "логические бомбы", которые сработают в определенный момент в будущем при достижении оп­ределенного состояния.
Связи между программами могут быть весьма разветвленными и трудными для отслеживания. Для разработчика это означает, что еще в проекте закладываются возможности для взлома. Уязвимые места существуют и при взаимодействии ком­понентов различных систем. Схемы соединений могут быть самыми удивительными. Рассмотрим файл журнала. Если низкопривилегированный процесс способен созда­вать записи в журнале, а для чтения этих записей используется процесс с высокими привилегиями, то существует очевидный путь для взаимодействия между двумя программами. Хотя и кажется, что такое взаимодействие выявить достаточно слож­но, но были созданы программы атаки, в которых использовались подобные уязви­мые места. Например, Web-сервер регистрирует предоставленные пользователем данные из запросов страниц. Анонимный пользователь способен внести специаль­ные метасимволы в запрос страницы, что приведет к сохранению этих символов в файле журнала. Когда пользователь с правами администратора будет просматривать файл журнала, с помощью метасимволов в файл паролей будут добавлены нужные хакеру данные.
Кому нужны права администратора?
Во всех руководствах по безопасному программированию присутствует масса упоминаний о принципе наименьших привилегий. Проблема в том, что большая часть программного кода просто не работает с минимальными привилегиями. Очень часто программы не способны корректно работать при установке ограниче­ний доступа. Весьма прискорбно, что многие из этих программ могли бы и не тре­бовать прав системного администратора или суперпользователя, но они это дела­ют. В результате современное программное обеспечение работает со слишком ши­рокими привилегиями.
Рассматривать привилегии следует с точки зрения системы, т.е. глобально (на­шим читателям следует усвоить эту хитрость хакеров). Очень часто в качестве служ­бы, предоставляющей привилегии и проверки прав доступа, выступает операцион­ная система, но для многих программ не соблюдается принцип наименьших приви­легий. Такие программы некорректно используют ресурсы операционной системы и требуют чрезмерных привилегий (и часто не получают отказа). Более того, пользо­ватель такой программы может заметить, а может и не заметить такой проблемы, но, не сомневайтесь, что хакер обнаружит подобный недостаток. Один из интересных методов атаки заключается в запуске программы в замкнутом пространстве и иссле­

довании контекста безопасности каждого вызова и операции (иногда это проще осуществить на продвинутых платформах типа Java 2). Использование некоррект­ных привилегий является одним из самых популярных методов атак, которые мы за­тронули только поверхностно.
Шаблон атаки: взлом программ, которые обладают правами записи в привилегированных областях операционной системы
Хакер обязательно выполнит поиск программ, которые обладают правами записи в сис­темном каталоге или параметрах реестра (например, в разделе реестра HKLM, в котором хранится множество критически важных переменных среды Windows). Эти программы обыч­но запускаются с широкими привилегиями и при их создании редко применяются принципы безопасности. Эти программы являются великолепными целями для проведения атак, по­скольку они предоставляют огромные возможности после взлома.
Привилегированные процессы, которые выполняют чтение данных из непроверенных источников
После получения удаленного доступа к системе, злоумышленник может начать поиск файлов и параметров реестра, которыми он хочет управлять. Подобным обра­зом он может начать поиск локальных конвейеров и системных объектов. В Win­dows NT, например, есть диспетчер объектов (object manager) и каталог системных объектов, включая области памяти (действительные сегменты памяти с правами доступа/записи), открытые обработчики файлов, конвейеры и мьютексы (mutex). Все перечисленное выше относится к потенциальным точкам входа, через которые хакер может проникнуть в систему. После проникновения в систему хакер стремит­ся получить доступ к процессу ядра или сервера. Любая точка входа для данных мо­жет быть использована как плацдарм для доступа к более привилегированным об­ластям памяти.
Шаблон атаки: используем конфигурационный файл пользователя для запуска команд, которые позволяют расширить привилегии
Допустим, что утилите с установленным битом SUID можно передать аргументы через ко­мандную строку. В одном из этих аргументов хакер может записать путь к конфигурационному файлу. Для конфигурационного файла разрешено передавать команды командного интерпре­татора. Таким образом, при запуске утилиты она запускает заданные команды. Одним из ре­альных примеров может послужить пакет утилит UUCP (UNIX-to-UNIX copy program) для копиро­вания файлов из одной UNIX-системы в другую. Сама программа из пакета программ может и не иметь прав суперпользователя, но возможно, что она относится к группе или учетной запи­си, которые обладают более широкими правами, чем те, которыми может пользоваться ха кер. В случае UUCP расширение привилегий может позволить хакеру получить права группы, которой разрешено устанавливать соединения, или права учетной записи UUCP. Таким обра­зом, с помощью поэтапного расширения привилегий хакеру удается скомпрометировать учетную запись суперпользователя.
В некоторых программах не разрешается применять пользовательские конфигурацион­ные файлы, но для системного конфигурационного файла могут быть установлены недостаточ­но жесткие права доступа. Существует огромное количество уязвимых мест, которые возникли

в результате установки слишком толерантных прав доступа. Важное замечание: целостность конфигурационного файла может контролироваться процессами обеспечения безопасности. Поэтому хакер должен быть осторожен. При внесении в этот файл изменений, позволяющих расширить свои права на компьютере, после выполнения всех необходимых действии следует восстановить начальные значения. Затем следует запустить специальные утилиты для восста­новления даты последнего доступа к файлу. Главное— не оставлять следов, которые могут быть использованы при судебном преследовании.
Процессы, использующие привилегированные компоненты
В некоторых "умных" процессах пользовательские запросы обрабатываются в низкопривилегированной среде. Теоретически эти процессы не могут использовать­ся при атаках. Однако при этом делается предположение, что учетные записи с огра­ниченными правами, которые используются для управления доступом, не способны выполнять чтение секретных файлов. На самом деле администрирование многих систем проводится на низком уровне и даже низкопривилегированные учетные за­писи способны получать доступ к любой части файловой системы и пространству памяти, выделенному для текущих процессов. Также нужно отметить, что во многих методах по предоставлению наименьших привилегий есть свои исключения. Возь­мем, например, сервер IIS от компании Microsoft. При неверной конфигурации сер­вера IIS предоставленные пользователем данные способны выполнять вызов функ­ции RevertToSelf (), что позволяет выполнять команды от имени учетной записи с привилегиями администратора. Более того, определенные библиотеки DLL всегда выполняются с правами администратора, независимо от прав пользователя, который запускает программу. Вывод: если потратить достаточно много времени на аудит атакуемой системы, то, вероятнее всего, удастся найти точку входа, где не соблюда­ется принцип предоставления наименьших привилегий.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика