Мысли о хакинге Unix Важно: Вся предлагаемая информация должна быть распределена по следующим категориям: 1) Общие принципы. 2) Поиск дефектов в src. 3) Просмотр в двоичных распределениях. 4) Просмотр специальных конфигураций сайта. Некоторые пункты классификации напрашиваются сами собой: 1) SUID/SGID. 2) Коды завершения/условия ошибки. 3) Непредвиденный ввод. 4) Параметры маршрутизации. 5) Проверка на аутентичность. 6) Имплицитное доверие. 7) Параметры. 8) Разрешения. 9) Прерывания. 10) Ввод/вывод. 11) Символические связи. 12) Демоны, особенно доступные пользователям. 13) Параметры маршрутизации в ядре. Предложенную схему можно разбить на категории и подкатегории: I: Suid-бинары и сценарии а) Непредвиденные действия пользователя. б) Свободные подключения. в) Имплицитные предположения о внешних условиях (ссылки sym, loc.-пути). г) Параметры маршрутизации. II: Демон, функционирующий со SUID а) Параметры маршрутизации. б) Недостаточная защита файла. в) Имплицитная защита файла. г) Доверие. д) Аутентичность. III: Проблемы ядра а) Параметры маршрутизации в ядре. б) Код драйвера устройства. Ниже рассматривается четырехэтапный метод, разработанный System Development Corporation и дающий 65%-ную гарантию обнаружения дефектов в системе безопасности. Поиск таких “дыр” в операционной системе включает четыре этапа: Этап 1 Изучение структуры управления данной конкретной системы. Чтобы найти лазейки в системе безопасности и определить ее дефекты, необходимо четко уяснить структуру управления системы и ее уровни. Вот что нужно знать: A) Объекты защиты: то, что надо защитить. Например: файлы пользователей. B) Объекты управления: то, что защищает объекты защиты. Например: i-node (индексные дескрипторы). C) Смешанные объекты: объекты, подпадающие под обе категории. Например: файл пароля. С таким списком в руках становится возможным графически воспроизвести всю иерархию управления и определить вероятные пути взлома. Очень действенно и создание диаграмм для визуализации возможного прерывания связей. Найти необходимую информацию можно в различных пользовательских, операторских и администраторских мануалах. Довольно полезным может оказаться и изучение исходного кода. Для тех, кто пользуется нелицензированными продуктами, советуем использовать дистрибутивы LINUX, NET2 и BSD386. В будущем, возможно, станет реальностью рабочий контракт между отдельным лицом или компанией, обладающими легальными дистрибутивами, и другими участниками этого проекта. Таким образом, фрагменты кода могут быть использованы в учебных (академических) целях постольку, поскольку они не используются для извлечения прибыли — впрочем, это необходимо проверить. Этап 2 Создание списка возможных дефектов (то есть предполагаемых дефектов). Хронология кода В чем состоит различие версий UNIX? Это бывает важно при создании перекрестных ссылок (очень часто некий продавец вносит в пакет изменения, а его версия получает широкое распространение). Жесткая перекрестная ссылка Командой who проверьте OS на наличие ошибок и установите, какая версия поможет вам избежать двойной работы. Хорошо бы сначала вывести полный список всех suid-бинаров вразличных версиях OS. Затем попытайтесь выяснить причину определения suid к каждой конкретной программе. Например: rcp имеет корневой suid, потому что использует привилегированный порт для установления аутентичности пользовательских имен. Часто код, изначально созданный не как suid, функционирует именно как suid, манипулируя каналами для разрешения проблем с доступами файлов. Хорошо бы разработать базу данных, которая бы сравнивала парные и тройные данные, как-то: название программы, suid, sgid, объект обращения (почему данная программа работает под suid/sgid), версия OS и ее происхождение. Этап 3 Проверка предположений. (Тестирование системы на предмет обнаружения дефектов). Этап 4 Обобщение полученной информации с акцентированием специфических проблем данной системы.
|