Virus Bulletin :: Как это работает: стеганография скрывает вредоносные программы в файлах изображений

  1. Лорд Мосуэла CYREN Copyright © 2016 Virus Bulletin Вступление
  2. Обзор: «Новая и улучшенная» техника сокрытия
  3. Как это устроено
  4. Шаг 1: Первоначальная установка вредоносного ПО
  5. Шаг 2: Загрузка изображения с зашифрованным сообщением
  6. Резюме
  7. Рекомендации

Лорд Мосуэла

CYREN

Copyright © 2016 Virus Bulletin

Вступление

Одна из самых коварных новых технологий запутывания, выявленных нашей исследовательской группой в прошлом году, которые, по нашему мнению, будут расти в популярности, использует новую «цифровую стеганографию», или
техника сокрытия, чтобы избежать обнаружения обычными средствами безопасности. Цифровая стеганография - это метод сокрытия файла, сообщения, изображения или видео в другом файле, сообщении, изображении или видео. В этом случае этот метод используется вредоносным программным обеспечением, широко известным как Stegoloader (определяемое CYREN как W32 / Gatak), которое является трояном или загрузчиком для кражи данных и доставки вымогателей.

Обзор: «Новая и улучшенная» техника сокрытия

Gatak / Stegoloader является хорошей иллюстрацией продолжающейся гонки вооружений между авторами вредоносных программ и вашей интернет-безопасностью. Предшественник новой техники цифровой стеганографии был замечен в Duqu [ 1 ] вредоносное ПО (обнаружено в 2011 году), которое было обнаружено для передачи зашифрованных данных, добавленных в файл изображения (.JPG). Зевс / Збот [ 2 ] вредоносная программа также использует аналогичную тактику, добавляя свой зашифрованный файл конфигурации в файл изображения для эксфильтрации. Однако эту технику оказалось легко заблокировать с помощью правил фильтрации содержимого, поскольку файл конфигурации просто добавляется к файлу изображения.

Вредоносная программа Gatak / Stegoloader, появившаяся в 2015 году [ 3 ], улучшает этот метод стеганографии - он полностью скрывает свой вредоносный код в файле изображения (.PNG). До сих пор мы видели, как эта угроза связана с инструментами взлома лицензий на программное обеспечение, которые (незаконно) используются для создания лицензионных ключей программного обеспечения (как правило, для расширения пробных версий программного обеспечения или разблокировки функций программного обеспечения без оплаты), но существует высокая вероятность того, что новые механизмы распространения будут появляются.

Как это устроено

Рисунок 1 показан пример Gatak (SHA256: 0a58b98205c8542ae0516b4fe3ff8a4a6d6e9c199ec2d4e0de0aa8f9e1290328), в котором два исполняемых файла включены в сжатый архив.

Рисунок 1: Пример Gatak с двумя исполняемыми файлами в сжатом архиве Рисунок 1: Пример Gatak с двумя исполняемыми файлами в сжатом архиве.

После выполнения файла установщика запускается инструмент взлома лицензий на программное обеспечение (1237.exe) и окно, показанное в фигура 2 отображается - используется для генерации программных ключей для конкретной программы. Конечно, вредоносная программа Gatak (9604.exe) также выполняется, но без ведома пользователя.

Рисунок 2: инструмент для взлома Рисунок 2: инструмент для взлома.

Установка вредоносного ПО сложна, состоит из множества этапов, но состоит из двух основных частей:

  1. Первоначальная расшифровка и установка вредоносной программы.
  2. Загрузка изображения и использование данных скрытого изображения для установления зашифрованной связи с сервером C & C, а также для загрузки / загрузки данных и / или других вредоносных программ.

Шаг 1: Первоначальная установка вредоносного ПО

Вредоносная программа Gatak сначала собирает свой код в память путем дешифрования девяти сегментов зашифрованного кода, встроенного в саму вредоносную программу, а затем передает свое выполнение дешифрованному коду в памяти. Рисунок 3 показывает размер и виртуальный адрес девяти частей зашифрованного кода, которые включены в три раздела вредоносных программ: .data, .adata и sync.

Рисунок 3: Размер и виртуальный адрес девяти частей зашифрованного кода, которые включены в три раздела вредоносной программы.

Ключ для расшифровки имеет размер 2 байта и жестко запрограммирован в теле вредоносного ПО. Расшифровка выполняется путем чередования двух байтов в ключе дешифрования и вычитания их из зашифрованного кода:

  1. Вычтите байт зашифрованного кода, используя ключ байта.
  2. Сдвиньте клавишу байта и используйте другую клавишу байта.
  3. Сохраните расшифрованный байт в выделенном буфере.
  4. Увеличить указатель на следующий байт зашифрованного кода.
  5. Увеличить указатель на следующий байт выделенного буфера.
  6. Цикл на # 1.

Затем расшифрованный код перестраивает себя, сначала получая местоположение блока среды процесса (PEB), используя регистр FS: [30]. Затем он получает адрес InLoadOrderModuleList (см. Рисунок 4 ), чтобы найти виртуальный адрес ntdll.dll. Эта процедура используется для создания требуемых адресов импорта API-интерфейсов ZwAllocateVirtualMemory, ZwFreeVirtualMemory и LdrLoadDll, которые используются для загрузки дополнительных библиотек DLL и извлечения из них требуемых API-интерфейсов через их хэши API.

Рисунок 4: Фрагмент кода получения InLoadOrderModuleList Рисунок 4: Фрагмент кода получения InLoadOrderModuleList.

Рисунок 5 показывает список API, собранных с соответствующими им хэшами.

Рисунок 5: Список API, собранных с соответствующими им хэшами Рисунок 5: Список API, собранных с соответствующими им хэшами.

Затем вредоносная программа получает файл ftCreationTime.dwLowDateTime из папки% USERPROFILE% зараженной системы с использованием API FindFirstFileA и сохраняет его в качестве переменной для дальнейшего использования.

Затем он получает ftCreationTime папки Windows, используя API-интерфейсы GetWindowsDirectoryA и FindFirstFileA, и пытается сравнить его с жестко заданным массивом отметки времени Windows . Если совпадение найдено, оно не заразит систему. Он также пытается определить, основана ли система на Linux с уровнем совместимости Windows (Wine), проверяя наличие следующего раздела реестра:

HKEY_CURRENT_USER \ Software \ Wine

Если этот раздел реестра существует, он не будет заражать систему, он будет завершать работу и удалять себя с помощью следующей команды (где %% - путь и имя файла вредоносной программы):

CMD / C SYSTEMINFO && SYSTEMINFO && SYSTEMINFO && SYSTEMINFO && SYSTEMINFO && DEL "% s"

Он пытается получить processID процесса explorer.exe в системе, используя комбинацию API FindWindowA и GetWindowThreadProcessId со следующими параметрами:

  • lpClassName = "Shell_TrayWnd"
  • lpWindowName = NULL

В случае сбоя этого метода он создаст процесс rundll32.exe с помощью следующей команды:

rundll32.exe shell32.dll, Control_RunDLL

Он получает идентификатор процесса только что созданного процесса с помощью API-интерфейсов CreateProcessA и GetProcessId, затем передает его выполнение внедренному коду в системном explorer.exe или недавно созданном процессе rundll32.exe с помощью API CreateRemoteThread и продолжает завершать и удалять себя. из системы.

Вредоносная программа проверяет, установлена ​​ли она уже в системе, используя следующие условия:

  • Нахождение AtomName = "1234554321" с помощью API GlobalFindAtomA
  • Открытие раздела реестра: HKEY_CURRENT_USER \ Software \ Microsoft \ [unique_string_through_hash_of_computer_name]

Как показано в Рисунок 6 вредоносная программа отправляет пошаговое обновление статуса на свой C & C-сервер.

Рисунок 6: Вредоносная программа отправляет пошаговое обновление статуса на свой C & C-сервер Рисунок 6: Вредоносная программа отправляет пошаговое обновление статуса на свой C & C-сервер.

Затем он активирует InternetOpenA с помощью User-Agent:

Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 5.1; Trident / 4.0)

и InternetOpenUrlA со следующей структурой строки URL:

Http: //207.36.---.49/report_ [HEX1] _ [HEX2] _ [COUNTER] _ [STATUS]

Куда:

  • [HEX1] - шестнадцатеричная строка имени компьютера
  • [HEX2] - это ftCreationTime.dwLowDateTime папки% USERPROFILE%
  • [СЧЕТЧИК] является счетчиком статуса процедуры
  • [STATUS] является строкой, которая представляет статус используемой процедуры.

Шаг 2: Загрузка изображения с зашифрованным сообщением

Затем вредоносная программа пытается загрузить файл изображения с одного из следующих URL-адресов:

  • Http: //www.imagesup. еть /? ди = 1514 --- 3927715
  • Http: // hostthenpost. орг / добавление / a7f5c7e67 ----- 8ff9dbfac6a3f28d3be.png

png

Рисунок 7: Загруженный файл изображения Gatak / Stegoloader, включая скрытые данные.

После загрузки файла изображения и перед тем, как перейти к алгоритму стеганографии для извлечения скрытых зашифрованных данных, вредоносная программа проходит через следующий контрольный список целостности:

  1. Он проверяет, что изображение является файлом PNG, проверяя, что заголовок начинается с байтов «0x89PNG».
  2. Он проверяет, правильно ли он инициализирует Windows GDI + через API GdiplusStartup.
  3. Он проверяет, может ли он создать объект растрового изображения для загруженного изображения для извлечения данных пикселей, используя API-интерфейсы CreateStreamOnHGlobal и GdipCreateBitmapFromStream.

Затем вредоносная программа извлекает скрытые зашифрованные данные из изображения, получая пиксельные данные изображения. Пиксельные данные служат переменными в алгоритме генератора потоков для формирования скрытых зашифрованных данных. «Данные пикселя» - это цвет пикселя в позиции (x, y) в растровом объекте. Вредоносная программа использует комбинацию API GdipGetImageHeight, GdipGetImageWidth и GdipBitmapGetPixel для получения пиксельных данных изображения.

Рисунок 8: Скрытый зашифрованный поток изображения.

Он расшифровывает зашифрованный поток на изображении с помощью алгоритма RC4 и жестко запрограммированного восьмибайтового ключа со смещением 0x19 введенного кода в файле explorer.exe или rundll32.exe (см. Описание ниже).

Описание ниже)

Рисунок 9: Начало введенного кода.

Затем он проверяет CRC32 дешифрованного потока, чтобы проверить правильность разрешенного потока. Этот разрешенный поток является шелл-кодом. Шеллкод содержит:

  • Код команды, расположенный со смещением 0x4, который инструктирует введенный удаленный код о том, как обрабатывать скрытые данные.
  • Длина (расположенная со смещением нулевого размера DWORD) и значение CRC32 (расположенное со смещением [length_of_shellcode + 4] размер DWORD) шелл-кода, который служит переменной для его функции проверки CRC32.
  • Жестко закодированный байтовый ключ (расположенный со смещением 0xb), который будет использоваться для шифрования / дешифрования передаваемого сообщения на сервере C & C вредоносного ПО.
  • Жестко закодированный идентификатор ключа байта шелл-кода изображения, расположенный со смещением 0x21.

Жестко закодированный идентификатор ключа байта шелл-кода изображения, расположенный со смещением 0x21

Рисунок 10: Скрытый дешифрованный поток изображения.

Коды команд и их описания следующие:

  • 0x10: выполнить код полезной нагрузки в памяти
  • 0x20: создать и выполнить код полезной нагрузки в [двоичный файл]
  • 0x21: создать, затем выполнить, а затем удалить код полезной нагрузки в [двоичный файл]

где [двоичный файл] имеет форму% temp% \ ~ XX [random_number] .tmp.

Код оболочки изображения - это бэкдор, который связывается со следующими серверами управления и контроля:

  • Http: //deid.sharpfans. орг / калибр / вид? присутствует = 09 --- 67
  • Http: //bpp.bppharma. ком / калибр / вид? присутствует = 09 --- 67
  • Http: //reader.lifeacademyinc. ком: 80 / поощрение / помощь указали = 85 ---- 4
  • Http: //5.135.233. 16: 80 / файл / фото ручки = 68--77
  • Http: //cod.chezsimone971. ком: 80 / поощрение / помощь указали = 85 ---- 4

