С разрешения LockBitSupp публикую анализ Локбита, который сделал cpeter.
На анализ файла он потратил больше месяца, а на написание статьи больше недели.
Также ЛокБит выйграл гонку по скорости, которая была проведена совсем недавно - https://www.techrepublic.com/articl...-in-splunks-ransomware-encryption-speed-test/
Локбит CTI
4 февраля 2022 года ФБР выпустило рекомендации по безопасности по индикаторам компрометации (IOC), связанным с программой-вымогателем LockBit 2.0, одной из самых активных групп программ-вымогателей в текущей экосистеме киберпреступности.
Сообщество наиграмотнейших системных администраторов и программистов LockBit (также известная как Bitwise Spider) является разработчиком LockBit Ransomware-as-a-Service (RaaS). Программа-вымогатель LockBit впервые появилась в сентябре 2019 года, а в июне 2021 года группа была переименована в LockBit 2.0, как это сделали несколько других семейств в 2021 году. LockBit 2.0 несет ответственность за различные громкие атаки в 2021 году, включая таких жертв, как Accenture, после запуска маркетинговой кампании по привлечению новых партнеров в середине 2021 года. Версия LockBit с ребрендингом включает в себя несколько новых функций, в том числе самораспространение, удаление теневых копий, обход контроля учетных записей (UAC), поддержку ESXi и печать заметок о выкупе через принтеры, обнаруженные в сети жертвы. Группа также гордится тем, что имеет самое быстрое шифрование на рынке программ-вымогателей. Это связано с тем, что он использует многопоточный подход к шифрованию и лишь частично шифрует файлы, поскольку в каждом файле шифруется только 4 КБ данных.
LockBit 2.0 представлен на русскоязычных форумах по киберпреступности как "LockBitSupp" на нескольких сайтах, включая RAMP, Exploit.in и xss.pro, где они вербуют аффилированных лиц и рекламируют свой RaaS. LockBit стала ведущей группой по наибольшему количеству жертв, опубликованных на сайте утечки в даркнете, после того, как обогнала Conti в начале 2022 года. Перед шифрованием партнеры Lockbit могут использовать приложение StealBit, полученное непосредственно из панели Lockbit, для эксфильтрации определенных типов файлов. Желаемые типы файлов могут быть настроены партнером, чтобы адаптировать атаку к жертве. Партнер настраивает приложение на желаемый путь к файлу, и после выполнения инструмент копирует файлы на сервер, контролируемый злоумышленником, используя http. Из-за характера партнерской модели некоторые злоумышленники используют другие доступные инструменты для кражи данных, такие как Rclone и MEGAsync, для достижения тех же результатов. Хакеры Lockbit 2.0 также используют облачные службы обмена файлами, включая privatlab.net, anonfiles.com, sendspace.com, fex.net, transfer.sh и send.exploit.in для отправлениях данных, украденные из сетей жертв.
Все заслуги в этой части принадлежат Уиллу Томасу (https://twitter.com/BushidoToken) из Equinix за потрясающую информацию о группе вымогателей!
Обзор
Этот отчет представляет собой мой краткий анализ программы-вымогателя LockBit v2.0.
В анализе я рассматриваю все функции программы-вымогателя LockBit. Тем не менее, я не упомянул подробности о некоторых функциях, потому что был очень ленив и выгорел к тому времени, когда закончил анализировать.
LockBit использует схему гибридной криптографии XSalsa20-Poly1305-Blake2b-Curve25519 Libsodium и AES-128-CBC для шифрования файлов. Конфигурация зловреда зашифрована методом XOR и хранится в статической памяти. Подобно REvil и BlackMatter, дочерние потоки LockBit используют общую структуру для разделения работы по шифрованию на несколько состояний при шифровании файла.
Благодаря продуманной многопоточной архитектуре производительность LockBit относительно высока по сравнению с большинством программ-вымогателей в этой области.
LockBit, безусловно, самая сложная программа-вымогатель, которую я когда-либо видел, и было очень весело анализировать и разбираться в ней.
Мой анализ на 96% основан на статическом анализе в IDA, потому что я, к сожалению, слишком ленив для динамического анализа. Поэтому в этом отчете рассказывается только о том, что я вижу в коде и как я его понимаю. Присядьте и гаслаждайетесь!
IOCS
Образец, который я использовал, представляет собой 32-разрядный исполняемый файл Windows. Огромное спасибо vx-underground (https://twitter.com/vxunderground) за то, что поделились им.
MD5: 63dcf75ad743b292e4a6cd067ffc2c18
SHA256: 9feed0c7fa8c1d32390e1c168051267df61f11b048ec62aa5b8e66f60e8083af
Образец: https://bazaar.abuse.ch/sample/9feed0c7fa8c1d32390e1c168051267df61f11b048ec62aa5b8e66f60e8083af/
Записка о выкупе
Содержимое примечания о выкупе шифруется XOR в исполняемом файле LockBit, который динамически расшифровывается один раз и записывается в файл примечания о выкупе в каждом каталоге.
Имя файла примечания о выкупе — Restore-My-Files.txt.
Статический анализ кода
Анти-анализ: Анти-отладочная проверка
В начале функции точка входа LOCKBIT проверяет поле NtGlobalFlag в блоке управления процессом (PEB), чтобы определить, отлаживается ли вредоносный процесс.
Это делается путем сравнения значения поля с 0x70, что указывает на установленные флаги FLG_HEAP_ENABLE_TAIL_CHECK, FLG_HEAP_ENABLE_FREE_CHECK, FLG_HEAP_VALIDATE_PARAMETERS.
Если процесс отлаживается, вредоносное ПО зависает на неопределенный срок.
Антианализ: строка стека
Наиболее важные строки в исполняемом файле LockBit кодируются и хранятся в виде строки в стеке. Перед использованием они динамически декодируются с помощью некоторых простых вычислений, таких как сложение, вычитание или операция XOR.
Анти-анализ: встроенное динамическое разрешение API
Как и большинство основных программ-вымогателей, LockBit динамически разрешает API, чтобы затруднить статический анализ, но, в отличие от многих других, LockBit встраивает весь процесс резолва, делая декомпилированный код намного больше для анализа.
Во-первых, для динамического разрешения этих API их соответствующие библиотеки должны быть изначально загружены в память. Поскольку Kernel32 уже загружен из нескольких импортов LockBit, вредоносное ПО находит его и разрешает LoadLibraryA для загрузки других в память.
После получения LoadLibraryA LockBit разрешает имя каждой DLL как строку стека и вызывает LoadLibraryA, чтобы загрузить ее в память.
Ниже приведен список загруженных библиотек.
- gdiplus.dll, ws2_32.dll, shell32.dll, advapi32.dll, user32.dll, ole32.dll, netapi32.dll, gpredit.dll, oleaut32.dll, shlwapi.dll, msvcrt.dll, activeds.dll, gdiplus .dll, mpr.dll, bcrypt.dll, crypt32.dll, iphlpapi.dll, wtsapi32.dll, win32u.dll, Comdlg32.dll, cryptbase.dll, combase.dll, winspool.drv
При извлечении адреса API из памяти вредоносное ПО сначала находит базу своей DLL, перебирая связанный список модуля загрузчика PEB и проверяя имя библиотеки для каждой записи. Каждое имя (в нижнем регистре) хешируется с помощью FNV1A и сравнивается с жестко закодированным хешем, после чего возвращается соответствующая база DLL.
Используя базу DLL, LockBit получает доступ к своей таблице каталогов экспорта и перебирает имя каждого API экспорта. Для каждого имени API вредоносное ПО преобразует символы в нижний регистр и хеширует их с помощью FNV1A. Окончательный хэш сравнивается с целевым хэшем, и если хэши совпадают, вредоносное ПО извлекает адрес порядкового имени API и использует его для индексации в массиве AddressOfFunctions таблицы экспорта, чтобы вернуть целевой адрес API.
Для большинства API-интерфейсов, используемых во всем исполняемом файле, этот процесс каждый раз полностью встроен, что значительно увеличивает объем скомпилированного кода, на который нам нужно обратить внимание. LockBit хранит разрешенные базы DLL и API-интерфейсы в глобальной памяти для их повторного использования, поэтому, несмотря на большой статический код, количество динамических инструкций примерно такое же, как если бы этот процесс не был встроенным. Это делает реверс инжиниринг образца немного более раздражающим, не ставя под угрозу производительность самого кода.
Проверка языка компьютера
Как и многие программы-вымогатели, LockBit проверяет языки системы, чтобы избежать шифровальных машин в России и соседних странах.
Вредоносная программа разрешает GetSystemDefaultUILanguage и GetUserDefaultUILanguage и вызывает их, чтобы проверить, находится ли системный или пользовательский язык интерфейса по умолчанию в списке, которого следует избегать ниже.
- азербайджанский (кириллица, Азербайджан), азербайджанский (латиница, Азербайджан), армянский (Армения), белорусский (Беларусь), грузинский (Грузия), казахский (Казахстан), киргизский (Кыргызстан), русский (Молдова), русский (Россия), Таджикский (кириллица, Таджикистан), туркменский (Туркменистан), узбекский (кириллица, Узбекистан), узбекский (латиница, Узбекистан), украинский (Украина)
Если пользовательский или системный язык пользовательского интерфейса занесен в черный список, вредоносное ПО вызывает ExitProcess для немедленного завершения.
Отказ в доступе к процессу вымогателей
После загрузки всех необходимых библиотек в память LockBit пытается ограничить доступ к своему собственному процессу, изменяя собственный список контроля доступа.
Во-первых, он разрешает и вызывает NtOpenProcess, чтобы получить дескриптор текущего процесса программы-вымогателя. Затем вредоносное ПО разрешает и вызывает GetSecurityInfo для получения ACL-списка дескриптора безопасности процесса.
Затем LockBit разрешает и вызывает RtlAllocateAndInitializeSid для выделения и инициализации SID с полномочиями SECURITY_WORLD_SID_AUTHORITY для группы EVERYONE. Затем он вызывает RtlQueryInformationAcl и RtlLengthSid для получения длины ACL процесса, вычисляет размер нового ACL и выделяет для него виртуальный буфер. После создания буфера LockBit вызывает RtlCreateAcl для создания этого нового ACL и вызывает RtlAddAccessDeniedAce для добавления записи управления доступом (ACE) ACCESS_DENIED в этот ACL для группы EVERYONE, используя только что созданный SID, указанный выше.
Наконец, LockBit вызывает RtlGetAce для повторения каждой записи ACE в ACL процесса вымогателя и RtlAddAce для добавления ACE в новый ACL. После того, как все ACE добавлены в новый ACL, вредоносное ПО вызывает SetSecurityInfo, чтобы установить новый ACL для своего собственного запущенного процесса, который запрещает доступ от всех к себе.
Ошибка по умолчанию и настройка привилегий
LockBit вызывает NtSetInformationProcess, чтобы установить эти 3 флага для режима жесткой ошибки по умолчанию для текущего процесса.
- SEM_FAILCRITICALERRORS: система не отображает окно сообщения обработчика критических ошибок и отправляет ошибку вызывающему процессу.
- SEM_NOGPFAULTERRORBOX: система не отображает диалоговое окно отчетов об ошибках Windows.
- SEM_NOALIGNMENTFAULTEXCEPT: система автоматически исправляет ошибки выравнивания.
Он также вызывает RtlAdjustPrivilege, чтобы включить привилегию SE_TAKE_OWNERSHIP_PRIVILEGE, чтобы иметь возможность позже стать владельцем файлов во время шифрования.
Расшифровка конфигурации
Конфигурация LockBit разделена на две разные части: данные и флаги.
Часть данных кодируется и хранится статически в исполняемом файле, который содержит следующие поля.
- EMF файл 1: Содержит векторную графику для текста "ВСЕ ВАШИ ВАЖНЫЕ ФАЙЛЫ Украдены и зашифрованы".
- EMF файл 2: содержит векторную графику для текста "LOCKBIT 2.0".
- Blender Pro Medium TTF файл
- TTF-файл Proxima Nova
- LockBit текст PNG
- Значок LockBit PNG
- Значок LockBit большой PNG
- Список процессов: список процессов для завершения, разделенных запятой.
- Список служб: список служб, которые нужно остановить, через запятую.
Процесс декодирования довольно прост, поскольку он просто выполняет XOR для каждого закодированного байта с 0x5F.
Вы можете найти файлы, перечисленные выше, здесь. (https://github.com/cdong1012/IDAPython-Malware-Scripts/tree/master/Lockbit/lockbit_dropped_files)
Ниже приведен процесс и служба для завершения списков.
- Список процессов:
wxServer,wxServerView,sqlmangr,RAgui,supervise,Culture,Defwatch,winword,QBW32,QBDBMgr,qbupdate,axlbridge,httpd,fdlauncher,MsDtSrvr,java,360se,360doctor,wdswfsafe,fdhost,GDscan,ZhuDongFangYu,QBDBMgrN,mysqld,AutodeskDesktopApp,acwebbrowser,Creative Cloud,Adobe Desktop Service,CoreSync,Adobe CEF,Helper,node,AdobeIPCBroker,sync-taskbar,sync-worker,InputPersonalization,AdobeCollabSync,BrCtrlCntr,BrCcUxSys,SimplyConnectionManager,Simply.SystemTrayIcon,fbguard,fbserver,ONENOTEM,wsa_service,koaly-exp-engine-service,TeamViewer_Service,TeamViewer,tv_w32,tv_x64,TitanV,Ssms,notepad,RdrCEF,sam,oracle,ocssd,dbsnmp,synctime,agntsvc,isqlplussvc,xfssvccon,mydesktopservice,ocautoupds,encsvc,tbirdconfig,mydesktopqos,ocomm,dbeng50,sqbcoreservice,excel,infopath,msaccess,mspub,onenote,outlook,powerpnt,steam,thebat,thunderbird,visio,wordpad,bedbh,vxmon,benetns,bengien,pvlsvr,beserver,raw_agent_svc,vsnapvss,CagService,DellSystemDetect,EnterpriseClient,ProcessHacker,Procexp64,Procexp,GlassWire,GWCtlSrv,WireShark,dumpcap,j0gnjko1,Autoruns,Autoruns64,Autoruns64a,Autorunsc,Autorunsc64,Autorunsc64a,Sysmon,Sysmon64,procexp64a,procmon,procmon64,procmon64a,ADExplorer,ADExplorer64,ADExplorer64a,tcpview,tcpview64,tcpview64a,avz,tdsskiller,RaccineElevatedCfg,RaccineSettings,Raccine_x86,Raccine,Sqlservr,RTVscan,sqlbrowser,tomcat6,QBIDPService,notepad++,SystemExplorer,SystemExplorerService,SystemExplorerService64,Totalcmd,Totalcmd64,VeeamDeploymentSvc
- Список сервисов
wrapper,DefWatch,ccEvtMgr,ccSetMgr,SavRoam,Sqlservr,sqlagent,sqladhlp,Culserver,RTVscan,sqlbrowser,SQLADHLP,QBIDPService,Intuit.QuickBooks.FCS,QBCFMonitorService, msmdsrv,tomcat6,zhudongfangyu,vmware-usbarbitator64,vmware-converter,dbsrv12,dbeng8,MSSQL$MICROSOFT##WID,MSSQL$VEEAMSQL2012,SQLAgent$VEEAMSQL2012,SQLBrowser,SQLWriter,FishbowlMySQL,MSSQL$MICROSOFT##WID,MySQL57,MSSQL$KAV_CS_ADMIN_KIT,MSSQLServerADHelper100,SQLAgent$KAV_CS_ADMIN_KIT,msftesql-Exchange,MSSQL$MICROSOFT##SSEE,MSSQL$SBSMONITORING,MSSQL$SHAREPOINT,MSSQLFDLauncher$SBSMONITORING,MSSQLFDLauncher$SHAREPOINT,SQLAgent$SBSMONITORING,SQLAgent$SHAREPOINT,QBFCService,QBVSS,YooBackup,YooIT,vss,sql,svc$,MSSQL,MSSQL$,memtas,mepocs,sophos,veeam,backup,bedbg,PDVFSService,BackupExecVSSProvider,BackupExecAgentAccelerator,BackupExecAgentBrowser,BackupExecDiveciMediaService,BackupExecJobEngine,BackupExecManagementService,BackupExecRPCService,MVArmor,MVarmor64,stc_raw_agent,VSNAPVSS,VeeamTransportSvc,VeeamDeploymentService,VeeamNFSSvc,AcronisAgent,ARSM,AcrSch2Svc,CASAD2DWebSvc,CAARCUpdateSvc,WSBExchange,MSExchange,MSExchange$
Поскольку имена служб/процессов разделены запятыми, вредоносное ПО выделяет отдельный массив в виртуальной памяти для хранения указателей на каждое имя, копируя имя в этот новый массив для быстрого доступа.
Список процессов также разбивается на два разных массива указателей: один для хранения имен в виде обычных строк ASCII, а другой — для их хранения в виде расширенных строк.
Часть с флагами конфигурации хранится в массиве байтов. Каждый байт соответствует определенному флагу выполнения, который проверяет LockBit. Флаг включен, если соответствующий байт равен 0xFF, и отключен, если соответствующий байт равен 0xAA.
Ниже приведены флаги и их порядок в массиве.
- Индекс 0: отключить обход UAC.
- Индекс 1: включить самоудаление
- Индекс 2: включить ведение журнала
- Индекс 3: включить обход сети для шифрования файлов.
- Индекс 4, 5, 6: если установлены все 3, установите групповые политики для Active Directory.
- Индекс 7: Установить реестр для значка по умолчанию расширения LockBit.
- Указатель 8: Распечатать записку о выкупе на сетевой принтер.
Повышение привилегий и перезапуск
В своей первой попытке LockBit пытается повысить привилегии, если пользователь, запускающий процесс программы-вымогателя, является служебной учетной записью.
Сначала вредоносное ПО разрешает NtOpenProcessToken и вызывает его для получения дескриптора токена своего собственного процесса. Затем он вызывает GetTokenInformation, используя этот дескриптор токена, чтобы получить информацию о пользователе, связанном с этим токеном.
Затем LockBit вызывает AllocateAndInitializeSid для создания SID с S-1-5-18 в качестве центра идентификации SID, который является SID учетной записи службы, используемой операционной системой. Затем он вызывает EqualSid для сравнения SID текущего пользователя с SID учетной записи службы, чтобы проверить, является ли текущий пользователь учетной записью службы.
Если текущая учетная запись пользователя является учетной записью службы, LockBit начинает эскалацию.
Во-первых, он вызывает LoadLibraryA для загрузки "Wtsapi32.dll" в память и вызывает GetProcAddress для получения адреса WTSQueryUserToken. Затем он вызывает GetModuleFileNameW, чтобы получить полный путь к собственному исполняемому файлу программы-вымогателя.
Затем вредоносное ПО вызывает WTSQueryUserToken с идентификатором сеанса INTERNAL_TS_ACTIVE_CONSOLE_ID (0x7FFE02D8), чтобы получить основной токен доступа для активного сеанса консоли служб терминалов. Если эта функция не работает, вредоносное ПО вызывает CreateProcessW для перезапуска собственного исполняемого файла в качестве интерактивного процесса с "winsta0\default" в качестве интерактивного сеанса по умолчанию.
Если вызов WTSQueryUserToken выполняется успешно, LockBit вызывает DuplicateTokenEx для дублирования маркера консоли служб терминалов и использует этот дублирующий маркер для создания процесса с повышенными правами для запуска себя через CreateProcessAsUserW.
Как только новый процесс создан, вредоносный процесс вызывает ExitProcess для завершения.
Логирование
Если флаг конфигурации с индексом 2 установлен, LockBit регистрирует свой процесс в отдельно работающем окне.
Вредонос создает поток для ручной настройки пользовательского интерфейса для окна с помощью множества махинаций с растровыми изображениями, но я не буду рассказывать, как он это делает, потому что я слишком вымотан, пока пишу эту статья.
Функция настройки окна журнала сначала вызывает GetModuleHandleW, чтобы получить дескриптор запущенного исполняемого файла. Затем вредоносная программа заполняет структуру WNDCLASSEXW, используя этот дескриптор в качестве экземпляра окна ведения журнала. В поле оконной процедуры структуры задана функция, которая будет обрабатывать протоколирование обмена данными между основным процессом программы-вымогателя и окном. Опять же, я не буду рассказывать об этом, так как я действительно ценю свое психическое здоровье!
После завершения заполнения структуры WNDCLASSEXW вредоносная программа вызывает RegisterClassExW для регистрации класса окна и вызывает CreateWindowExW для создания окна регистрации с "LockBit_2_0_Ransom" в качестве имени класса и "LockBit 2.0 Ransom" в качестве имени окна.
После создания окна LockBit вызывает ShowWindow с флагом SW_HIDE, чтобы скрыть его, и UpdateWindow, чтобы обновить это изменение.
Чтобы иметь возможность отображать это окно вручную, разработчики LockBit добавляют вызов RegisterHotKey для регистрации комбинации Shift + F1 с идентификатором горячей клавиши 1, который будет связываться с оконным процессом для вызова ShowWindow с флагом SW_SHOW для отображения самого себя. Существует также еще один вызов RegisterHotKey для регистрации клавиши F1 с идентификатором горячей клавиши 2, что скроет окно регистрации, если оно отображается.
Каждый раз, когда основной поток хочет отобразить сообщение журнала, он вызывает функцию, которая внутренне вызывает SendMessageA для отправки этого сообщения в окно журнала.
Ниже представлен пользовательский интерфейс окна ведения журнала.
Аргументы командной строки
LockBit может работать как с аргументами командной строки, так и без них.
Аргументы командной строки могут быть представлены в виде пути к файлу или папке для обработки. Выполнение прекращается, когда целевой файл/папка зашифрованы.
Маскарад Explorer и обход UAC
Прежде чем выполнять обход UAC, LockBit сначала проверяет, есть ли у него права администратора. Это делается путем вызова NtOpenProcessToken для получения дескриптора токена процесса программы-вымогателя и NtQueryInformationToken для получения информации о повышении прав токена и возврата, если токен повышен.
Если процесс имеет повышенные права или установлен флаг конфигурации с индексом 0, обход UAC пропускается.
Чтобы начать обход UAC, вредоносное ПО проверяет, входит ли процесс в группу администраторов. Он вызывает NtOpenProcessToken для получения дескриптора текущего процесса и CreateWellKnownSid для создания SID с типом WinBuiltinAdministratorsSid.
Затем LockBit вызывает CheckTokenMembership, чтобы проверить, является ли текущий процесс членом группы SID администратора, после чего обход UAC пропускается.
Если текущий процесс не является членом группы, вредоносное ПО вызывает NtQueryInformationToken для получения дескриптора токена, связанного с текущим процессом, и снова вызывает CheckTokenMembership, чтобы проверить, является ли связанный токен членом группы SID администратора.
Если токен находится в группе администраторов, вредоносное ПО маскирует explorer.exe, чтобы обойти UAC.
Во-первых, он вызывает NtAllocateVirtualMemory для выделения виртуального буфера и записывает в него путь к каталогу Windows с добавлением "\explorer.exe".
Затем LockBit вызывает RtlInitUnicodeString для преобразования пути проводника в строку юникода и записывает его в путь к изображению процесса. Он также делает еще один вызов RtlInitUnicodeString для преобразования "explorer.exe" в Unicode и записывает его в командную строку процесса.
Затем вредоносное ПО вызывает RtlReleasePebLock для снятия блокировки PEB и LdrEnumerateLoadedModules для перечисления всех загруженных модулей в памяти и вызывает функцию для поиска и маскировки explorer.exe.
Для каждого загруженного модуля функция обратного вызова проверяет, совпадает ли базовый адрес модуля с базовым адресом LockBit, чтобы найти в памяти запись таблицы данных, соответствующую вредоносному процессу.
Если контекст функции обратного вызова заключается в маскировке проводника, функция сохраняет полное имя и базовое имя LockBit в глобальных переменных для последующего их восстановления. Затем полный путь проводника используется в качестве нового полного имени исполняемого файла для записи таблицы данных LockBit.
Наконец, функция вызывает RtlInitUnicodeString для записи полного пути Explorer к полному имени DLL записи LockBit и "explorer.exe" в качестве базового имени DLL, которое теперь маскирует процесс LockBit под процесс Explorer.
Маскируясь под Explorer, LockBit начинает выполнять обход UAC.
Сначала он разрешает адрес CoInitializeEx и CoUninitialize, вызывая GetProcAddress. Затем вредоносное ПО вызывает CoInitializeEx, чтобы инициализировать библиотеку COM для параллелизма объектов с многопоточностью.
Затем LockBit в основном выполняет обход UAC, используя COM-интерфейсы ColorDataProxy/CCMLuaUtil. Исходный код этой методики можно посмотреть здесь (https://github.com/hfiref0x/UACME/b...3ae4e06af/Source/Akagi/methods/hybrids.c#L877), поэтому я не буду углубляться в него.
Одноразовый мутант
LockBit позволяет избежать одновременного запуска нескольких экземпляров программ-вымогателей, проверяя наличие определенного объекта-мутанта.
Во-первых, он декодирует следующую строку стека "\BaseNamedObjects\{\%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X }" и вызывает wsprintfW для записи отформатированных данных в буфер. Каждое отформатированное поле соответствует байту с определенным индексом жестко запрограммированного открытого ключа LockBit.
Затем LockBit вызывает RtlInitUnicodeString, чтобы преобразовать имя мутанта в строку Unicode, и NtCreateMutant, чтобы попытаться открыть мутант с указанным именем. Если результатом является STATUS_OBJECT_NAME_COLLISION, вредоносное ПО завершает работу, вызывая ExitProcess, чтобы избежать нескольких запущенных экземпляров.
Настройка групповой политики для Active Directory
Проверка работы на основном контроллере домена
Если вредоносный процесс имеет права администратора, версия ОС — Windows Vista и выше, и установлен любой из флагов конфигурации с индексами 4, 5, 6, LockBit пытается создать и установить новые групповые политики для других хостов через Active Directory.
Во-первых, LockBit проверяет, выполняется ли он в данный момент на основном контроллере домена. Он вызывает GetComputerNameW для получения NetBIOS-имени локального компьютера, на котором он работает.
Затем вредоносное ПО вызывает NetGetDCName, чтобы получить имя основного контроллера домена, и lstrcmpiW, чтобы сравнить имя локального ПК с этим именем контроллера домена.
Получение доменного имени DNS
Если LockBit работает на контроллере домена, он пытается получить доменное имя DNS. Сначала вредоносная программа вызывает NtOpenProcessToken, чтобы получить дескриптор токена процесса, и NtQueryInformationToken_1, чтобы получить информацию о пользователе, соответствующем этому токену.
Затем LockBit вызывает GetWindowsAccountDomainSid для получения SID домена SID пользователя. Затем он вызывает CreateWellKnownSid для создания SID для группы администраторов домена пользователя и CheckTokenMembership для проверки наличия у пользователя повышенных привилегий.
Если у пользователя есть права администратора, LockBit вызывает GetComputerNameExW для получения имени домена DNS локального компьютера.
Получение имени администратора учетной записи домена (получить имя администратора домена)
После выполнения обычной процедуры NtOpenProcessToken и NtQueryInformationToken для получения информации о токене пользователя-администратора LockBit вызывает LookupAccountSidW для поиска имени учетной записи администратора и имени домена.
Чтобы получить полное имя администратора домена, LockBit разрешает строку стека "//" и строит имя в формате "<имя домена>//<имя учетной записи>".
COM IGroupPolicyObject
Чтобы получить интерфейс IGroupPolicyObject, LockBit разрешает и вызывает CoCreateInstance с CLSID {EA502722-A23D-11D1-A7D3-0000F87571E3} и IID {EA502723-A23D-11d1-A7D3-0000F87571E3}.
...
На анализ файла он потратил больше месяца, а на написание статьи больше недели.
Также ЛокБит выйграл гонку по скорости, которая была проведена совсем недавно - https://www.techrepublic.com/articl...-in-splunks-ransomware-encryption-speed-test/
Локбит CTI
4 февраля 2022 года ФБР выпустило рекомендации по безопасности по индикаторам компрометации (IOC), связанным с программой-вымогателем LockBit 2.0, одной из самых активных групп программ-вымогателей в текущей экосистеме киберпреступности.
Сообщество наиграмотнейших системных администраторов и программистов LockBit (также известная как Bitwise Spider) является разработчиком LockBit Ransomware-as-a-Service (RaaS). Программа-вымогатель LockBit впервые появилась в сентябре 2019 года, а в июне 2021 года группа была переименована в LockBit 2.0, как это сделали несколько других семейств в 2021 году. LockBit 2.0 несет ответственность за различные громкие атаки в 2021 году, включая таких жертв, как Accenture, после запуска маркетинговой кампании по привлечению новых партнеров в середине 2021 года. Версия LockBit с ребрендингом включает в себя несколько новых функций, в том числе самораспространение, удаление теневых копий, обход контроля учетных записей (UAC), поддержку ESXi и печать заметок о выкупе через принтеры, обнаруженные в сети жертвы. Группа также гордится тем, что имеет самое быстрое шифрование на рынке программ-вымогателей. Это связано с тем, что он использует многопоточный подход к шифрованию и лишь частично шифрует файлы, поскольку в каждом файле шифруется только 4 КБ данных.
LockBit 2.0 представлен на русскоязычных форумах по киберпреступности как "LockBitSupp" на нескольких сайтах, включая RAMP, Exploit.in и xss.pro, где они вербуют аффилированных лиц и рекламируют свой RaaS. LockBit стала ведущей группой по наибольшему количеству жертв, опубликованных на сайте утечки в даркнете, после того, как обогнала Conti в начале 2022 года. Перед шифрованием партнеры Lockbit могут использовать приложение StealBit, полученное непосредственно из панели Lockbit, для эксфильтрации определенных типов файлов. Желаемые типы файлов могут быть настроены партнером, чтобы адаптировать атаку к жертве. Партнер настраивает приложение на желаемый путь к файлу, и после выполнения инструмент копирует файлы на сервер, контролируемый злоумышленником, используя http. Из-за характера партнерской модели некоторые злоумышленники используют другие доступные инструменты для кражи данных, такие как Rclone и MEGAsync, для достижения тех же результатов. Хакеры Lockbit 2.0 также используют облачные службы обмена файлами, включая privatlab.net, anonfiles.com, sendspace.com, fex.net, transfer.sh и send.exploit.in для отправлениях данных, украденные из сетей жертв.
Все заслуги в этой части принадлежат Уиллу Томасу (https://twitter.com/BushidoToken) из Equinix за потрясающую информацию о группе вымогателей!
Обзор
Этот отчет представляет собой мой краткий анализ программы-вымогателя LockBit v2.0.
В анализе я рассматриваю все функции программы-вымогателя LockBit. Тем не менее, я не упомянул подробности о некоторых функциях, потому что был очень ленив и выгорел к тому времени, когда закончил анализировать.
LockBit использует схему гибридной криптографии XSalsa20-Poly1305-Blake2b-Curve25519 Libsodium и AES-128-CBC для шифрования файлов. Конфигурация зловреда зашифрована методом XOR и хранится в статической памяти. Подобно REvil и BlackMatter, дочерние потоки LockBit используют общую структуру для разделения работы по шифрованию на несколько состояний при шифровании файла.
Благодаря продуманной многопоточной архитектуре производительность LockBit относительно высока по сравнению с большинством программ-вымогателей в этой области.
LockBit, безусловно, самая сложная программа-вымогатель, которую я когда-либо видел, и было очень весело анализировать и разбираться в ней.
Мой анализ на 96% основан на статическом анализе в IDA, потому что я, к сожалению, слишком ленив для динамического анализа. Поэтому в этом отчете рассказывается только о том, что я вижу в коде и как я его понимаю. Присядьте и гаслаждайетесь!
IOCS
Образец, который я использовал, представляет собой 32-разрядный исполняемый файл Windows. Огромное спасибо vx-underground (https://twitter.com/vxunderground) за то, что поделились им.
MD5: 63dcf75ad743b292e4a6cd067ffc2c18
SHA256: 9feed0c7fa8c1d32390e1c168051267df61f11b048ec62aa5b8e66f60e8083af
Образец: https://bazaar.abuse.ch/sample/9feed0c7fa8c1d32390e1c168051267df61f11b048ec62aa5b8e66f60e8083af/
Записка о выкупе
Содержимое примечания о выкупе шифруется XOR в исполняемом файле LockBit, который динамически расшифровывается один раз и записывается в файл примечания о выкупе в каждом каталоге.
Имя файла примечания о выкупе — Restore-My-Files.txt.
Статический анализ кода
Анти-анализ: Анти-отладочная проверка
В начале функции точка входа LOCKBIT проверяет поле NtGlobalFlag в блоке управления процессом (PEB), чтобы определить, отлаживается ли вредоносный процесс.
Это делается путем сравнения значения поля с 0x70, что указывает на установленные флаги FLG_HEAP_ENABLE_TAIL_CHECK, FLG_HEAP_ENABLE_FREE_CHECK, FLG_HEAP_VALIDATE_PARAMETERS.
Если процесс отлаживается, вредоносное ПО зависает на неопределенный срок.
Антианализ: строка стека
Наиболее важные строки в исполняемом файле LockBit кодируются и хранятся в виде строки в стеке. Перед использованием они динамически декодируются с помощью некоторых простых вычислений, таких как сложение, вычитание или операция XOR.
Анти-анализ: встроенное динамическое разрешение API
Как и большинство основных программ-вымогателей, LockBit динамически разрешает API, чтобы затруднить статический анализ, но, в отличие от многих других, LockBit встраивает весь процесс резолва, делая декомпилированный код намного больше для анализа.
Во-первых, для динамического разрешения этих API их соответствующие библиотеки должны быть изначально загружены в память. Поскольку Kernel32 уже загружен из нескольких импортов LockBit, вредоносное ПО находит его и разрешает LoadLibraryA для загрузки других в память.
После получения LoadLibraryA LockBit разрешает имя каждой DLL как строку стека и вызывает LoadLibraryA, чтобы загрузить ее в память.
Ниже приведен список загруженных библиотек.
- gdiplus.dll, ws2_32.dll, shell32.dll, advapi32.dll, user32.dll, ole32.dll, netapi32.dll, gpredit.dll, oleaut32.dll, shlwapi.dll, msvcrt.dll, activeds.dll, gdiplus .dll, mpr.dll, bcrypt.dll, crypt32.dll, iphlpapi.dll, wtsapi32.dll, win32u.dll, Comdlg32.dll, cryptbase.dll, combase.dll, winspool.drv
При извлечении адреса API из памяти вредоносное ПО сначала находит базу своей DLL, перебирая связанный список модуля загрузчика PEB и проверяя имя библиотеки для каждой записи. Каждое имя (в нижнем регистре) хешируется с помощью FNV1A и сравнивается с жестко закодированным хешем, после чего возвращается соответствующая база DLL.
Используя базу DLL, LockBit получает доступ к своей таблице каталогов экспорта и перебирает имя каждого API экспорта. Для каждого имени API вредоносное ПО преобразует символы в нижний регистр и хеширует их с помощью FNV1A. Окончательный хэш сравнивается с целевым хэшем, и если хэши совпадают, вредоносное ПО извлекает адрес порядкового имени API и использует его для индексации в массиве AddressOfFunctions таблицы экспорта, чтобы вернуть целевой адрес API.
Для большинства API-интерфейсов, используемых во всем исполняемом файле, этот процесс каждый раз полностью встроен, что значительно увеличивает объем скомпилированного кода, на который нам нужно обратить внимание. LockBit хранит разрешенные базы DLL и API-интерфейсы в глобальной памяти для их повторного использования, поэтому, несмотря на большой статический код, количество динамических инструкций примерно такое же, как если бы этот процесс не был встроенным. Это делает реверс инжиниринг образца немного более раздражающим, не ставя под угрозу производительность самого кода.
Проверка языка компьютера
Как и многие программы-вымогатели, LockBit проверяет языки системы, чтобы избежать шифровальных машин в России и соседних странах.
Вредоносная программа разрешает GetSystemDefaultUILanguage и GetUserDefaultUILanguage и вызывает их, чтобы проверить, находится ли системный или пользовательский язык интерфейса по умолчанию в списке, которого следует избегать ниже.
- азербайджанский (кириллица, Азербайджан), азербайджанский (латиница, Азербайджан), армянский (Армения), белорусский (Беларусь), грузинский (Грузия), казахский (Казахстан), киргизский (Кыргызстан), русский (Молдова), русский (Россия), Таджикский (кириллица, Таджикистан), туркменский (Туркменистан), узбекский (кириллица, Узбекистан), узбекский (латиница, Узбекистан), украинский (Украина)
Если пользовательский или системный язык пользовательского интерфейса занесен в черный список, вредоносное ПО вызывает ExitProcess для немедленного завершения.
Отказ в доступе к процессу вымогателей
После загрузки всех необходимых библиотек в память LockBit пытается ограничить доступ к своему собственному процессу, изменяя собственный список контроля доступа.
Во-первых, он разрешает и вызывает NtOpenProcess, чтобы получить дескриптор текущего процесса программы-вымогателя. Затем вредоносное ПО разрешает и вызывает GetSecurityInfo для получения ACL-списка дескриптора безопасности процесса.
Затем LockBit разрешает и вызывает RtlAllocateAndInitializeSid для выделения и инициализации SID с полномочиями SECURITY_WORLD_SID_AUTHORITY для группы EVERYONE. Затем он вызывает RtlQueryInformationAcl и RtlLengthSid для получения длины ACL процесса, вычисляет размер нового ACL и выделяет для него виртуальный буфер. После создания буфера LockBit вызывает RtlCreateAcl для создания этого нового ACL и вызывает RtlAddAccessDeniedAce для добавления записи управления доступом (ACE) ACCESS_DENIED в этот ACL для группы EVERYONE, используя только что созданный SID, указанный выше.
Наконец, LockBit вызывает RtlGetAce для повторения каждой записи ACE в ACL процесса вымогателя и RtlAddAce для добавления ACE в новый ACL. После того, как все ACE добавлены в новый ACL, вредоносное ПО вызывает SetSecurityInfo, чтобы установить новый ACL для своего собственного запущенного процесса, который запрещает доступ от всех к себе.
Ошибка по умолчанию и настройка привилегий
LockBit вызывает NtSetInformationProcess, чтобы установить эти 3 флага для режима жесткой ошибки по умолчанию для текущего процесса.
- SEM_FAILCRITICALERRORS: система не отображает окно сообщения обработчика критических ошибок и отправляет ошибку вызывающему процессу.
- SEM_NOGPFAULTERRORBOX: система не отображает диалоговое окно отчетов об ошибках Windows.
- SEM_NOALIGNMENTFAULTEXCEPT: система автоматически исправляет ошибки выравнивания.
Он также вызывает RtlAdjustPrivilege, чтобы включить привилегию SE_TAKE_OWNERSHIP_PRIVILEGE, чтобы иметь возможность позже стать владельцем файлов во время шифрования.
Расшифровка конфигурации
Конфигурация LockBit разделена на две разные части: данные и флаги.
Часть данных кодируется и хранится статически в исполняемом файле, который содержит следующие поля.
- EMF файл 1: Содержит векторную графику для текста "ВСЕ ВАШИ ВАЖНЫЕ ФАЙЛЫ Украдены и зашифрованы".
- EMF файл 2: содержит векторную графику для текста "LOCKBIT 2.0".
- Blender Pro Medium TTF файл
- TTF-файл Proxima Nova
- LockBit текст PNG
- Значок LockBit PNG
- Значок LockBit большой PNG
- Список процессов: список процессов для завершения, разделенных запятой.
- Список служб: список служб, которые нужно остановить, через запятую.
Процесс декодирования довольно прост, поскольку он просто выполняет XOR для каждого закодированного байта с 0x5F.
Вы можете найти файлы, перечисленные выше, здесь. (https://github.com/cdong1012/IDAPython-Malware-Scripts/tree/master/Lockbit/lockbit_dropped_files)
Ниже приведен процесс и служба для завершения списков.
- Список процессов:
wxServer,wxServerView,sqlmangr,RAgui,supervise,Culture,Defwatch,winword,QBW32,QBDBMgr,qbupdate,axlbridge,httpd,fdlauncher,MsDtSrvr,java,360se,360doctor,wdswfsafe,fdhost,GDscan,ZhuDongFangYu,QBDBMgrN,mysqld,AutodeskDesktopApp,acwebbrowser,Creative Cloud,Adobe Desktop Service,CoreSync,Adobe CEF,Helper,node,AdobeIPCBroker,sync-taskbar,sync-worker,InputPersonalization,AdobeCollabSync,BrCtrlCntr,BrCcUxSys,SimplyConnectionManager,Simply.SystemTrayIcon,fbguard,fbserver,ONENOTEM,wsa_service,koaly-exp-engine-service,TeamViewer_Service,TeamViewer,tv_w32,tv_x64,TitanV,Ssms,notepad,RdrCEF,sam,oracle,ocssd,dbsnmp,synctime,agntsvc,isqlplussvc,xfssvccon,mydesktopservice,ocautoupds,encsvc,tbirdconfig,mydesktopqos,ocomm,dbeng50,sqbcoreservice,excel,infopath,msaccess,mspub,onenote,outlook,powerpnt,steam,thebat,thunderbird,visio,wordpad,bedbh,vxmon,benetns,bengien,pvlsvr,beserver,raw_agent_svc,vsnapvss,CagService,DellSystemDetect,EnterpriseClient,ProcessHacker,Procexp64,Procexp,GlassWire,GWCtlSrv,WireShark,dumpcap,j0gnjko1,Autoruns,Autoruns64,Autoruns64a,Autorunsc,Autorunsc64,Autorunsc64a,Sysmon,Sysmon64,procexp64a,procmon,procmon64,procmon64a,ADExplorer,ADExplorer64,ADExplorer64a,tcpview,tcpview64,tcpview64a,avz,tdsskiller,RaccineElevatedCfg,RaccineSettings,Raccine_x86,Raccine,Sqlservr,RTVscan,sqlbrowser,tomcat6,QBIDPService,notepad++,SystemExplorer,SystemExplorerService,SystemExplorerService64,Totalcmd,Totalcmd64,VeeamDeploymentSvc
- Список сервисов
wrapper,DefWatch,ccEvtMgr,ccSetMgr,SavRoam,Sqlservr,sqlagent,sqladhlp,Culserver,RTVscan,sqlbrowser,SQLADHLP,QBIDPService,Intuit.QuickBooks.FCS,QBCFMonitorService, msmdsrv,tomcat6,zhudongfangyu,vmware-usbarbitator64,vmware-converter,dbsrv12,dbeng8,MSSQL$MICROSOFT##WID,MSSQL$VEEAMSQL2012,SQLAgent$VEEAMSQL2012,SQLBrowser,SQLWriter,FishbowlMySQL,MSSQL$MICROSOFT##WID,MySQL57,MSSQL$KAV_CS_ADMIN_KIT,MSSQLServerADHelper100,SQLAgent$KAV_CS_ADMIN_KIT,msftesql-Exchange,MSSQL$MICROSOFT##SSEE,MSSQL$SBSMONITORING,MSSQL$SHAREPOINT,MSSQLFDLauncher$SBSMONITORING,MSSQLFDLauncher$SHAREPOINT,SQLAgent$SBSMONITORING,SQLAgent$SHAREPOINT,QBFCService,QBVSS,YooBackup,YooIT,vss,sql,svc$,MSSQL,MSSQL$,memtas,mepocs,sophos,veeam,backup,bedbg,PDVFSService,BackupExecVSSProvider,BackupExecAgentAccelerator,BackupExecAgentBrowser,BackupExecDiveciMediaService,BackupExecJobEngine,BackupExecManagementService,BackupExecRPCService,MVArmor,MVarmor64,stc_raw_agent,VSNAPVSS,VeeamTransportSvc,VeeamDeploymentService,VeeamNFSSvc,AcronisAgent,ARSM,AcrSch2Svc,CASAD2DWebSvc,CAARCUpdateSvc,WSBExchange,MSExchange,MSExchange$
Поскольку имена служб/процессов разделены запятыми, вредоносное ПО выделяет отдельный массив в виртуальной памяти для хранения указателей на каждое имя, копируя имя в этот новый массив для быстрого доступа.
Список процессов также разбивается на два разных массива указателей: один для хранения имен в виде обычных строк ASCII, а другой — для их хранения в виде расширенных строк.
Часть с флагами конфигурации хранится в массиве байтов. Каждый байт соответствует определенному флагу выполнения, который проверяет LockBit. Флаг включен, если соответствующий байт равен 0xFF, и отключен, если соответствующий байт равен 0xAA.
Ниже приведены флаги и их порядок в массиве.
- Индекс 0: отключить обход UAC.
- Индекс 1: включить самоудаление
- Индекс 2: включить ведение журнала
- Индекс 3: включить обход сети для шифрования файлов.
- Индекс 4, 5, 6: если установлены все 3, установите групповые политики для Active Directory.
- Индекс 7: Установить реестр для значка по умолчанию расширения LockBit.
- Указатель 8: Распечатать записку о выкупе на сетевой принтер.
Повышение привилегий и перезапуск
В своей первой попытке LockBit пытается повысить привилегии, если пользователь, запускающий процесс программы-вымогателя, является служебной учетной записью.
Сначала вредоносное ПО разрешает NtOpenProcessToken и вызывает его для получения дескриптора токена своего собственного процесса. Затем он вызывает GetTokenInformation, используя этот дескриптор токена, чтобы получить информацию о пользователе, связанном с этим токеном.
Затем LockBit вызывает AllocateAndInitializeSid для создания SID с S-1-5-18 в качестве центра идентификации SID, который является SID учетной записи службы, используемой операционной системой. Затем он вызывает EqualSid для сравнения SID текущего пользователя с SID учетной записи службы, чтобы проверить, является ли текущий пользователь учетной записью службы.
Если текущая учетная запись пользователя является учетной записью службы, LockBit начинает эскалацию.
Во-первых, он вызывает LoadLibraryA для загрузки "Wtsapi32.dll" в память и вызывает GetProcAddress для получения адреса WTSQueryUserToken. Затем он вызывает GetModuleFileNameW, чтобы получить полный путь к собственному исполняемому файлу программы-вымогателя.
Затем вредоносное ПО вызывает WTSQueryUserToken с идентификатором сеанса INTERNAL_TS_ACTIVE_CONSOLE_ID (0x7FFE02D8), чтобы получить основной токен доступа для активного сеанса консоли служб терминалов. Если эта функция не работает, вредоносное ПО вызывает CreateProcessW для перезапуска собственного исполняемого файла в качестве интерактивного процесса с "winsta0\default" в качестве интерактивного сеанса по умолчанию.
Если вызов WTSQueryUserToken выполняется успешно, LockBit вызывает DuplicateTokenEx для дублирования маркера консоли служб терминалов и использует этот дублирующий маркер для создания процесса с повышенными правами для запуска себя через CreateProcessAsUserW.
Как только новый процесс создан, вредоносный процесс вызывает ExitProcess для завершения.
Логирование
Если флаг конфигурации с индексом 2 установлен, LockBit регистрирует свой процесс в отдельно работающем окне.
Вредонос создает поток для ручной настройки пользовательского интерфейса для окна с помощью множества махинаций с растровыми изображениями, но я не буду рассказывать, как он это делает, потому что я слишком вымотан, пока пишу эту статья.
Функция настройки окна журнала сначала вызывает GetModuleHandleW, чтобы получить дескриптор запущенного исполняемого файла. Затем вредоносная программа заполняет структуру WNDCLASSEXW, используя этот дескриптор в качестве экземпляра окна ведения журнала. В поле оконной процедуры структуры задана функция, которая будет обрабатывать протоколирование обмена данными между основным процессом программы-вымогателя и окном. Опять же, я не буду рассказывать об этом, так как я действительно ценю свое психическое здоровье!
После завершения заполнения структуры WNDCLASSEXW вредоносная программа вызывает RegisterClassExW для регистрации класса окна и вызывает CreateWindowExW для создания окна регистрации с "LockBit_2_0_Ransom" в качестве имени класса и "LockBit 2.0 Ransom" в качестве имени окна.
После создания окна LockBit вызывает ShowWindow с флагом SW_HIDE, чтобы скрыть его, и UpdateWindow, чтобы обновить это изменение.
Чтобы иметь возможность отображать это окно вручную, разработчики LockBit добавляют вызов RegisterHotKey для регистрации комбинации Shift + F1 с идентификатором горячей клавиши 1, который будет связываться с оконным процессом для вызова ShowWindow с флагом SW_SHOW для отображения самого себя. Существует также еще один вызов RegisterHotKey для регистрации клавиши F1 с идентификатором горячей клавиши 2, что скроет окно регистрации, если оно отображается.
Каждый раз, когда основной поток хочет отобразить сообщение журнала, он вызывает функцию, которая внутренне вызывает SendMessageA для отправки этого сообщения в окно журнала.
Ниже представлен пользовательский интерфейс окна ведения журнала.
Аргументы командной строки
LockBit может работать как с аргументами командной строки, так и без них.
Аргументы командной строки могут быть представлены в виде пути к файлу или папке для обработки. Выполнение прекращается, когда целевой файл/папка зашифрованы.
Маскарад Explorer и обход UAC
Прежде чем выполнять обход UAC, LockBit сначала проверяет, есть ли у него права администратора. Это делается путем вызова NtOpenProcessToken для получения дескриптора токена процесса программы-вымогателя и NtQueryInformationToken для получения информации о повышении прав токена и возврата, если токен повышен.
Если процесс имеет повышенные права или установлен флаг конфигурации с индексом 0, обход UAC пропускается.
Чтобы начать обход UAC, вредоносное ПО проверяет, входит ли процесс в группу администраторов. Он вызывает NtOpenProcessToken для получения дескриптора текущего процесса и CreateWellKnownSid для создания SID с типом WinBuiltinAdministratorsSid.
Затем LockBit вызывает CheckTokenMembership, чтобы проверить, является ли текущий процесс членом группы SID администратора, после чего обход UAC пропускается.
Если текущий процесс не является членом группы, вредоносное ПО вызывает NtQueryInformationToken для получения дескриптора токена, связанного с текущим процессом, и снова вызывает CheckTokenMembership, чтобы проверить, является ли связанный токен членом группы SID администратора.
Если токен находится в группе администраторов, вредоносное ПО маскирует explorer.exe, чтобы обойти UAC.
Во-первых, он вызывает NtAllocateVirtualMemory для выделения виртуального буфера и записывает в него путь к каталогу Windows с добавлением "\explorer.exe".
Затем LockBit вызывает RtlInitUnicodeString для преобразования пути проводника в строку юникода и записывает его в путь к изображению процесса. Он также делает еще один вызов RtlInitUnicodeString для преобразования "explorer.exe" в Unicode и записывает его в командную строку процесса.
Затем вредоносное ПО вызывает RtlReleasePebLock для снятия блокировки PEB и LdrEnumerateLoadedModules для перечисления всех загруженных модулей в памяти и вызывает функцию для поиска и маскировки explorer.exe.
Для каждого загруженного модуля функция обратного вызова проверяет, совпадает ли базовый адрес модуля с базовым адресом LockBit, чтобы найти в памяти запись таблицы данных, соответствующую вредоносному процессу.
Если контекст функции обратного вызова заключается в маскировке проводника, функция сохраняет полное имя и базовое имя LockBit в глобальных переменных для последующего их восстановления. Затем полный путь проводника используется в качестве нового полного имени исполняемого файла для записи таблицы данных LockBit.
Наконец, функция вызывает RtlInitUnicodeString для записи полного пути Explorer к полному имени DLL записи LockBit и "explorer.exe" в качестве базового имени DLL, которое теперь маскирует процесс LockBit под процесс Explorer.
Маскируясь под Explorer, LockBit начинает выполнять обход UAC.
Сначала он разрешает адрес CoInitializeEx и CoUninitialize, вызывая GetProcAddress. Затем вредоносное ПО вызывает CoInitializeEx, чтобы инициализировать библиотеку COM для параллелизма объектов с многопоточностью.
Затем LockBit в основном выполняет обход UAC, используя COM-интерфейсы ColorDataProxy/CCMLuaUtil. Исходный код этой методики можно посмотреть здесь (https://github.com/hfiref0x/UACME/b...3ae4e06af/Source/Akagi/methods/hybrids.c#L877), поэтому я не буду углубляться в него.
Одноразовый мутант
LockBit позволяет избежать одновременного запуска нескольких экземпляров программ-вымогателей, проверяя наличие определенного объекта-мутанта.
Во-первых, он декодирует следующую строку стека "\BaseNamedObjects\{\%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X }" и вызывает wsprintfW для записи отформатированных данных в буфер. Каждое отформатированное поле соответствует байту с определенным индексом жестко запрограммированного открытого ключа LockBit.
Затем LockBit вызывает RtlInitUnicodeString, чтобы преобразовать имя мутанта в строку Unicode, и NtCreateMutant, чтобы попытаться открыть мутант с указанным именем. Если результатом является STATUS_OBJECT_NAME_COLLISION, вредоносное ПО завершает работу, вызывая ExitProcess, чтобы избежать нескольких запущенных экземпляров.
Настройка групповой политики для Active Directory
Проверка работы на основном контроллере домена
Если вредоносный процесс имеет права администратора, версия ОС — Windows Vista и выше, и установлен любой из флагов конфигурации с индексами 4, 5, 6, LockBit пытается создать и установить новые групповые политики для других хостов через Active Directory.
Во-первых, LockBit проверяет, выполняется ли он в данный момент на основном контроллере домена. Он вызывает GetComputerNameW для получения NetBIOS-имени локального компьютера, на котором он работает.
Затем вредоносное ПО вызывает NetGetDCName, чтобы получить имя основного контроллера домена, и lstrcmpiW, чтобы сравнить имя локального ПК с этим именем контроллера домена.
Получение доменного имени DNS
Если LockBit работает на контроллере домена, он пытается получить доменное имя DNS. Сначала вредоносная программа вызывает NtOpenProcessToken, чтобы получить дескриптор токена процесса, и NtQueryInformationToken_1, чтобы получить информацию о пользователе, соответствующем этому токену.
Затем LockBit вызывает GetWindowsAccountDomainSid для получения SID домена SID пользователя. Затем он вызывает CreateWellKnownSid для создания SID для группы администраторов домена пользователя и CheckTokenMembership для проверки наличия у пользователя повышенных привилегий.
Если у пользователя есть права администратора, LockBit вызывает GetComputerNameExW для получения имени домена DNS локального компьютера.
Получение имени администратора учетной записи домена (получить имя администратора домена)
После выполнения обычной процедуры NtOpenProcessToken и NtQueryInformationToken для получения информации о токене пользователя-администратора LockBit вызывает LookupAccountSidW для поиска имени учетной записи администратора и имени домена.
Чтобы получить полное имя администратора домена, LockBit разрешает строку стека "//" и строит имя в формате "<имя домена>//<имя учетной записи>".
COM IGroupPolicyObject
Чтобы получить интерфейс IGroupPolicyObject, LockBit разрешает и вызывает CoCreateInstance с CLSID {EA502722-A23D-11D1-A7D3-0000F87571E3} и IID {EA502723-A23D-11d1-A7D3-0000F87571E3}.
...
Последнее редактирование: