Как прописываются вирусы в системе

Обновлено: 24.04.2024

Как узнать о заражении?

Хакеры, которые разрабатывают вредоносные скрипты, довольно хитрые особи, которые умело маскируют угрозу под безопасную программу. В любом случае, не нужно паниковать и видеть во всем опасность. Необходимо внимательно проанализировать ситуацию.

Начинать волноваться можно, когда:

Если имеют место быть какие-либо из перечисленных признаков, есть вероятность заражения. Но не стоит паниковать, ведь я всегда готов подсказать, как удалить вирусы.

Способы обнаружения

Я не буду рассказывать, как выявить вредоносный код (файл) с помощью антивирусного софта. Уверен, с этим справится каждый. Достаточно запустить полную проверку с помощью встроенного / стороннего ПО (Kaspersky, Dr.Web Cure It!).

Хочу подробнее рассказать о случае, когда система работает без антивируса (или от последнего нет никакой пользы).

Проверяем диспетчер процессов

Это первое, что приходит мне в голову, когда возникают подозрения. Зачастую, троян маскируется под безопасный процесс и делает свое темное дело. Как обнаружить?

  1. Csrss
  2. Lsass
  3. Explorer
  4. Svchost
  5. Wininit
  6. System
  7. Winlogon

Окно диспетчера задач с вирусными процессами

  • Если список содержит названия, состоящие из бессмысленного набора букв и цифр, стоит задуматься:

Окно диспетчера задач с очень подозрительными именами процессов

Одним из таких является вирус Recycler я рассказывал о как можно от него избавиться.

Анализируем автозагрузку

Окно консоли Выполнить с командой msconfig

Окно конфигурирования системы

  • Опять же, смотрите на названия, проверяйте их через Google / Яндекс. Если уверены, что самостоятельно не добавляли элемент в автозапуск, и он не связан с установленным приложением, то смело удаляйте его.
  • Перезапустите ПК и повторите предыдущие шаги. Если удаленный пункт снова активен, значит это однозначно вирус. Потребуется более доскональное сканирования и лечение.

Если статья оказалась полезной, почему бы не поблагодарить автора (это я о себе) репостами в социальных сетях. Буду очень признателен. И не забывайте, что при любой ситуации можете обращаться ко мне через форму комментирования.


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

В общем, для статьи вполне достаточно лирики, перейдем к делу. Я хочу рассказать о классическом вирусе, его структуре, основных понятиях, методах детектирования и алгоритмах, которые используются обеими сторонами для победы.

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

Начнём со свойств кода вируса. Чтобы код удобней было внедрять, разделять код и данные не хочется, поэтому обычно используется интеграция данных прямо в исполняемый код. Ну, например, так:


Все эти варианты кода при определенных условиях можно просто скопировать в память и сделать JMP на первую инструкцию. Правильно написав такой код, позаботившись о правильных смещениях, системных вызовах, чистоте стека до и после исполнения, и т.д., его можно внедрять внутрь буфера с чужим кодом.

  • Куда положить вирус? Необходимо найти достаточно места, чтобы вирус туда поместился, записать его туда, по возможности не разломав файл и так, чтобы в области, в которой вирус окажется, было разрешено исполнение кода.
  • Как передать управление на вирус? Просто положить вирус в файл недостаточно, надо еще совершить переход на его тело, а после завершения его работы вернуть управление программе-жертве. Или в другом порядке, но, в любом случае, мы же договорились не ломать ничего, да?

Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

  • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
  • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
  • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
  • повторять, пока не решим остановиться
  1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
  2. Читаем свой код (код тела вируса).
  3. Берем несколько первых инструкций из файла-жертвы.
  4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
  5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
  6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
  7. На место этих первых инструкций кладем переход на код вируса.

Думаю, не надо описывать вам компоненты современного антивируса, все они крутятся вокруг одного функционала – антивирусного детектора. Монитор, проверяющий файлы на лету, сканирование дисков, проверка почтовых вложений, карантин и запоминание уже проверенных файлов – все это обвязка основного детектирующего ядра. Второй ключевой компонент антивируса – пополняемые базы признаков, без которых поддержание антивируса в актуальном состоянии невозможно. Третий, достаточно важный, но заслуживающий отдельного цикла статей компонент – мониторинг системы на предмет подозрительной деятельности.

Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:

  • сокрытие кода самого вируса;
  • сокрытие его точки входа.

Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

Гораздо более подробно некоторые алгоритмы таких движков и детектора мы посмотрим во второй статье, которую я планирую написать в ближайшее время.

Рассмотренный в статье детектор легко детектирует неполиморфные (мономорфными их назвать, что ли) вирусы. Ну а переход к полиморфным вирусам является отличным поводом, наконец, завершить эту статью, пообещав вернуться к более интересным методам сокрытия исполняемого кода во второй части.

Доброго времени суток, друзья. Я вот много пишу о борьбе с разными вредоносными программами, которые блокируют запуск системы, замедляют работу компьютера, отображают рекламу в браузерах. Но удаление зараженных файлов и процессов – это лишь вершина айсберга. Необходимо выполнять более глубокое сканирование. Хотите узнать, как проверить реестр на вирусы? Данная статья полностью посвящена этой теме.

Что такое реестр?

Это своего рода база данных, которая содержит массив атрибутов и значений, отвечающих за конфигурацию Windows и установленных приложений. Также, там храниться информация об учётных записях пользователей.

Следы фотошопа в реестре

А после использования утилиты для поиска рекламных вирусов Anti-Malware (от Malwarebytes) было найдено множество ключей, которые пришлось почистить вручную:

Следы Anti Malware в реестре

А Вы не задумывались, почему компания Microsoft до сих пор не создала собственного инструмента для сканирования реестра на ошибки?

Вообще-то, реестр не может содержать трояны и прочие вредоносные скрипты, но в нём могут храниться измененные записи, влияющие на работоспособность системы. Вирусы могут влиять на автозагрузку, выполнение процессов и т.д. С этим нужно бороться, согласны?

С чего начать?

Полное сканирование системы

Для этой цели подойдет разный защитный софт. Наилучшим образом себя проявляет KIS (Internet Security от Kaspersky Lab). Это комплексный инструмент, который я не хочу сейчас расхваливать. Его преимущества всем и так давно известны.

Если нет желания платить деньги за качественную проверку, то в качестве альтернативы советую скачать свеженькую версию Cure It! от Доктор Веб.

После запуска обязательно выберите все объекты сканирования:

Сканирование флешки с помощью CureIt

Конечно же, данный способ не даёт 100%-ой гарантии успеха, но большинство угроз будут удалены. Останется только обезвредить их и перезапустить компьютер.

Автоматический поиск в реестре

Если после вышеупомянутых шагов (сканирования с помощью антивируса nod32 или любого другого подобного софта) поведение ПК всё еще остается загадочным, то следует выполнить очистку конфигурационной базы данных.

Уже более пяти лет я использую именно это ПО из-за его простоты и удобства. Иногда тестирую другие продукты аналогичного типа, но в итоге возвращаюсь к данному оптимизатору.

Вкладка Реестр программы CCleaner

  • Отобразится список ошибок. У меня он оказался небольшим, так как проверку выполняю почти ежедневно. У Вас может быть несколько сотен пунктов, если ни разу не выполняли чистку.

Окно создания копии реестра в СиКлинер

Окно исправления ошибок реестра

Вот и всё. Реестр почищен. Ошибки устранены.

Ручная проверка

Ответственность за дальнейшие действия лежит исключительно на Вас! Я подскажу универсальный способ, но каждая ситуация индивидуальна и требует особого подхода и повышенной внимательности!

Если в чем-то сомневаетесь, обязательно задавайте вопросы мне или ищите ответы через поисковые системы.

Всё указывало на то, что в реестре (разделе автозагрузки) остались следы этого скрипта. Откровенно говоря, CCleaner не помог (увы, он тоже не всесилен). Что я сделал?

Окно редактора реестра с ключами вируса hsgpxjt

Возможно, Вам придется потратить больше времени, если вирус оставил множество следов. Но так будет надежнее.

На этом извольте откланяться. Все вопросы и пожелания можете писать в комментариях. Я не обещаю поддержку 24/7, но обязательно отвечу всем оперативно и, по существу.


Пара вступительных слов

Итак, давай погрузимся в мрачный лабиринт кибернетического мира, ряды обитателей которого скоро пополнятся еще одним зловредным созданием. Внедрение вируса в исполняемый файл в общем случае достаточно сложный и мучительный процесс. Как минимум для этого требуется изучить формат PE-файла и освоить десятки API-функций. Но ведь такими темпами мы не напишем вирус и за сезон, а хочется прямо здесь и сейчас. Но хакеры мы или нет? Файловая система NTFS (основная файловая система Windows) содержит потоки данных (streams), называемые также атрибутами. Внутри одного файла может существовать несколько независимых потоков данных.

WARNING

Вся информация в этой статье предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Помни, что неправомерный доступ к компьютерной информации и распространение вредоносного ПО влекут ответственность согласно статьям 272 и 273 УК РФ.

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Имя потока отделяется от имени файла знаком двоеточия (:), например my_file:stream . Основное тело файла хранится в безымянном потоке, но мы также можем создавать и свои потоки. Заходим в FAR Manager, нажимаем клавиатурную комбинацию Shift + F4 , вводим с клавиатуры имя файла и потока данных, например xxx:yyy , и затем вводим какой-нибудь текст. Выходим из редактора и видим файл нулевой длины с именем xxx .

Почему же файл имеет нулевую длину? А где же только что введенный нами текст? Нажмем клавишу и… действительно не увидим никакого текста. Однако ничего удивительного в этом нет. Если не указать имя потока, то файловая система отобразит основной поток, а он в данном случае пуст. Размер остальных потоков не отображается, и дотянуться до их содержимого можно, только указав имя потока явно. Таким образом, чтобы увидеть текст, необходимо ввести следующую команду: more < xxx:yyy .

Будем мыслить так: раз создание дополнительных потоков не изменяет видимых размеров файла, то пребывание в нем постороннего кода, скорее всего, останется незамеченным. Тем не менее, чтобы передать управление на свой поток, необходимо модифицировать основной поток. Контрольная сумма при этом неизбежно изменится, что наверняка не понравится антивирусным программам. Методы обмана антивирусных программ мы рассмотрим в дальнейшем, а пока определимся со стратегией внедрения.

Алгоритм работы вируса

Закрой руководство по формату исполняемых файлов (Portable Executable, PE). Для решения поставленной задачи оно нам не понадобится. Действовать будем так: создаем внутри инфицируемого файла дополнительный поток, копируем туда основное тело файла, а на освободившееся место записываем наш код, который делает свое черное дело и передает управление основному телу вируса.

Работать такой вирус будет только на Windows и только под NTFS. На работу с другими файловыми системами он изначально не рассчитан. Например, на разделах FAT оригинальное содержимое заражаемого файла будет попросту утеряно. То же самое произойдет, если упаковать файл с помощью ZIP или любого другого архиватора, не поддерживающего файловых потоков.

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Теперь настал момент поговорить об антивирусных программах. Внедрить вирусное тело в файл — это всего лишь половина задачи, и притом самая простая. Теперь создатель вируса должен продумать, как защитить свое творение от всевозможных антивирусов. Эта задача не так сложна, как кажется на первый взгляд. Достаточно заблокировать файл сразу же после запуска и удерживать его в этом состоянии в течение всего сеанса работы с Windows вплоть до перезагрузки. Антивирусы просто не смогут открыть файл, а значит, не смогут обнаружить и факт его изменения. Существует множество путей блокировки — от CreateFile со сброшенным флагом dwSharedMode до LockFile/LockFileEx .

Основная ошибка большинства вирусов состоит в том, что, однажды внедрившись в файл, они сидят и покорно ждут, пока антивирус не обнаружит их и не удалит. А ведь сканирование современных винчестеров занимает значительное время, зачастую оно растягивается на многие часы. В каждый момент времени антивирус проверяет всего один файл, поэтому, если вирус ведет кочевую жизнь, мигрируя от одного файла к другому, вероятность, что его обнаружат, стремительно уменьшается.

Мы будем действовать так: внедряемся в файл, ждем 30 секунд, удаляем свое тело из файла, тут же внедряясь в другой. Чем короче период ожидания, тем выше шансы вируса остаться незамеченным, но и тем выше дисковая активность. А регулярные мигания красной лампочки без видимых причин сразу же насторожат опытных пользователей, поэтому приходится хитрить.

Например, можно вести мониторинг дисковой активности и заражать только тогда, когда происходит обращение к какому-нибудь файлу. В решении этой задачи нам поможет специализированное ПО, например монитор процессов Procmon.

Продолжение доступно только участникам

Вариант 2. Открой один материал

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

Читайте также: