Вирус создает задания at

Прошу помочь с вирусом.
В назначенных заданиях появляются задания at1 at99 at250 и т.далее
В свойствах этих задания в строке выполнить написано: rundll32.exe tvycqa.ejm,cvkymf
проблема в том что rundll32.exe не заражен, а файлы tvycqa.ejm поиском на диске не находятся.
И в реестре поиском такого нет. +каждый раз в свойствах после rundll32.exe различный текст бывает к примеру: rundll32.exe qqgsmcx.p,lwirz

GMER: сразу нашел:

лог Gmer и Rootrepeal тоже прицепите

1\Temp\1\pxddapow.sys-знаете что это?

Что-то еще висит от Sygate Technologies

1\Temp\1\pxddapow.sys-знаете что это?

сейчас зашел в эту папку. такого файла там уже нет.

ps.
забыл отключить/удалить антивирус перед сканированием (sygate),
нужно ли пересканировать еще раз?

1\Temp\1\pxddapow.sys-знаете что это?

Gmer это

Попробуйте сдампить C:\WINDOWS\system32\svchost.exe может там буква "о" русская
Возможно поможет вот такая команда

при root repeal - как и раньше компьютер перегружается.
но до запуска такое сообщение вылазиет.

Скриншоты сохраняйте в формате png

И какую кнопку вы нажимали?

hack
почему лог старого RkUnhooker ?
почему лог старого gmer ?

У Вас сервер Windows 2003 SP2 используется как рабочая станция, что ли ?
Обновления от M$ все стоят?

а как дамп сделать? посмотрел файл. вроде всё ок с ним.

все, в режиме онлайн.

почему лог старого RkUnhooker ?
почему лог старого gmer ?

И еще одна информация.
то что GMER выдает как ROOTKIT - скорее всего еще один вирус.
т.к. на другом компьютере: с таким же вирусом в "Назначенных заданиях".
GMER не выдает никаких таких ошибок (Rootkit'ов).

Да, в свойствах назначенных заданий только это:
rundll32.exe tvycqa.ejm,cvkymf
Рабочая папка: пусто.

Составлено NetScheduleJobAdd.
В 11.00 каждую неделю по пн.вт. ср. чт.пт.сб.вс
и т.д. с разницей 1 час.

прикрепил .job файлы.



это ж кидо, по доктору Shadow.Based.
По сети ходит двумя способами - через дыру на непатченные компьютеры и с подбором пароля админа на патченные. А если пароль пустой - тем более.
Подобрав пароль, червь при каждой внешней атаке ложит файл в system32 и *.job для его запуска раз в час через rundll32.
Если файла, указанного в ваших *.job - xgxve.t в %windir%\system32 нету, значит, его уже убил кто-то. Можно для проверки создать свой пустой с этим именем, чтобы убедиться, что такого скрытого нету.

Вот насчет пароля админа - имхо, Ваш случай. Меняйте пароли на более сложные или поставьте, если нету.

А еще до смены убейте все процессы rundll32 и удалите все *.job в %windir%\Tasks. Я вообще останавливал службу шедулера.

еще до смены убейте все процессы rundll32 и удалите все *.job в %windir%\Tasks.

Странно, что у вас имена файла разные - разные компьютеры, что ли ? Или научился менять уже, гадюко.

Но странно, если вирус давно удален, каким образом появляются задания сами, и службы которые я делал Disabled в GMER, как стали снова ENABLED.
но уже их удалил. хотя это может уже и другой вирус, т.к. на другом компе таких вообще не было )

Но пока (после последнего конкретного удаления) всё чисто.

Вот насчет пароля админа - имхо, Ваш случай. Меняйте пароли на более сложные или поставьте, если нету.

еще до смены убейте все процессы rundll32 и удалите все *.job в %windir%\Tasks.
а можно убивать процессы rundll32? в job уже все пусто.

Нет, не все, у Вас от симантека какие-то длл через него запущены, их надо оставить, а троянские прибить.
Поставьте FAR, новый юникодный 2.0 я не смотрел, у меня еще старый 1.70. Видимо, спокойнее взять там версию 1.75. В дистрибутиве по дефолту уже есть плагин ProcList для просмотра процессов.
Запускаете, открываете список процессов по Alt-F1 - Process List, наводите курсор поочередно на процессы rundll32, жмете F3 и смотрите параметры командной строки - что именно запущено через rundll32, какая dll. Думаю, для Вас этого будет достаточно, чтобы отличить нормальные процессы от троянских.
те. в открывшемся окне с информацией о процессе ищете в верхней части строку
Command Line:
тут будет полная ком.строка запуска rundll32 с указанием dll.

Там же в FAR можно и прибивать троянские процессы.

Но странно, если вирус давно удален, каким образом появляются задания сами, и службы которые я делал Disabled в GMER, как стали снова ENABLED.
но уже их удалил. хотя это может уже и другой вирус, т.к. на другом компе таких вообще не было )
Но пока (после последнего конкретного удаления) всё чисто.

Всем привет!
Столкнулся с такой проблемой: вирус создает задачу для выключения компьютера в Планировщике заданий (shutdown -s -t 0).

Как можно отследить, какое приложение/файл добавляет задачу в планировщик, т.к. простое удаление задачи - это временное решение проблемы.

Время переустановить шиндоус

думаешь у тс лапки?

Всё фигня. Слушай тут. Жмякаешь Win+R.

В командной строке набираешь: shutdown -a

в планировщике в правой панели "Включить журнал всех заданий" и смотреть, что в новом задании будет в журнале

Отключить всё в автозагрузки.

Запускать их по очереди.

Следить за эффектом.

Что в безопасном режиме?

Проверить Dr.Web LiveDisk или Kaspersky Rescue Disk

Выполняется задача по выключению пк, такое антивирусы не палят, уже проверил.

А задачу кто создает в планировщике заданий, Апостол Пётр?

Извиняюсь за тупость, чет тут нет информации о первоначальном создании задания в планировщике (откуда создание пошло (от какого приложения))

Антивирусная маска



SSD half drive

Обратился клиент. Умер жёсткий диск. Ну надо менять. Разбираю - а там неведомый зверь


Это называется SSD half drive. В магазинах такого нет. Обычный не влезает по размерам. В интернет- магазинах цена какая то космическая. За 128 Гб около 7 тысяч хотят. Но! Если разобрать обычный бюджетный ssd за 1500 внути он. Ssd half drive



Может кому пригодится и убережёт от потери времени и денег


Чем болеют братья наши железные — история компьютерных вирусов


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

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

А в 1975 году Джон Волкер написал PERVADE — подпрограмму для популярной (по меркам тех лет) игры ANIMAL, которая с помощью наводящих вопросов отгадывала названия задуманных игроком животных. С натяжкой ее можно назвать первым трояном. После каждой партии она модернизировала игру новыми вопросами, а заодно и копировала ее во все директории компьютера, чем основательно замусоривала и без того скудную память. А ведь Волкер всего-то навсего хотел упростить распространение ANIMAL и избавить себя от нескончаемых просьб, желающих выслать им очередную копию игры.

Вирус Elk Cloner, который многие считают первым истинным вирусом, получившим массовое распространение на пользовательских компьютерах, изначально задумывался, как невинная шалость в духе Крипера. В 1981 году он принялся заражать Apple II, перемещаясь между машинами с помощью дискет. На каждый 50-й запуск системы он выводил на экраны стихотворение:

Elk Cloner: программа с индивидуальностью

Она проникнет во все ваши диски

Она внедрится в ваши чипы

Она прилипнет к вам как клей

Она даже изменит оперативную память

Cloner выходит на охоту!

Вредительских функций написавший Cloner 15-летний школьник Ричард Скренет не предусматривал. Однако своенравный вирус повадился портить диски с нестандартными версиями DOS, удаляя содержимое резервных дорожек. Ущерб в таких случаях был уже вполне осязаем, в отличии от душевных страданий, вызванных стишком-дразнилкой.

Многие ругают антипиратскую защиту игр Denuvo, но в 80-е методы борьбы с пиратами были куда менее гуманны. В 1986 году братья Фарук Альви решили защитить свою программу для наблюдения за сердечным ритмом от незаконного копирования при помощи вируса Brain. Он заражал загрузочный сектор жесткого диска, замедлял работу и вежливо предлагал позвонить создателям нелегально установленной программы, чтобы излечиться. Только в США оказались заражены 18 тысяч компьютеров, а братья Альви первыми познали гнев недовольных антипиратской защитой пользователей.

А вот вирус Jerusalem был написан чистейшего зла ради в 1987-м. Он заражал файлы EXE, COM и SYS. Каждый раз при активации запрашиваемые файлы увеличивались в размере, что приводило к захламлению памяти. Также через полчаса после запуска системы Jerusalem серьезно замедлял ее работу, изменяя время прерывания процессов. Но то были лишь цветочки. Во всей красе Jerusalem проявлял себя в пятницу 13-го, уничтожая любой запущенный в этот день файл.

Первый сетевой червь-шпион атаковал ARPANET в 1988. По замыслу создателя Червь Морриса должен был лишь собирать данные о владельцах ПК, подключенных к ARPANET. Для проникновения он использовал уязвимости почтовых сервисов и сетевых протоколов. Червь Морриса подбирал пароль по словарю и инфицировал компьютер, если не обнаруживал на нем своей копии. Но, даже если копия вируса на компьютере уже была, с небольшой периодичностью червь инфицировал его повторно. На всякий случай. Это и послужило основным источником проблем. Компьютеры заражались многократно, работа системы все больше замедлялась, вплоть до полного отказа. Суммарный ущерб от действий червя оценили в 96 миллионов долларов. Обескураженный непредвиденными последствиями создатель сам сдался полиции, благодаря чему отделался штрафом и исправительными работами.

Первый зловред-вымогатель, словно благодаря ясновидению, позволившему его создателю предсказать масштабы пандемии, вызванной его потомками в будущем, был окрещен — AIDS (СПИД). Вирусописец Джозеф Попп собственноручно разослал около 20 000 дискет с вирусом (каторжный труд, в сравнении с современной почтовой спам-рассылкой, посредством пары кликов). Дискеты манили новой информацией о настоящем НЕкомпьютерном вирусе СПИДА, но после проникновения зараженной дискеты в дисковод PC, в определенном смысле происходило именно то, чего беспечные пользователи и боялись — инфицирование. Через 90 запусков компьютера AIDS шифровал все файлы, оставляя в доступности лишь README, в котором находилось предложение отправить деньги на почтовый ящик в Панаме в обмен на восстановление доступа к информации. Во время обналичивания такого чека Джозефф Попп и был арестован и впоследствии осужден за вымогательство.


Вирусы лихих 90-х были не в пример добрее и невиннее своего десятилетия. Часто они писались ради забавы и самовыражения, вне зависимости от того сколько бед приносили. Так, вирус Walker раз в 30 секунд отправлял гулять по экрану дедушку. По-видимому, из уважения к старости, пока дедушка ковылял, компьютер зависал и не реагировал на команды пользователя. Романтичный вирус Girls признавался в любви всем девочкам и запускал песню Yesterday группы The Beatles. А Mars Land каждый час по полминуты заставлял пользователей любоваться высококачественной 3D-моделью поверхности Марса.

1995 год ознаменовался появлением первого макровируса Concept. Инновационные вирусы распространялись при помощи макросов в документах Word. Для их написания не нужно было владеть языком программирования, достаточно лишь разобраться в WordBasic (чему тоже далеко не каждую бабушку можно научить, но все же). Вирусоделие пошло в массы, и к 1998 году число вредоносного ПО увеличилось почти в 4,5 раза.

В свою очередь, вирус Conficker в лучших традициях вестернов заставил объединиться в борьбе с ним крупнейшие корпорации — Microsoft, Dr.Web, Kaspersky Lab, ESET, Symantec. А Microsoft даже пообещала 250 тысяч долларов тому, кто найдет создателя червя. Conficker осущесталял свои гадкие планы с помощью все того же пресловутого переполнения буфера. В первую очередь он отключал службы обновления и защиты Windows и блокировал сайты производителей антивирусов, а потом зомбировал компьютер и подключал его к ботнет-сети. Специалисты пришли к выводу, что главной целью вредителя была проверка его способностей к размножению.

