2 июля, 2013
Предсказания в вирусологии-2.
100% гарантии не бывает – увы, даже самые надёжные антивирусы иногда пробиваются профессиональными атаками. Это плохая новость. Ещё более плохая новость – что менее надёжные антивирусы пробиваются ещё чаще.
Высокопрофессиональные преступники могут при желании хакнуть всё, но таких, ура-ура, далеко не большинство. В основном кибер-безобразиями занимаются обычные программисты, перепутавшие добро и зло. Они обычно не в состоянии хакнуть наиболее продвинутые защиты, но счастливы украденным с компов, которые вообще не защищены или используют «дуршлаг-протекшн». И таких компов в мире хоть пруд пруди.
Экономика получается достаточно простая:
Чем крепче защита – тем выше «обороноспособность». Но чем профессиональнее атака – тем более крепкую оборону она может преодолеть.
В условиях наличия 2,5 миллиардов пользователей Инета потенциальных жертв эта экономика работает примерно так:
Преступникам не надо заморачиваться супер-мега-отмычками для взлома супер-сейфа (тем паче, что в сейфе может оказаться какая-нибудь ерунда). Дешевле попробовать взломать соседей – вдруг у них броня потоньше да и заначка позначительнее?
Итого: заморачиваться мега-профессиональными атаками смысла нет — только если в спортивных интересах. (Переучиваться с Windows на Mac – тоже надо время тратить…) Гораздо эффективнее заниматься ковровым бомбометанием, покрывая как можно больше жертв с помощью не требующих большого напряжения ума атак.
Чем крепче защита – тем меньший интерес она представляет для злоумышленников. Они не будут заморачиваться её ломать, а просто найдут себе других жертв.
Посему настало время совершить новую увлекательную экскурсию под капот нашего антивируса и чутка прокачать базу знаний о том, как ещё буковка «К» в панели задач усложняет жизнь кибер-негодяям — на примере защиты от будущих угроз.
Здесь уже рассказывалось о такой штуке как эмулятор.
Вкратце – это один из способов автоматически отлавливать новые вредоносы, анализируя поведение подозрительных программ. Но как проанализировать поведение, не запуская программу, т.е. исключить возможность причинить вред компьютеру? Как раз для этого эмулятор создаёт специальное виртуальное пространство, где и выполняет программу. Иными словами, вместо того, чтобы колоть подозрение на вирус непосредственно живому человеку и снимать показания как его колбасит мы эмулируем среду обитания в пробирке и наблюдаем за поведением подозрительного объекта, ожидая, когда он проявит свою вредоносную сущность.
Таким образом, оказывается, что сбежать вредоносу действительно некуда. Но! Самые изворотливые (и самые опасные) из них научились распознавать «пробирку» (искусственное окружение) и автоматически менять вектор атаки пока не найдут слабую точку в защите. Речь о специальных анти-эмуляторных уловках. Например, запуск недокументированной функции, проверка подлинности выполнения вызовов по изменению регистров процессора, анализ кодов ошибки, поиск в памяти определённого кода, использование «логических бомб», вводящих эмулятор в бесконечный цикл и др. Как только уловка срабатывает, вредонос понимает, что оказался в «пробирке», сворачивает представление (т.е. прерывает выполнение или делает вид, что белая и пушистая программа) и пробует атаковать по другой логике, пытаясь незамеченным проскочить мимо эмулятора.
Многие годы борьба на этом фронте следовала классическому сценарию «броня против снаряда» – стороны поочерёдно придумывали новые контрхитрости, что, впрочем, приносило мало радости рядовому пользователю. Кое-кто из экспертов даже поспешил скоропостижно похоронить эмулятор как перспективную технологию. Однако мы таки нашли способ в этом деле посмеяться последними.
Как для вируса создать такую пробирку, чтобы она на 100% соответствовала организму человека?
Ну, не знаю как для био-вирусов в эпоху клонирования :) а вот для компьютерных вредоносов это теоретически возможно, но практически весьма затратно и труднореализуемо. Всего-то надо написать операционную систему, которая будет в точности соответствовать оригиналу и «поднимать» её для каждого подозрительного файла. Для полноты картины представим себе ещё и ресурсоёмкость такой операции. В общем, не вариант.
Мы пошли другим путём, в обход.
Абсолютно-подавляющее количество вредоносов работает на пользовательском уровне операционной системы. Однако для выполнения системных вызовов (например, чтение/запись файла) они обращаются к ядру системы в системный уровень. У этих уровней есть одна большая разница – на первом программа может видеть изменение окружения (и, соответственно, использовать анти-эмуляторные уловки), а на втором нет. Соответственно, наша задача заключается в том, чтобы сделать эмуляцию на пользовательском уровне полностью соответствующей их выполнению в реальных условиях, при этом можно особо не заботиться о выявлении вредоносных действий. А все «тяжёлые» антивирусные приёмы эмулятора перенести поближе к ядру, таким образом, замаскировав «пробирку» до неузнаваемости.
Что мы и делаем. А именно – корректно эмулируем исполнение всех вложенных вызовов API-функций до перехода на системный уровень. Соответственно, вредонос на пользовательском уровне ощущает радостное чувство безнаказанности в девственной среде и, наконец, выдаёт свою зловредную сущность. Бинго!
Увы, любая технология имеет свою цену в плане производительности и потому должна компенсироваться соответствующими ускорителями и оптимизаторами. Наш двухуровневый метод эмуляции отлично рубит вредоносные уловки, хорош по стабильности, но подтормаживает. Что, впрочем, не проблема, если на плечах есть мозг. А именно: мы также прикрутили к эмулятору умный аппаратный ускоритель, который выборочно выполняет куски программы на реальном процессоре, минуя программную эмуляцию. Не буду вдаваться в подробности и грузить деталями (патентная заявка всё ещё в очереди), но в итоге получилось, что этот дуэт технологий работает даже быстрее классической реализации!