wmic.exe Как избавиться от этого назойливого окна.
C\Windows\System32\Wbem\wmic.exe — окно вот с такой надписью начало выскакивать время от времени на ноутбуке знакомого.
Окно вылезает на 1-2 секунды и примерно через каждые 8-12 минут. Сегодня рассмотрим что такое wmic.exe и как от него избавиться.
wmic.exe
WMIC.exe (Windows Management Instrumentation Command) — консольная утилита для управления WMI. WMI — набор инструментов, для управления системой с помощью сценариев, выполняемых в среде Windows Script Host или в командной строке. Другими словами это системная утилита встроенная в Windows по умолчанию. Сама по себе она не является какой то вредоносной программой. Но, то что она периодически сама собой запускается указывает на то, что было вмешательство в систему, то есть возможно это сработал вирус.
Со слов знакомого, все началось после установки в систему пиратской версии одного из продуктов Adobe. После этого не остается сомнений в том, что в систему попала какая то вредоносная программа и она выполнила изменения каких то настроек в ней.
Я в первую очередь стал искать в интернете упоминания про такие случаи. И ниже, я постарался собрать всю имеющуюся информацию в одном посте. Что удалось выявить различным пользователям при наблюдении за поведением данного вируса?
Судя по всему вирус устанавливается сразу в нескольких местах. В AppData\Local создаются случайные папки с бинарной информацией закодированной в base64 (скрипты mrJWF или PEmpA либо с подобными названиями). Также сюда устанавливается python. Кроме того регистрируются случайные службы, которые регулярно запускаются. В Google Chrome наверху появляется плашка «Ваш браузер управляется организацией» (но это не обязательно должно быть связано с вирусом), которая говорит о том, что некоторые настройки браузера выполнены посредством изменений в системном реестре. Также браузер начинает работать через непонятный прокси сервер.
Если вы тоже столкнулись с чем то подобным, то рекомендую проделать следующие «процедуры».
Постоянно вылазит окно «C\Windows\System32\Wbem\wmic.exe»

