6
0
mirror of https://github.com/JKornev/hidden synced 2024-06-16 12:08:05 +00:00

Added path normalization to the ps monitor

This commit is contained in:
JKornev 2016-09-19 23:20:30 +03:00
parent 22fdb1d00b
commit 4c3047c669
3 changed files with 80 additions and 33 deletions

@ -35,15 +35,15 @@ OB_PREOP_CALLBACK_STATUS ProcessPreCallback(PVOID RegistrationContext, POB_PRE_O
if (OperationInformation->KernelHandle)
return OB_PREOP_SUCCESS;
if (!IsProcessProtected(PsGetProcessId(OperationInformation->Object)))
return OB_PREOP_SUCCESS;
DbgPrint("FsFilter1!" __FUNCTION__ ": !!!!! Process: %d(%d:%d), Oper: %s, Space: %s\n",
DbgPrint("FsFilter1!" __FUNCTION__ ": !!!!! Process: %d(%d:%d), Oper: %s, Space: %s\n",
PsGetProcessId(OperationInformation->Object), PsGetCurrentProcessId(), PsGetCurrentThreadId(),
(OperationInformation->Operation == OB_OPERATION_HANDLE_CREATE ? "create" : "dup"),
(OperationInformation->KernelHandle ? "kernel" : "user")
);
if (!IsProcessProtected(PsGetProcessId(OperationInformation->Object)))
return OB_PREOP_SUCCESS;
if (IsProcessProtected(PsGetCurrentProcessId()))
{
@ -68,15 +68,15 @@ OB_PREOP_CALLBACK_STATUS ThreadPreCallback(PVOID RegistrationContext, POB_PRE_OP
if (OperationInformation->KernelHandle)
return OB_PREOP_SUCCESS;
DbgPrint("FsFilter1!" __FUNCTION__ ": Thread: %d(%d:%d), Oper: %s, Space: %s\n",
if (!IsProcessProtected(PsGetProcessId(OperationInformation->Object)))
return OB_PREOP_SUCCESS;
DbgPrint("FsFilter1!" __FUNCTION__ ": Thread: %d(%d:%d), Oper: %s, Space: %s\n",
PsGetThreadId(OperationInformation->Object), PsGetCurrentProcessId(), PsGetCurrentThreadId(),
(OperationInformation->Operation == OB_OPERATION_HANDLE_CREATE ? "create" : "dup"),
(OperationInformation->KernelHandle ? "kernel" : "user")
);
if (!IsProcessProtected(PsGetProcessId(OperationInformation->Object)))
return OB_PREOP_SUCCESS;
if (IsProcessProtected(PsGetCurrentProcessId()))
{
DbgPrint("FsFilter1!" __FUNCTION__ ": !!!!! allow protected thread %d\n", PsGetCurrentProcessId());
@ -379,7 +379,36 @@ NTSTATUS DestroyPsMonitor()
NTSTATUS AddProtectedImage(PUNICODE_STRING ImagePath, ULONG InheritType, PULONGLONG ObjId)
{
return AddRuleToPsRuleList(g_protectProcessRules, ImagePath, InheritType, ObjId);
const USHORT maxBufSize = ImagePath->Length + NORMALIZE_INCREAMENT;
UNICODE_STRING normalized;
NTSTATUS status;
normalized.Buffer = (PWCH)ExAllocatePool(PagedPool, maxBufSize);
normalized.Length = 0;
normalized.MaximumLength = maxBufSize;
if (!normalized.Buffer)
{
DbgPrint("FsFilter1!" __FUNCTION__ ": error, can't allocate buffer\n");
return STATUS_MEMORY_NOT_ALLOCATED;
}
status = NormalizeDevicePath(ImagePath, &normalized);
if (!NT_SUCCESS(status))
{
DbgPrint("FsFilter1!" __FUNCTION__ ": path normalization failed with code:%08x, path:%wZ\n", status, ImagePath);
ExFreePool(normalized.Buffer);
return status;
}
DbgPrint("FsFilter1!" __FUNCTION__ ": protect image: %wZ\n", &normalized);
status = AddRuleToPsRuleList(g_protectProcessRules, &normalized, InheritType, ObjId);
ExFreePool(normalized.Buffer);
return status;
//DbgPrint("FsFilter1!" __FUNCTION__ ": protect image: %wZ\n", ImagePath);
//return AddRuleToPsRuleList(g_protectProcessRules, ImagePath, InheritType, ObjId);
}
NTSTATUS GetProtectedProcessState(HANDLE ProcessId, PULONG InheritType, PBOOLEAN Enable)
@ -433,7 +462,34 @@ NTSTATUS RemoveAllProtectedImages()
NTSTATUS AddExcludedImage(PUNICODE_STRING ImagePath, ULONG InheritType, PULONGLONG ObjId)
{
return AddRuleToPsRuleList(g_excludeProcessRules, ImagePath, InheritType, ObjId);
const USHORT maxBufSize = ImagePath->Length + NORMALIZE_INCREAMENT;
UNICODE_STRING normalized;
NTSTATUS status;
normalized.Buffer = (PWCH)ExAllocatePool(PagedPool, maxBufSize);
normalized.Length = 0;
normalized.MaximumLength = maxBufSize;
if (!normalized.Buffer)
{
DbgPrint("FsFilter1!" __FUNCTION__ ": error, can't allocate buffer\n");
return STATUS_MEMORY_NOT_ALLOCATED;
}
status = NormalizeDevicePath(ImagePath, &normalized);
if (!NT_SUCCESS(status))
{
DbgPrint("FsFilter1!" __FUNCTION__ ": path normalization failed with code:%08x, path:%wZ\n", status, ImagePath);
ExFreePool(normalized.Buffer);
return status;
}
DbgPrint("FsFilter1!" __FUNCTION__ ": exclude image: %wZ\n", &normalized);
status = AddRuleToPsRuleList(g_excludeProcessRules, &normalized, InheritType, ObjId);
ExFreePool(normalized.Buffer);
return status;
}
NTSTATUS GetExcludedProcessState(HANDLE ProcessId, PULONG InheritType, PBOOLEAN Enable)

@ -618,13 +618,7 @@ NTSTATUS DestroyRegistryFilter()
NTSTATUS AddHiddenRegKey(PUNICODE_STRING KeyPath, PULONGLONG ObjId)
{
NTSTATUS status;
// TODO: normalize registry key path
status = AddExcludeListRegistryKey(g_excludeRegKeyContext, KeyPath, ObjId);
return status;
return AddExcludeListRegistryKey(g_excludeRegKeyContext, KeyPath, ObjId);
}
NTSTATUS RemoveHiddenRegKey(ULONGLONG ObjId)
@ -639,13 +633,7 @@ NTSTATUS RemoveAllHiddenRegKeys()
NTSTATUS AddHiddenRegValue(PUNICODE_STRING ValuePath, PULONGLONG ObjId)
{
NTSTATUS status;
// TODO: normalize registry value path
status = AddExcludeListRegistryValue(g_excludeRegValueContext, ValuePath, ObjId);
return status;
return AddExcludeListRegistryValue(g_excludeRegValueContext, ValuePath, ObjId);
}
NTSTATUS RemoveHiddenRegValue(ULONGLONG ObjId)

@ -19,22 +19,25 @@
+ Добавить проект HiddenTest
- Реализовать тесты в проекте HiddenTest
+ FS monitor
- Reg filter
+ Reg filter
- Ps filter
- Добавить в Reg filter поддержку всех возможных операций над value
- set value
- delete value
- query value
- query multiple value
+ Добавить в Reg filter поддержку всех возможных операций над value
+ set value
+ delete value
+ query value
+ query multiple value
- Почистить Exclude List
+ Добавить в Exclude List поддержку case insensetive crc32 (если возможно, например русские буквы) (*Нет необхлжимости)
- Добавить в Exclude List для файлов такую же лексическую сортировку как и в реестру, возможно обьеденить ф-и
- Переписать всё на основе AVL или других buildin generic trees
- Реализовать конвертирование пути в пути драйвера
- Ps monitor
+ Реализовать конвертирование пути в пути драйвера
+ Ps monitor
+ FS filter
- Reg filter
+ Reg filter
+ Реализовать RemoveAllExcludeListEntries
- Реализовать все ф-и Ps monitor
- Добавить в библиотеку поддержку get\set state
- Решить проблему с protected (возможно разрешить создавать такие процессы только из protected\system)
- Реализовать IOCTL протокол управления
+ Реализовать usermode библиотеку для работы с IOCTL API
- Реализовать программу управления драйвером, средствами IOCTL API