Process Argument Spoofing в PEB и детект "давай досвидания"

Process Argument Spoofing в PEB и детект "давай досвидания"

Zer0way

Про спуфинг аргументов процессов написано очень много и разжевано досконально.

Вкратце: Process Environment Block (PEB)содержит в себе различную информацию о процессе. Раздел RTL_USER_PROCESS_PARAMETERS в PEB содержит атрибут CommandLine который определен как UNICODE_STRING. В элементе buffer UNICODE_STRING собственно и помещается аргумент передаваемый при запуске.

Как происходит подмена?

1.     Запускаем процесс в приостановленном состоянии

2.     Получаем адрес PEB созданного процесса

3.     Прочитаем структуру PEB

4.     Прочитаем PROCESS_PARAMETERS в PEB

5.     Заменяем содержимое Buffer в CommandLine PROCESS_PARAMETERS

6.     Возобновляем выполнение процесса

Есть множество примеров реализации спуфинга, но мне зашел вариант https://github.com/itaymigdal/LOLSpoof так как я сам хотел написать интерактивную оболочку для выполнения спуфинга "на лету".

Чем же эта история полезна "красным"?

1) Антивирусное ПО, вернее его компоненты поведенческого анализа как и некоторые EDR обнаруживают угрозы по тому самому commandline запускаемых процессов.

Например, вы можете запустить любой бинарь с указанием параметров утилиты mimikatz: "privilege::debug" "sekurlsa::logonpasswords" и антивирусное ПО Kaspersky Endpoint Security заблокирует данную активность, выдаст вердикт PDM:Trojan.Win32.Generic.

denied....

Если же данную активность проявить с спуфингом PEB, то KES молчит и команда выполняется. Результата в виде дампа конечно не будет, потому что команды от mimikatz я запулил в certutil и он просто выдаст ошибку.

allowed....

Был детект и нет детекта.....

Посмотрим на lolbas, их теперь палит каждый утюг. Запустим команду:

certutil.exe -urlcache -split -f http://7-zip.org/a/7z1604-x64.exe 7zip.exe

Эту команду палит KES и Defender.....

хочется спросить...б*** серьезно?

Запускаем утилиту LOLSpoof и выполняем эту же команду:

команда успешно выполнилась и defender не видит ничего подозрительного.

Угроз нет, но это не точно)

2) Огромное количество правил корреляции SIEM систем использует как раз таки commandline процессов. Например, sigma rules: https://github.com/SigmaHQ/sigma/tree/master/rules/windows/process_creation

В какое правило не плюнь, попадешь в зависимость от конкретного commandline.

Далеко ходить не будем, возьмем правило по net:

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_net_groups_and_accounts_recon.yml

Нас интересует кусок:

detection:
 selection_img:
 - Image|endswith:     
   - '\net.exe'
   - '\net1.exe'
 - OriginalFileName: 
   - 'net.exe
   - 'net1.exe
selection_group_root:
 CommandLine|contains:
   - ' group '
   - ' localgroup '
selection_group_flags:
  CommandLine|contains
   - 'domain admins'
.........................
condition: selection_img and ((all of selection_group_* and not filter_group_add) or all of selection_accounts_*)

То есть чтобы попасть под это чудо правило нам нужно выполнить команду net1 group "domain admins" /domain

В виндовых событиях, eventid 4688 в commandline будет как раз наша строка с параметрами, по которым нас обнаружит это правило:

Теперь попробуем сделать тоже самое со спуфингом PEB:

Команда успешно выполнилась и результат выдала, но в commandline переданных параметров нет.

Таким образом, множество правил корреляции нас попросту не увидят.


Что же делать синим?

1) Особенности спуфинга PEB позволяют обнаружить его по множеству пробелов в конце поля "Process Command Line" (но пробелы могут быть порезаны парсерами логов))):

2) Обращать внимание на родительские процессы. На необычное "поведение" и побочные события, например попытка установить сетевое соединение утилитой certutill или powershell.

3) Использовать edr и отслеживать запуск процессов в приостановленном состоянии. Такое поведение не типично и требует особого внимания. Отслеживая такое поведение вы сможете обнаружить еще и "Process Hollowing".



Report Page