- Нажмите комбинацию клавиш WIN+Q на клавиатуре. В поле поиска введите «планировщик» и запустите Планировщик заданий windows. Перейдите в секцию Библиотека планировщика и поищите строку с названием System config updates. Выделите её и в нижнем окне перейдите на вкладку Действия. Потом посмотрите в столбце Подробности что и с какой директории запускает это задание. Если увидите, что запускается что то типа Users\ваш юзер\AppData\Local\config\python\pythonw.exe то смело отключайте это задание.
Также в диспетчере задач может появиться одноимённый процесс либо процесс с названием python.exe, который нужно остановить. - Рекомендую проверить систему лечащей утилитой Dr.Web Curelt , а также программой AdwCleaner, которая удаляет нежелательное ПО.
- Удалите из автозагрузки (диспетчер задач ⇒ вкладка Автозагрузка) все подозрительные, неизвестные строки.
- Восстановите системные файлы с помощью sfc /scannow
Команда WMIC – выполнить сценарий WMI в командной строке.
Команда WMIC (Windows Management Instrumentation Command) используется для получения сведений об оборудовании и системе, управления процессами и их компонентами, а также изменения настроек с использованием возможностей инструментария управления Windows ( W indows M anagement I nstrumentation или WMI) .
Инструментарий управления Windows (WMI) – это набор программных средств, обеспечивающий управление системой с использованием сценариев, выполняемых в среде Windows Script Host ( ранее — Windows Scripting Host ) или в командной строке с помощью утилиты WMIC.EXE . Windows Script Host или сокращенно WSH — это компонент Microsoft Windows, предназначенный для запуска сценариев на скриптовых языках JScript и VBScript. Сценарии WSH обычно используются в тех случаях, когда требуется выполнить набор каких-либо действий, требующих написания относительно сложного исходного кода, но нередко в повседневной практике администрирования, удобнее воспользоваться возможностями командной строки WMIC .
Технология WMI — это расширенная и адаптированная под Windows реализация стандарта Web-Based Enterprise Management ( WBEM ), принятого многими крупными компаниями в качестве универсального интерфейса мониторинга и управления различными системами и компонентами распределенной информационной среды предприятия с использованием объектно-ориентированных идеологий и протоколов HTML и XML. В основе структуры данных в WBEM лежит Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы. Практически, WMI, основанный на CIM, является открытой унифицированной системой интерфейсов доступа к любым параметрам операционной системы, устройствам и приложениям, которые функционируют в ней.
Программные средства WMI устанавливаются по умолчанию и включают в себя следующие компоненты:
wmimgmt.msc – оснастка консоли MMC, позволяющая в целом управлять самой системой WMI на выбранном компьютере.
Winmgmt.exe – консольная утилита управления WMI. Выполняет аналогичные действия, что и консоль MMC wmimgmt.msc. Кроме того, в Windows 2000 является исполняемым файлом сервиса WMI в системе. Для запуска из консоли используется с опцией /exe (winmgmt.exe /exe). Начиная с Windows XP, исполняемым файлом WMI является библиотека wmisvc.dll , загружаемая с помощью хост-контроллера svchost.exe (Generic Host Process for Win32 Services). В Windows 7-10 утилита winmgmt.exe позволяет выполнить конфигурирование службы WMI как для группы SVChost под именем netsvcs , так и для отдельной группы с именем Winmgmt . В среде Windows 10 группировка служб, запускаемых с помощью svchost.exe , практически не используется – большинству служб соответствует свой собственный процесс svchost.exe.
Wbemtest.exe – графическая утилита для интерактивной работы с WMI. Удобна для тестирования классов и методов, просмотра свойств и т. п.
Wmic.exe – консольная утилита для вызова объектов и методов WMI (WMI Console) – присутствует только в Windows XP и более поздних версиях Windows.
mofcomp.exe – компилятор MOF-файлов. Служит для расширения репозитория WMI и тонких операций с библиотекой классов WMI, а также для обнаружения и исправления ошибок данных репозитория.
Основной каталог данных WMI при стандартной установке Windows — C:\Windows\System32\wbem .
Формат командной строки:
wmic [глобальные параметры]
Если параметры командной строки отсутствуют, то утилита wmic.exe переходит в интерактивный режим, с отображением приглашения к вводу команд:
Подсказку по работе с утилитой wmic.exe можно получить по команде:
wmic /? — отобразить общую справку.
wmic /?:BRIEF — отобразить краткую справку.
wmic /?:FULL — отобразить полную стправку.
Содержание общей справки:
Краткая справка по содержанию практически ничем не отличается от справки по умолчанию, за исключением того, что часть текста заменена на многоточие, например:
VOLUMEUSERQUOTA — Управление квотами для индивидуальных томов хран.
Содержимое полной справки, получаемой по команде wmic /?:full :
Класс (Class) – Класс – это определение объекта WMI. Например, класс процесс (process) определяет все характеристики любого процесса, но не ссылается на какой-либо конкретный процесс.
Объект (Object) – Иногда называется экземпляром класса (instance); Это конкретный набор данных WMI, определенное проявление класса.
Действие (Action) – Также называется методом (method). Действие – это доступная для выполнения функция класса или объекта WMI, некоторая операция, которую мы можете заставить выполнить класс или объект. Например, завершение процесса объектом Process с использованием метода delete, как это рассматривается ниже.
Свойства — параметры объекта.
Путь объекта — путь WMI для использования при обращении к экземпляру или классу.
Псевдоним — определение классов WMI, применяемое в WMIC. Псевдонимы упрощают обращение к классам и свойствам. Они также предоставляют действия, облегчающие работу с классами. Псевдонимы могут включать средства для работы с классами на удаленном компьютере, а также на нескольких компьютерах.
Утилита WMIC создана для удобства применения WMI непосредственно из командной строки, поэтому наиболее используемые классы WMI доступны под заранее определенными псевдонимами (ALIAS). Также, имеется возможность самостоятельного определения псевдонимов для тех классов, для которых это еще не сделано, или добавить новые псевдонимы для тех классов WMI, которые уже их имеют.
Утилита WMIC предоставляет три основных параметра для управления отображением данных:
/OUTPUT – вывод во внешний файл.
/FORMAT – позволяет форматировать информацию.
/TRANSLATE – настройка вывода специальных символов.
Кроме вывода в файл, возможен вывод в буфер обмена, если задан параметр /OUTPUT:CLIPBOARD . В качестве дополнительного средства протоколирования вместо параметра /OUTPUT можно использовать параметр /RECORD: . Для отмены протоколирования в интерактивном режиме используется параметр /RECORD:””
Форматы выводимых данных:
CSV – вывод данных в одну строку, с разделителем в виде запятой.
HFORM – информация отображается в виде списка, оформленного в HTML-формате. Отображается две колонки — название объекта и его значение.
HTABLE – формат вывода данных в виде HTML таблицы.
LIST – вывод свойства и его значения происходит в отдельной строке.
MOF – собственно, информация преобразуется в формат MOF.
RAWXML – вывод данных в XML файл.
TABLE – табличный формат вывода данных.
VALUE – аналогично значению LIST.
XML – вывода данных в XML файл, но с дополнительной информацией.
Параметр /TRANSLATE используется совместно с оператором GET в тех случаях, когда есть необходимость вывода символов, стандартно используемых для форматирования текста или разделения полей. В среде WMIC поддерживаются таблицы BasicXml и NoComma
Необходимо учитывать тот факт, что формат вывода данных и их вид будет зависеть от порядка следования параметров /TRANSLATE и /FORMAT:
— Если /TRANSLATE следует раньше чем /FORMAT, то сначала выполняется преобразование, а затем форматирование выводимых данных.
— Если /FORMAT идет раньше /TRANSLATE, то сначала выполняется форматирование, а затем – преобразование.
Примеры использования WMIC для работы с процессами.
Список псевдонимов, доступный на локальном компьютере можно получить с помощью команды:
wmic alias list brief
Для класса Win32_Process предусмотрен псевдоним Process . Соответственно, для получения подсказки можно воспользоваться командой:
Отображаемая справка для Windows 10:
Для получения списка процессов используется параметр LIST . Для получения подсказки по форматам и параметрам LIST можно использовать команду:
wmic process list /?
Для получения списка процессов, отображаемого в кратком формате, используется команда:
wmic process list brief
Пример выводимой информации:
Для вывода сведений о процессах в html-файл:
wmic /output:c:\proclist.htm process list /format:htable
Параметр /output задает имя файла с результатами, а параметр /format — формат выводимых данных.
wmic /output:proclist1.htm process list /format:hform — вывод результатов в HTML-файл в виде списка процессов с двумя колонками из названия свойства и его значения.
Для получения списка процессов на удаленной системе используется команда:
wmic /user:»Admin» /password:»admpass» /node:»Comp0″ process list brief
В команде указываются имя пользователя и пароль для подключения к удаленной системе указанной параметром /node: . Если имя пользователя и пароль не заданы, то используется учетная запись текущего пользователя. Вместо имени компьютера можно задавать его IP-адрес:
wmic /node:”192.168.1.132” process list brief
Если имена компьютеров содержат специальные символы, то они должны заключаться в двойные кавычки:
wmic /node:”server-01” process list brief
Возможно указание списка имен или IP-адресов удаленных компьютеров:
wmic /node:”server-01”,”192.168.0.1” process list brief
Параметр /node может включать либо список компьютеров, либо имя текстового файла со списком. Файл должен содержать имена компьютеров, разделенные запятой, или набор строк с именами по одному в строке. При использовании списка удаленных компьютеров из файла, перед его именем в параметре /node должен присутствовать символ @ :
wmic /node:”@C:\comps.txt” process list brief
При обработке списка компьютеров, взятого из текстового файла, какие-либо из перечисленных компьютеров могут быть выключены, поэтому, для сокращения времени выполнения команды, желательно использовать параметр /FAIFAST:ON , который позволит исключить применение команды по отношению к узлам, не отвечающим на эхо-запрос (не отвечающим на ping):
wmic /failfast:on /node:”@C:\comps.txt” process list status
Для опроса состояния конкретного процесса, например браузера Chrome можно использовать команду:
wmic process where name=”chrome.exe” list status
Для принудительного завершения процесса используется команда:
wmic process where name=”chrome.exe” delete
wmic process where name=”chrome.exe” call terminate
Для запуска программы на локальном компьютере:
wmic process call create «C:\Program Files (x86)\Google\Chrome\Application\chrome.exe» Для запуска программ на удаленных компьютерах используется параметр /node , рассмотренный выше и полные пути исполняемых файлов относительно удаленной системы.
Примеры использования WMIC для получения сведений о компонентах системы.
WMIC OS LIST BRIEF — отобразить краткие сведения о системе.
wmic OS GET Name — отобразить версию ОС Windows и устройство загрузки.
WMIC OS GET csname,bootdevice,localdatetime — отобразить имя компьютера, устройство загрузки, локальные дату и время.
WMIC OS GET locale, oslanguage, codeset — отобразить данные локализации Windows
WMIC OS GET osarchitecture /value — отобразить архитектуру системы (разрядность Windows, например — значение OSArchitecture=64-bit для 64-разрядной системы)
WMIC QFE list brief — отобразить список обновлений Quick Fix Engineering (QFE) Windows.
wmic qfe list brief | find “311” — отобразить список обновлений Windows, в названии которых присутствует 311 .
WMIC QFE get hotfixid,description,installedOn — отобразить список обновлений Windows, включающий название, краткое описание и дату установки.
WMIC DISKDRIVE get name,size,model — отобразить список физических дисков, содержащих название модели, имя в системе и размер.
WMIC PARTITION list brief — отобразить список всех разделов на всех дисках.
WMIC LOGICALDISK list brief — отобразить список логических дисков.
WMIC LOGICALDISK where drivetype=4 get FreeSpace,ProviderName — отобразить свободное место и путь для сетевых дисков (drivetype=4)
WMIC LOGICALDISK where drivetype!=4 get freespace, description — отобразить свободное место и описание для локальных дисков, включая CD/DVD и съемные устройства хранения данных.
WMIC LOGICALDISK where description=’Local Fixed Disk’ get deviceid, volumename — отобразить идентификаторы (буквы дисков) и метки томов для всех локальных логических дисков.
WMIC SERVICE list brief | more — отобразить список системных служб в постраничном режиме.
WMIC SERVICE where state=”running” GET caption,name,state /format:list — отобразить список, включающий отображаемые имена, короткие имена и статус работающих системных служб.
WMIC SERVICE where state=”Stopped” GET caption,name,state /format:list — отобразить список, включающий отображаемые имена, короткие имена и статус остановленных системных служб.
WMIC SERVICE where name=’WinRM’ CALL STARTSERVICE — запустить службу удаленного управления Windows (WinRM)
WMIC SERVICE where name=’WinRM’ GET name,state — проверить состояние службы WinRM.
WMIC PRINTER LIST STATUS — отобразить список принтеров и их состояние.
WMIC BASEBOARD list brief — отобразить общую информацию о материнской плате компьютера.
wmic bios get Manufacturer — отобразить сведения о производителе BIOS.
wmic bios get smbiosbiosversion — отобразить версию BIOS.
wmic bios get Description — отобразить описание производителя BIOS.
WMIC MEMORYCHIP list brief — отобразить сведения о модулях памяти компьютера.
WMIC MEMORYCHIP GET Devicelocator,Capacity — отобразить сведения о размещении и емкости модулей памяти DIMM.
Пример командного файла, который отображает основные сведения об оборудовании и операционной системе компьютера:
Руководство по инструментарию управления Windows (WMI): основные сведения о WMI-атаках

