Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

Гэтым артыкулам мы завяршаем цыкл публікацый, прысвечаных аналізу шкоднаснага праграмнага забеспячэння. У першай частцы мы правялі дэталёвы аналіз заражанага файла, які атрымала па пошце адна еўрапейская кампанія, і знайшлі там шпіёнскую праграму AgentTesla. Во другой частцы апісалі вынікі паэтапнага аналізу асноўнага модуля AgentTesla.

Сёння Ілля Памаранцаў, спецыяліст па аналізе шкоднаснага кода CERT Group-IB, раскажа аб першым этапе аналізу ВПО – паўаўтаматычнай распакаванні сэмплаў AgentTesla на прыкладзе трох міні-кейсаў з практыкі спецыялістаў CERT Group-IB.

Звычайна першая стадыя пры аналізе ВПО - зняцце абароны ў выглядзе пакера, крыптара, пратэктара або загрузніка. У большасці выпадкаў гэтая праблема вырашаецца запускам ВПО і выкананнем дампа, аднак існуюць сітуацыі, калі гэты метад не падыходзіць. Напрыклад, калі ВПО з'яўляецца шыфравальшчыкам, калі яно абараняе свае рэгіёны памяці ад дампа, калі ў кодзе прысутнічаюць механізмы выяўлення віртуальнай машыны або калі адразу пасля старту ВПО выконвае перазагрузку. У такіх выпадках ужываецца так званая «паўаўтаматычная» распакаванне, гэта значыць даследнік цалкам кантралюе працэс і можа ў любы момант умяшацца. Разгледзім гэтую працэдуру на прыкладзе трох сэмплаў сямейства AgentTesla. Гэта адносна бясшкоднае СПА, калі адключыць яму доступ да сеткі.

Сэмпл №1

Зыходны файл - гэта дакумент MS Word, які эксплуатуе ўразлівасць CVE-2017-11882.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
У выніку адбываецца загрузка і запуск пейлааду.

Аналіз дрэва працэсаў і паводніцкіх маркераў паказвае інжект у працэс RegAsm.exe.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Ёсць характэрныя для AgentTesla паводніцкія маркеры.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Запампаваны сэмпл - гэта выкананы . NET-файл, абаронены пратэктарам .NET Reactor.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Адкрыем яго ва ўтыліце dnSpy x86 і пяройдзем да кропкі ўваходу.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Перайшоўшы ў функцыю DateTimeOffset, мы выявім код ініцыялізацыі новага . NET-модуля. Паставім кропка прыпынку на які цікавіць нас радку і запусцім файл.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
У адным з вернутых буфераў можна ўбачыць MZ-сігнатуру (0x4D 0x5A). Захоўваем яго.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Здамплены выкананы файл - гэта дынамічная бібліятэка, якая з'яўляецца лаадэрам, г.зн. здабывае з секцыі рэсурсаў карысную нагрузку і вырабляе яе запуск.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Пры гэтым самі неабходныя рэсурсы ў дампе адсутнічаюць. Яны знаходзяцца ў бацькоўскім сэмпле.

ўтыліта dnSpy валодае двума вельмі карыснымі функцыянальнымі магчымасцямі, якія дапамогуць нам даволі хутка стварыць "франкенштэйна" з двух звязаных файлаў.

  1. Першая дазваляе "ўклеіць" у бацькоўскі сэмпл дынамічную бібліятэку.

    Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

  2. Другая - перапісаць код функцыі ў кропкі ўваходу, каб выклікаць патрэбны метад устаўленай дынамічнай бібліятэкі.

    Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

Захоўваем нашага «франкенштэйна», ставім кропка прыпынку на радку, які вяртае буфер з дэшыфраванымі рэсурсамі, і вырабляем дамп па аналогіі з папярэднім этапам.

Другі дамп - гэта напісаны на VB.NET выкананы файл, які абаронены знаёмым нам пратэктарам ConfuserEx.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Пасля зняцця пратэктара выкарыстоўваем напісаныя раней YARA-правілы і пераканаемся ў тым, што распакаванае ВПО – сапраўды AgentTesla.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