В 2012 году эволюция вирусов дала новый виток. Теперь они стали реальным кибероружием и средством шпионажа. Аналитикам Лаборатории Касперского пришлось изрядно попотеть с обнаружением ряда вредоносных программ. Таких как – Flame, Gauss, Red October, NetTraveler и Icefog. Все они заслуженно могут носить звание кибер-агентов 007, поскольку каждый вирус детально изучал и похищал важную правительственную, дипломатическую и финансовую информацию. Жертвами хакерских атак стали более 40 стран.

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

В 2017 году явил себя свету еще один червь-шантажист — WannaCry. Программа угрожала уничтожить все зашифрованные файлы через неделю после заражения, если владелец не заплатит выкуп в размере примерно 300 долларов США, но в криптовалюте. Необходимую сумму следовало перечислить в течение 3-ех дней, в противном случае — сумма удваивалась.

Всего через месяц после атаки WannaCry вернулся Petya. Новой модификации дали название NotPetya (интересно, кто-то уже пробовал называть так детей?). Петя новый — трюки старые. Для получения доступа к компьютеру программа использовала те же уязвимости системы, что и WannaCry при помощи эксплойта EternalBlue (предположительно разработан АНБ) и бэкдора DoublePulsar. Отдавать дань за возвращение своих информационных богатств было абсолютно бессмысленно — вирус уничтожал данные, а электронный адрес хакерских дел мастеров уже заблокировали провайдеры.


Имеется сервер 2008 R2 Eng. На нем работает MSSQL c 1C8. Оперативной памяти 12 Гб. Когда сервер свежеперегружен - использование памяти бывает по taskmgr от 2,5 Гб. С течением времени использование увеличивается из-за естественных сеансов RDP, но может увеличиваться и если сервер стоит в простое в выходные - до 6-9 Гб. Если сервер не перегрузить, то в течение недели он зависает и все равно приходится перегружать.

Я обратил внимание, что в taskmgr или procexplorer со временем появляется много запущенных rundll32.exe, каждый из которых впрочем отнимает только 2,3 Мб памяти, а по их числу - около 60, они должны отнимать только до 150 Мб памяти, но никак не гигабайты. Они(rundll32.exe) запускаются из планировщика заданий, где есть задания под именами At1-At150. У этих заданий во вкладке Actions прописано например: rundll32.exe pfonrvu.ao, oqgokh или rundll32.exe pfonrvu.ao, ljewhs или rundll32.exe pfonrvu.ao, ndvakaij и т.п., причем файла pfonrvu.ao нет на дисках, хотя это может быть и какой-то нужный параметр.
Названия несколько странные и заставляют задуматься о вирусах, но на сервере стоит лицензионный Dr.Web, который о вирусах не сигнализирует.
Задания созданы для запуска от аккаунта SYSTEM и их изменить невозможно, изменить расписание запуска или, например, сделать disabled или end task даже под правами администратора домена.
В принципе я даже не знаю, может эти задания важны для нормальной работы MSSQL или 1C и их просто изменять нельзя.

Я могу убить(kill) процессы rundll32.exe в procexplorer, но от этого память сильно не освобождается(как я выше указывал) и я не знаю, не вношу ли этим вред в работу MSSQL.
Как определиться с этими заданиями и с увеличением занимаемой памяти сервера? Может кто-нибудь сталкивался с такой ситуацией? Я никак не могу допустить перерыва в работе сервера для организации,
а все время перегружать или все переустанавливать не хочется. Бывают ли такие задания At "правильными", т.е. нужными для работы сервера и как их отключить, если они все-таки ненужные? Как определить "правильность" заданий?
В реестре можно найти ветки, связанные с этими заданиями, но я не знаю, можно ли что делать с ними через реестр и как.
Можно ли просто удалять задания, если удалять job файлы из папки windows/system32/Tasks если планировщик естественно запущен при старте?

Сообщения: 50870
Благодарности: 14563

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

Запустите RAMMap и покажите скриншот вкладки Use Counts во время глюка.


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

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

WARNING

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

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

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

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

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

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

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


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

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

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

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

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


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


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного 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 всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

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

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

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

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.