Инструментарий управления Windows (WMI) — это подсистема PowerShell, которая обеспечивает администраторам доступ к мощным инструментам системного мониторинга. Этот инструментарий задумывался как быстрое и эффективное средство системного администрирования, однако далеко не все используют его с благими целями: с его помощью злоумышленники-инсайдеры могут шпионить за другими сотрудниками. Знание этой уязвимости WMI ощутимым образом упрощает обнаружение внутренних угроз и борьбу с ними.
В этой статье мы рассмотрим, что такое инструментарий WMI, для чего он нужен и как его можно использовать для отслеживания инсайдерской деятельности в системе. Мы также составили более подробное руководство, посвященное событиям WMI и инсайдерскому шпионажу, которое вы можете скачать бесплатно.
Краткий обзор: что такое WMI и для чего он нужен?

Приведем конкретный пример. С помощью WMI вы можете запросить, например, все большие файлы Excel, находящиеся в том или ином каталоге, а затем получать уведомление каждый раз при создании файла с заданным размером, например 1 Мб. Командлет Register-WmiEvent позволяет сделать все это с помощью одной не слишком сложной строки в PowerShell.
В хороших руках WMI может послужить многим благим целям, но точно так же он может стать инструментом вредоносной инсайдерской деятельности. Можно легко представить, как некий сотрудник с повадками Эдварда Сноудена использует WMI, чтобы шпионить за своими коллегами. Для этого ему даже не понадобятся особые технические знания.
Предположим, наш гипотетический инсайдер «случайно» подсмотрел, что его коллега Лекс периодически скачивает большие файлы Excel, содержащие номера социального страхования и другие личные данные клиентов. В этом случае наш незаметный инсайдер может соорудить нечто подобное:
Этот код запрашивает объект CIM_DataFile для получения доступа к информации о создании файла Excel в указанном каталоге, а затем запускает выполнение блока сценария. Ближе к концу этой статьи мы рассмотрим подробнее, как может выглядеть этот блок сценария в случае с нашим гипотетическим инсайдером.
Для чего используется инструментарий управления Windows
Прежде чем мы перейдем к изучению того, как WMI может использоваться инсайдерами в целях отслеживания, стоит отметить, что у него есть множество законных применений. Глобальное предназначение этой системы — свести воедино все средства управления устройствами и приложениями в корпоративных сетях. Таким образом, WMI может использоваться:
- для сбора информации о статусе локальных и удаленных компьютерных систем
- настройки параметров безопасности для удаленных компьютеров и приложений
- настройки и редактирования свойств системы
- настройки и редактирования разрешений для авторизованных пользователей и групп
- выполнения кода и сериализации объектов (своеобразный «SSH на стероидах»)
- назначения и редактирования меток дисков
- создания графика выполнения процессов
- резервного копирования репозиториев объектов
- включения и отключения регистрации ошибок
Архитектура инструментария управления Windows

Инструментарий WMI является частью операционной системы Windows, и он предварительно установлен на всех операционных системах, начиная с Windows 2000. WMI состоит из следующих компонентов:
- Служба WMI — это реализация системы WMI в Windows. Этот процесс отображается под именем «Инструментарий управления Windows» и является связующим звеном между поставщиками WMI, репозиторием WMI и управляющими приложениями. Данный процесс запускается автоматически при включении компьютера.
- Управляемые объекты — это любые логические или физические компоненты либо службы, которыми можно управлять с помощью WMI. К таким объектам могут относиться самые разные компоненты, поскольку WMI может получить доступ к любому параметру или объекту, к которым имеют доступ другие инструменты Windows, такие как системный монитор.
- Поставщики WMI — это объекты, которые отслеживают события и данные конкретного объекта. Существует множество различных типов поставщиков WMI как общего назначения, так и предназначенных для конкретных устройств. Многие из них предварительно встроены в систему Windows.
- Классы используются поставщиками WMI для передачи данных службам WMI. В классах содержатся события и свойства, позволяющие получать и настраивать данные. Системные классы WMI предварительно определены и начинаются с двойного подчеркивания.
- Методы, будучи привязанными к конкретным классам, позволяют выполнять действия на основе имеющихся в них данных. Например, методы можно использовать для запуска и завершения процессов на удаленных компьютерах. Доступ к методам можно получить с помощью приложений для обработки сценариев или сетевого администрирования.
- Репозиторий WMI — это база данных, в которой хранятся все статические данные, связанные с WMI. Динамические данные не хранятся в репозитории. Доступ к ним можно получить через класс поставщика WMI.
- Диспетчер объектов CMI — это система, которая находится между управляющим приложением и поставщиками WMI. Она запрашивает данные у этих поставщиков и затем передает их приложению.
- API WMI выполняет эти операции и предоставляет приложениям доступ к инфраструктуре WMI без привязки к типу используемого устройства.
- Потребитель WMI — это сущность, которая отправляет запросы объектам через диспетчер объектов. Обычно потребитель WMI является приложением для мониторинга, таким как PRTG Network Monitor, управляющим приложением или сценарием PowerShell.
Выполнение запросов WMI
Самым простым способом выполнения запроса WMI является запуск WMIC в стандартной командной строке Windows. Выполните следующие действия, чтобы получить информацию о процессоре, используемом на локальном компьютере:
- Откройте командную строку
- Введите WMIC для вызова программы и нажмите клавишу Enter
- Появится окно командной строки WMIC
- В командной строке можно выполнять запросы WMI. Самый простой запрос — это просмотр информации о локальном процессоре, который можно выполнить с помощью следующей команды:
Практикум по использованию событий WMI для наблюдения за системой
В этом разделе мы рассмотрим, как с помощью WMI выполнять команды и отслеживать процессы на удаленных компьютерах. Подобные приемы можно использовать в составе системы анализа поведения пользователей и сущностей (UEBA) для автоматического мониторинга процессов во всей системе и проверки на инсайдерские угрозы, о которых свидетельствуют подозрительное поведение или аномальные события.
Использование функциональности wmiexec из Impacket
В WMI можно выполнять разные функции, помимо управления событиями. В нем можно запускать процессы и выполнять команды в окнах Windows как на локальных, так и на удаленных компьютерах. Ради интереса попробуйте ввести команду wmic process call create ‘notepad.exe’ в сеансе PowerShell, чтобы открыть старый текстовый редактор Microsoft. При этом используется замечательный инструмент командной строки wmic, входящий в состав WMI. Здорово, правда?
Если бы я добавил параметр /Node:, а затем имя удаленного компьютера Windows, то смог бы запустить Блокнот на нем, при условии что у меня есть соответствующие разрешения. Совершенно ясно, что на практическом уровне wmic является незаменимым помощником для системных администраторов.
Прежде чем вы начнете возмущаться: я знаю, что существуют эквивалентные командлеты PowerShell. Однако я считаю, что синтаксис wmic легче запомнить.
Было бы здорово, если бы я мог с помощью WMI создать простую и незаметную псевдооболочку.

