Pull to refresh

Comments 53

Спасибо, очень информативная статья! Не представляла, что это настолько нетривиальная задача, поиск и обезвреживание вирусов. Прямо противостояние снаряда и брони :)
Спасибо за спасибо. Антивирусы, помимо общих алгоритмов противостояния вирусам и в плане производительности тоже достойны уважения. Оптимизировать сравнение по сотне тысяч сигнатур на произвольных данных задачка очень непростая, поэтому когда жалуются «этот свинский антивирь съел весь процессор» мне антивирус немного жалко, он же работает, старается…
Это хоть и сложная задача, но очень увлекательная и интересная. Но есть один очень важный нюанс: «Аверы это догоняющая сторона» из этого вытекает следствие: «Уважаемый пользователь имей голову на плечах, даже когда стоит самый лучший антивирус»
UFO just landed and posted this here
Я занимался этим вопросом около шести лет назад и под Linux. После анализа нескольких вирусных движков, и, учитывая, что подавляющее большинство исполняемых файлов в Linux скомпилированы и слинкованы стандартными компиляторами, удалось в эвристик затолкать пару десятков признаков, которые показывали точность около 90% (т.е. 90% сэмплов, зараженных вирусами эвристик считал зараженными). Но это палка о двух концах, этот же самый эвристик ругался на файлы, с коммерческой защитой — поэтому думаю, что если бы мне удалось собрать 100 экземпляров здоровых защищенных файлов, эвристик на 90% из них ругался бы тоже. В антивирусных базах для борьбы с этими «false positive» есть специальные «хорошие» сигнатуры, которые говорят антивирусу, что это защита, а не вирус.

Поэтому называть эвристик отдельным механизмом детектирования не совсем правильно, он работает только в комплексе с другими методами. Например — нашли нестандартный пролог файла, значит надо запустить дизассемблер, посмотреть куда ведут переходы из пролога, и уже там «пошуровать» сигнатурным, например, сканером. Я во второй статье напишу про эвристик намного более подробно. Надеюсь, ответил на вопрос.
Спасибо, классно всё расписано!
четко и все ясно!
Спасибо, было интересно. Есть вопрос:

Применялась ли данная информация при написании Guard Mail.ru? И какая именно ее часть?
Наверное та, которая отвечает за сохранность Guard Mail.ru и за самовоспроизведение после удаления ;)
Вы серьезно? Вроде mrMendoza сделал мой ироничный комментарий чуть потолще и понятнее.
UFO just landed and posted this here
По ходу как бы намекают на немножко испачканную карму (в тантрическом смысле!!!) компании
Анатомия вирусов в блоге Mail.Ru — это что, троллинг такой?
Осторожнее, тут не понимают подобного юмора.
Значит я не один задался вопросом: «Что делает статья про вирусы в блоге Mail.ru?»
Уважаемые читатели, не хочу обидеть ничьих чувств к моей любимой компании. Ваши комментарии очень классные и остроумные, но я бы предпочел комментарии от программистов.
Учитывая отношение к Mail.Ru в этом плане и после «Не о поисковых барах, downloader-ах и другой малвари.», которое воспринимается как попытка предложить отвлечься от ваших же Guard'ов и ваших же даунлоадеров, большинство просто не может воспринимать пост всерьез, пока он лежит в корпоративном блоге компании, которая имеет такую негативную карму в этой области.
Печально, конечно, что корпоративный блог так портит впечатление. Надеюсь, большинство все таки поверит, что я ни в коей мере не старался «предложить отвлечься от наших же Guard-ов», а просто постарался написать хорошую статью.
Повод писать от себя? И от себя уже точно можно написать что отвлекаемся мы от недоделок аля Guard Mail.ru и yandex.bar.
Статья есть статья, кому надо найдет её поиском. А карму компании я с удовольствием повышу, от Mail.Ru в моей лично жизни я ничего плохого не видел. И про Guard я, правда, не могу поддержать дискуссию, у меня он никогда не стоял, и я про него реально вообще ничего не знаю.
И про Guard я, правда, не могу поддержать дискуссию, у меня он никогда не стоял, и я про него реально вообще ничего не знаю.