Сообщение, передаваемое шеллкодом изображения, шифруется алгоритмом RC4 с добавлением 16-байтового идентификатора ключа. Идентификатор ключа служит ключом RC4 для зашифрованного сообщения. Структура дешифрованного сообщения, отправленного на сервер C & C, показана в Рисунок 11 ,

Рисунок 11: Структура дешифрованного сообщения, отправленного на сервер C & C.

  • @ Offset 0 = 16-байтовый идентификатор ключа шелл-кода.
  • @ Offset 0x10 = 4-байтовое значение CRC32, начиная со смещения 0x14 до конца сообщения.
  • @ Offset 0x14 = 16-байтовый идентификатор команды шелл-кода, сгенерированного случайным образом с помощью API-интерфейса SystemFunction036.
  • @ Offset 0x24 = 16-байтовый идентификатор функции шелл-кода, который генерируется случайным образом с помощью API-интерфейса SystemFunction036 в начале выполнения шелл-кода.
  • @ Offset 0x34 = байтовый заголовок для сообщения.
  • @ Offset 0x35 = 8-байтовый идентификатор сеанса сообщения, который инициализируется нулем при первом контакте с сервером управления и контроля.
  • @ Offset 0x3D = BOT команда.
  • @ Offset 0x3E = флаг успеха / ошибки, установлен на ноль для успешной операции.
  • @ Offset 0x3F = информационный флаг, устанавливается в единицу, если длина информации превышает 1024 байта.
  • @ Offset 0x40 = длина информации.
  • @ Offset 0x44 = начало информации.

Информация, превышающая 1024 байта, будет сжата с помощью алгоритма LZMA.

Информация, отправляемая на сервер C & C, содержит конфиденциальную информацию, украденную из зараженной системы, в следующем формате: "{" [Описание информации] ":" [Кодированная информация Base64] "}".

Рисунок 12 показывает структуру дешифрованного сообщения, полученного от C & C-сервера.

Рисунок 12: Структура дешифрованного сообщения, полученного от сервера C & C.

  • @ Offset 0 = 4-байтовое значение CRC32, начиная со смещения 4 и до конца сообщения.
  • @ Offset 4 = 16-байтовый идентификатор команды C & C-сервера.
  • @ Offset 0x14 = байтовый заголовок для сообщения.
  • @ Offset 0x15 = 8-байтовый идентификатор сеанса сообщения.
  • @ Offset 0x1D = BOT команда.

Примеры команд BOT включают, но не ограничиваются следующим:

  • 0x01 = Нет операции, просто свяжитесь с сервером C & C
  • 0x02 = Выполнить полезную нагрузку через шелл-код или [двоичный файл]
  • 0x03 = Получить системную информацию (например, InternalIP, DomainName, Processes и т. Д.)
  • 0x04 = Получить программное обеспечение установлено
  • 0x05 = Получить историю веб-браузера
  • 0x64 = Выполнить шеллкод
  • 0xDC = Получить временную метку папки Windows.

Резюме

Gatak / Stegoloader может устанавливать другие модули или вредоносное ПО для кражи конфиденциальной информации. Некоторые варианты были найдены для установки семейства вредоносных программ Vundo, которое устанавливает рекламное, вымогательное и вредоносное ПО. Усовершенствованная техника цифровой стеганографии, демонстрируемая этой вредоносной программой, несомненно, будет в дальнейшем принята и / или усовершенствована киберпреступниками благодаря ее эффективности в скрытии кода.

Рекомендации

[1] https://en.wikipedia.org/w/index.php?title=Duqu&oldid=712083675 ,
[2] https://en.wikipedia.org/w/index.php?title=Zeus_(malware)&oldid=711753219 ,
[3] http://www.securityweek.com/information-stealing-malware-%E2%80%9Cstegoloader%E2%80%9D-hides-image-file ,

?еть /?
Орг / калибр / вид?
Ком / калибр / вид?
Php?
Php?