Скрытая псевдооболочка, созданная с помощью wmiexec
К моему везению, это можно сделать в Impacket. В тестовой среде Amazon я использовал свой любимый wmiexec для доступа к WMI через виртуальную машину Linux. В wmiexec предусмотрена возможность создания псевдооболочки: каждый раз, когда на стороне клиента вводится команда, на целевом компьютере создается отдельная оболочка для выполнения этой команды.
И в psexec, и в smbexec для запуска команд в удаленной системе используются службы Windows. Работа smbexec протекает незаметнее, так как он быстро создает, а затем удаляет службу, а psexec, наоборот, оставляет ее на виду.

Инструмент wmiexec напрямую запускает cmd.exe для удаленного выполнения команды. Созданную команду можно найти в средстве просмотра событий. Обратите внимание, что мы избежали привлекающих внимание служб Windows
Инструмент wmiexec абсолютно не затрагивает службы, вместо этого используя описанные выше возможности WMI для непосредственного запуска процесса. При поиске возможных источников угроз специалисты по безопасности редко начинают с WMI, в то время как службы обычно являются хорошим местом для начала поиска улик, указывающих на атаку. Хороший ход, wmiexec!
Использование событий WMI для наблюдения за пользователями
Пока я тешил себя мыслью, что я один такой умный и занимаюсь экспериментами с WMI, оказалось, что ребята, занимающиеся тестами на проникновение, уже давно поняли, как все работает. Вам обязательно нужно прочитать потрясающую презентацию Мэтта Грэбера (Matt Graeber) с конференции Black Hat 2015 года, где он рассказывает, как злоумышленники могут превратить WMI и весь его арсенал для работы с событиями в инструмент для взломов.
В моей истории я представляю себе инсайдера а-ля Сноуден, который обладает некоторыми техническими знаниями, но не глубокой хакерской мудростью, и которому доверяют другие сотрудники. Этому человеку не нужно знать все про WMI. Ему нужно знать только то, что требуется для работы на удаленном компьютере и инициирования событий.
Помимо файловых объектов, есть еще один интересный класс объектов, который можно изучить с помощью WMI, — win32_LogOnSession. Запрос этого базового объекта Windows позволяет найти пользователей, которые в данный момент находятся в системе. Затем можно использовать блок сценария действий Register-WmiEvent для запуска сценария PowerShell при удаленном входе нового пользователя в систему. Уловили суть? Злоумышленник может получать уведомления каждый раз, когда пользователь, за которым он следит, входит в целевую систему.
Вот что я набросал:
Следующий вопрос — как запрограммировать выполнение блока сценария. Загадочного инсайдера из моих фантазий интересует конкретный пользователь — Круэлла. Наш злодей потихоньку шпионил за Круэллой и теперь планирует использовать собранную информацию, чтобы взломать ее рабочую учетную запись.
Задача блока сценария — проверить, кто вошел в систему, и определить, была ли это Круэлла. Я написал несколько строк кода PowerShell для этой цели, но это явно не самый лучший способ. Я никак не использую информацию о событии, передаваемую в блок сценария, а именно сведения о новом пользователе. Я наталкиваюсь на препятствия, причины которых я не могу понять в данный момент. Для этого нужно больше технических знаний, чем наш гипотетический инсайдер имеет или готов приобрести.
Вместо этого я просто перебрал список пользователей, возвращаемых gwmi Win32_Process (попробуйте запустить этот командлет в сеансе PowerShell), и сопоставил их с параметром «Круэлла». Можете полюбоваться на мое финальное решение:
Register-WmiEvent позволяет сохранять скрытность, поскольку он запускается только при новом входе в систему, вместо того чтобы регулярно запрашивать объект Win32_Process, что может быть довольно заметным.
Помните, что наш инсайдер старается не привлекать к себе внимания. У нее есть доступ к удаленной системе через psexec, smbexec или wmiexec (самый незаметный способ). Однако ей не нужно постоянно бродить туда-сюда по системе жертвы.
В этом и прелесть использования событий WMI. Вы можете дождаться уведомления от Register-WmiEvent, а затем спокойно сделать свой ход.
Интеграция Netcat и WMI
Но каким образом сценарий возвращает горячую новость о том, что Круэлла вошла в систему на целевом компьютере?
Если вы заметили, что я использовал команды Netcat выше, можете поставить себе плюсик. Netcat — известная и универсальная утилита, позволяющая устанавливать соединения (необязательно для вредоносного ПО). С помощью нее можно выполнять обратное подключение или просто передавать сообщения по сети. Я воспользовался этой второй возможностью.
Приведенный выше сценарий отправляет сообщение Netcat в режиме ожидания и отображает надпись «Круэлла вошла в систему». Миссия выполнена.
Вы можете представить себе, как наш мошенник затем сбрасывает хеши с помощью инструмента secretsdump Impacket, взламывает хеш учетных данных Круэллы, после чего запускает wmiexec, используя разрешения Круэллы, для поиска более ценных данных.

Код Register-WmiEvent можно запустить напрямую. Обратите внимание на отображаемый идентификатор события
Устранение недочетов в механизме наблюдения WMI
В рамках этого примера я хотел удаленно запустить (используя wmiexec) полезную программу, которая будет предупреждать меня, когда конкретный пользователь, то есть Круэлла, входит в систему. После этого я мог спокойно сбросить и взломать ее учетные данные. Это был бы самый незаметный способ — удаленный доступ и никаких файлов. Единственная проблема, как мне поначалу казалось, заключалась во временном характере событий WMI.
Поэтому мне нужно было заключить мое непристойно длинное Register-WMIEvent (ниже) в командную строку PowerShell с параметром –noexit, обеспечивающим сохранение сеанса PowerShell после выполнения Register-Event, а значит, и сохранение события.
Когда я начал работать над этим, я понял, что должен «преобразовать» специальные символы, такие как $, “ и |, и передавать их как литералы непосредственно в PowerShell. Еще одна головная боль: мне в итоге пришлось отказаться от использования вертикальных линий, поскольку они вызывали ошибки анализа. Не спрашивайте. Постепенно я пришел к этой длинной строке кода:
Она выглядела многообещающе и, казалось, работала правильно, если верить журналу событий Windows в целевой системе. Однако, присмотревшись, я понял, что она не работает. Я уверен, что в итоге смог бы привести ее в нужный вид, но для этого мне потребовалось бы время и кофе, много кофе. Есть и другой вариант, чуть менее незаметный и совсем не бесфайловый: можно использовать smbclient для переноса сценария, а затем запустить его напрямую на целевом компьютере.

