Лопнуть как мыльный пузырь Vint (vint@glstar.ru) Спецвыпуск Xakep, номер #045, стр. 045-004-3 Где используется переполнение буфера Найти ошибку переполнения – это только часть работы хакера. Основная же задача – написать к ней эксплоит. Обычно эксплоиты используют переполнение буфера в привилегированных программах, что в рамках архитектур означает следующее. Windows-программа запускается с правами «System» или работает в нулевом кольце защиты. Нулевое кольцо защиты – это режим максимальных привилегий процессора; ПО, которое там работает, – ядро операционной системы в Виндах, некоторые антивирусы, из-за чего они страшно глючат (подробнее о нулевом кольце защиты читай в других статьях этого номера). Конечно, самой желанной целью хакера является ошибка в сервисе из нулевого кольца, ведь эти программы работают с правами «System», что гораздо выше стандартного "Администраторы". В системах *nix все аналогично, за исключением того что ядро работает не в ring0. Стараются найти программу, имеющую такую ошибку и при этом работающую с высокими привилегиями, например, запущенную от root-пользователя. Или еще один вариант – баги в программах, у которых установлен бит SUID/SGID, а сами файлы принадлежат root’у. Именно таких программ очень много, и часто они приводят к взлому *nix. Как видишь, у систем отличаются только цели атаки, а сами атаки проходят по одному и тому же принципу. Как используются бреши в ПО? Мы продолжаем наше исследование атак переполнения буфера. Подмена адреса возврата в привилегированной программе является следствием удачного переполнения буфера. Обычно новый адрес содержит ссылку на функцию, которая вызывает командный интерпретатор (shell) системы с высокими привилегиями. Для Виндов вызывается на выполнение всем известная cmd, а для *nix – /bin/sh. На этом работа эксплоита закончена, ошибка переполнения буфера была использована. Дальнейшие действия, как атакующего, так и системы, уже не имеют отношения к нашей теме. Теория атаки Переполнение буфера – одна из самых критических ошибок в ПО. Хотя она полностью изучена и документирована, багтрак-сайты снова и снова пестрят сообщениями об очередном buffer overflow. А причина устойчивости этой уязвимости кроется в самой архитектуре системы. Можно смело говорить о большой вероятности переполнения буфера, если система обладает следующими параметрами: |