Защитись и замети! Коваленко Дмитрий aka Ingrem Спецвыпуск Xakep, номер #045, стр. 045-068-4 4. Если проверить или явно указать длину данных нельзя – контролируй переполнение с помощью canary word. 5. Думай головой, а не... [вырезано цензурой]. Часть 2. Не забывайте закрывать за собой… двери. Do it! Зачем нам это надо? Что за топот?.. Это разработчики прочитали первую часть и побежали писать безопасные программы ;-) Остались только мы с тобой. Что ж, теперь можно расслабиться и поговорить о чем-то приятном. Например, о том, как закрыть уязвимость в программе, не имея ее исходников. Допустим, ты написал эксплоит и успешно атаковал удаленную систему. Теперь у тебя над ней полный контроль. Что дальше? А дальше первым делом нужно избавиться от возможных конкурентов. Ведь дыра, через которую ты влез, никуда не делась! Через нее следом за тобой может спокойно влезть еще кто-то. Или ее найдет сисадмин той же удаленной системы. Тебе это надо? Нет! Значит нужно дыру закрыть. Каждая дырка, найденная в чужой программе, требует тщательного исследования и творческого подхода. Поэтому, если хочешь чему-то научиться, нужно практиковаться. Вот мы сегодня и попрактикуемся. А в качестве жертвы выберем наиболее популярный архиватор... Что значит какой? Конечно, WinRAR! Для работы нам понадобятся Soft-Ice, IDA и HIEW. Исследование WinRAR 3.0 Известно, что WinRAR версий 3.1 и ниже уязвим. Если подсунуть ему архив, в котором содержится файл с расширением, содержащим больше 260 символов, можно вызвать переполнение буфера. Переполнение происходит в модуле winrar.exe при попытке отобразить содержимое такого архива в ListView. Причина – некорректная обработка длинных строк. Типичный строковой overflow. Что ж, возьмем WinRAR 3.0 rus и попробуем закрыть эту уязвимость. Сначала нужно исследовать winrar.exe и найти адрес уязвимой процедуры. На всякий случай сперва ищем в инете: может, кто-то уже исследовал дыру и опубликовал результаты. Тогда нам останется только ознакомиться с этими результатами и написать патч. Но, увы, security-порталы ограничиваются лишь общими замечаниями и советами :(. Придется выковыривать адрес уязвимости самим. Зато здесь: http://www.securityfocus.com/data/vulnerabilities/exploits/wrar310.zip нам удается скачать архив с утилитой, которую вирмейкерская группа 29A написала специально для генерации "кривых" RAR-архивов, вызывающих переполнение. Также в wrar310.zip, кроме самой утилитки, есть сгенерированный ею пример – файл 29A.RAR. Прекрасно! Теперь хоть не придется изучать внутренний формат файлов .RAR и делать "кривой" архив в HEX-редакторе вручную. Приступим. Запустим cmd.exe и посмотрим содержимое архива 29A.RAR с помощью rar.exe (не бойся, rar.exe можно пользоваться спокойно – он без дырок). Наберём в командной строке: rar l 29A.RAR. Видно, что в 29A.RAR содержится один файл нулевой длины с именем "AAAAAA.j YIQhmeu!hera hcu shSeu T..." – ну, дальше сам посмотришь, все-таки там расширение больше 260 байт ;-). Теперь запустим winrar.exe. Попробуем открыть 29A.RAR... Опа! До боли знакомое окошко: |