Задний план
Операционная система имеет компонент, известный как ядро. Одна из (многих) обязанностей ядра - управлять системной памятью (как физической, так и виртуальной).
Как часть этого, ядро разделяет доступную память на две отдельные области, известные как режим пользователя и режим ядра. Ядро и драйверы совместно используют память режима ядра, а пользовательские программы и менее важные системные компоненты находятся в области памяти режима пользователя.
Процессы в пользовательском режиме обычно не могут обмениваться данными с процессами в режиме ядра, кроме как по специально назначенным и контролируемым каналам.
Для полноты следует упомянуть, что процессы, работающие в пользовательском режиме, также изолированы друг от друга, но могут более свободно обмениваться данными друг с другом с помощью средств, предоставляемых операционной системой, при условии, что программы предназначены для этого.
Процессы
Ядро предоставляет возможность запуска процессов в пользовательском режиме. Когда процесс создан, он добавляется во внутренний список процессов, которые существуют в настоящее время. Когда такая программа, как диспетчер задач, запрашивает список процессов, она получает подмножество информации в этом списке, отфильтрованное по разрешениям пользователя.
Один из способов, позволяющий вредоносным программам, таким как руткит, скрыть свое существование, - это непосредственно удалить себя из этой таблицы. Сделав это, он все еще может выполняться, но больше не будет отображаться в списке процессов, получаемых обычными средствами.
Поскольку эти процессы все еще существуют и выполняются, их можно найти путем проверки других структур данных ядра, таких как таблицы дескрипторов, которые содержат информацию о ресурсах, открытых у процесса (например, файлы), или путем изучения распределения памяти, из которого он более трудно спрятать, не мешая программному обеспечению функционировать.
Драйверы режима ядра
Драйверы режима ядра используются для многих целей, включая взаимодействие с физическими аппаратными устройствами. Они выполняются под контролем ядра по мере необходимости, но, поскольку они не являются процессом пользовательского режима, они не отображаются в таблице процессов. и, следовательно, не появится в диспетчере задач или других инструментах, связанных исключительно с процессами.
Возможность запуска кода в режиме ядра является важным шагом к возможности эффективно скрывать существование исполняемого кода. При нормальных обстоятельствах Windows требует, чтобы код в режиме ядра был подписан для запуска, поэтому вредоносным программам может понадобиться использовать эксплойты в операционной системе, другом программном обеспечении или даже социальной инженерии, чтобы попасть сюда, но как только код выполняется в режиме ядра, скрывается становится легче.
Резюме
Таким образом, можно скрыть свидетельство существования процесса, вероятно, всегда будет какой-то признак того, что процесс существует, потому что обычно ему всегда нужно использовать какую-то форму ресурса, чтобы делать то, для чего он предназначен, насколько сложно это обнаружение зависит от конкретной вредоносной программы.