Причина, по которой я спрашиваю об этом, заключается в том, что мне любопытно, может ли на компьютере существовать вирус, и я бы никогда не узнал, существует ли он. Точнее говоря, вирус, который не выделяет никаких признаков.
Существует класс вредоносных программ, которые могут полностью скрыться от операционной системы, известной как руткит .
Руткиты используются для сокрытия улик других вредоносных программ на работе и очень глубоко встроены в операционную систему. Благодаря их глубокому внедрению они могут оперативно управлять списками процессов, таблицами файловых систем и другими важными структурами.
Управляя структурами файловой системы в памяти, они могут возвращать ложные или вводящие в заблуждение результаты для каталогов, в частности, не показывая файлы, связанные с основным вредоносным ПО. Файлы есть, и загрузка в незараженную операционную систему, такую как Linux LiveCD, покажет файлы, так как они должны храниться где-то.
Аналогично, руткиты могут просто отбрасывать определенные процессы из отчетов в такие программы, как диспетчер задач. Ядро операционной системы знает о них, так как оно необходимо для того, чтобы запланировать их, оно только что было заблокировано, чтобы сообщить о них внешнему миру.
Мне интересно, как они достигают этого подвига? Похоже, что-то, что Windows не должна допустить в первую очередь. Я имею в виду, что даже «процесс показа от всех пользователей» менее «
скрыт
2
@Raestloz: они достигают подвига, получив root-доступ, а затем переписав Windows, чтобы удалить биты, которые его запрещают. Я слышал, что некоторые из них делают это, «загружаясь» в руткит как ОС, изменяя Windows, а затем запускают Windows, так что ни пользователь, ни Windows не подозревают, что что-то необычное.
Mooing Duck
3
черт возьми
1
@zyboxenterprises Реальные обновления Windows подписаны и не могут быть подделаны, но вы можете подделать только диалоговое окно запроса перезапуска, или заставить пользователя перезапустить любым другим способом, или принудительно перезапустить ( shutdown -r -t 0без привилегий), или просто подождать, пока пользователь перезагрузится.
Гроностай
4
@zyboxenterprises Может быть, а может и нет;) Flame воспользовался Центром обновления Windows для своих собственных целей, подделав сертификат, но эта уязвимость уже исправлена. Публично известных подвигов WU нет, но это не значит, что их не существует. Тот, что использовал Flame, тоже не был известен. (см. 0-дневная атака
gronostaj
16
Там появятся все нормальные программы, но ...
без учетной записи администратора вы сможете видеть только свой собственный процесс (учетные записи администратора могут выбрать просмотр всех процессов)
руткиты будут пытаться скрыть свое существование, скрывая свой процесс из списка, скомпрометируя диспетчер задач (чтобы он его не отображал), прячась в адресном пространстве другого процесса ...
сервисы будут работать как потоки svchostвнутри процесса (в большинстве случаев), поэтому нет простого момента, когда сервис запускается под данным экземпляром svchost.
Есть несколько программ, предназначенных для обнаружения руткитов. Они делают это, проверяя, например, список потоков, запрограммированных для выполнения, и список процессов в системе (поток, не принадлежащий какому-либо процессу, является признаком скрытого процесса), или список файлов, видимых на высоком уровне, и сравнивая его с файлами, которые он читает вручную с раздела диска.
Тем не менее, после заражения вирус может настолько хорошо скрывать свое присутствие, что его практически невозможно обнаружить. Их обычно называют APT (постоянная постоянная угроза).
Некоторые из этих пунктов в некоторой степени аннулированы Sysinternals Process Explorer - пользователи с ограниченными правами могут видеть имена файлов процессов, запущенных другим пользователем, и всплывающие подсказки svchosts показывают, что они размещают.
Кирб
Вы хотели написать «угроза» или «нить»? Это на самом деле работает там;)
Конерак
Как детектор руткитов перечисляет потоки или процессы? Если это типичный способ / WinAPI, не может ли руткит манипулировать перечислением, и детектор руткитов не заметит этого?
Рэй
1
@DebugErr, они смотрят на высокий и низкий уровень, а затем сообщают о различиях (иногда выдают ложные срабатывания, например, когда файл был изменен между) При проверке списка потоков , запрограммированных для выполнения я ссылаюсь к списку двойного связанных используемой ОС планировщика , т.е.. полностью низкоуровневый: если его там нет, он не получает временной интервал (хотя есть еще места для проверки, например, ISR).
Анхель
5
Задний план
Операционная система имеет компонент, известный как ядро. Одна из (многих) обязанностей ядра - управлять системной памятью (как физической, так и виртуальной).
Как часть этого, ядро разделяет доступную память на две отдельные области, известные как режим пользователя и режим ядра. Ядро и драйверы совместно используют память режима ядра, а пользовательские программы и менее важные системные компоненты находятся в области памяти режима пользователя.
Процессы в пользовательском режиме обычно не могут обмениваться данными с процессами в режиме ядра, кроме как по специально назначенным и контролируемым каналам.
Для полноты следует упомянуть, что процессы, работающие в пользовательском режиме, также изолированы друг от друга, но могут более свободно обмениваться данными друг с другом с помощью средств, предоставляемых операционной системой, при условии, что программы предназначены для этого.
Процессы
Ядро предоставляет возможность запуска процессов в пользовательском режиме. Когда процесс создан, он добавляется во внутренний список процессов, которые существуют в настоящее время. Когда такая программа, как диспетчер задач, запрашивает список процессов, она получает подмножество информации в этом списке, отфильтрованное по разрешениям пользователя.
Один из способов, позволяющий вредоносным программам, таким как руткит, скрыть свое существование, - это непосредственно удалить себя из этой таблицы. Сделав это, он все еще может выполняться, но больше не будет отображаться в списке процессов, получаемых обычными средствами.
Поскольку эти процессы все еще существуют и выполняются, их можно найти путем проверки других структур данных ядра, таких как таблицы дескрипторов, которые содержат информацию о ресурсах, открытых у процесса (например, файлы), или путем изучения распределения памяти, из которого он более трудно спрятать, не мешая программному обеспечению функционировать.
Драйверы режима ядра
Драйверы режима ядра используются для многих целей, включая взаимодействие с физическими аппаратными устройствами. Они выполняются под контролем ядра по мере необходимости, но, поскольку они не являются процессом пользовательского режима, они не отображаются в таблице процессов. и, следовательно, не появится в диспетчере задач или других инструментах, связанных исключительно с процессами.
Возможность запуска кода в режиме ядра является важным шагом к возможности эффективно скрывать существование исполняемого кода. При нормальных обстоятельствах Windows требует, чтобы код в режиме ядра был подписан для запуска, поэтому вредоносным программам может понадобиться использовать эксплойты в операционной системе, другом программном обеспечении или даже социальной инженерии, чтобы попасть сюда, но как только код выполняется в режиме ядра, скрывается становится легче.
Резюме
Таким образом, можно скрыть свидетельство существования процесса, вероятно, всегда будет какой-то признак того, что процесс существует, потому что обычно ему всегда нужно использовать какую-то форму ресурса, чтобы делать то, для чего он предназначен, насколько сложно это обнаружение зависит от конкретной вредоносной программы.
Если вы планируете полагаться на диспетчер задач для проверки на вирусы, то вам следует остановиться сейчас. Установите антивирус, и даже антивирус иногда не сможет обнаружить вирус на вашем компьютере.
Большинству программ - почти всем нетривиальным - для запуска требуется одна или несколько библиотек DLL. Некоторые принадлежат самой ОС (например, hal.dll, которая абстрагирует аппаратный доступ для Windows), некоторые используются только одной программой, которая разбита на более мелкие части (один .exe-файл и несколько .dll-файлов с основными функциями, плагины и т. д.) Ваш вирус не будет работать постоянно, как обычный процесс или служба, но ваш вирус действительно будет очень трудно найти, поскольку он будет выглядеть как совершенно невинная программа или программный компонент.
И есть одна вещь, очень привлекательная для такого рода вирусов: существует множество веб-сайтов, предлагающих бесплатную (не требующую оплаты) загрузку DLL-файлов, которые по той или иной причине могут пропасть на вашем компьютере. Поскольку возможность сравнения контрольных сумм исходного и нового .dll-файлов очень ограничена и почти никого не волнует, dll-вирусы могут входить и оставаться в системе в течение длительного времени незамеченными (если, конечно, антивирусная программа не обнаружит их и пользователь соглашается с удалением - вы уже видите шаблон).
Из вопроса, который я понимаю, мы говорим о Windows здесь, но этот метод вполне может быть применим и к другим ОС.
TL; DR: диспетчер задач Windows довольно ограничен в том, что он может делать, и он * не будет отображать все процессы, запущенные в вашей системе. Хотите доказательства? Подсчитайте (примерно) объем оперативной памяти, который используют процессы, показанные в диспетчере задач, и сравните его с использованием оперативной памяти системы; у вас должно быть не менее 100 МБ ОЗУ, а иногда оно увеличивается до 1 ГБ, в зависимости от того, для чего вы используете систему. Видеокарты также могут забирать некоторую память из ОЗУ вместе с собственной ОЗУ GDDR. *
Чтобы расширить ответ Павла Петмана, я мог бы добавить, что многие сложные чит-движки для игр полагаются на внедрение кода в игровые DLL, которые включают их читы.
Этот тип компромисса довольно трудно обнаружить, и в этом вопросе можно применить ту же технику. Если, скажем, вирус хочет остаться незамеченным, он может представлять собой обновление Windows того типа, который извлекается из системных каталогов, вирус может перезаписать критический системный файл. Большинство антивирусных программ не обнаруживают этот тип вируса, что означает, что вирус может впрыскивать код вируса в критически важные библиотеки Windows DLL (а также .exes).
Когда мой клиент говорит о необычном поведении, я всегда запускаю Process Explorer (скачать от Microsoft), чтобы обнаружить любой запущенный вирус. Process Explorer может точно сказать, какие процессы запущены (даже те, которые отсутствуют в диспетчере задач), а также какие модули DLL они используют.
shutdown -r -t 0
без привилегий), или просто подождать, пока пользователь перезагрузится.Там появятся все нормальные программы, но ...
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 они используют.
источник