(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Эксперты "Лаборатории Касперского" разгадали очередную загадку троянца Duqu

Источник: SecureList

В поисках решения

В предыдущем блогпосте про Фреймворк Duqu я писал про одну из нерешенных нами задач - определение языка, на котором написан необычный код, отвечающий за общение Duqu с C&C серверами. Нам, техническим специалистам, задача показалась очень интересной, и мы решили предложить IT-сообществу поучаствовать в ее решении.

Мы получили намного больше ответов, чем ожидали - более 200 комментариев и 60+ писем с указанием различных языков и фреймворков, которые могли быть использованы при создании кода Фреймворка Duqu. Мы хотим поблагодарить всех, кто участвовал в решении и помогал идентифицировать загадочный код.

Самыми популярными вариантами, которые вы предложили, были:

  • LISP (различные диалекты)
  • Forth
  • Erlang
  • Google Go
  • Delphi
  • OO C
  • Старые компиляторы C++ и других языков

Несколько комментариев оказались особенно полезными, благодаря им мы нашли решение, которое считаем верным.

Мы также получили два письма, в которых Pascal Bertrand и другой автор, пожелавший остаться анонимным, предположили, что код Фреймворка Duqu был создан с помощью одного из объектно-ориентированных диалектов языка С, называемых обычно "OO C".

Все эти комментарии оказались очень важными, они позволили точно определить компилятор, который был использован авторами Duqu, - компилятор из поставки Microsoft Visual Studio. После нескольких экспериментов с различными версиями MSVC и опциями компиляции мне удалось воспроизвести код функции конструктора, о котором я писал в предыдущем посте, и получить из этого кода бинарный код, совпадающий с найденным в Duqu.


Результат дизассемблирования кода Duqu: функция конструктора класса связного списка


Восстановленный вручную код этой функции на языке С

При компиляции указанного выше кода на С с помощью компилятора из поставки MSVC 2008 с опциями /O1 (оптимизация по размеру) и /Ob1 (разворачивать только __inline функции) получается машинный код, совпадающий с оригинальным кодом этой функции в Duqu. Следует заметить, что другие опции компиляции, а также изменение порядка операции и if/else блоков изменяет конечный код; компилятор MSVC 2005 также генерирует другой код. Из этого следует, что, скорее всего, Фреймворк Duqu был скомпилирован MSVC 2008 с опциями /O1 /Ob1 из исходного текста на языке С.

Благодаря полученным данным мы можем выделить два наиболее вероятных решения исходной задачи:

  1. Код был написан с использованием объектно-ориентированной надстройки С, основанной на макросах или стороннем препроцессоре. Это решение было предложено и в ваших комментариях, т.к. это стандартный способ реализации объектно-ориентированного подхода в С.
  2. Код был написан на чистом С с использованием объектно-ориентированных методов. Мы не можем полностью отрицать этот вариант, т.к. технически почти невозможно отличить препроцессор от программиста, практикующего разработку в режиме копирования/вставки.

Насколько мы можем судить по количеству однотипного кода в конструкторах и других функциях, все же использовался препроцессор, т.е. вариант 1 более вероятен.

В настоящее время существует несколько "ОО С" фреймворков с открытым исходным кодом, причем некоторые из них генерируют код, близкий к коду Duqu. Наиболее похожий код создается с помощью SOO (Simple Object Orientation for C), однако вряд ли именно он был использован - проект появился в то время, когда Duqu уже атаковал первые компьютеры-жертвы.

Независимо от того, какой из вариантов решения является правильным, можно сделать определенные выводы. В Payload DLL содержится 95 Кб событийно-ориентированного кода, написанного на ОО С, - языке без автоматического управления памятью, с небезопасными указателями. Подобный стиль программирования присущ серьезным "гражданским" программным проектам, но не встречается в современном вредоносном ПО. Более того, событийно-ориентированная модель была разработана как часть Duqu или его ОО расширения С.

Трудно однозначно определить причины использования ОО С вместо С++. Мы попробовали найти причины этого, опираясь на описания других ОО С проектов и пообщавшись с профессионалами, использующими подобные методы разработки. Наиболее вероятными причинами представляются:

  1. Недоверие к компиляторам С++. Это типично для разработчиков с многолетним опытом, которые начинали с ассемблера, а затем постепенно перешли на С. Когда появился С++, многие отказались от его использования из-за неявного управления памятью и запутанных конструкций, вызывавших неявное выполнение кода (конструкторы, операторы и т.п.).
  2. Широкая переносимость. Многие годы не было общего для всех компиляторов стандарта С++, возникали проблемы совместимости с компиляторами различных производителей. Если нужно было обеспечить компилируемость различными средствами разработки под несколько платформ, нужно было использовать С.

Обе причины явно указывают, что код Фреймворка был написан разработчиками "старой школы" с многолетним опытом работы.

Выводы

  • Фреймворк Duqu был написан на C и скомпилирован с помощью MSVC 2008 с опциями "/O1" и "/Ob1".
  • При разработке, скорее всего, использовалось собственное объектно-ориентированное расширение языка С, обычно называемое "ОО С".
  • Событийно-ориентированная архитектура была разработана как часть Фреймворка или в рамках расширения ОО С.
  • Код общения с C&C мог быть позаимствован из другого программного проекта и затем адаптирован к задачам проекта Duqu.

Мы полагаем, что разработка велась профессионалами, использующими наработки программистов "старой школы". Подход, который использовали авторы Duqu, обычно встречается в серьезных программных проектах, и почти никогда - во вредоносных программах. Это ещё раз указывает на то, что Duqu, как и Stuxnet, - уникальная разработка, выделяющаяся на фоне всех вредоносных программ.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 20.03.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Kaspersky Endpoint Security для бизнеса – Стандартный Russian Edition. 10-14 Node 1 year Base License
Kaspersky Internet Security для всех устройств. 2-Device 1 year Base Download Pack
Kaspersky Internet Security для всех устройств. 3-Device 1 year Base Download Pack
Quest Software. TOAD Xpert Edition
Quest Software. TOAD for Oracle Edition
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Один день системного администратора
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Сайт инструмент (1)
Я бывший программист пользовался 1 сайтом проверенным он мне действительно помог я блогодоря...
 
Где взять лицензионный ключ для AllFusion Process Modeler (BPwin) 7? (5)
Выручайте!!! где найти ключ, ужасно срочно нужна программа. заранее спасибо!
 
Фотоколлаж (1)
Приветик всем. Хотите из обычной фотографии получить смешную и увлекательную картинку? Если есть...
 
работа на дому! (5)
Доброго времени суток дорогие друзья. Многоуровневый маркетинг окончательно признан...
 
Интерактивная 3d визуализация (2)
Нужны специалисты по интерактивной 3d визуализации.
 
 
 



    
rambler's top100 Rambler's Top100