Эксперты нашли неизвестный язык программирования

Впервые червь Duqu был замечен в начале сентября 2011 года. Тогда пользователь из Венгрии обнаружил один из модулей вредоносной программы и загрузил его на сайт Virustotal, позволяющий проанализировать зараженный файл антивирусными программами различных производителей.

Интересной особенностей Duqu является сходство его основного модуля со Stuxnet. По мнению экспертов, именно он использовался для заражения системы и последующей загрузки троянца. Как выяснилось, атака Duqu велась через электронную почту при помощи документа MS Word, содержащего эксплойт к неизвестной ранее уязвимости в Windows.

Впрочем, на этом сюрпризы Duqu не закончились. Одним из важнейших нерешенных вопросов, связанных с Duqu, является то, как эта троянская программа обменивалась информацией со своими командными серверами (C&C) после заражения компьютера-жертвы. Модуль Duqu, отвечающий за коммуникацию с командными серверами, является частью его библиотеки с основным кодом (Payload DLL). При детальном изучении данной библиотеки эксперты «Лаборатории Касперского» обнаружили, что часть её кода, отвечающая за коммуникацию с командным сервером, написана на неизвестном языке программирования, и назвали этот участок «Фреймворк Duqu».

(обработка событий в Фреймворке Duqu)

По словам Игоря Суменкова, эксперта «Лаборатории Касперского», а первый взгляд, Payload DLL выглядит как обычная загружаемая библиотека формата Windows PE, скомпилированная Microsoft Visual Studio 2008 (версия компоновщика 9.0). Код, расположенный в точке входа, абсолютно стандартный. Единственная экспортируемая функция под номером 1 тоже написана на MSVC++. Эта функция вызывается из PNF DLL и реализует весь функционал данной библиотеки – соединение и общение с C&C серверами, получение и выполнение дополнительных модулей троянца. Интересные детали обнаруживаются при более глубоком анализе кода, который вызывается этой функцией в процессе работы.

Содержимое секции кода Payload DLL типично для исполняемого файла, скомпонованного из нескольких исходных модулей. Секцию можно условно разделить на несколько разделов, каждый из которых соответствует одному или нескольким файлам исходного кода. Большая часть разделов присутствует в любой программе, написанной на C++, — это, например, функции стандартной библиотеки шаблонов STL, функции стандартной библиотеки языка и собственно код программы. Однако самый большой раздел, реализующий всю логику общения с C&C серверами, отличается от них во всем.

Этот раздел не типичен для C++ программ, потому что его исходный код – не C++. Код внутри раздела не обращается к другим функциям программы, написанным на C++, и не использует стандартную библиотеку языка, хотя используемые парадигмы явно указывают, что исходный текст был написан на объектно-ориентированном языке программирования. Эксперты ЛК назвали это Фреймворком Duqu.

В итоге специалисты «Лаборатории…» пришли к следующем выводам:

•   Фреймворк Duqu, возможно, написан на неизвестном языке программирования.

•    отличие от остальных компонентов Duqu, исходный язык Фреймворка— не C++, при этом использован отличный от Microsoft’s Visual C++ 2008 компилятор.

•   Событийно-ориентированная архитектура позволяет коду выполняться в разных, в том числе асинхронных средах.

•   С учетом масштаба проекта Duqu можно предположить, что Фреймворк разрабатывала отдельная команда, не связанная с авторами эксплойтов и остальных его компонентов.

•   Загадочный язык программирования — определенно НЕ C++, Objective C, Java, Python, Ada, Lua и не многие другие языки, которые мы проверили.

•   Фреймворк Duqu — одна из особенностей, значительно отличающих Duqu от Stuxnet, который полностью написан на MSVC++.

#