Знаете, выглядит так, будто с людьми вы не общаетесь и вообще, с интернетом познакомились пару месяцев назад.

Вот вопрос о упомянутом ПО на ресурсе самого mail.ru .

Погуглите, почитайте на досуге. Кстати, для того, чтобы установить на свой ПК guard и прочие прелести, достаточно подключить чужой винтчестер к своему ПК, на котором Guard уже есть. Отличный пример само-репликации. Только странноватый он, пример этот, для «анти-вируса». А там и «Интернет», и «спутник», и поиск «по умолчанию», который выковыривается только сносом всего ПО, чисткой реестра и переустановкой браузера и, само собой, Браузер «Амиго», который самостоятельно ставить себя «Браузером по умолчанию» и даже при попытке запусков других браузеров перехватывает процесс и запускает исключительно себя, подтягиваются-устанавливаются.

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

Знакомый говорил, что видел вообще абсурд — амиго запускался при попытке зайти на любой сайт в браузере внутриигрового оверлея Steam — это уже вообще ни в какие рамки.

Слава богу я с ним не сталкивался, и только вчера о нем узнал вообще…
Люди, пожалуйста, уберите Амиго, Гварды и Яндекс бары из обсуждений — они вообще не из этой оперы и не имеют к статье ну ни малейшего отношения. Я не собираюсь их обсуждать, я реально про них ничегошеньки не знаю, зачем вы это сюда пишете!
Статья в основном описывает внедрение кода внутрь существующего исполняемого файла и детектирование факта таких внедрений. Насколько я понял, гвард себя не встраивает внутрь исполняемых файлов, и не ищет вирусы по сигнатурам, поэтому никакая информация из данной статьи не применялась при разработке данного ПО.

А можно пояснить фразу «для того, чтобы установить на свой ПК guard и прочие прелести, достаточно подключить чужой винтчестер к своему ПК, на котором Guard уже есть»? Я слегка не уловил смысл
Поясняю, из собственной практики. Как-то раз, с винтчестера, с виду вроде чистого, необходимо было перекинуть информацию, документы рабочие и т.п. Подключил винт к домашнему ПК, запустился со своего основного, скопировал документы, выключился, отключил винт, включился и вуаля! На моем рабочем столе «Интернет» от mail.ru, спутник, guard, поиск mail.ru по умолчанию в хроме, который устанавливался обратно самостоятельно после перезапуска браузера и после подтянулся «браузер» «Амиго» от mail.ru. То, что я мог занести это сам — исключено. Софт ставится один раз при разворачивании системы и тщательно подбирается, т.к. я стеснен в пространстве (SSD 128 Gb). Остальные закачки — исключительно свежие покупки в Steam. Все остальное смотрится online на проверенных ресурсах.
Последующий запуск системы уже на родной машине «подкидного» винта выявил, что все это добро там тоже стояло и пролезло на мой ПК с него.

И тут возникают мысли о самостоятельной репликации на новые устройства по принципу действия вирусов.
false negative для антивируса куда более неприятна, чем false positive

Не всегда. Смотря какой false positive и какое отсутствие детекта.

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

Сейчас вредоносные программы чаще распространяются иными способами. Интереснее было бы увидеть описание современных угроз, с которыми компании Mail.Ru скорее всего приходится сталкиваться.
Я имел в виду, что если файл чист, а антивирь его забанил (false positive) — это не так страшно, как если файл заражен, а антивирь его пропустил (false negative).

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

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

Про угрозы, с которыми Mail.Ru имеет дело я не смогу написать, т.к. не работаю в отделе безопасности, сам бы почитал с удовольствием
Я имел в виду, что если файл чист, а антивирь его забанил (false positive) — это не так страшно, как если файл заражен, а антивирь его пропустил (false negative).


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

Хотя мне очень не нравится наличие самомодифицирующегося кода или признаков, указывающих на вирус в коде «очень популярной программы»
imho, трудно сравнивать false+ и false-, т.к очень сильно зависит от конкретного образца. Пропустить адварь/недиструктивный троян — не фатально, а шифровальщика — капут. С одной стороны. А с другой — фолсануть на файле винампа, да почти любого прикладного по — не фатально. Переустановил, матюгнулся, с кем не бывает. А вот фолс на виндовом системнике, драйвере — это в лучшем случае BSOD/ребут, восстановление с точки бэкапа, в худшем — убитая система. Если систем — пара сотен (компания) — это очень неприятно.

