Как я нашел 0-day в ОС Windows

Как я нашел 0-day в ОС Windows

В 2010 году после обнаружения Stuxnet и уязвимости CVE-2010-2568 я впечатлялся красотой данной уязвимости и решил проверить: а не осталась ли где-либо еще возможность запустить произвольный код при обычной работе пользователя из dll?

Автор: Марков Павел (http://habrahabr.ru/users/0xA0/)

В 2010 году после обнаружения Stuxnet и уязвимости CVE-2010-2568 я впечатлился красотой данной уязвимости и решил проверить: а не осталась ли где-либо еще возможность запустить произвольный код при обычной работе пользователя из dll?

Как точку отсчета начал изучать возможность выполнить произвольный код при помощи ярлыков в контексте процесса explorer.exe. Для этого я взял программу API-monitor (в принципе можно было любой отладчик взять) и стал контролировать API-функции в explorer.exe, которые могут выполнять код (CreateProcess,WinExec,LoadLibrary) и стал смотреть не проскочит ли где-либо наша библиотека.

Рисунок 1: настраиваем фильтр API-monitor на конкретные API-функции

Для тестов была написана библиотека(dll),содержащая в себе ресурс (иконку) и код

BOOLWINAPIDllMain(
_In_HINSTANCEhinstDLL,
_In_DWORDfdwReason,
_In_LPVOIDlpvReserved
)
{
WinExec("cmd.exe",SW_SHOW);
return true;
}

И в один прекрасный момент я увидел в API-мониторе следующее:

Рисунок 2: результаты работы API-monitor

Давайте разберёмся что же произошло. Происходил вызов библиотеки при попытке сменить значок для каталога (для файлов или ярлыков вызов библиотеки происходил безопасным образом при помощи LoadLibraryEx) и выборе в качестве источника нашей библиотеки. Причем менять значок было даже не обязательно! Всё это приводило к выполнению кода, заложенному в тестовой dll. В результате можно было наблюдать следующую картину:

Рисунок 3: код из тестовой dll отработал

Видео демонстрацию можно посмотреть ниже:

Саму уязвимость я обнаружил в том же 2010 году. И за это время я так и не смог найти каким образом можно автоматизировать использование уязвимости без активного взаимодействия с жертвой. Единственный вариант использования, который я вижу – социальная инженерия.

Уязвимость присутствует в ОС Windows XP\7. В Windows 8 уязвимости уже нет.

Вывод можно сделать следующий: даже если появилась информация о закрытой уязвимости, то не поленившись и «покопав» в том же направлении можно найти 0-day даже у ведущих вендоров!

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!