company_banner
29 августа 2014 в 10:04

Как в Облаке Mail.Ru появилась защита от вирусов



Всем привет, меня зовут Юрий Лазарев, я системный администратор Облака Mail.Ru. Недавно мы внедрили автоматическое антивирусное сканирование всех загружаемых в хранилище файлов. Теперь весь контент проверяется Антивирусом Касперского, чья продукция уже используется для защиты от вирусов в Почте Mail.Ru. Кроме того, были просканированы файлы, залитые в Облако с момента его запуска в прошлом году. Реализовать подобную проверку в условиях высоконагруженного сервиса, сохраняя при этом такую же высокую скорость работы, — достаточно сложная задача.

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

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

Новые файлы

В Облаке существует дедупликация, то есть файл с конкретным содержимым присутствует лишь в одном экземпляре (на самом деле в двух, так как существует резервная копия). Если 200 человек зальют один и тот же файл, то в хранилище не будет находиться 200 одинаковых файлов. Просто всем этим пользователям будут раздаваться копии одного файла. Зачем? Во-первых, это позволяет нам эффективнее использовать место на дисках и, как следствие, предлагать пользователям больше бесплатного пространства для хранения информации. Кроме того, мы экономим мощности для проверки файлов. На данный момент дедупликация позволяет нам снизить нагрузку на хранилище примерно на 15%.

Проверка осуществляется несколько раз: как только файл попадает в Облако и позже, с помощью обновленных антивирусных баз. Ведь всегда есть вероятность, что файл заразился новым вирусом, который ещё не был известен антивирусу на момент загрузки. Так что проверки проводятся на постоянной основе. Если файл инфицирован, сервис не позволит ни произвести скачивание, ни создать на него ссылку.

Мы проверяем файлы на отдельных серверах, которые выделены исключительно под эту задачу. Кроме того, мы написали утилиту, которая позволяет проверять файлы, используя API Касперского. Дело в том, что нельзя просто так поставить коробочную версию антивируса на какой-нибудь сервер и сказать ему, чтобы он проверял все файлы. В этом случае можно будет вообще забыть о таком явлении, как высокая производительность. Антивирусный продукт не является инструментом, специально разработанным для использования в облачных системах, его необходимо интегрировать. И самим процессом антивирусной проверки в высоконагруженных системах необходимо жёстко управлять. Эту роль на себя взяла вышеупомянутая утилита. Она не только определяет последовательность проверки файлов, но и оптимизирует нагрузку. Если описать по-простому: не надо загружать весь файл из хранилища и передавать на проверку. Утилита берет начало файла, скачивает определенный кусочек из хранилища. Дальше Касперский анализирует тип этого файла. Как правило, нет смысла проверять все тело файла целиком. В зависимости от типа файла SDK антивируса определяет стратегию проверки. Дальше идёт запрос в нашу утилиту, мол, дай мне этот кусок, и нужная информация загружается из хранилища. В итоге, когда SDK решает, что файл проверен, тот получает отметку о самом факте проверки, указывается время её проведения и версия антивирусной базы. Таким образом, использование управляющей утилиты существенно сокращает время проверки, снижает нагрузку на сеть и на сами диски.

На данный момент у нас более 20000 дисков с файлами пользователей Облака. И проверка ведется постоянно. В хранилище попадают самые разные данные, включая огромные видеофайлы. Вытаскивать их из хранилища и перегонять по сети было бы крайне неоптимальной тратой ресурсов. Но, благодаря описанному выше механизму, нам удалось наладить антивирусную проверку силами нескольких десятков серверов. Сейчас в сутки проверяется около 8 млн файлов, порядка 50 терабайт. Это далеко не пиковая производительность системы, к тому же мы заложили возможности по дальнейшему масштабированию.

Очередь проверки

Итак, мы снижаем стоимость хранилища и нагрузку на неё за счёт использования дедупликации, а также существенно увеличиваем скорость антивирусной проверки с помощью управляющей утилиты. Но этого было бы недостаточно для быстрой обработки столь большого объёма данных. Поэтому мы применили ещё один инструмент — очередь проверки. Она представляет собой не просто список файлов, в который снизу добавляются данные, это отдельный сервис. Сама очередь находится на отдельном сервере и работает под управлением СУБД Tarantool. Это собственная разработка сотрудников Mail.Ru Group, и одной из её особенностей является очень высокая производительность. Именно это стало определяющим фактором при выборе СУБД, а вовсе не её происхождение. Прежде всего, в очередь попадают новые файлы, загружаемые в Облако. Их туда помещает сервис-загрузчик. А также в очередь добавляются файлы с самым большим временем, прошедшим с момента их последней проверки. У второго сервиса, пополняющего очередь проверки, есть ограничение на максимальное количество добавляемых старых файлов, чтобы он не замедлил процесс проверки новых. На каждом сервере одновременно работает несколько таких сервисов обработки. Сейчас мы пробуем распределять файлы разных типов и размеров по разным очередям, чтобы еще сократить время проверки для большинства загружаемых файлов.



Старые файлы

В связи с тем, что автоматическая проверка была внедрена через некоторое время после запуска Облака Mail.Ru, накопилось порядка 14 петабайт данных, которые нужно было проверить. Причем, естественно, они лежали не на одной машине, а были раскиданы по нескольким дата-центрам. Ситуация осложнялась тем, что все эти серверы активные, а значит нельзя было нагружать их задачами по проверке файлов. Если сервер, на котором хранятся файлы, будет занят какими-то аналитическими задачами, которые нагружают аппаратные ресурсы хранилища, то потенциально скорость выполнения всех операций существенно уменьшается, в том числе, и передача файлов по сети. И в таком случае мы получили бы деградацию качества сервиса.

Проверять такой объем данных постепенно тоже было бы нецелесообразно, на это ушло бы слишком много времени. Поэтому решено было задействовать дополнительные ресурсы, чтобы провести проверку в кратчайшие сроки. Для этой цели был собран временный кластер из 60 серверов. Они и осуществили проверку всех ранее загруженных данных примерно за три недели.

Также мы посчитали, какие заблокированные вредоносные программы наиболее распространены:



Выводы и дальнейшие планы

Итак, благодаря комплексному применению управляющей утилиты, очереди проверки и СУБД Tarantool, нам удалось добиться высокой производительности антивирусной проверки, почти в реальном времени, задействовав сравнительно небольшие ресурсы.
Тенденция такова, что со временем все больше пользовательской информации будет храниться в облаках. Поэтому антивирусная проверка становится неотъемлемой частью не только устройств пользователей, но и онлайн-сервисов, где хранятся их данные.

Механизм проверки в нашем Облаке мы ещё будем существенно модернизировать. Например, планируется ввести удельный вес. Благодаря этому параметру чаще всего будут проверяться наиболее востребованные пользователями файлы. Файлы большого размера будут выделяться в отдельную очередь, поскольку их проверка занимает очень много ресурсов и времени. Организация подобных очередей для разных файлов – это интересная задача, о которой мы расскажем в одном из следующих постов.
Автор: @ylazarev
Mail.Ru Group
рейтинг 578,43
Строим Интернет