Сэмпл №2

Зыходны файл - дакумент MS Excel. Да выканання шкоднаснага кода прыводзіць убудаваны макрас.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
У выніку запускаецца PowerShell-скрыпт.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Скрыпт дэшыфруе код на C# і перадае яму кіраванне. Сам код з'яўляецца загрузнікам, што таксама бачна са справаздачы пясочніцы.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Карысная нагрузка ўяўляе сабой выкананы . NET-файл.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Адкрыўшы файл у dnSpy x86, можна ўбачыць, што ён абфусцыраваны. Здымаем абфускацыю ўтылітай de4dot і вяртаемся да аналізу.

У ходзе даследавання кода можна выявіць наступную функцыю:

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
У вочы кідаюцца закадаваныя радкі EntryPoint и заклікаць. Ставім кропка прыпынку на першы радок, запускаем і захоўваем значэнне буфера byte_0.

Дамп зноў з'яўляецца дадаткам на . NET і абаронены ConfuserEx.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Здымаем абфускацыю з дапамогай de4dot і загружаем у dnSpy. З апісання файла разумеем, што сутыкнуліся з CyaX-Sharp loader.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Гэты загрузнік валодае шырокім функцыяналам для процідзеяння аналізу.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Гэты функцыянал уключае абыход убудаваных сістэм абароны Windows, адключэнне Windows Defender, а таксама механізмы выяўлення пясочніц і віртуальных машын. Ёсць магчымасць падгружаць карысную нагрузку з сеткі ці захоўваць яе ў секцыі рэсурсаў. Запуск выконваецца праз инжект ва ўласны працэс, у дублікат уласнага працэсу ці ж у працэсы MSBuild.exe, vbc.exe и RegSvcs.exe у залежнасці ад абранага зламыснікам параметра.

Аднак для нас яны менш істотныя, чым AntiDump-функцыя, якую дадае ConfuserEx. Яе зыходны код можна знайсці на GitHub.

Для адключэння абароны скарыстаемся магчымасцю dnSpy, якая дазваляе рэдагаваць IL-код.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Захоўваемся і ставім кропка прыпынку на радок выкліку функцыі дэшыфроўкі карыснай нагрузкі. Яна знаходзіцца ў канструктары асноўнага класа.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Запускаем і дампім карысную нагрузку. Выкарыстоўваючы раней напісаныя YARA-правілы, пераконваемся, што перад намі AgentTesla.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3

Сэмпл №3

Зыходны файл - гэта выкананы VB Native PE32-файл.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Аналіз энтрапіі паказвае наяўнасць вялікага фрагмента зашыфраваных дадзеных.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Пры аналізе формы прыкладання ў VB Decompiler можна заўважыць дзіўны піксельны фон.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Графік энтрапіі bmp-малюначкі ідэнтычны графіку энтрапіі зыходнага файла, а памер складае 85% ад памеру файла.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Агульны выгляд малюнка сведчыць аб выкарыстанні стэганаграфіі.

Зварачальны ўвага на выгляд дрэва працэсаў, а таксама на наяўнасць маркера інжэкта.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Гэта сведчыць аб выкананні распакавання. Для загрузнікаў на Visual Basic (яны ж VBKrypt або VBInjector) характэрна выкарыстанне shellcode для ініцыялізацыі карыснай нагрузкі, а таксама для выканання самага инжекта.

Аналіз у VB Decompiler паказаў наяўнасць падзеі Нагрузка у формы FegatassocAirballoon2.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Пяройдзем у IDA pro па паказаным адрасе і вывучым функцыю. Код моцна абфуцаваны. Фрагмент, які нас цікавіць, прадстаўлены ніжэй.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Тут праводзіцца сканіраванне адраснай прасторы працэсу ў пошуках сігнатуры. Такі падыход вельмі сумніўны.

