Доброго времени суток, Хабр! В этой статье я продолжу исследование вредоносного ПО на реальных сэмплах, используемых различными АРТ-группировками, в частности группировки Kimsuky. APT Kimsuky известна своими фишинговыми кампаниями с целью проникновения в организации и кибершпионажа. В этом году злоумышленники активно работали и на территории Российской Федерации. Я не буду углубляться в описание всех тактик и инструментов данной группировки, которые постоянно развиваются и о которых уже было сделано достаточно исследований, доступных в открытых источниках. Основное внимание будет уделено практической части – расследованию инцидентов, связанных с распространением Kimsuky вредоносных документов форматов Power Point и Microsoft Office Word. Представленные в статье сэмплы были загружены из одной общедоступной базы вредоносного ПО.  Давайте приступим.  Сэмпл Power Point Для начала изучим сэмпл формата Power Point, его характеристики видны на рисунке 1.  И первым делом посмотрим на наличие в файле VBA макросов при помощи утилиты olevba (рисунок 2). Для этого воспользуемся командой: olevba kimsuky.pptx. Здесь мы увидим функцию auto_open() типа AutoExec, сообщающую о том, что весь вложенный код выполнится, когда файл будет открыт. Уже внутри функции при открытии файла нас встретит ошибка с текстом "Sorry, PowerPoint can't read because office version is low. Please update to read." и выполнится код, в котором в переменную sBytes после конкатенации передаётся закодированная в base64 строка. Дальше строка записывается в файл %TMP%\oup.dat и декодируется при помощи предустановленной утилиты в Windows Certutil. Полученное содержимое помещается в файл %LOCALAPPDATA%\Microsoft\Office\oup.vbs, а его выполнение происходит после команды ping на localhost в командной консоли cmd. Стоит также упомянуть про присутсвие в функции Shell() параметра vbHide, означающего, что перед пользователем не отображается окно консоли во время выполнения файла. Все происходит в скрытом режиме.  Теперь давайте посмотрим, что же записывается в файл %LOCALAPPDATA%\Microsoft\Office\oup.vbs. Для этого предлагаю еще раз взглянуть на рисунок 2. Отображенные на нем строки, конкатенируем в python в одну, заменив & (в VBA это конкатенация) на сложение. После чего полученную строку выведем в консоль функцией print() и декодируем ее через pipe, запустив утилиту base64 с флагом -d. Результат декодирования после конкатенации показан на рисунке 3.  На нем также видно, что с помощью кода создается задача с именем Office Updatev2.2:cmd /c schtasks /create /sc minute /mo 5 /tn ""Office Updatev2.2"" /tr "" " & WScript.ScriptFullName & """ /f    Эта задача исполняется каждые 5 минут без окончания срока действия.  На этом этапе нам необходимо более детально проанализировать декодированное содержимое. Обратимся к коду, показанному на рисунке 4, который исполняется после задачи Office Updatev2.2.  В коде происходит обращение на веб-ресурс или иными словами – осуществляется запрос с параметрами хоста (имя, версия ОС) и считывается полезная нагрузка, записывающаяся в переменную $rep. После этого все содержимое переменной декодируется и исполняется на хосте.  Как мы видим, веб-ресурс недоступен (рисунок 5). Поэтому полезную нагрузку извлечь из него уже не получится.  Таким образом мы изучили как происходило заражение вредоносным ПО APT Kismuky через файлы Power Point и способ сокрытия кода злоумышленниками. Поэтому предлагаю двигаться дальше и разбирать второй сэмпл этой же группировки, на этот раз в формате Microsoft Office Word.  Сэмпл Microsoft Office Word На рисунке 6 показаны некоторые характеристики исследуемого сэмпла MS Word: То, что файл не зашифрован и имеет верный формат, мы можем увидеть при помощи утилиты file, см. рисунок 7: Присутствие в файле VBA кода нам наглядно демонстрирует утилита olevba (рисунок 8). А это значит, что нас ждёт что-то интересное.   Воспользовавшись командой: olevba kimsuky.doc, мы увидим функцию типа Аuto_exec – document_Open(), которая говорит о том, что весь код внутри нее будет выполнен после открытия файла kimsuky.doc. Обратите внимание, что уже в обфусцированном коде видно обращение к стороннему веб-ресурсу (выделено белым на рисунке 8). Уже внутри функции document_Open() создаётся объект Shell.Application и после деобфускации кода (замены кусков кода функцией Replace()), вызывается метод ShellExecute объекта Shell.Application. Его параметрами являются powershell.exe и деобфусцированные в VBA-строки (после конкатенации в одну строку), рассмотренная дальше. Забегая вперёд, скажу, что по коду происходит несколько этапов деобфускации: первый этап в VBA и второй в PowerShell. Далее мы разберём, какие командлеты исполняются в PowerShell. На рисунке 9, кроме самого VBA кода, мы увидим краткую сводку по функциям и ключевым словам, находящимся в нем.  Сводка верхнеуровнево показывает нам, что в файле содержится вредоносный код. Далее будет произведен анализ этого кода в изолированной среде ОС Windows.  Но прежде чем приступить к изучению содержимого VBA кода, нам необходимо снять пароль с проекта VBA. Как это делается, я уже объяснял в другой статье с разбором sample APT Twisted Panda.  Снять пароль не так сложно: изменив DPB на DPx в проекте VBA, мы получим доступ к содержимому кода, см.рисунок 10. А теперь перейдем к самому интересному – к процессу деобфускации. Из каких этапов он состоит и как происходит наглядно показано на рисунке 11: после первого этапа деобфускации с помощью Replace() в VBA, код деобфусцируется в powershell, при помощи тех же командлетов Replace (2-ой этап).  И в конечном итоге мы снова, как и при анализе первого сэмпла данной группировки, видим обращение к стороннему веб-ресурсу, где из файла yn.txt считываются комадлеты, записываются в переменную $x и исполняются в рамках этой же PowerShell сессии. Отличие только в том, что в случае с сэмплом Power Point считывался только байт-код.  Следы запуска вредоносного кода видны в виде записей в стандартном журнале событий Microsoft Windows PowerShell (рисунок 12). Запуск этого кода виден также и расширенном журнале событий, включающийся через групповые политики. На рисунке 13 мы можем заметить событие с EID 4103 из журнала Microsoft Windows PowerShell/Operational, которое поможет нам распознать какие командлеты были исполнены.  Перечень этих событий, отображенных в стандартных и расширенных журналах Microsoft Windows PowerShell, позволяет своевременно реагировать на атаки с использованием PowerShell.  Проанализировав сэмпл MS Word, нами также была выявлена вредоносная деятельность APT Kimsuky на этапе заражения ПО.    Заключение В исследованных в статье сэмплах APT Kimsuky, активно применяемых группировкой в 2022 году в своих фишинговых атаках, мы увидили как злоумышленники прячут свой вредоносный код, используя обфускацию. Научились извлекать его и приводить к читаемому виду, то есть деобфусцировать. Путем отладки мы также также проанализировали какой функционал был заложен в коде. Данный разбор в очередной раз показал нам, что злоумышленники находят все новые способы сокрытия своих действий при проведении атак, поэтому предварительно необходимо изучать содержимое подозрительных файлов MS Office.  Буду рад, если статья оказалась для вас полезной! Задавайте вопросы и пишите комментарии.Автор: @AntonyN0p Антон Кузнецов, ведущий инженер информационной безопасности R-Vision.