Они атакуют
Обычно создание вредоносных программ проходит так: злоумышленник пишет код, тестирует его на своей операционной системе, а затем ищет способы обойти антивирусную защиту. Первые антивирусы обнаруживали вредоносные программы по их MD5-хэшу, но стоит изменить хотя бы один символ в коде — хэш полностью изменится. Поэтому появились более сложные методы: вирусы начали искать по определенным строчкам в коде, по особенностям структуры файла.
Еще вирусы обычно совершают определенные, характерные для них действия: например, они могут пытаться открыть чужой исполняемый файл и записать в него что-то свое, внедриться в память другого процесса. Когда антивирус анализирует алгоритм поведения программы и пытается найти такие очевидно вредоносные действия, это называется эвристическим методом. Тут возникает вопрос, какое поведение считать легитимным, а какое — вредоносным: есть много «нормальных» программ, ведущих себя похожим образом. А у создателей вирусов есть масса способов обойти проверку. И если создание самой вредоносной программы может занять у злоумышленника неделю, месяц, то на поиск вариантов обхода защиты обычно уходит всего пара часов.
Мы защищаемся
С другой стороны, мы имеем следующее: появляется новая вредоносная программа, она умеет обходить защиту антивирусов, которые популярны среди пользователей, на которые она рассчитана. Независимо от того, установлен у пользователя антивирус или нет, программа может взломать его компьютер. Она уже успешно прошла тесты на такой конфигурации, и в течение какого-то времени у пользователей нет защиты от этой атаки. Сначала — потому, что эта атака еще не обнаружена, а затем, когда вендор выпустил обновление безопасности, нужно какое-то время, чтобы пользователь его установил. Если вендор может в срочном порядке выпустить патч или обновление вирусных сигнатур, то он никак не может сократить время от выхода вируса до его обнаружения, для этого нужно искать новые методы анализа поведения программ.
Один из способов заключается в том, чтобы фиксировать так называемые «слайсы» — моментальные снимки операционной системы, которые представляют информацию о ее статике и динамике. Допустим, вы садитесь за компьютер и запускаете Word. Он потребляет какое-то количество оперативной памяти, страничной памяти, процессорного времени, времени на работу в режиме ядра… Счетчиков, которые измеряют поведение процесса в системе, несколько сотен. Можно пытаться снимать эти показания раз в несколько часов и искать следы вредоносных программ. Но сейчас и этот метод можно легко обойти, просто заставив программу накручивать показания счетчиков так, чтобы ее поведение выглядело легитимным.
От ядра
Наш проект CODA основан на похожем методе, но более надежном: мы фиксируем обращения программы к ядру системы. В отличие от показаний счетчиков или, допустим, обращений к API, обращения к ядру ОС подделать нельзя: все, что программа может делать без них, — это работать со своей оперативной памятью. На этих обращениях программ к ядру системы мы строим компьютерную модель, которая позволяет отличить один процесс от другого. Мы можем вести запись всех процессов не более чем с 10% нагрузкой на систему, и мы научились отличать один процесс от другого. Даже если мы возьмем две программы с одинаковым функционалом, но написанные на разных языках программирования, по отношению к ядру они будут вести себя по-разному. Слайсы полезны для анализа последствий работы программы, а мы изучаем ее поведение на лету. Если программа начинает выходить за рамки своей модели, мы можем ее или временно «замораживать», или менять токены безопасности, запрещать программе выполнять какие-то действия по мере изменения доверия к процессу. Скажем, запрещать обращаться к реестру или файловой системе.
Если к легитимной программе выходит обновление, она обычно меняет свое поведение, но незначительно: мало кто при выпуске обновления к программе полностью ее переписывает. Тем не менее, чтобы быть уверенными в результате, мы собираем модели поведения процессов с пользовательских компьютеров на общий сервер, который мы назвали «Оракул». Например, если пользователь установил новую версию браузера или добавил в него расширение, и модель обращения браузера к ядру системы изменилась — CODA обращается к серверу, достраивает модель и отправляет обратно пользователю.
Работоспособность схемы мы подтвердили в мае 2016 года, когда запустили 60 тысяч вредоносных программ в сети виртуальных машин. Уровень обнаружения составил свыше 90% при не более чем 4% ложных срабатываний. И это после получаса обучения на условно здоровой системе, без всяких баз и эвристических правил.
С чего все началось
В 2010 году я окончил бакалавриат на математико-механическом факультете Уральского государственного университета имени Горького. Екатеринбург был родиной движения CTF (Capture the Flag) — командных соревнований по компьютерной безопасности, в которых каждая команда контролирует один сервер (пытается исследовать и закрыть дыры в его безопасности) и при этом старается взломать чужие сервера. Мы были первыми участниками CTF, постепенно к нам стали присоединяться команды из других вузов, в Университете ИТМО была, кстати, одна из сильнейших. Отсюда и мое увлечение компьютерной безопасностью.
После УрГУ я поступил на матмех СПбГУ, в 2012 году я окончил там магистратуру, а в 2015 — аспирантуру на кафедре системного программирования. Проект CODA возник в 2009 году, его основал мой научный руководитель Максим Баклановский. Лаборатория Касперского тогда проводила конкурс по созданию системы антивирусной защиты будущего, проект CODA в нем победил, но не развивался до тех пор, пока я не поступил под руководство Максима Викторовича, который сейчас так же, как и я, работает в Университете ИТМО. Мы зарегистрировали юрлицо, в 2013 году я стал гендиректором компании, а в августе 2014 года — резидентом Сколково.
Планы на будущее
Мы хотим выпустить CODA в виде самостоятельного продукта, причем мы не говорим о том, что это антивирус. Дело в том, что антивирус должен предлагать комплексную защиту операционной системы — родительский контроль, антиспам, сигнатурный файловый сканер, но мы считаем, что еще одна база определений вирусов никому не нужна. Можно сказать, что CODA — это «эпоксидная смола» для операционной системы. Пока смола застывает, те шестеренки, которые уже запущены, проделывают в ней себе путь. Когда смола застыла, то, что работало раньше, продолжает это делать, а вот новая шестеренка в смоле увязнет.
18 февраля мы участвуем в Demo Day акселератора Университета ИТМО Future Technologies, там можно будет посмотреть нашу презентацию. К этому времени мы собираемся запустить сайт, на котором можно будет оставить адрес электронной почты для записи на альфа-тестирование. Рабочий прототип собираемся подготовить уже в первом квартале 2017 года. После установки на компьютер пользователя CODA начнет работать в режиме обучения и строить модели запущенных процессов, отправлять их нам. В данных, которые мы собираем, нет ничего, что могло бы идентифицировать пользователя: это набор чисел, бинарная мешанина. Тем не менее, мы также создадим портал, на котором пользователь сможет ознакомиться с тем, как работает его система, были ли аномалии и инциденты безопасности. Когда мы убедимся, что продукт действительно помогает в защите пользовательских систем, можно будет выходить на бета-тестирование. Согласно планам, это произойдет во втором квартале 2017 года. После завершения тестирования CODA будет распространяться по подписке.