Фолс-позитив обязаны часто сигнатурам, которые клепаются автоматически. Сотни тысяч образцов в сутки не способен обработать ни один «живой» вирлаб, поэтому все так или иначе нанимают роботов. И тут появляется еще одно место балансировки — или роботы пропускают сквозь пальцы слишком много зверьков, или сильно повышаем вероятность фолса на чьем-нибудь безвредном файле.
Алгоритмы не безупречны и сбой рано или поздно будет.
Поэтому работа над ошибками в виде большой коллекции «чистого» софта — это тоже одна из важных и интересных задач всех вендоров.
Ну, смотря для кого «не так страшно».
Если вы автор программы, на которую даёт false positive популярный антивирус, а сама программа компилируется (т.е. непосредственно на машинный код вы влиять не очень-то можете) — вас ждут весьма весёлые деньки и месяцы нетривиального секаса.
Ну по простому коду, который сам себя «не трогает» такие ошибки должны быть очень и очень редкими (например для того, чтобы не сработала сигнатура достаточно просто «сдвинуть» код — просто добавив что-нибудь безобидное в исходник)
А если вы и в самом деле пишете самомодифицирующийся код, на который кидается эвристик антивируса, то на машинный код вы точно можете влиять, понимаете что происходит и вполне в состоянии заниматься «нетривиальным секасом»
Немного не согласен. Полиморфики все-таки существуют и очень даже применяются. Один более менее вменяемый малварный криптор без полиморфизма не напишешь. Не все же с помощью VB пакуется :) Кстати, будете разбирать полиморфизм, то посмотрите в сторону virus.win32.crypto.a, очень прикольная штука!
Спасибо, обязательно взгляну. Я имел в виду, что доля таких «более-менее вменяемых» невысока. Может я и неправ, и если кто нибудь из антивирусной компании будет читать этот пост, был бы рад услышать комментарии (если это не секрет, конечно).
Но мы же договорились, вирус – это то, что умеет само себя воспроизводить в системе, и чему необходим файл-носитель.
Вы заузили определение вируса. Обычно ограничиваются самовоспроизведением.

Поэтому всякие трояны-руткиты-malware – это не вирусы, а тип payload-кода, который вирус может таскать на себе. Для описываемых в статье технологий классификация компьютерных вирусов может быть только одна: полиморфные и неполиморфные вирусы. То есть меняющиеся от поколения к поколению, либо нет.
Про классификации — всё очень зависит от точки зрения: полиморф или нет, резидент или нет, стелс или нет. По сути по разным аспектам поведения (изменчивость кода, нахождение в загруженном состоянии, способ сокрытия кода, соответственно).

Можно, например, вспомнить вирусы, которые, по сути, содержали буткит + резидентный модуль, которые распространялся наружу в исполняемых файлах (а иногда и в бут-секторе, тоже код, но ни пол раза не файл), но на жертве хранил свой код в незанятых хвостах кластеров (не являющихся частями файлов, очевидно) или в MBR.
Именно это я и собирался сделать — сузить определение вируса до соответствующего биологическому определению, т.е. объекта, который способен порождать свои копии, и которому для работы и размножения необходима клетка-носитель.
Резидент, стелс, буткит — термины, описывающие лишь способы, при помощи которых вирус ищет новые объекты для инфицирования и прячет себя. Ваш вариант с «буткит+резидентный модуль» это все равно вирус, т.к. ему для распространения необходимо положить свое тело (упакованное или нет) в исполняемый файл и потом получить управление на другой машине и развернуться там. И он тоже — либо полиморф, либо нет.
Я вообще считаю что термин «компьютерный вирус» стали использовать неправильно, тупо называя им все нехорошие программы. Если проводить биологическую аналогию дальше, то трояны, руткиты и малварь, которые представляют собой совершенно самостоятельные программные модули, можно сравнить с бактериями — это полноценные клетки, которые способны существовать без носителя.
Резидент, стелс, буткит — термины, описывающие лишь способы, при помощи которых вирус ищет новые объекты для инфицирования и прячет себя… И он тоже — либо полиморф, либо нет.
Как я пытался сказать выше: полиморфизм, подмена инфицированного на исходный (стелс), резидентность — ортогональные характеристики. Почему вы оказываете предпочтение одной из них? Полиморфизм — тоже один из способов сокрытия, не более.

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

