International conference of developers
and users of free / open source software

Применение open-source инструментов для разработки системы автоматизированного тестирования антивирусного ядра

Алексей Романов, ОДО “ВирусБлокАда”, drednout.by@gmail.com

В докладе рассматривается проблема автоматизации процесса тестирования антивирусного ядра. Использован эволюционный подход к решению проблемы. Показаны этапы развития, которые прошёл процесс автоматизации тестирования ядра и его текущее состояние. Отмечено, что без применения open-source технологий данную проблему нельзя решить с имеющимися ресурсами и средствами.

Антивирусное ядро ОДО “ВирусБлокАда” – это кроссплатформенная библиотека, предназначенная для обнаружения и обезвреживания вредоносных программ. Ядро должно корректно работать на всех ОС линейки Windows NT (начиная от NT 4.0), дистрибутивах Linux с библиотекой glibc2.3 и выше, FreeBSD 5.X, 6.X, 7.X, 8.X, OS Windows 98.

Ядро является достаточно большим проектом, который используется почти во всех продуктах компании. Следовательно, качество антивирусного ядра должно быть стабильно высоким. С другой стороны, проект развивается уже более 10 лет, и за это время было написано большое количество исходного кода, который тестировался главным образом вручную.

Антивирусное ядро инкапсулирует в себе большое количество сложной логики, которая предназначена для поиска вредоносных программ различных типов: файловые вирусы, троянские программы, вредоносные скрипты, макро-вирусы и пр. При этом вредоносные программы могут доставляться пользователю в контейнерах различных типов: PE, OLE, RAR, 7Z, ZIP и др. Исходя из вышеприведенных фактов можно сделать вывод, что продукт нуждается в серьёзном и всестороннем тестировании, при этом объём человеческих ресурсов, которые можно бросить на данный проект, сильно ограничен. Единственный приемлемый путь – эволюционная автоматизация тестирования.

Антивирусное ядро нужно тестировать на корректность работы (функциональные тесты), на скорость работы (тесты производительности), на стабильность работы (тесты на обработку битых, проблемных файлах). Важным тестом является проверка наличия детекта всех вредоносных программ в имеющихся файловых коллекциях. Также необходимо проверить, что отсутствуют утечки памяти и других ресурсов операционной системы, так как антивирусное ядро присутствует и в серверных продуктах компании (почтовые фильтры для Exim, Postfix, Sendmail, CommunigatePro, интернет-фильтр для Squid, серверная версия файлового комплекса). Тестирование антивирусного ядра преимущественно выполняется с помощью консольного сканера, сборки которого существуют под все поддерживаемые программные платформы.

Первым этапом автоматизации было создание простейших bat-файлов, которые выполняли некоторый набор простых действий, направленных на уменьшение ручного труда инженера-испытателя. Одновременно шёл процесс встраивания в антивирусное ядро/консольный сканер функционала по самотестированию продукта – это специальный ключи командной строки консольного сканера, специальный флаги ядра, переменные окружения.

На втором этапе автоматизации начали появляться более продвинутые скрипты на различных интерпретируемых языках: Lua, Ruby, Python. Эти скрипты содержали достаточно сложную тестовую логику, направленную на выявление различных проблем. В основном анализируются лог-файлы консольного сканера, сравниваются с эталонами наборы каталогов и файлов. Решение о прохождении или непрохождении теста принимает в основном человек.

На третьем этапе появились «умные» файловые коллекции и «умные» тестовые движки. «Умная» файловая коллекция хранит набор тестов, в которых в единое целое собраны входные данные, ожидаемые результаты, а также конфигурацию теста, т.е. набор директив, управляющих ходом выполнения теста. Тестовый движок обходит дерево каталогов такой «умной» коллекции, выполняет указанные директивы и формирует результирующий отчёт.

В настоящее время процесс автоматизации организовался в систему автоматизации антивирусного ядра. Сейчас на каждой тестовой машине выполняется робот – testingslave, у которого есть информация о всех развёрнутых на хосте файловых коллекциях, тестовых движках, продуктах в различных состояниях. Центром системы является демон testingmaster, который содержит информацию о всех тестовых роботах, а также предоставляет возможность запустить любой тест на заданной машине. Для взаимодействия с testingmaster предусмотрен удобный консольный интерфейс, для обработки результатов тестирования разработан WEB-интерфейс. Основные формы представления данных в системе: YAML и plain text.

Написание подобной системы было бы весьма дорогой задачей без применения различных open-source технологий и проектов. Базовый язык программирования при создании системы – Python. Основной формат данных – открытый формат YAML. Фреймворк для создания сетевых демонов – Twisted. Основа для построения WEB-приложения – Trac SCM. Ядром тестов на обнаружение ошибок времени выполнения и утечек памяти является программа Valgrind, разработанная в рамках проекта KDE.

В процессе разработки данной системы было решено достаточно много проблем, связанных с внедрением открытых проектов в технологический процесс. Были обнаружены некоторые «подводные камни» психологического и технологического характера, которые были успешно преодолены.

Материалы к докладу