В 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 даже у ведущих вендоров!
Спойлер: мы раскрываем их любимые трюки