А про «нехорошие программы» — дилетанты — они и в Африке дилетанты. Не стоит обращать на это внимания. Как и на всякие «Тыжкомпьютерщик? Почини чайник.»
С бут сектором попробую выкрутиться — это то же самое, только инфицируется не файл, а операционная система целиком. Если считать ОС — носителем, то такой вирус подходит под мою классификацию.

Ну а про ортогональные характеристики: для перехода ко второй статье мне достаточно именно этой одной характеристики — полиморф, не полиморф. Грубо говоря, я рассматриваю вирус, который вообще ничего не делает, кроме как открывает исполняемые файлы (мне все равно каким образом) и записывает себя в них. Я оставляю только такой узкий набор для того, чтобы не отклоняться в сторону и провести больше аналогий с коммерческими защитами, в которых некоторые техники (например антиотладка) представлены более ярко.
И статейку про полиморфные вирусы тоже напишите, интересно. Помню лет 15-18 назад в Компьютерре читал статью про полиморфы — был ошеломлён тем, как можно писать такие вещи, которые самовопроизводятся и не совпадают ни в одном экземпляре.
Любопытно послушать, куда с тех пор ушла эволюция.
Да напишу обязательно, многое в статье повисло «в воздухе».

Правда эволюция к сожалению в этом вопросе далеко не ушла, самым продвинутым вирусным движкам уже много лет, многое было сделано в области коммерческих защит. Доступный коннект с сайтом разработчика софта и эти техники делает уже непопулярными — зачем защищать код внутри исполняемого файла, если его можно хранить на стороне разработчика. В общем постараюсь поскорее разродиться
Куда интереснее не полиморфизм, а метаморфизм. Вот это очень захватывающе, особенно разрабатывать. В средствах накладывания защиты ПО есть не мало попыток применять метаморфизм, но как правило на уровне вирт.машин
Раскройте, пожалуйста, термин «метаморфизм», мне не совсем понятно, что это такое.
Метаморфизм — это случай полиморфизма, когда программа в каждом новом поколении генерирует код, отличающийся от предыдущего поколения. Я обязательно про него подробно расскажу.

Действительно, виртуальная машина это в общем-то метаморфный генератор, если научить её каждый раз на основе одного и того-же «базового» кода порождать различные варианты исполняемого
Дополню этот комментарий. Чтобы было понятнее возьмем две ситуации полиморфный вирус и метаморфный вирус. У первого, как правило, меняется только первая стадия, к примеру расшифровка или «мега-jmp», а у второго меняется ВЕСЬ код. Другими словами, если Вы авер и написали алгоритм успешно детектирующий алгоритм расшифровки, то в случае полиморфика Вы счастливые, а в случае метаморфа могут быть проблемы и дальше.
К огромной радости пользователей ПК, метаморфики пишутся ооочень тяжело!
А я вот скажу, что жалко, жалко, что не было такого ресурса, когда я увлекался ассемблером. Правда, всё очень толково, а главное — интересно расписано, а это, блин, так важно, когда начинаешь кодить, а особенно — читать чужой код. Пойду на 2ю часть.
Спасибо за добрые слова. Никак не могу расстаться с любовью к ассемблеру. Когда он впервые понадобился мне, единственным доступным ресурсом был «Дом технической книги» на Ленинском проспект. А затем под всякие Windows-95,98 это стало просто нереально весело

Сейчас на самом деле трудно программисту обосновать необходимость писать на голом С или асме, т.к. никто уже не даст тебе полезть в ядро системы и что-нибудь нахачить там. Тем не менее те, кто писал на низкоуровневых языках, в будущем, программируя на других, прекрасно понимают что происходит в железе, и это реально очень полезно.
Sign up to leave a comment.