Обзор эксплоитовАндрей Комаров (komarov@itdefence.ru) На дворе месяц май, но мучения разработчиков в эту весеннюю пору не ослабятся. Наряду с ними мучиться будут и пользователи. С помощью свежей XSS всего за пару часов были украдены более 5000 аккаунтов «Вконтакте.ру». Последняя STABLE-версия ядра Linux страдает от повышения привилегий, известные брендовые железки CISCO ASA/PIX некорректно справляются с фрагментированными TCP-пакетами, а в последней версии PHP 5.2.9 появились новые способы обхода safe_mode и open_basedir. Впечатлен? Впрочем, апрель также был не слишком ровным. За тот месяц Microsoft выпустила 8 важнейших бюллетеней по безопасности, пять из которых имеют критический урон по безопасности (MS09-009, MS09-010, MS09-013, MS09-014, MS09-011). Обход ограничений в PHP 5.2.9BRIEFЗадача обхода safe_mode и open_basedir крайне актуальна (например, это существенно ограничивает действия хакера, даже при наличии загруженного веб-шелла). По сути, уязвимость была найдена в стороннем продукте - библиотеке libcurl, которую поддерживает PHP. Curl - известное средство для взаимодействия с сетью и соответствующими протоколами часто применяется при написании клиент-серверных приложений и в портированном виде присутствует практически в любом языке программирования. Рассмотрим простой пример кода:
Вызов подобной функции подразумевает под собой следующее. Сначала Curl обращается к данным включенного safe_mod/open_basedir и проверяет их правилами «file:////etc/passwd». Замечу, что реальный файл – «./file:/etc/passwd», просто в параметрах функции мы умышленно поставили лишние слеши. Как ни странно, после такой махинации с целевой системы все равно локально будет считан файл «file:////etc/passwd» (он же /etc/passwd). Фишка некорректного распознавания может привести к очень неприятным последствиям. EXPLOITВ Сети был обнаружен абсолютно невнятный код эксплойта от SecurityReason (securityreason.com/achievement_exploitalert/11) в шифрованном виде и нерабочем состоянии. Невольно напрашивается небольшое объяснение. Итак, воссоздаем следующую иерархию папок («file:» в данном случае является папкой):
Делаем сценарий такого рода:
TARGETSphp 5.2.9 SOLUTIONПока никакого патча не вышло. Остается лишь полагаться на возможности безопасного режима PHP и использовать дополнительные средства безопасности ОС. Локальное повышение привилегий в Linux (эксплуатация exit_notify())BRIEF Эксплуатация уязвимости заключается в отсылке системных сигналов дочернему процессу (уже имеющему suid). Системных сигналов или сообщений существует очень много; наряду с ними есть еще некие «способности» (capabilities). По сути, это привилегии программ совершать какие-либо действия: открывать RAW-сокет, изменять владельца файла, перезагружать компьютер, подгружать модули ядра и так далее. Естественно, многие из этих «способностей» и близко не нужны в штатном софте, иначе из них получается настоящее оружие либо злонамеренный софт для удержания привилегий в системе (или наоборот - порчи чужого имущества).
Кое-какие из этих возможностей будет полезно контролировать. Одно из средств, организующих контроль – это LIDS (Linux Intrusion Detection System). Оно представляет собой патч ядра, значительно повышающий безопасность при работе с ОС (читай – аналог проекта grsecurity, не так давно описанного на страницах ][). Занимательная особенность LIDS в том, что нацелен он не совсем на контроль действий пользователя (это можно сделать и штатными средствами Linux) и даже не на обнаружение сетевых аномалий, а на предотвращение инцидента, когда злоумышленнику уже удалось пробраться в систему и даже получить привилегии root'a. По сути, это защита от нежелательных «root»-действий, которые может выполнить хакер, захватив систему. Ты заранее определяешь те действия, которые, даже будучи пьяным, никогда не попробуешь исполнить. И отключить модуль можно, только введя добавочный пароль, установленный администратором. Однажды, изучая возможности этой системы, я решил пошутить над своим коллегой – запретил перезагрузку системы (отключение CAP_SYS_BOOT). Происшедшее долго приводило в недоумение его вместе с коллективом. При настройке конфигурации системы ты просто отмечаешь в конфигах LIDS эти пункты плюсами и минусами, после чего перезагружаешься. CAP_KILL включает либо отключает способность root'овых процессов убивать чужие процессы и, соответственно, преодолевает существующие ограничения на отправку системных сигналов. Ошибка содержится в функции exit_notify() ( EXPLOITСкачать эксплойт можно, скажем, с нашего сайта по ссылке – http://www.xakep.ru/post/47784/Linux-Kernel-Local-Privilege-Escalation-Exploit.txt. TARGETSРеализуется практически на всех редакциях Linux с kernel <2.6.29, в том числе, достаточно защищенных дистрибутивах вроде Trustix Secure Enterprise Linux 2.0, Trustix Secure Linux 2.2, Trustix Secure Linux 2.1 , Trustix Secure Linux 2.0. Исключение составляет Linux kernel 2.6.29 -git14. SOLUTIONУязвимость устраняется модификацией исходного кода ядра в соответствующей функции:
Раскрытие хэшей паролей в Oracle APEXBRIEFAPEX - известный проект Oracle, ранее называвшийся Oracle HTML-DB, предназначен для создания WEB-приложений и используется в качестве фреймворка. Для этого он устанавливается в непосредственной связке с СУБД Oracle, Apache или встроенным WEB-сервером в некоторые редакции Oracle Database (Express Edition, к примеру) Embedded PL/SQL Gateway (EPG). Проблема в том, что пользователь с недостаточными для этого правами может обратиться к специально зарегистрированным приложением таблицам, после чего – напрямую запросить данные других пользователей. EXPLOITВыполнить подключение к базе или получить возможность использования запросов к ней - вот одна из наиболее важных задач для реализации уязвимости. Традиционно в качестве средства подключения к Oracle можно использовать sqlplus (oracle.com/technology/tech/sql_plus/index.html).
Полученные хэши могут быть проанализированы с помощью утилит вроде Repscan. TARGETSВерсии базы с подключенным Oracle APEX. SOLUTIONКомпания своевременно выпустила набор исправлений «Oracle CPU April 2009». Переполнение кучи в MS SQL Server sp_replwritetovarbinBRIEFПереполнение найдено в одной из процедур MS SQL Server. Уязвимость позволяет пользователю вызывать отказ в обслуживании либо исполнить произвольные команды на удаленной системе путем вызова бажной процедуры с аномальными параметрами, которые запишут данные за границами буфера. TARGETПодверженные продукты: Microsoft SQL Server 2000 SP4, 8.00.2050, 8.00.2039 и еще более ранние версии, SQL Server 2000 Desktop Engine (MSDE 2000) SP4; SQL Server 2005 SP2 (+9.00.1399.06 включительно), SQL Server 2000 Desktop Engine (WMSDE). EXPLOITБоевой код эксплоита оформлен в виде ASP-приложения, которое организует четыре запроса для записи четырех байтов в участок памяти, пригодный для этого, а затем использует это адресное пространство для перезаписи указателя функции. Важно понимать, что эксплоит не имеет никакой ценности, если хакер не является доверенным пользователем. В дефолтовой конфигурации заявленная хранимая процедура доступна каждому авторизированному в базе пользователю. Для того, чтобы это исправить, можно выполнить следующий запрос на T-SQL:
Мы удалим хранимую процедуру. Если не хочешь так поступать, можно просто ее отключить:
Проверить наличие уязвимости можно следующим сценарием на T-SQL:
Если она, правда, имеется, – ты получишь ошибку невозможности обработать исключение по адресу «0x41414141». SOLUTIONУязвимость не качается MS SQL Server 2008. В свою очередь, Microsoft присвоила уязвимости идентификационный номер «MS09-004» (microsoft.com/technet/security/advisory/961040.mspx), дополнительную инфу по которому ты сможешь найти в два клика. Более подробно почитать об отключении хранимых процедур можно здесь («Removing an Extended Stored Procedure from SQL Server» - msdn.microsoft.com/en-us/library/aa215995(SQL.80).aspx). ESET NOD32 – обход анализаBRIEFЗачастую сами же средства безопасности содержат в себе уязвимости. Например, драйвера современных антивирусных проектов кишат ошибками при обработке исключений, а также в реакции на внедрение аномалий. Тут и Kaspersky Internet Security (kl1.sys), и Defence Wall (dwall.sys), Avira Premium Security (avgntflt.sys), BitDefender Total Security 2009 (bdfndisf.sys), ZoneAlarm Security Suite (srescan.sys), Panda Global Protection 2009 (APPFLT.SYS), Internet Security 2009 (fsdfw.sys). Названные объекты были поражены с помощью фаззинга IOCTL-запросов с любыми методами ввода-вывода (о которых я не так давно упоминал, описывая уязвимость в драйвере PGP). Сейчас же тема в другом. Любой антивирус поддерживает определенное количество архивных форматов файлов (RAR, ZIP, LHA и т.д.). Библиотеки для распаковывания таких файлов разработчики антивируса часто пишут сами, и вот они-то могут быть подвержены уязвимостям. В докладе нас будут интересовать именно распаковщики архивных форматов файлов. В качестве методики проверки уязвимостей мы будем использовать генерацию данных. Методы генерации можно разделить на интеллектуальные, когда у нас есть спецификация тестируемого формата файлов, и неинтеллектуальные – когда подразумевается, что мы ничего не знаем о тестируемом формате. EXPLOITКак правило, при использовании неинтеллектуального метода генерации нужно, чтобы до начала процесса генерации у нас был неиспорченный (исходный) файл.
Сначала скрипт добавляет 4 нулевых байта в выходной буфер. Затем добавляются еще 4 байта (0x41424344). После завершения блока 4 первых нулевых байта заменяются размером блока в ascii-формате. На выходе получаются следующие данные: 4ABCD. После того, как мы разработали линейное представление формата файла в виде SPIKE скрипта, мы можем пометить некоторые части скрипта как «переменные»: SPIKE содержит наборы чисел и строк (так называемые «плохие значения»), которые могут вызвать сбои в тестируемых программах, например, числа: 0, -1,4294967295,0,0x40000000,0x7fffffff и т.п., строки «%n%n%n%n","\x00","../../../../../», строки из символов 'A' разной длины. В процессе генерации данных SPIKE заменяет очередную «переменную» числом или строкой из набора плохих значений, и те, вместо числовой переменной SPIKE, будут по очереди подставлять 0, -1, потом 4294967295 и т.д. После каждой такой замены SPIKE записывает выходные данные в очередной файл. Для того чтобы не дискредитировать развитие VX-кодеров и, соответственно, вендоров антивирусных компаний, намекаю на то, что подобной «едой» для антивируса можно завести его в бесконечный цикл или отказ в обслуживании. Это наблюдается и в NOD32 со всеми последними обновлениями. Схожие уязвимости были обнаружены в:
Поэкспериментировать советую с фаззингом следующих форматов файлов: Zip, Zip SFX, ARJ, ARJ, SFX, TAR, GZ, ZOO, UUEncode, TNEF, MIME, BINHEX, MSCompress, CAB, CAB SFX, LZH, LZH SFX, LHA, RAR, RAR SFX, JAR, BZ2, Base64, Mac Binary, ASPack, CHM, DOC, EML, EXE, FSG, HLP, PDF, Yoda, ELF, PPT, OPD. Забавный пример – давным-давно антивирус F-Pot не анализировал запароленные ZIP-архивы. Это было очень легко отследить, потому что письма с аттачами, проходившие через продукты F-Pot (E-mail Gateway scanner, к примеру), приходили получателю с модифицированной темой, к которой добавлялась строка «Attachment not scanned». TARGETS
SOLUTIONУязвимость обнаружена Тьери Золлером (blog.zoller.lu), но подробности были раскрыты непосредственно только вендору. Удивительно, но реакция ESET оказалась достаточно хорошей (выпуск обновления по истечении 14 дней - eset.com/support/updates.php?pageno=3), что говорит о готовности компании соблюдать рамки SDL и поддерживать безопасность продуктов. |