Удаленное выполнение сложного командлета Register-Event казалось мне абсолютно правильным. Но оно не работало. Ну и ладно
Увы, на этом этапе мои предположения о том, что сообразительный, но не слишком опытный инсайдер мог бы легко использовать временные события WMI для скрытого наблюдения, стали потихоньку разваливаться.
Почему при наблюдении нужно использовать постоянные события?
Правильный и одновременно требующий более глубоких знаний способ заключается в использовании постоянных событий WMI. Постоянные события WMI, хотя и представляют некоторую сложность, не только являются более эффективным инструментом для шпионов-инсайдеров, чем временные события, но и позволяют гораздо эффективнее отслеживать внутренние угрозы.
Изучение постоянных событий потребует некоторого времени, но они представляют наиболее эффективный способ реализации строгой системы мониторинга для больших систем. Они обладают более широкими возможностями, чем временные события WMI. Их также можно использовать для оповещения о нестандартной вредоносной активности, такой как DNS-туннелирование или нарушение политик Zero Trust.
Я посвятил изучению постоянных событий пару дней и обнаружил, что в PowerShell есть специальный командлет, который упрощает процесс создания фильтра событий, потребителя и объектов WMI между фильтром и потребителем. Как мы все знаем, PowerShell предоставляет администраторам широкие возможности для упрощения работы. К сожалению, данный пример показывает, как этими прекрасными возможностями могут воспользоваться злоумышленники.
Инсайдер создает постоянное событие на целевой системе, тем самым освобождая себя от необходимости присутствовать в сеансе оболочки. Событие остается там навсегда или до тех пор, пока не будет удалено явным образом. Подробнее о том, как это сделать, можно прочитать здесь , но в целом процесс похож на то, что я сделал выше с временным событием. Последнее, что потребуется от нашего хакера, — связать фильтр события с потребителем события.
Соглашусь, что для обычного сотрудника, который вдруг решил стать злобным хакером, это выглядит слишком круто. Ради интереса я почитал разные форумы и увидел, что многие люди безуспешно бьются над тем, чтобы заставить постоянные события WMI работать. Однако это вовсе не выходит за рамки возможностей нашего «Сноудена» и других сообразительных системных администраторов, которые решили перейти на темную сторону.
Постоянные события: советы для ИТ-администраторов

Эти методы не предназначены для обучения потенциальных хакеров или обиженных сотрудников, которые хотят отомстить работодателю. Все, чего я хочу, — это помочь ИТ-специалистам понять образ мысли хакера, чтобы они могли внедрить соответствующую защиту от атак на проникновение. Для них я показываю, как настроить фильтр и объекты потребителя с помощью командлета Set-WmiInstance:
Ваше домашнее задание — придумать код PowerShell, который свяжет эти два компонента воедино.
В ходе моих собственных тестов я смог заставить постоянное событие работать на целевой системе без чрезмерных усилий и страданий. Как вы помните, этого было весьма сложно добиться с временными событиями WMI, которые длятся ровно столько, сколько и сеанс PowerShell.
Настроив постоянное событие WMI, чтобы, например, следить за входом пользователей в систему, инсайдер или хакер не обязан оставаться в целевой системе. Дополнительным бонусом является то, что постоянное событие WMI является устойчивым: при перезагрузке компьютера триггеры событий по-прежнему действуют. Это делает постоянные события WMI мощным и скрытным способом инициировать атаку, которая может включать гораздо больше, чем просто мониторинг. Как вы помните, события WMI — далеко не самое первое место, где специалисты по безопасности будут искать источник атаки.
Например, код PowerShell для потребителя события может выступать как средство запуска и скачивать вредоносное ПО, хранящееся на удаленном сервере, с помощью DownloadString. Великолепная презентация Мэтта Грэбера на конференции Black Hat содержит много информации о вредоносном потенциале постоянных событий WMI.
Если вы специалист по безопасности, то как вы будете работать с событиями WMI с точки зрения их потенциального вредоносного использования?
Удача на вашей стороне: с помощью командлета Get-WmiObject (псевдоним gwmi) можно создать список фильтров событий, потребителей и связывающих объектов:

Вы перечисляете постоянные события WMI с помощью Get-WMIObject и устанавливаете соответствующие параметры. Обратите внимание на отсутствие отметки о времени создания.
Теперь, если фильтр (или потребитель) постоянного события покажется им подозрительным, ИТ-специалисты могут отключить его путем удаления с помощью конвейера PowerShell и командлета WMI-RemoveObject:

Удаление постоянных событий WMI включает использование конвейера PowerShell
Обратите внимание, что здесь не указано ни время создания события, ни имя злонамеренного пользователя. Для получения этой криминалистической информации потребуется обратиться к журналам событий Windows. Подробнее об этом ниже.
Можно ли отключить постоянные события WMI?
По крайней мере, ИТ-специалисты могут быстро увидеть зарегистрированные постоянные события WMI и приступить к анализу сценариев реальных событий на наличие признаков угроз. Возможно, как опытный специалист по ИТ-безопасности, вы считаете, что не всем нужен WMI на ноутбуках и лучшая стратегия по работе с уязвимостями постоянных событий WMI — это совсем отключить WMI.
Можно попробовать отключить службу Winmgmt, которая запускает WMI. На практике это не так уж просто. В ходе моих собственных тестов я так и не смог отключить эту службу: она автоматически запускалась снова и снова.
Предположим, что вам все же удалось отключить ее. Административное программное обеспечение Windows во многом зависит от WMI и не будет работать, если Winmgmt недоступна. По всему Интернету форумы наполнены сообщениями, предостерегающими от отключения WMI. Советую к ним прислушаться и помиловать ваш WMI.
Выявление событий WMI, представляющих угрозу, с помощью Sysmon и SIEM
В общем, вам придется принять уязвимость событий WMI как факт. К счастью, есть более эффективные способы обнаружения постоянных событий и других подозрительных операций с событиями в Windows, чем использование вышеупомянутого командлета Powershell.
Знакомьтесь, Sysmon! Я не буду вдаваться в подробности, рассказывая об этой бесплатной утилите Windows, которую можно загрузить здесь, в этой статье. Скажу лишь, что она позволяет получать очень полезную информацию для анализа в одном месте, вместо того чтобы просматривать каждый журнал событий Windows по отдельности. Пользователям Windows 7 и более поздних версий возможности Sysmon могут не понадобиться, поскольку в новых системах Windows используются более совершенные механизмы ведения стандартных журналов.

Sysmon — удобная и понятная утилита для регистрации событий от Microsoft
Sysmon назначает идентификатор события 19 созданию постоянного событию фильтра WMI (20 назначается созданию события потребителя WMI, а 21 — связыванию WMI). Если вы откроете средство просмотра событий, вы найдете журнал событий Sysmon в разделе Microsoft -> Windows -> Sysmon.
Вы не хотите открывать средство просмотра событий вручную, чтобы отслеживать постоянные события WMI, которые могут быть признаком хакерской активности. Мы знаем, как вам помочь.
Почему бы не создать фильтр постоянных событий WMI для мониторинга создания (догадались?) постоянного события WMI?
На GitHub есть небольшой проект, где вы найдете код для настройки этой операции. Вот фрагмент кода для фильтра событий WMI, который позволяет отслеживать создание… да-да, фильтра событий WMI:
Очевидно, что здесь нам понадобится помощь средств по управлению информационной безопасностью и событиями безопасности (SIEM), поскольку улики погребены в завалах журналов. Я думаю, вы понимаете, к чему все идет. Вам понадобится решение для мониторинга безопасности, объединяющее функции SIEM с анализом других угроз для обнаружения и устранения угроз, связанных с постоянными событиями WMI.
Часто задаваемые вопросы об инструментарии управления Windows
Описанные выше методы вполне могут быть использованы для реализации системы наблюдения в вашей сети, однако у вас могли остаться некоторые вопросы о WMI. В этом разделе мы ответим на самые распространенные из них.
WMI объявлен устаревшим?
Сам WMI не устарел, но была объявлена устаревшей WMIC, что вводит многих людей в заблуждение. Для доступа к функциям, ранее обеспечиваемым WMIC, теперь используется PowerShell.
Какие порты использует WMI?
WMI использует TCP-порт 135 и ряд динамических портов: 49152-65535 (динамические порты RPC: Windows Vista, 2008 и выше), TCP 1024-65535 (динамические порты RPC: Windows NT4, Windows 2000, Windows 2003). Вы также можете настроить для WMI пользовательский диапазон портов.
WMI использует WimRM?
Данная конфигурация не является стандартной, однако вы можете использовать WMI для получения данных с помощью сценариев или приложений, использующих WinRM Scripting API, или с помощью инструмента командной строки Winrm. WinRM может использовать WMI для сбора данных о ресурсах или для управления ресурсами в операционной системе Windows.
Заключение
Как мы увидели, WMI предоставляет администраторам мощный инструмент для мониторинга удаленных процессов и компьютеров и может использоваться при разработке соглашений о мониторинге конечных пользователей (EUMA) для автоматического оповещения о подозрительной активности. Это делает его отличным инструментом для обнаружения и устранения внутренних угроз, предотвращения попыток обойти политики безопасности, а также наблюдения за тем, как используются ваши системы.
Если вы хотите узнать больше о том, как использовать WMI для наблюдения за инсайдерской деятельностью, вы можете скачать наше подробное руководство здесь.