Покой нам только снится
11 апреля 2017
Если вы знакомы с антивирусами – значит, слышали и о сигнатурах. По крайней мере, наши постоянные читатели о них точно знают. Напомним, о чем речь.
Сигнатура – характерный участок кода вредоносной программы, позволяющий определить конкретную вредоносную программу.
То есть теоретически из образца вредоносной программы можно выделить (вручную или автоматически) некий фрагмент кода (как можно меньшего размера – в целях минимизации размера вирусных баз), протестировать его на несовпадение с кодом другого вредоносного ПО и наиболее распространенных легитимных программ и поместить его в вирусные базы. После этого антивирус может выявлять факт заражения, просто пробежавшись по коду программы.
Поскольку злоумышленники тоже знают, что антивирусы используют сигнатуры, существуют инструменты, вычисляющие сигнатуру вредоносного файла, на которую реагирует антивирус. Получив в свои руки сигнатуру, злоумышленники модифицируют ее и тем самым избавляются от внимания антивирусных систем.
Но если антивирус легко может выявлять вредоносные файлы по сигнатуре, то могут ли киберпреступники и вовсе от нее избавиться?
Полиморфные вредоносные программы – это программы, не имеющие характерных участков кода. В ходе заражения файлов при каждом последующем заражении вредоносный код модифицируется или раскидывается по заражаемому файлу так, чтобы не было возможности выделить какой-либо характерный признак заражения.
Первый известный полиморфный вирус был написан Марком Вашберном (Mark Washburn). Вирус, который назывался 1260, был создан в 1990 году. Более известный полиморфный вирус был внедрен в 1992 году болгарским взломщиком Dark Avenger (псевдоним), создавшим MtE (Mutation Engine).
Избавиться от сигнатур можно несколькими способами.
NOP. Она же NOOP (сокращение от английского «No OPeration») – специальная команда, предписывающая не делать ничего. Применений у данной инструкции множество. Например, она может использоваться для создания задержки на определенное время.
Если упрощать, то любая программа (в том числе вредоносная) – это набор команд и данных. Код – это поток последовательных команд. Поскольку NOP не делает ничего, то это команду можно вставлять где угодно в потоке других инструкций или разбрасывать случайно по коду: на работоспособности программы это никак не скажется (если, конечно, программа не критична к задержкам, вносимым NOP).
Подход простой, но и ответ со стороны антивируса тоже элементарен: при сравнении файла с сигнатурами команды NOP игнорируются.
Второй вариант – шифрование. Как известно, если шифровать данные с разными ключами, то зашифрованный код получится разный. При заражении файла вредоносный код шифруется с новым ключом, который кладется в код распаковщика (декриптор). Помещаем в заражаемый файл зашифрованный буфер с данными, добавляем в декриптор указание на начало зашифрованного кода и помещаем сам декриптор в заражаемый файл.
В итоге антивирус не может ориентироваться на зашифрованный код, а лишь на декриптор. При этом помним, что декриптор тоже изменяется при заражении – в него помещаются ключ и адрес перехода.
К сожалению пользователи, увидев очередные тесты антивирусов, зачастую смотрят только на их результаты, мало обращая внимание на методику.
Но как раз методика проведения тестов очень важна. Например, если тест проводится исключительно на обнаружение вредоносных файлов в некой коллекции — без их запуска, то можно показать хорошие результаты и не имея полиморфного анализатора, ориентируясь на характерные участки образцов, постоянно участвующих в тестировании антивирусов.
Однако все вышеописанное лишь затрудняет работу антивируса, не более. А вот полностью избавиться от характерных участков кода позволяет пермутация.
Напомним, что код – это поток команд, некая дорожка. При этом он может не располагаться последовательно, его можно разбросать, соединив фрагменты переходами – командами JMP (прыжок).
При таком подходе вредоносный код состоит из некоторого количества блоков, которые переставляются местами при каждом заражении и связываются JMP-ами. Все просто? Как бы не так! Любая программа – это вызов функций, многочисленные внутренние переходы и т. д. Соответственно, разбросав логические блоки, нужно пройтись по коду второй раз и скорректировать все вызовы так, чтобы они указывали на нужные места. Опять же, требование отказа от сигнатур приводит к тому, что блоки вредоносных программ должны быть очень маленькими, что противоречит требованию целостности блока.
Как антивирус может противостоять пермутации? Он теперь не просто ищет сигнатуры, а бежит по инструкциям анализируемой программы, перескакивая по переходам. Таким образом, пробегая по последовательности выполнения программ (фактически выполняя файл внутри антивирусного движка), антивирус снова собирает сигнатуру.
Звучит не особо страшно, но на практике это означает сильный расход ресурсов на фактический запуск файлов – и соответствующие временные задержки. Поэтому прогонять все до одного файлы через полиморфный анализатор нельзя. На помощь приходит другой анализатор – эвристический.
Эвристический анализатор позволяет определить вредоносные программы, похожие на ранее изученные. Но это – лишь одна из задач эвристика.
Приведем несколько эвристических признаков:
Точка входа в секции открытой для записи(rwx). Открытая для записи, исполняемая секция, в которую сразу передается управление, с большой вероятностью свидетельствует о наличии самомодифицирующегося кода, такие секции используются в подавляющем большинстве случаев вирусами и программными защитами.
Инструкция перехода в точке входа. Особого смысла в размещении инструкции перехода в точке входа нет и такой признак указывает на наличие самомодифицирующегося кода в файле.
Точка входа во второй половине секции. Вирусы, использующие расширение секции, в большинстве случаев располагаются в конце секции. Это нетипично для нормальных файлов, поэтому такая ситуация является подозрительной.
Поломки в заголовке. Некоторые модификации заголовка после инфицирования оставляют файл работоспособным, но сам заголовок при этом содержит ошибки, которые линкер бы не допустил. Это тоже подозрительно.
Нестандартный формат некоторых служебных секций. В исполняемых файлах есть служебные секции, такие как, например, .ctors, .dtors, .fini и т.п. Особенности этих секций могут использоваться вирусами для заражения файла. Нарушение формата такой секции также является подозрительным.
… и еще сотня таких признаков.
Таких признаков может быть множество, они имеют разную степень опасности, некоторые могут быть опасными лишь в комбинации с другими, но это мощнейший инструмент для принятия решения о необходимости более тщательного анализа и о факте заражения. Обойти эвристик весьма непросто (я имею в виду сделать так, чтобы он не выдал даже предупреждения). Это либо всякие платформозависимые решения, использующие особенности определенных компиляторов или фреймворков (типа перезаписи стандартных конструкторов или деструкторов), которые довольно быстро попадают в эвристическую базу, либо использование реально больших и сложных инфекторов, умеющих действительно качественно расположить код в файле.
Итак, пермутация не является проблемой для поиска сигнатур, хотя, конечно, сильно поднимает планку требований к команде разработчиков антивируса.
Что еще есть в арсенале злоумышленников?
Генерация мусора. Выше мы говорили о команде NOP. Вместо нее вирусописатели могут при заражении вставлять во вредоносный код множество лишних инструкций, пряча действительно вредоносный код среди ничего не значащих команд. Задача выглядит простой, но таковой не является, так как код должен остаться работающим несмотря на добавление кучи лишних команд.
Для противодействия такому подходу полиморфный анализатор еще более усложняется – нужно не только собирать код в сигнатуры, но и очищать его от неработающих кусков (а если через этот анализатор прогнать код Windows – много ли от него останется?). Повышается цена ошибки полиморфного анализатора.
Метаморфы или метаморфизм. В отличие от пермутации, код не просто переставляет блоки вредоносной программы – он действительно меняется. В теории такие вредоносные программы определяться не должны – сигнатуры отсутствуют.
Как многим известно, изначально почти все программы пишутся на определенном языке программирования, который с помощью специальной программы-компилятора переводится в исполняемый код. При этом в общем случае при каждом запуске, в зависимости от опций компилятора, код может создаваться новый. Программа может быть оптимизирована по скорости, компактности, потреблению ресурсов и т. д. Аналогично работает и метаморфный генератор. При каждом запуске создается новый код вредоносной программы на основе базового.
Вредоносный код можно еще более запутать работой с константами, регистрами вызова и т. д. Здесь уместно привести аналогию из математики, пусть и далекую. Скажем, число 6 может быть получено как 2+4, 3+3, 8-2... Какая сигнатура операции будет характерной?
Чтобы справиться с таким методом, просто анализировать код антивирусу уже недостаточно. Совершенствование полиморфного анализатора превращает его в эмулятор. То есть внутри антивирусного ядра находится фактически система запуска программы на исполнение, отслеживающая уже не сигнатуры, а действия «запускаемой» программы.
Борьба брони и снаряда привела к тому, что полиморфные вредоносные программы стали редкостью. Их стало настолько сложно и затратно создавать, что:
Если вы в состоянии написать хороший метаморфный генератор, с которым специалисты провозятся хотя бы несколько дней, или эмулятор, детектирующий сигнатуру внутри качественного вирусного движка, или сделать качественный crackme, который публично зауважают, то… просто напишите мне. Я не рекрутер, но если вас будет много — сменю профессию, просто представляя вас компаниям, которые занимаются безопасностью. Будьте уверены, ваши доходы и стабильность по жизни во много раз перевесят то, что можно получить, распространяя вирусы или взламывая софт.
Антивирусная правДА! рекомендует
Cовременный антивирус – это очень и очень сложная система, возникшая в ходе борьбы с поколениями вредоносных программ. Создание антивируса сегодня под силу только немногим компаниям.
Нам важно ваше мнение
Чтобы оставить комментарий, нужно зайти через свой аккаунт на сайте «Доктор Веб». Если аккаунта еще нет, его можно создать.
Комментарии пользователей
Sergey
04:31:49 2020-03-20
ka_s
12:23:17 2018-10-06
Денисенко Павел Андреевич
14:30:24 2018-07-26
alex-diesel
17:45:32 2018-04-11
Имхо, пользователю, можно сказать зрителю)) было бы любопытны подобные соревнования.
Неужто нельзя придумать относительно честный и справедливый формат?
vasvet
12:44:34 2018-04-01
Toma
18:35:32 2018-03-13
ka_s
18:04:25 2017-11-23
maghan
10:57:52 2017-10-11
Littlefish
23:50:51 2017-06-11
Был затронут интересный вопрос - тесты антивирусов. Читал, что компания Dr.Web с некоторых пор не принимает участия в подобных тестах. А ведь на самом деле, в тестах же используется только антивирусный сканер с сигнатурами, причём вредоносных программ неактивных (в архиве) и не запущенных. Т.е. простой сигнатурный поиск и всё. Абсолютно игнорируются другие компоненты антивирусных решений, тот же эвристический анализ, с помощью которого антивирус обнаруживает вредоносные программы ещё не добавленные в сигнатуры, а также полиморфные и другие сложные вредоносные программы описанные в выпуске.
duduka
10:58:47 2017-06-03
MrMister
11:55:44 2017-04-15
Людмила
11:20:23 2017-04-15
Неуёмный Обыватель
01:55:29 2017-04-13
николай58
19:11:11 2017-04-12
AntonIT
17:44:09 2017-04-12
Только не надо о воспитании и морали- все мы хороши..
В своих мыслях вы можете иметь ПРАВО на все что угодно! В реальности все совсем по другому!
Не будем тратить больше не мое не ваше время, (в нашем диспуте, ПО ЭТОМУ ВОПРОСУ, истина все равно не рождается) - не знаю сколько стоит ваше время а мое - дорого..,
И я не собираюсь его тратить больше на то чтобы объяснять вам, раз от раза, что НЕ НУЖНО решать(вашими словами) "НЕРЕШАЕМОЕ", а нужно писать БУКВАРЬ для нулевого уровня знаний!(забудьте о профи-это не ваш профиль, поверьте)
А хотите проверить или повысить свой уровень теоретических и практических знаний предлагаю принять участие в *** будет проходить *** ...Просто фантастически интересный форум по практической безопасности.
Самые крутые эксперты по ИБ..много полезных докладов, мастер классы по различным направлениям...
в том числе и по предотвращению DDoS-атак))...
Людмила
11:58:02 2017-04-12
1. в какой фразе я оценила ваш уровень знаний? я _предположила_ (там стоит вопросительный знак, а не точка или восклицательный знак - т.е. не утверждение) что вы могли бы написать, будь у вас иной уровень воспитания.
2. На что у меня есть права не вам судить. У вас точно нет прав выносить оценочные суждения о других участниках и называть "кашей" труд других людей, демонстрируя тем самым неуважение к нему.
3. Сделать выпуск, который не был бы букварем для знающих и был бы понятен начинающим - нерешаемая задача. Мы не занимаемся такими задачами. Если хотите - попробуйте создать такой выпуск - мы его опубликуем.
4. Наши сотрудники здесь обозначены паучками. Все остальное - ваши домыслы.
AntonIT
11:51:51 2017-04-12
Видимо вам надо было специально уточнить что "перед домохозяйками хвастаться" - это метафора!
А суть этой метафоры в том что положительные и хвалебные отзывы по всем вашим статьям оставляете только ваши соавторы и коллеги, а остальные "обычные" пользователи, в большинстве просто пишут "спасибо", "полезно" и.т.д. - и то только потому что они "зарабатывают" по 10 web-ок))) возможно и статью не все читают!, потому что для спецов, извините ваши выпуски ненужный "БУКВАРЬ" а для начинающих неудобочитаемая каша, выбранная из кусков других статей, аббревиатур и терминов!
И эту кашу вы все дружно защищаете, а не пытаетесь что изменить... - понимаю так вам удобно!
Сами пишите - сами себя хвалите))!!
Вы меня лично не знаете,не знаете кто я,
и оценивать мой уровень знаний у вас точно нет ни права ни, полномочий ни квалификации!!
SGES
07:12:13 2017-04-12
Людмила
06:27:09 2017-04-12
"И посмотрим кто здесь просто перед "домохохяйками" хвастает своими знаниями а кто действительно специалист."
Жаль, что выпуски "Кухни", а может и все выпуски, вы воспринимаете хвастовством.
AntonIT
04:08:26 2017-04-12
"для лично моего уровня знаний о сфере ИБ, выпуск слишком сложный"?
Вот уж насмешили - от души...сложный ))) может лично с вами проведем практическое задание допустим на темы поиска "0-day уязвимость в VirtualBox и компрометацию гостевой системы" и вообще по любому практическому заданию в сфере ИБ.
И посмотрим кто здесь просто перед "домохохяйками" хвастает своими знаниями а кто действительно специалист.
Это почти для всех ваших читателей сложный...как реферат на 3й-ку!
"я искренне восхищаюсь талантом Alexander - я так писАть не умею"? - это точно СТИХИ я писать не умею)))
Дмитpий
00:03:15 2017-04-12
Marsn77
23:19:13 2017-04-11
Ruslan
23:12:08 2017-04-11
НинаК
22:07:24 2017-04-11
kva-kva
21:52:06 2017-04-11
mk.insta
21:31:39 2017-04-11
iAFC
20:59:04 2017-04-11
orw_mikle
20:46:47 2017-04-11
mariana
20:21:49 2017-04-11
a13x
19:57:58 2017-04-11
iiwanc
18:23:50 2017-04-11
Владимир
18:20:17 2017-04-11
Dvakota
18:08:02 2017-04-11
denn91
17:48:08 2017-04-11
B0RIS
17:36:32 2017-04-11
Татьяна
17:17:27 2017-04-11
Людмила
17:09:23 2017-04-11
"Опять каша из информации, - непонятно на кого рассчитанной."
Наш дорогой читатель! как я понимаю, вы хотели сказать следующее:
"для лично моего уровня знаний о сфере ИБ, выпуск слишком сложный"?
" Но как всегда есть восхищенные -поющие дифирамбы!,-не будем показывать пальцем... (неважно какая тема - эти люди всегда восхищенны НАПИСАННЫМ и вообще всем ))!!"
а в данном случае вы на самом деле хотели сказать:" я искренне восхищаюсь талантом Alexander - я так писАть не умею"?
"— Человек — это тоже животное. Его тоже надо охранять.
— От кого?
— Человека надо охранять от человека." из к-фа "Гараж"
Пaвeл
17:02:08 2017-04-11
Давайте восклицать, друг другом восхищаться.
Высокопарных слов не стоит опасаться...
kozinka.ru
16:38:58 2017-04-11
AntonIT
16:07:35 2017-04-11
Но как всегда есть восхищенные -поющие дифирамбы!,-не будем показывать пальцем... (неважно какая тема - эти люди всегда восхищенны НАПИСАННЫМ и вообще всем ))!!!
djabax
15:45:12 2017-04-11
Геральт
15:31:54 2017-04-11
Неуёмный Обыватель
14:07:53 2017-04-11
Stalkerson
13:42:59 2017-04-11
Пaвeл
13:34:49 2017-04-11
Можно уточнить, что Вы имели ввиду?
Пaвeл
13:33:11 2017-04-11
Неуёмный Обыватель
12:51:37 2017-04-11
Спасибо, что переживаете за мою судьбу. Мира и добра!
P.S. Павел, будьте осторожнее в сети со своими данными. Особенно в tutanetam и vk.
stavkafon
12:06:00 2017-04-11
Alexander
11:28:30 2017-04-11
krant
11:26:22 2017-04-11