Жизнь насекомых, или Как мы ловим «баги» в обновлениях антивирусных баз

    К сожалению, ошибки бывают у всех. И «Антивирус Касперского» не миновал этой участи. У нас случаются «баги» в обновлениях, некоторые из которых доставляют пользователям неприятные хлопоты. Все подобные случаи мы тщательно расследуем, делаем выводы, и «подкручиваем» технологии тестирования.

    А как вообще тестируются антивирусные обновления?


    По вполне понятной причине в антивирусной индустрии технологические подробности тестирования обычно держатся за семью печатями. Попробуйте поискать в Интернете — сколько-нибудь полезной информации по этому поводу нет.
    С другой стороны, тестирование обновлений — очень интересная тема, достойная внимания читателя. И нам здесь есть чем поделиться.
    В конце 90-х «Лаборатория Касперского» была одной из первых в индустрии, кто автоматизировал процесс и уже около 15 лет постоянно развивает его.

    Тестируем обновления антивирусных баз

    Сначала несколько интересных цифр:
    • Мы выпускаем более 120 типов обновлений для более 90 различных версий/сборок продуктов;
    • 79 публичных наборов: антивирусные базы под разные платформы, антиспам базы, базы анти-руткитов, анти-фишинга, родительского контроля, BSS-базы и др.
    • 43 специальных наборов баз для наших технологических партнёров.


    Публичные антивирусные базы выпускаются в среднем каждые 2 часа, антиспам-базы – вплоть до 5 минут. Всё тестируется на ложные срабатывания («фалсы»), лост-детекты (пропуск вредоносных программ), «падения», загружаемость системы, работоспособность в каждом продукте и по ряду других критериев.

    Одно из главных – «фалсы» и лост-детекты. От них зависит качество защиты и к этому процессу мы подходим особенно основательно. Базы тестируются автоматически на большой коллекции (софт, кривые, битые файлы и пр.), на обычном компьютере это заняло бы сутки. Разумеется, позволить себе такую роскошь мы не можем, поэтому тесты проводятся на специальном вычислительном кластере под управлением нашей собственной распределённой системы DDPS (Distributed Data Processing System), которая способна просканировать 80-терабайтную коллекцию за 6 часов.

    Работоспособность баз в конкретном продукте под конкретной ОС тоже весьма критична (потому как кому нужны хорошие базы с неработающим продуктом?). Они тестируются специальным роботом на виртуальных машинах, где установлены все комбинации поддерживаемых версий и ОС (Windows, разные Юниксы-Линуксы, MacOS). В этом кластере больше 1300 виртуальных машин, т.е. потенциально мы можем одновременно проверить 1300 (sic!) комбинаций.
    Кластер, он и в России кластер

    Отдельно тестируются обновляемые модули (антивирусный движок, анти-руткит, Script Emulator, IDS и т.п., это более 20 модулей). Это работа выделенной команды тестеров, расположенных в Москве, Петербурге и Пекине (всего 10 человек). Процесс полуавтоматический, т.е. над задачей работают и роботы и специалисты.

    После тестирования создаётся «набор для выкладки», который загружается на публичные серверы всего количеством более 60 штук на всех континентах за исключением Антарктиды. С этих серверов как раз и получает обновления антивирус, установленный на вашем компьютере. Загрузка происходит с помощью опять же нашей собственной разработки DRS (Distributed Replication System). Благодаря DRS процесс идёт очень быстро, во много потоков, с высокой степенью надёжности. Для примера вот такой показатель: репликация обновления на все эти серверы занимает всего несколько минут, в час мы делаем порядка 20 «выкладок».

    Контролируемые обновления


    Что важно во всём этом механизме производства, тестирования и доставки обновлений?

    Результаты обновления контролируются другим нашим инструментом, а именно облачной системой KSN. В случае «багов», KSN сигнализирует о наличии проблемы за час (а то и несколько часов или даже дней, в зависимости от характера «баги») до поступления первых сигналов от пользователей в техподдержку. Эта технологическая особенность позволяет нам быстрее реагировать и даже решать некоторые инциденты ДО их разрастания.

    Общая стоимость нашей инфраструктуры для тестирования обновлений составляет около $3 млн в год. Недёшево, но это очень важные затраты — от них зависит качество защиты, стабильность работы продуктов и, главное, мнение и комфорт пользователя. За прошлый год система тестирования выявила и предотвратила 4 крупных инцидента, а также приличное количество «фалсов». В общем, инфраструктуру будем и дальше развивать, это не повод для экономии.

    За последнее время у нас было 2 серьезных инцидента с обновлениями (в декабре и в феврале). Мы их тщательно проанализировали, сделали выводы и уже внесли несколько важных изменений как в организационном, так и в техническом плане.

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

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

    В-третьих, сформировали требования к будущим продуктам для повышения устойчивости к разного рода проблемам с обновлениями. Здесь пока без деталей, чтобы не выболтать описания будущих патентов :-).

    Наконец, запускаем новую корпоративную процедуру кризис-менеджмента, которая охватывает все вовлечённые подразделения и обеспечивает максимальную скорость и прозрачность прохождения информации по цепочке от разработчика до клиента.

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

    Несмотря на мощную систему тестирования, ошибки случаются, и от этого никто не застрахован. Мы тоже люди, хоть и управляем роботами и автоматами. Errare humanum est. Но важно, чтобы humanum делал выводы из каждой errare и постоянно совершенствовался, ведь совершенству, увы (или к счастью?), предела нет.

    Автор поста — Николай Гребенников, CTO «Лаборатории Касперского»
    «Лаборатория Касперского» 384,34
    Ловим вирусы, исследуем угрозы, спасаем мир
    Поделиться публикацией
    Комментарии 8
      +10
      А на сайтах тестируете?
      Один мой сайт со статичным контентом добавили в базу, уже несколько раз писал, а всё бестолку — никто мне не отвечает на тикеты. Думал лицензию купить, возможно тогда обратят внимание.
        0
        Тестируем! И это отдельная интересная тема, т.к. сайты постоянно меняются

        Как уже писалось в статье, тестирование многоуровневое. Причем здесь даже больше уровней, в сравнении с обычными файлами. А именно — три:
        1) Тестируем на ложные срабатывания на URL’ах (из списка наиболее популярных по данным нескольких источников);
        2) Тестируем на ложные срабатывания на контент сайтов (специально написанный робот ходит по наиболее популярным сайтам и выкачивает контент – корневую страницу и первый уровень вложенности по ссылкам);
        3) Тестируем на работоспособность обновления в продукте.

        PS:
        > Один мой сайт со статичным контентом добавили в базу
        Можно узнать адрес неверно внесенного в базу сайта или номер тикета?
          0
          Отписал личное сообщение.
        +6
        Вы бы, что ли, buffer overflow пофиксили при работе с pop3 (были инструкции по воспроизведению и даже тестовый ящик, на котором можно проверить — 15 сентября 2011 г.), я уже и через Биличенко пытался до вас дописаться, да только ответ так и не получил, несколько раз. А также пофиксите баги в разборе http chunked encoding — элементарно воспроизводится, например, если попробовать загрузить подряд 200 картинок, примерно 10 кб каждая, на 1 странице, причем картинки должны отдаваться без content-type, а с chunked encoding: увидите, что на 20-й примерно картинке все зависает (о чудо, если выключить chunked или выключить касперский, все начинает грузиться). Подозреваю, такая же штука и не только с картинками, но и с css/js и chunked encoding — просто воспроизвести на картинках проще всего.
          0
          Дмитрий, не могли бы Вы уточнить, где и когда Вы пытались с нами связаться, но не получили ответа?
          +2
          >За последнее время у нас было 2 серьезных инцидента с обновлениями (в декабре и в феврале)
          Было бы интересно прочитать подробней о причинах с технической точки зрения (если это конечно не коммерческая тайна).

          P.S.
          >«фалсы» и лост-детекты.
          > «падучесть»
          Очень тяжело читать такой текст, прям глаз режет.
            0
            Совсем детали разглашать не можем. Если вкратце — проблемы синхронизации потоков при многопоточной работе. Для обоих инцидентов
              0
              У нас в начале февраля из-за обновлений Касперского легла на двое суток вся сеть организации на 1100 компов.

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

            Самое читаемое