Предположим, нам нужно задетектировать открытие секции "\\Device\\PhysicalMemory" с правами на запись юзерским приложением.
Стандартным решением в такой ситуации будет перехват ф-ции ZwOpenSection в ssdt a.k.a сплайсинг.
Правильно ли это? Казалось бы да, других способов открыть секцию минуя эту ф-цию вроде бы не существует, и все обращения пользовательских процессов к данной секции будут найдены. Однако, это не так.
Секрет в том, что секция может быть открыта неявно.
К примеру, java.exe при определенных обстоятельствах обращается к драйверу videoprt.sys, а он делает:
PAGE:0001D089 push ds:_PhysicalMemorySection
PAGE:0001D08F call ds:impObOpenObjectByPointer@28
Все это конечно происходит в контексте вызывающего, и KTHREAD.PreviousMode равен UserMode. Таким образом никаким сплайсингом такое не задетектировать, нужно спуститься чуть глубже и установить OpenProcedure у объекта секция, в агрументах придет вся необходимая информация, которой достаточно для определения имени секции, вызвающего процесса, маски доступа и т.д.
Стандартным решением в такой ситуации будет перехват ф-ции ZwOpenSection в ssdt a.k.a сплайсинг.
Правильно ли это? Казалось бы да, других способов открыть секцию минуя эту ф-цию вроде бы не существует, и все обращения пользовательских процессов к данной секции будут найдены. Однако, это не так.
Секрет в том, что секция может быть открыта неявно.
К примеру, java.exe при определенных обстоятельствах обращается к драйверу videoprt.sys, а он делает:
PAGE:0001D089 push ds:_PhysicalMemorySection
PAGE:0001D08F call ds:impObOpenObjectByPointer@28
Все это конечно происходит в контексте вызывающего, и KTHREAD.PreviousMode равен UserMode. Таким образом никаким сплайсингом такое не задетектировать, нужно спуститься чуть глубже и установить OpenProcedure у объекта секция, в агрументах придет вся необходимая информация, которой достаточно для определения имени секции, вызвающего процесса, маски доступа и т.д.
в итоге получилось использовать videoprt.sys, для записи в физ. память?
ОтветитьУдалитьЯ ловил запись в физ. память, а не записывал =]
ОтветитьУдалить