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.

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

Был детект и нет детекта.....
Посмотрим на 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:
Нас интересует кусок:
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".