Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Платформа. Overflow. Власть!

Головин Виталий aka Vint

Спецвыпуск Xakep, номер #045, стр. 045-060-3


Пингвины, к обороне становись!

Поговорим теперь о *nix-защите. Все ОС *nix имеют очень схожую систему безопасности по отношению к работе с пользователями. В основе лежат понятия группы и пользователя. Все пользователи принадлежат к какой-либо группе (например, группы nobody, wheel, admin, root и т.д.). Эту принадлежность при добавлении пользователя устанавливает администратор. Кроме этого, у каждого файла есть несколько атрибутов: чтение, запись, выполнение; они вполне могут быть различны для хозяина файла, для группы, в которой он состоит, и для всех остальных. С помощью этих атрибутов происходит разграничение пользовательского доступа к ресурсам системы. Представленная система очень удобна и практически неуязвима. Но есть еще два атрибута, которые играют огромную роль при атаках на переполнения буфера, – так называемые биты UID/GID. Механизм SUID/SGID был введен для повышения безопасности и юзабильности ОС, но на самом деле он создал порядочную уязвимость при атаках на переполнение буфера. Принцип работы этого механизма можно объяснить так: в системе существует множество файлов, которые должны быть защищены от непосредственного чтения и записи простыми пользователями, но при этом некоторые программы, запущенные ими же, могли бы писать в эти файлы. Примером служит файл /etc/passwd, в нем хранятся кеши паролей всех пользователей. Этот файл защищен от чтения и записи для всех, кроме root'a. При обычной модели это бы значило, что только root может менять пароль для пользователя. На самом же деле это не так: программа passwd отлично работает у каждого юзера системы. Любой пользователь может легко сменить свой пароль, а значит произвести запись в /etc/passwd! Достигается это именно с помощью механизма SUID/SGID процессов. Дело в том, что программа passwd имеет хозяином пользователя root и у нее установлен UID-бит. При запуске такого приложения любым способом процесс получает хозяином пользователя, который прописан у него во владельцах. Таким образом, программа запускается с максимальными привилегиями, без ввода root-пароля. Из концепции механизмов SUID/SGID следует, что устанавливать бит UID, который позволяет запускать данное приложение от имени владельца файла без ввода пароля на его учетную запись, и бит GID, позволяющий процессу запускаться от имени группы-владельца, может только root. Программы с установленным UID-битом, имеющие владельцем пользователя root, – главные мишени кракеров. Достаточно найти и применить переполнение буфера в таком софте, и сервер сразу перейдет в руки атакующего. Поэтому некоторые защищенные дистрибутивы стараются отказаться от механизма SUID/SGID, хотя это и понижает удобство использования системы. Если происходит переполнения на уровне ядра, то система выдает kernel panic либо происходит разрушение защиты хоста.

Место встречи изменить нельзя

Все атаки можно разделить на две большие группы: локальные и удаленные. Если рассматривать переполнение буфера, то отнести его к какому-либо одному виду атак невозможно. Существуют примеры как локальных атак, так и удаленных взломов через переполнение. Рассмотрим локальную атаку. Для того чтобы ее совершить, у взломщика должен быть либо физический доступ к хосту (монитор, клава атакуемого компьютера:-)), либо шелл, который позволит запустить приложения. Атака такого вида сводится к загрузке эксплоита на компьютер и запуску его. Но тут могут возникнуть некоторые подводные камни: запрещена запись на диск вообще, то есть учетная запись подразумевает только чтение файлов определенного типа и все. Тогда атака через шелл отпадает, а при физическом доступе можно попробовать использовать сменные носители и запускать эксплоит с них. Хотя и тут бывают определенные заморочки: у *nix-систем есть защита от подобных действий, основанная на том, что сменные носители монтируются с опцией "noexec", что означает невозможность запуска программного кода с этих устройств. При таких жестких ограничениях просто использовать переполнение буфера не удастся, переполнение станет частью комплексной атаки.

Назад на стр. 045-060-2  Содержание  Вперед на стр. 045-060-4