Комментарии (41)

  • +25
    Тогда где мне хранить свою коллекцию вирусов?
    • +8
      В Дропбоксе, теперь дешевле! Не жмись, дай Кондолизе тоже поиграть.
    • +5
      В зашифрованном архиве.
  • +7
    А если файл содержит вирус, который начал детектиться через час после залива на облако.
    ВСе, кто будут пытаться скачать увидят «файл чист, проверено касперским», а при скачивании их личный касперский начнёт ругаться.
    Что они будут думать?
    • –3
      Да-да, так оно и происходит. Через их облако не один месяц распространялись энкодеры и принимаемые меры противодействия были мягко скажем неэффективны.
      • 0
        энкодеры
        x264 что ли?
    • +3
      Вы безусловно правы в том, что такая ситуация может произойти.
      Оперативная перепроверка хранилища это одна из наиболее труднореализуемых задач в контексте огромных объемов трафика.
      На данный момент происходит полная перепроверка файлов в облаке на регулярной основе, однако здесь еще над чем работать для минимизации вероятности возникновения подобного сценария, т.к. физически невозможно раз в час (а это фактический период обновления антивирусных сигнатур) перепроверять все файлы в хранилище — объем необходимых для этого аппаратных ресурсов просто огромен.
      Проверять каждый файл в момент запроса контента пользователем в реальном времени тоже достаточно утопичный вариант, т.к. время проверки одного файла может составлять десятки минут.
      Соответственно по этой причине и приходится придумывать и применять алгоритмы приоритетов и очередей.
      Детали обязательно расскажем в следующих статьях.
      • 0
        может писать дату-время-версии сигнатур когда проверен файл?
        хотя это еще тонна информации не особо важной.
        • 0
          Эта информация уже присутствует в хранилище, т.к. в т.ч. на ее основе формируется очередь проверки.
          • 0
            я имел ввиду, что заграмождает пуб страницу.
      • +1
        У касперского, вроде как, есть свое облако где хранятся хеши файлов, о которых известно, что это зловреды, может быть наладить сравнение вашей базы хешей с базой облака касперского по тому же принципу, что и при дедупликации?
        • 0
          Ага, называется Security Network

      • НЛО прилетело и опубликовало эту надпись здесь
        • +1
          Как раз никакого обмана здесь нет. Если система пишет, что файл был проверен антивирусом, значит так оно и есть.
          Здесь рассматривается тот, достаточно редкий вариант, когда на момент проверки файла антивирусом, тот еще не умел детектировать вирус, содержащийся в файле (еще просто не успели выпустить соответствующие сигнатуры).
          • НЛО прилетело и опубликовало эту надпись здесь
  • +14
    Когда webdav будет? Обещали весной, а уже осень на носу.
    • +1
      Жаль, что ваш вопрос про WebDAV оставили без ответа. Хотелось бы и мне видеть такой функционал.
    • +2
      Мы понимаем, что многие очень ждут, когда в Облаке появится webdav.
      Пока мы не планируем открыть пользователям доступ к этой функции, однако, как только это произойдет, мы сообщим.
      • 0
        По-моему многие ждут не только WebDAV, но и REST API (как у Яндекс.Диска или Dropbox) с OAuth 2 авторизацией.
      • 0
        стоп! говорили же, что вот вот появится. а теперь не планируете?
        • 0
          Мы сами заинтересованы в том, чтобы это случилось как можно скорее, и делаем ввсе возможное для этого, но, к сожалению, пока не можем озвучить точных сроков.
      • +1
        А, кстати, почему? Чтоб мне 1ТБ грустнее использовать было?
  • +2
    Стоит ли раскрывать каким именно антивирусом вы пользуетесь?
    Ведь злоумышленик теперь имеет на одну возможность больше — если он нацелен на вас, теперь сможет затачивать вирус именно под касперского, и повысить свои шансы на успех.
    • +3
      Так все уже давно раскрыто
  • +2
    Я вообще не вижу толка от антивирусов. Какой в них толк, если только систему жрут. Обходятся они довольно просто и если человеку надо будет загрузить вредоносное ПО, то он это сделает и никакая защита даже не пикнет. От популярных угроз да, защищают. Но от нацеленных — нет.
    • 0
      лучше поздно чем никогда
    • +4
      Не бывает защиты гарантирующей безопасность. Антивирусы повышают планку стоимости заражения — тому, кто занимается этим «профессионально» приходится вкладываться в енкодеры и регулярные проверки по антивирусным базам. С точки зрения конечного пользователя, антивирусы отсекают основной поток атак и существенно снижают вероятность заражения.

      От нацеленных угроз не защищает ничего. Можно говорить только о том, какова планка взлома — одно дело, когда взлом может провести любой студент без навыков и тулзов и совсем другая планка, когда для взлома требуется использование 0-day для нескольких разных продуктов, например.
      • 0
        Криптерами, изменяющими сигнатуру вирусов нынче пользуются почти сто процентов хакеров, это несложно.
        • +1
          Да, и эффективность антивирусов в последние год-два заметно снизилась. Но даже если антивирус блокирует 80% вредоносной активности, говорить что от него нет толка нельзя.
  • 0
    Мне всегда было интересно, каково ваше отношение к подобным действиям ваших западных коллег?
    Ваш текущий terms of service ведь уже позволяет подобные действия?

  • +2
    Дайти возможность отключить эту проверку. Может я и правда храню коллекцию вирусов или какое-то хакерское ПО, которое детектится касперским.
    • 0
      Это нереализуемо в контексте применяемой архитектуры дедупликации, т.к. один и тот же файл может быть в облаках у разных пользователей, но в хранилище он будет один и далеко не все из этих лудей хотели бы собирать у себя коллекции вирусов.
      С другой стороны, безусловно можно реализовать возможность давать скачивать такие файлы из персонального облака (при включении соответствующей пользовательской настройки) и без возможности их публикации (мы не хотим быть источником распространения вирусов). Однако я сомневаюсь, что данная возможность действительно так уж необходима.
      Ситуацию с вероятным ложным срабатыванием антивируса можно решить через нашу службу техподдержки.
      Если же вам действительно необходимо хранить вирусы в облаке — помещайте их в архивы, закрытые паролем — в таких файлах антивирус проверку не производит.
      • 0
        Тут коллеги меня поправили.
        Из персонального облака на данный момент нет ограничений на скачивание файлов с вирусом. Просто выводится попап с уведомлением о вирусе и требуется подтверждение желания скачать такой файл.
        Однако передать кому-то этот файл публичной ссылкой — не получится.
        • 0
          А можно ли дать внутреннюю ссылку, по которой пользователь зайдет через интерфейс персонального облака и, подтвердив что хочет скачать файл, зараженный вирусом, сможет его скачать?
          • +1
            Внутренняя ссылка для своего облака будет невалидной без авторизации. С ее помощью нельзя передать файл другому человеку.
    • 0
      Запакуйте в архив с паролем. :)
  • 0
    Кстати еще о вирусах. Будет ли реализована возможность версий файлов как в гдрайв?
    Например у юзера вирус-шифровальщик побил все файлы в папке синхронизации, изменения благополучно улетели в облако. В гдрайв можно откатиться на предыдущую версию файла и восстановить исходник.
    • 0
      В планах точно есть. Относительно сроков — не знаю, сейчас разработка занята более приоритетными задачами. Возможно менеджеры ответят более предметно.
  • 0
    В кресле явный представитель пупырчатого королевства.
  • 0
    Можно вопрос не про вирусы, но про облако?
    Если у меня сихронизирована с облаком папка C:\Folder1\Folder2\Cloud, а я решил изменить её на C:\Folder1\, то как мне с минимальными затратами траффика перенести точку синхронизации на один-два каталога вверх по дереву?
    • 0
      Чтобы сменить папку и не синхронизировать весь контент повторно, нужно:
      1. Нажать в меню ПК клиента «Сменить пользователя или папку»
      2. Переместить контент из папки C:\Folder1\Folder2\Cloud в C:\Folder1
      3. Залогиниться в клиенте, выбрав папку по новому месту — C:\Folder1

      Только в этом случае сбросятся настройки выборочной синхронизации и нужно будет заново их проставить.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное