В прошлом месяце мы писали о кампании по распространению вредоносного ПО «Home Campaign». Злоумышленники на протяжении длительного времени компрометировали веб-серверы, работающие под управлением Apache Linux, используя при этом вредоносный модуль Apache известный как Darkeech (обнаруживается ESET как Linux/Chapro). Этот код использовался для перенаправления пользователей веб-сайтов на набор эксплойтов Blackhole Exploit Kit. В процессе анализа атаки выяснилось, что ее полезной нагрузкой было семейство вымогателей (ransomware) Win32/Nymaim. Данный анализ посвящен техническим особенностям этой вредоносной программы и способам ее установки на компьютеры пользователей.
![](https://habrastorage.org/r/w780q1/storage3/1f5/21e/f7c/1f521ef7cd09eb7d72f9396315bf7ca8.jpg)
Заражение
Метод, через который пользователи заражаются Nymaim, приведен ниже на рисунке. Как мы уже рассказывали ранее, он заключается в посещении пользователем скомпрометированного веб-сервера, через который доставляется веб-страница с вредоносным кодом. В случае с Nymaim результатом посещения такого ресурса становится заблокированный компьютер пользователя. Для загрузки основного кода Nymaim используется широко известный даунлоадер «Pony Loader» (обнаруживается ESET как Win32/Fareit).
![](https://habrastorage.org/r/w1560/storage3/5c3/3f5/e29/5c33f5e297131c758f1a476a0fe5f4f3.png)
Для поддержания видимой легитимности своего исполняемого файла Fareit снабжен информацией о цифровой подписи.
![](https://habrastorage.org/r/w1560/storage3/5a2/bed/8de/5a2bed8de17364b098dda4b87da5cb77.png)
Такой атрибут семплов Fareit дал нам возможность сгруппировать необходимые семплы для анализа. Анализируя их, мы выяснили, что домен catch-cdn.com был использован этим вредоносным кодом для извлечения дропперов Nymaim, который устанавливался затем на скомпрометированные компьютеры. Мы наблюдали загрузку файла с одним и тем же именем 6.exe, который в разные промежутки времени представлял из себя дроппер Win32/Sirefef (aka ZeroAccess), Win32/Urausy (Win32/LockScreen) и Win32/Nymaim. На следующем рисунке представлена временная шкала распределения вредоносных программ, которые загружались по этому статическому URL-адресу.
![](https://habrastorage.org/r/w1560/storage3/50f/c54/bfe/50fc54bfe64d4c00b1e15aa15b2fd07d.png)
Алгоритм, по которому производилась смена этих семейств вредоносных программ на сервере, нам не совсем ясен. Мы отмечали, что семплы Urausy были доступны для загрузки первую половину июля. Sirefef появился в начале августа, а Nymaim появлялся регулярно на всем промежутке фиксируемого времени.
Технические характеристики
Процесс заражения Win32/Nymaim можно разбить на два этапа. На первом этапе даунлоадер пытается скачать основное тело Nymaim обращаясь к списку жестко зашитых IP-адресов. После того как закачка окончена, этот код переименовывает свой файл в произвольное имя. На каждом из этих этапов вымогатель использует несколько общих методов, чтобы помешать его анализу.
Один из таких методов – обфускация потока исполнения кода (control flow obfuscation). Вредоносный код вручную модифицирует стек вызовов для передачи управления на нужную функцию, скрывая таким образом истинные переходы между функциями при статическом анализе.
![](https://habrastorage.org/r/w1560/storage3/696/af0/086/696af00867db4af5199916cb5d4d5a5b.png)
На скриншоте выше выделены два метода обфускации. Первый заключается в вызове функции, которая модифицирует значение на стеке материнской функции в зависимости от передаваемого параметра. Более подробно такой способ представлен ниже.
![](https://habrastorage.org/r/w1560/storage3/0be/503/40e/0be50340e3085685edd33245536a455f.png)
В зависимости от переданного в функцию аргумента (0x34, 0x35, 0x36), производится модификация содержимого на стеке одним из регистров, что равносильно простой команде push reg. Например в случае аргумента 0x34, получим push ecx.
Второй метод обфускации используется в функции ниже и предназначен для скрытия истинных адресов вызываемых функций. Ниже видно, что передаваемый в функцию аргумент будет использован как смещение при вызове другой функции, т. е. используется как константа для расчета требуемого адреса.
![](https://habrastorage.org/r/w1560/storage3/610/77c/03f/61077c03f309596c16e4c7af7eec9a19.png)
Как видно по этому коду, функция использует две константы, передаваемые ей в качестве аргументов, для расчета необходимого смещения с применением операций XOR и ADD. Далее выполняется сохранение результата этой операции на стеке, причем модифицируется значение адреса, используемого функцией retn для передачи управления в вызывающую функцию. Таким образом будет вызвана новая функция.
![](https://habrastorage.org/r/w1560/storage3/ac2/bc6/d09/ac2bc6d09dff544b704742b2533791d8.png)
Еще один тип обфускации, используемый в Nymaim, относится к вызову Win32 API функций. Когда вредоносному коду необходимо вызвать нужную функцию из DLL, то он считывает базовый адрес этой DLL из зашифрованной секции данных. Адрес функций вычисляется по заранее подготовленным хэшам имен этих функций. Ниже показан код функции, которая вычисляет хэш имени функции. Затем он используется для сравнения.
![](https://habrastorage.org/r/w1560/storage3/652/598/9ca/6525989ca6eb8803148bb5c6639c5ba3.png)
Когда адрес функции найден, он сохраняется в памяти и далее используется в различных местах кода с использованием инструкции перехода. Еще одной особенностью является тот факт, что при возврате из API, поток исполнения переходит не к вредоносному коду, а к инструкции в ntdll.dll call EBX. Непосредственно перед вызовом API, Nymaim выполняет модификацию стека таким образом, чтобы после выхода из API поток исполнения переключился бы на ntdll.dll, а EBX, в свою очередь, будет содержать настоящий адрес возврата. Более понятно этот процесс показан ниже на рисунке.
![](https://habrastorage.org/r/w1560/storage3/2be/4f5/26c/2be4f526c871d96fbf4b1577e86f5263.png)
Подобные манипуляции позволяют Nymaim затруднить отладку, особенно, при пошаговом исполнении (трассировке). Корректируемый на стеке адрес возврата препятствует исполнить функцию в отладчике «до возвращения из функции».
Nymaim использует шифрование строк. Функция расшифровки выглядит как показано ниже.
![](https://habrastorage.org/r/w1560/storage3/652/598/9ca/6525989ca6eb8803148bb5c6639c5ba3.png)
На втором этапе своего исполнения Win32/Nymaim использует схожие методы обфускации, но функциональность кода расширена для обеспечения выживаемости после перезагрузки и блокирования экрана. Вредоносный код использует обычную практику автозапуска прописывая себя в Software\Microsoft\Windows NT\CurrentVersion\Winlogon\shell.
Наш анализ показал, что в некоторых ситуациях Win32/Nymaim на второй стадии своего исполнения осуществляет установку на скомпрометированный компьютер другой угрозы, а именно Win32/Sirefef. Кроме этого, в дальнейшем, Nymaim может загрузить на компьютер и другие троянские программы.
Основной задачей Nymaim является блокирование компьютера. Для этого осуществляется загрузка HTML-страницы с информацией о блокировке. Такая гибкость позволяет злоумышленникам отображать различные запугивающие пользователя страницы, например, в зависимости от его расположения или установленного у него ПО (например, каких-либо медиа-файлов или торрент-клиента). В результате информация экрана блокировки становится очень правдоподобной для пользователя. Для этого в системе пользователя выполняется поиск следующих запущенных процессов.
Кроме этого, Nymaim осуществляет поиск файлов со следующими расширениями: .doc, .xls, .psd, .bmp, .jpg, .mpg, .mov, .rtf, .fla и .mp3. Собранная информация будет храниться в файле compdata.js, который позднее будет включен в HTML-код блокировки. Пример такого файла приведен ниже.
![](https://habrastorage.org/r/w1560/storage3/997/d4d/047/997d4d047d1544ca27c121da35b501af.png)
Вспомогательные файлы, которые используются для блокировки, а именно, HTML-код, скрипты и файлы изображений экрана хранятся в директории «Documents and Settings\[user_name]\Local Settings\Temp» (Windows XP). Для блокировки системы, вымогатель создает окно размером на весь экран и порождает два специальных потока. Один из которых будет отслеживать запущенные процессы и завершать стандартный диспетчер процессов taskmgr.exe в случае его запуска. Второй поток отслеживает появление новых рабочих столов, которые могли бы перекрыть активный «вредоносный» и выполняет переключение обратно в случае их появления. Подобное поведение похоже на поведение вымогателя Urausy, который был описан аналитиками AVAST. Ниже показан внешний вид обложки для пользователей, расположенных в США.
![](https://habrastorage.org/r/w1560/storage3/50e/fab/c93/50efabc93debb3869bef7bdcb0c9edb9.png)
Вымогатель взаимодействует с удаленным сервером направляя ему bot ID. Сервер может прислать обратно некоторые инструкции по выполнению вспомогательных операций. Bot ID генерируется на основе значения HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid. Сервер может не отправить страницу блокировки боту, если бот с таким ID уже находится в базе сервера.
Заключение
Отслеживаемая нами «The home campaign» осуществляет доставку вымогателя Win32/Nymaim с марта 2013 года. Как мы указали в нашем исследовании, злоумышленники используют и другие семейства вредоносного кода для компрометации пользователей. Ниже представлена схема, демонстрирующая этапы компрометации системы пользователя в такой кампании.
![](https://habrastorage.org/r/w1560/storage3/248/e2d/1a9/248e2d1a9b463d18e64d6a023b1d4ce2.png)
![](https://habrastorage.org/storage3/1f5/21e/f7c/1f521ef7cd09eb7d72f9396315bf7ca8.jpg)
Заражение
Метод, через который пользователи заражаются Nymaim, приведен ниже на рисунке. Как мы уже рассказывали ранее, он заключается в посещении пользователем скомпрометированного веб-сервера, через который доставляется веб-страница с вредоносным кодом. В случае с Nymaim результатом посещения такого ресурса становится заблокированный компьютер пользователя. Для загрузки основного кода Nymaim используется широко известный даунлоадер «Pony Loader» (обнаруживается ESET как Win32/Fareit).
![](https://habrastorage.org/storage3/5c3/3f5/e29/5c33f5e297131c758f1a476a0fe5f4f3.png)
Для поддержания видимой легитимности своего исполняемого файла Fareit снабжен информацией о цифровой подписи.
![](https://habrastorage.org/storage3/5a2/bed/8de/5a2bed8de17364b098dda4b87da5cb77.png)
Такой атрибут семплов Fareit дал нам возможность сгруппировать необходимые семплы для анализа. Анализируя их, мы выяснили, что домен catch-cdn.com был использован этим вредоносным кодом для извлечения дропперов Nymaim, который устанавливался затем на скомпрометированные компьютеры. Мы наблюдали загрузку файла с одним и тем же именем 6.exe, который в разные промежутки времени представлял из себя дроппер Win32/Sirefef (aka ZeroAccess), Win32/Urausy (Win32/LockScreen) и Win32/Nymaim. На следующем рисунке представлена временная шкала распределения вредоносных программ, которые загружались по этому статическому URL-адресу.
![](https://habrastorage.org/storage3/50f/c54/bfe/50fc54bfe64d4c00b1e15aa15b2fd07d.png)
Алгоритм, по которому производилась смена этих семейств вредоносных программ на сервере, нам не совсем ясен. Мы отмечали, что семплы Urausy были доступны для загрузки первую половину июля. Sirefef появился в начале августа, а Nymaim появлялся регулярно на всем промежутке фиксируемого времени.
Технические характеристики
Процесс заражения Win32/Nymaim можно разбить на два этапа. На первом этапе даунлоадер пытается скачать основное тело Nymaim обращаясь к списку жестко зашитых IP-адресов. После того как закачка окончена, этот код переименовывает свой файл в произвольное имя. На каждом из этих этапов вымогатель использует несколько общих методов, чтобы помешать его анализу.
Один из таких методов – обфускация потока исполнения кода (control flow obfuscation). Вредоносный код вручную модифицирует стек вызовов для передачи управления на нужную функцию, скрывая таким образом истинные переходы между функциями при статическом анализе.
![](https://habrastorage.org/storage3/696/af0/086/696af00867db4af5199916cb5d4d5a5b.png)
На скриншоте выше выделены два метода обфускации. Первый заключается в вызове функции, которая модифицирует значение на стеке материнской функции в зависимости от передаваемого параметра. Более подробно такой способ представлен ниже.
![](https://habrastorage.org/storage3/0be/503/40e/0be50340e3085685edd33245536a455f.png)
В зависимости от переданного в функцию аргумента (0x34, 0x35, 0x36), производится модификация содержимого на стеке одним из регистров, что равносильно простой команде push reg. Например в случае аргумента 0x34, получим push ecx.
Второй метод обфускации используется в функции ниже и предназначен для скрытия истинных адресов вызываемых функций. Ниже видно, что передаваемый в функцию аргумент будет использован как смещение при вызове другой функции, т. е. используется как константа для расчета требуемого адреса.
![](https://habrastorage.org/storage3/610/77c/03f/61077c03f309596c16e4c7af7eec9a19.png)
Как видно по этому коду, функция использует две константы, передаваемые ей в качестве аргументов, для расчета необходимого смещения с применением операций XOR и ADD. Далее выполняется сохранение результата этой операции на стеке, причем модифицируется значение адреса, используемого функцией retn для передачи управления в вызывающую функцию. Таким образом будет вызвана новая функция.
![](https://habrastorage.org/storage3/ac2/bc6/d09/ac2bc6d09dff544b704742b2533791d8.png)
Еще один тип обфускации, используемый в Nymaim, относится к вызову Win32 API функций. Когда вредоносному коду необходимо вызвать нужную функцию из DLL, то он считывает базовый адрес этой DLL из зашифрованной секции данных. Адрес функций вычисляется по заранее подготовленным хэшам имен этих функций. Ниже показан код функции, которая вычисляет хэш имени функции. Затем он используется для сравнения.
![](https://habrastorage.org/storage3/652/598/9ca/6525989ca6eb8803148bb5c6639c5ba3.png)
Когда адрес функции найден, он сохраняется в памяти и далее используется в различных местах кода с использованием инструкции перехода. Еще одной особенностью является тот факт, что при возврате из API, поток исполнения переходит не к вредоносному коду, а к инструкции в ntdll.dll call EBX. Непосредственно перед вызовом API, Nymaim выполняет модификацию стека таким образом, чтобы после выхода из API поток исполнения переключился бы на ntdll.dll, а EBX, в свою очередь, будет содержать настоящий адрес возврата. Более понятно этот процесс показан ниже на рисунке.
![](https://habrastorage.org/storage3/2be/4f5/26c/2be4f526c871d96fbf4b1577e86f5263.png)
Подобные манипуляции позволяют Nymaim затруднить отладку, особенно, при пошаговом исполнении (трассировке). Корректируемый на стеке адрес возврата препятствует исполнить функцию в отладчике «до возвращения из функции».
Nymaim использует шифрование строк. Функция расшифровки выглядит как показано ниже.
![](https://habrastorage.org/storage3/652/598/9ca/6525989ca6eb8803148bb5c6639c5ba3.png)
На втором этапе своего исполнения Win32/Nymaim использует схожие методы обфускации, но функциональность кода расширена для обеспечения выживаемости после перезагрузки и блокирования экрана. Вредоносный код использует обычную практику автозапуска прописывая себя в Software\Microsoft\Windows NT\CurrentVersion\Winlogon\shell.
Наш анализ показал, что в некоторых ситуациях Win32/Nymaim на второй стадии своего исполнения осуществляет установку на скомпрометированный компьютер другой угрозы, а именно Win32/Sirefef. Кроме этого, в дальнейшем, Nymaim может загрузить на компьютер и другие троянские программы.
Основной задачей Nymaim является блокирование компьютера. Для этого осуществляется загрузка HTML-страницы с информацией о блокировке. Такая гибкость позволяет злоумышленникам отображать различные запугивающие пользователя страницы, например, в зависимости от его расположения или установленного у него ПО (например, каких-либо медиа-файлов или торрент-клиента). В результате информация экрана блокировки становится очень правдоподобной для пользователя. Для этого в системе пользователя выполняется поиск следующих запущенных процессов.
- Azureus
- Utorrent
- Mediaget
- Bittorrent
- Bitcomet
Кроме этого, Nymaim осуществляет поиск файлов со следующими расширениями: .doc, .xls, .psd, .bmp, .jpg, .mpg, .mov, .rtf, .fla и .mp3. Собранная информация будет храниться в файле compdata.js, который позднее будет включен в HTML-код блокировки. Пример такого файла приведен ниже.
![](https://habrastorage.org/storage3/997/d4d/047/997d4d047d1544ca27c121da35b501af.png)
Вспомогательные файлы, которые используются для блокировки, а именно, HTML-код, скрипты и файлы изображений экрана хранятся в директории «Documents and Settings\[user_name]\Local Settings\Temp» (Windows XP). Для блокировки системы, вымогатель создает окно размером на весь экран и порождает два специальных потока. Один из которых будет отслеживать запущенные процессы и завершать стандартный диспетчер процессов taskmgr.exe в случае его запуска. Второй поток отслеживает появление новых рабочих столов, которые могли бы перекрыть активный «вредоносный» и выполняет переключение обратно в случае их появления. Подобное поведение похоже на поведение вымогателя Urausy, который был описан аналитиками AVAST. Ниже показан внешний вид обложки для пользователей, расположенных в США.
![](https://habrastorage.org/storage3/50e/fab/c93/50efabc93debb3869bef7bdcb0c9edb9.png)
Вымогатель взаимодействует с удаленным сервером направляя ему bot ID. Сервер может прислать обратно некоторые инструкции по выполнению вспомогательных операций. Bot ID генерируется на основе значения HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid. Сервер может не отправить страницу блокировки боту, если бот с таким ID уже находится в базе сервера.
Заключение
Отслеживаемая нами «The home campaign» осуществляет доставку вымогателя Win32/Nymaim с марта 2013 года. Как мы указали в нашем исследовании, злоумышленники используют и другие семейства вредоносного кода для компрометации пользователей. Ниже представлена схема, демонстрирующая этапы компрометации системы пользователя в такой кампании.
![](https://habrastorage.org/storage3/248/e2d/1a9/248e2d1a9b463d18e64d6a023b1d4ce2.png)