Причина, по которой я спрашиваю об этом, заключается в том, что мне любопытно, может ли на компьютере существовать вирус, и я бы никогда не узнал, существует ли он. Чтобы быть более конкретным, вирус, который не выделяет никаких признаков.
6 ответов
Существует класс вредоносных программ, которые могут полностью скрыться от операционной системы, известной как руткит.
Руткиты используются для сокрытия улик других вредоносных программ на работе и очень глубоко внедряются в операционную систему. Благодаря их глубокому внедрению они могут оперативно управлять списками процессов, таблицами файловых систем и другими важными структурами.
Управляя структурами файловой системы в памяти, они могут возвращать ложные или вводящие в заблуждение результаты для каталогов, в частности, не показывая файлы, связанные с основным вредоносным ПО. Файлы есть, и загрузка в незараженную операционную систему, такую как Linux LiveCD, покажет файлы, так как они должны быть где-то сохранены.
Аналогично, руткиты могут просто отбрасывать определенные процессы из отчетов в такие программы, как диспетчер задач. Ядро операционной системы знает о них, так как оно необходимо для того, чтобы запланировать их, оно только что было заблокировано, чтобы сообщить о них внешнему миру.
Там появятся все нормальные программы, но ...
- без учетной записи администратора вы сможете видеть только свой собственный процесс (учетные записи администратора могут выбрать просмотр всех процессов)
- руткиты будут пытаться скрыть свое существование, скрывая свой процесс из списка, скомпрометируя диспетчер задач (чтобы он его не отображал), прячась в адресном пространстве другого процесса ...
- сервисы будут работать как потоки в процессе
svchost
(в большинстве случаев), поэтому нет простого момента, когда сервис запускается в данном экземпляре svchost.
Есть несколько программ, предназначенных для обнаружения руткитов. Они делают это, проверяя, например, список потоков, запрограммированных для выполнения, и список процессов в системе (поток, не принадлежащий какому-либо процессу, является признаком скрытого процесса), или список файлов, видимых на высоком уровне, и сравнивая его с файлами, которые он читает вручную с раздела диска.
Тем не менее, после заражения вирус может скрыть свое присутствие настолько хорошо, что его почти невозможно обнаружить. Обычно их называют APT (постоянная постоянная угроза).
Фон
Операционная система имеет компонент, известный как ядро. Одна из (многих) обязанностей ядра - управлять системной памятью (как физической, так и виртуальной).
Как часть этого, ядро разделяет доступную память на две отдельные области, известные как режим пользователя и режим ядра. Ядро и драйверы совместно используют память режима ядра, а пользовательские программы и менее важные системные компоненты находятся в области памяти режима пользователя.
Процессы в пользовательском режиме обычно не могут обмениваться данными с процессами в режиме ядра, кроме как по специально назначенным и контролируемым каналам.
Для полноты следует упомянуть, что процессы, работающие в пользовательском режиме, также изолированы друг от друга, но могут более свободно обмениваться данными друг с другом с помощью средств, предоставляемых операционной системой, при условии, что программы предназначены для этого.
Процессы
Ядро предоставляет возможность запуска процессов в пользовательском режиме. Когда процесс создан, он добавляется во внутренний список процессов, которые существуют в настоящее время. Когда такая программа, как диспетчер задач, запрашивает список процессов, она получает подмножество информации в этом списке, отфильтрованное по разрешениям пользователя.
Один из способов, позволяющий вредоносным программам, таким как руткит, скрыть свое существование, - это непосредственно удалить себя из этой таблицы. Сделав это, он все еще может выполняться, но больше не будет отображаться в списке процессов, получаемых обычными средствами.
Поскольку эти процессы на самом деле все еще существуют и выполняются, их можно найти путем проверки других структур данных ядра, таких как таблицы дескрипторов, которые содержат информацию о ресурсах, открытых у процесса (например, файлы), или путем изучения распределения памяти, из которого он более трудно спрятать, не мешая программному обеспечению функционировать.
Драйверы режима ядра
Драйверы режима ядра используются для многих целей, включая взаимодействие с физическими аппаратными устройствами. Они выполняются под контролем ядра по мере необходимости, но, поскольку они не являются процессом пользовательского режима, они не отображаются в таблице процессов. и, следовательно, не будет отображаться в диспетчере задач или других инструментах, связанных исключительно с процессами.
Возможность запуска кода в режиме ядра является важным шагом к возможности эффективно скрывать существование исполняемого кода. При нормальных обстоятельствах Windows требует, чтобы код в режиме ядра был подписан для запуска, поэтому вредоносным программам, возможно, придется использовать эксплойты в операционной системе, другом программном обеспечении или даже социальной инженерии, чтобы попасть сюда, но как только код выполняется в режиме ядра, скрывается становится легче.
Резюме
Таким образом, можно скрыть свидетельство существования процесса, вероятно, всегда будет какой-то признак того, что процесс существует, потому что обычно ему всегда нужно будет использовать какую-то форму ресурса, чтобы делать то, для чего он предназначен, насколько сложно это обнаружение зависит от конкретной вредоносной программы.
Вирусы довольно сложны в наши дни. На вашем компьютере может быть вирус, но он не отображается в диспетчере задач. Диспетчер задач (и другие части операционной системы) могут быть скомпрометированы, скрывая вирус. Например, руткит.
Если вы планируете полагаться на диспетчер задач для проверки на вирусы, то вам следует остановиться сейчас. Установите антивирус, и даже антивирус иногда не сможет обнаружить вирус на вашем компьютере.
Есть еще один простой способ "спрятать вирус" от других, уже хорошо объясненных в других ответах:
Скомпрометированная DLL (динамически связанная библиотека)
Большинству программ - почти всем нетривиальным - для запуска требуется одна или несколько библиотек DLL. Некоторые принадлежат самой ОС (например, hal.dll, которая абстрагирует аппаратный доступ для Windows), некоторые используются только одной программой, которая разбита на более мелкие части (один .exe-файл и несколько .dll-файлов с основными функциями, плагины и т. д.) Вы не заставляете ваш вирус работать постоянно, как обычный процесс или сервис, но ваш вирус действительно будет очень трудно найти, так как он будет выглядеть как совершенно невинная программа или программный компонент.
Дальнейшее чтение: http://msitpros.com/?p=2012
И есть одна вещь, очень привлекательная для такого рода вирусов: существует множество веб-сайтов, предлагающих бесплатную (не требующую оплаты) загрузку DLL-файлов, которые по той или иной причине могут пропасть на вашем компьютере. Поскольку возможность сравнения контрольных сумм исходного и нового .dll-файлов очень ограничена и почти никого не волнует, dll-вирусы могут входить и оставаться в системе в течение длительного времени незамеченными (если, конечно, антивирусная программа не обнаружит их и пользователь соглашается с удалением - вы уже видите шаблон).
Из вопроса, который я понимаю, мы говорим о Windows здесь, но этот метод вполне может быть применим и к другим ОС.
TL; DR: диспетчер задач Windows довольно ограничен в том, что он может делать, и он * не будет показывать каждый процесс, запущенный в вашей системе. Хотите доказательства? Подсчитайте (примерно) объем оперативной памяти, который используют процессы, показанные в диспетчере задач, и сравните его с использованием оперативной памяти системы; у вас должно быть не менее 100 МБ ОЗУ, а иногда оно увеличивается до 1 ГБ, в зависимости от того, для чего вы используете систему. Видеокарты также могут забирать некоторую память из ОЗУ вместе с собственной ОЗУ GDDR. *
Чтобы расширить ответ Павла Петмана, я мог бы добавить, что многие изощренные чит-движки для игр полагаются на внедрение кода в игровые DLL, которые включают их читы.
Этот тип компромисса довольно трудно обнаружить, и в этом вопросе может быть применена та же методика. Например, если вирус хочет остаться незамеченным, он может представлять собой обновление Windows того типа, который извлекается из системных каталогов, вирус может перезаписать критический системный файл. Большинство антивирусных программ не обнаруживают этот тип вируса, то есть вирус может впрыскивать код вируса в критически важные библиотеки Windows DLL (а также в .exes).
Когда мой клиент рассказывает о необычном поведении, я всегда запускаю Process Explorer (скачать от Microsoft), чтобы обнаружить любой запущенный вирус. Process Explorer может точно сказать, какие процессы запущены (даже те, которые отсутствуют в диспетчере задач), а также какие модули DLL они используют.