Не мог бы мне ктонить дать направление в какую сторону копать... Есть драйвер режима ядра. перехватывает NtOpenProcess, ZwWriteVirtualMemory. Как можно зная PID процесса защитить его от сторонних инжектов. Т.е. присоединений всяких родов ДЛЛ, но только тех что не стандартно грузятся.
при создании процесса парсить импорты исполняемого файла процесса и импорты всех библиотек кторые он грузит и составлять на основе этих данных некий список, это нужно для того, чтоб по факту выявить библиотеки которые при нормальных условиях не загрузились бы загрузчиком, далее ставить нофити на загрузку образа и чекать имя загружаемой библиотеки по вышеупомянутому списку
а если приложение целиком и польностью полагается на explicit linking? т.е. на LoadLibrary/GetProcAddress
Тут читал про детект инжекта OutPost'ом. Он разрешает записывать не более 15 байт я так понял ? Если больше 15 то ахтунг ? Я промониторил запуск процесса и вот что выяснил... Code (Text): процесс csrss.exe пишет при запуске проги 56 байт Брал значения байт NTSTATUS NtWriteVirtualMemory ( IN HANDLE ProcessHandle, IN PVOID BaseAddress, IN PVOID Buffer, IN ULONG BufferLength, <------------------ <ТУТ> OUT PULONG ReturnLength OPTIONAL ) и суммировал. Че получается... стоял бы у меня OutPost он бы csrss.exe за вирь принял бы ? =\ Так и начал делать, пока не протестил запуск процесса на разных системах. Каждая система пишет разное кол-во байт и присоединяет немного другие библы. но в основном одно и то же. но все же различия есть. Как этого избежать ? =\ Просто их заблочить ? Пробовал... пишет ошибки и вылетает
Мониторил и после запуска первой нити... намнооого больше чем 15 байт пишется. Нада найти универсальный метод =\
WaterGhost аутпост обходиться в р3 как два пальца. Мс-Рем когда то писал на форуме куда надо копать, так что копайте.
Ну обойти то ято как 2а пальца сами знаете что сделать ))) Я имею ввиду как можно доработать эту защиту чтобы было не все так просто ...
Видимо, случай записи из процесса-родителя и csrss нужно обрабатывать особо, а по окончанию процесса инициализации блокировать все способы inject'а даже из этих процессов, разрешая опасные действия только для защищаемого процесса (списки строить не надо). Хотя для полноценной защиты скорее всего поднадобится контроль целостности, а он не может корректно работать без вмешательства пользователя.
гм, ну, всегда есть выход, все делать в ring0, а для пущей важности запихнуть себя в BIOS/MBR, далее при загрузке запускать тот или иной гипервизор. но тогда уж проще вынести себя на болванку. хороший список antiinject-перехватов можно подсмотреть у некоторых AV/FW, пример - KIS.