Анализ использования фрагментов уязвимых библиотек в исполняемом коде
Исследователи безопасности из компании Google опубликовали свои наработки в области определения использования в исполняемых файлах кода сторонних библиотек, код которых статически скомпилирован и встроен в приложение. Процедура выявления заимствованного кода имеет большое значение при анализе безопасности приложения, так как зачастую разработчики встраивают в состав своих продуктов внешние библиотеки, но не поддерживают их в актуальном виде. Код написан на языке С++ и опубликован под лицензией Apache 2.0.
Со временем поставка неактуального внешнего кода может привести к накоплению скрытых уязвимостей, уже исправленных в основных ветках разработки библиотек, но не перенесенных в интегрированные в сторонние проекты ответвления. Если в открытых проектах аудит применения стороннего кода решается достаточно просто, то в проприетарных продуктах, поставляемых только в виде исполняемых файлов, задача сводится к определению связывания на уровне анализа машинного кода.
Предложенный метод основан на применении системы машинного обучения и алгоритма SimHash для определения уровня приблизительного сходства между фрагментами машинного кода исследуемых приложений с машинным кодом реализаций функций из различных открытых библиотек. В качестве примеров практического применения метода продемонстрирован поиск кода unrar в библиотеке mpengine.dll, поиск функций libtiff в Adobe Reader и определение наличия форков libtiff и libjpeg в базовой поставке Windows 10 (следы уязвимых версий данных библиотек найдены в WindowsCodecs.dll).