Па-першае, адрас пачатку сканавання 0x400100. Гэта значэнне статычна і не карэктуецца пры зняцці базы. У ідэальных цяплічных умовах ён будзе паказваць на канец PE-загалоўка выкананага файла. Аднак база не статычная, яе значэнне можа мяняцца, а пошук рэальнага адраса шуканай сігнатуры хоць і не выкліча перапаўнення зменнай, але можа заняць вельмі шмат часу.

Па-другое, значэнне сігнатуры iWGK. Думаю, відавочна, што 4 байта занадта мала, каб гарантаваць унікальнасць. А калі ўлічваць першы пункт, верагоднасць памыліцца дастаткова высокая.

У рэчаіснасці шуканы фрагмент прымацаваны да канца знойдзенай раней bmp-малюначкі па зрушэнні 0xA1D0D.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
выкананне Шэл-код ажыццяўляецца ў дзве стадыі. Першая вырабляе дэшыфроўку асноўнага цела. Пры гэтым ключ вызначаецца пераборам.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Сдампім дэшыфраваны Шэл-код і паглядзім на радкі.

Па-першае, зараз мы ведаем функцыю стварэння даччынага працэсу: CreateProcessInternalW.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Па-другое, нам стаў вядомы механізм замацавання ў сістэме.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Вернемся да зыходнага працэсу. Паставім кропка прыпынку на CreateProcessInternalW і працягнем выкананне. Далей назіраем звязку NtGetContextThread/NtSetContextThread, якая мяняе адрас пачатку выканання на адрас ShellCode.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Падлучаемся да створанага працэсу адладчыкам, які актывуецца падзея Suspend on libraryu load/unload, аднаўляем працэс і чакаем падгрузкі . NET-бібліятэк.

Далей пры дапамозе ProcessHucker дампім рэгіёны, якія змяшчаюць у распакаваным выглядзе . NET-дадатак.

Спыняем усе працэсы і выдаляем якая замацавалася ў сістэме копію ВПО.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Здамплены файл абаронены пратэктарам .NET Reactor, які лёгка здымаецца пры дапамозе ўтыліты de4dot.

Яўка правалена: выводны AgentTesla на чыстую ваду. Частка 3
Скарыстаўшыся напісанымі раней YARA-правіламі, пераконваемся, што перад намі AgentTesla.

Падвядзем вынік

Такім чынам, мы падрабязна прадэманстравалі працэс паўаўтаматычнага распакавання сэмплаў на прыкладзе трох міні-кейсаў, а таксама правялі аналіз шкоднаснага ПА на аснове паўнавартаснага кейса, высветліўшы, што доследны ўзор – гэта AgentTesla, усталяваўшы яго функцыянальныя магчымасці і поўны спіс індыкатараў кампраметацыі.

Аналіз шкоднаснага аб'екта, які мы правялі, патрабуе шмат часу і намаганняў, і гэтую працу павінен выконваць спецыяльны супрацоўнік у кампаніі, аднак не ўсе кампаніі гатовы трымаць у штаце аналітыка.

Адна з паслуг, якую аказвае Лабараторыя кампутарнай крыміналістыкі і аналізу шкоднаснага кода Group-IB – рэагаванне на кіберінцыдэнты. А, каб заказчыкі не марнавалі час на ўзгадненне дакументаў і абмеркаванне ў разгар кібератакі, Group-IB запусціла Incident Response Retainer, паслугу па рэагаванні на інцыдэнты па папярэдняй падпісцы, якая ўключае таксама этап аналізу шкоднаснага кода. Больш падрабязную інфармацыю аб гэтым можна знайсці тут.

Калі вы жадаеце самі яшчэ раз вывучыць, як праводзіцца распакаванне сэмплаў AgentTesla, і ўбачыць, як гэта робіць адмысловец CERT Group-IB, можаце запампаваць запіс вэбінара па гэтай тэме тут.

Крыніца: habr.com

Дадаць каментар