- Новое
- Добавить закладку
- #1
Относительно недавно перешел с ассемблера на Си, изучил базу, подумал что нужно закрепить знания, решил написать собственный PoC-EDR на уровне юзермода.
Написал буквально за день, не судите строго, хукнул ток те функции, которые +- успел.
Корреляционного движка пока-что нет, но я делал IPC-туннель, которая передает все данные в мой инжектор, который непосредственно инжектит edr.dll в процессы.
1) Хук на подозрительные функции, решил поставить на: NtAllocateVirtualMemory, RegSetValueExA, ShellExecuteA, HookRegCreateKeyExA, GetThreadContext, SetThreadContext, AddVectoredExceptionHandler(veh-обработчик)
2) HWDB, аппаратные точки останова(конкретно, регистры dr0-dr3-dr7) которые хранят в себе адрес функций, решил воспользоваться HWDB для детекта NtCreateThreadEx. Еслт процесс не равен текущему И не равен псевдо-хэндлу, - детект.
Из ctx достаю регистр r9 который в структуре равен ProcessHandle:
3) Поставил хуки на GetThreadContext/SetThreadContext. Чтобы малварь не могла прочитать аппаратные регистры процессора и понять, что там не нули))) Поставил хук и возвращаю малвари нули, чтобы она думала что регистры чистые:
После чего, моментально, с точки зрения создание малвари, малварь должна сразу же вызвать SetThreadContext, чтобы задать значения, тупо на всякий случай задать нули, там ее ловит мой хук и мягко-говоря посылает лесом:
Проверяю, пытается ли малварь поменять состояние аппаратных регистров, если да - стопаю процесс. Если все норм - вызываю оригинальную функцию.
4) Также поставил хук на veh-обработчик, чтобы малварь не пытался создать поверх моего обработчика свой, поставить свой в приоритет и обойти HWDB детект:
5) И непосредственно внутри своего обработчика реализовал CaptureStackBackTrace с целью понять, вызывается ли код из .text секции или же из кучи, если из кучи - детект т.к оттуда чаще всего вызываются заинжектированные шеллкоды:
Жду оценку. Критику и чего можно еще добавить.
Также работоспособность свой edr проверял на своем дроппере. Написан он на ассемблере FASM, мне лень было добавлять весь функционал который детектит edr, я просто сделал UAC-bypass через fodhelper который благополучно детектится моей edr-кой:
Другие функции тоже детектит
Написал буквально за день, не судите строго, хукнул ток те функции, которые +- успел.
Корреляционного движка пока-что нет, но я делал IPC-туннель, которая передает все данные в мой инжектор, который непосредственно инжектит edr.dll в процессы.
1) Хук на подозрительные функции, решил поставить на: NtAllocateVirtualMemory, RegSetValueExA, ShellExecuteA, HookRegCreateKeyExA, GetThreadContext, SetThreadContext, AddVectoredExceptionHandler(veh-обработчик)
2) HWDB, аппаратные точки останова(конкретно, регистры dr0-dr3-dr7) которые хранят в себе адрес функций, решил воспользоваться HWDB для детекта NtCreateThreadEx. Еслт процесс не равен текущему И не равен псевдо-хэндлу, - детект.
Из ctx достаю регистр r9 который в структуре равен ProcessHandle:
3) Поставил хуки на GetThreadContext/SetThreadContext. Чтобы малварь не могла прочитать аппаратные регистры процессора и понять, что там не нули))) Поставил хук и возвращаю малвари нули, чтобы она думала что регистры чистые:
После чего, моментально, с точки зрения создание малвари, малварь должна сразу же вызвать SetThreadContext, чтобы задать значения, тупо на всякий случай задать нули, там ее ловит мой хук и мягко-говоря посылает лесом:
Проверяю, пытается ли малварь поменять состояние аппаратных регистров, если да - стопаю процесс. Если все норм - вызываю оригинальную функцию.
4) Также поставил хук на veh-обработчик, чтобы малварь не пытался создать поверх моего обработчика свой, поставить свой в приоритет и обойти HWDB детект:
5) И непосредственно внутри своего обработчика реализовал CaptureStackBackTrace с целью понять, вызывается ли код из .text секции или же из кучи, если из кучи - детект т.к оттуда чаще всего вызываются заинжектированные шеллкоды:
Жду оценку. Критику и чего можно еще добавить.
Также работоспособность свой edr проверял на своем дроппере. Написан он на ассемблере FASM, мне лень было добавлять весь функционал который детектит edr, я просто сделал UAC-bypass через fodhelper который благополучно детектится моей edr-кой:
Другие функции тоже детектит
Вложения
Последнее редактирование: