Вопросы безопасности свободного программного обеспечения.

Семенов Ю.А., ИТЭФ ( semenov@itep.ru ), Десятов И.В., ИПМ РАН ( divjan@gmail.com )
(доклад на форуме "Высокие технологии 21-го века", cекция «Информационные технологии в интересах развития экономики, основанной на знаниях», Москва, 24 апреля 2008г)

Одной из основных проблем свободного программного обеспечения является отсутствие единого хозяина и общего координационного центра.

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

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

На первом этапе список программ должен быть ограничен. Нужно будет зафиксировать, какой язык программирования будет основным. Надо будет также определить иерархию языков программирования (Си, Си++, Java, Perl,…). Для каждого продукта нужно объявлять конкурс с небольшим авансом и большой премией победителю конкурса по результату испытания продукта. Это позволит минимизировать расходы и оптимизировать качество программного продукта. Вполне допустим вариант, когда для практического внедрения допускаются две версии, разработанные разными фирмами или организациями.

Обязательным требованием должны стать верификация и сертификация принимаемых продуктов посредством специализированных программ, которые следует закупить. Сначала исходный код анализируется статически, затем динамически в рабочем режиме с полным перебором входных параметров в различных рабочих условиях (вариация объема оперативной и виртуальной памяти и т.д.). Надо будет также обучить персонал для работы с такими программами.

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

Программы должны храниться в виде открытых исходных кодов и в виде загружаемых модулей, адаптированных под определенные версии ОС. Это нужно, чтобы сэкономить время клиентов и понизить требования к их квалификации. Каждая из копий программ должна снабжаться дайджестом (например, MD-5), чтобы исключить искажения при транспортировке через Интернет от сервера клиенту.

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

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

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

Отдельную проблему составляет проверка программ на сетевую уязвимость. Программа-испытатель (типа Nessus), c постоянно обновляемой базой данных известных средств вторжения (переполнение буфера, возможность взлома при передаче по сети специальных последовательностей параметров и пр.), должна использоваться при работе испытуемой программы в разных операционных средах, с разными конфигурациями компьютера и т.д.. При появлении новых видов атак испытания программ, следует повторять. Настройки системы испытания могут меняться в зависимости от типа испытуемой программы.

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

Рис. 1. Проверка ПО с открытым кодом на уязвимости

На рис. 1 указаны названия и ссылки на общедоступные программы тестирования (предполагалось, что в данном конкретном случае проверку проходит пакет OpenOffice).

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

В РФ сегодня нет специалистов по сертификации и верификации программ, поэтому начинать надо с экспресс подготовки таких экспертов (возможно в зарубежных университетах), а в дальнейшем начать обучение таких специалистов в одном из столичных ВУЗов.

Актуальность проблемы безопасности программ можно проиллюстрировать на примере сайта форума "Высокие технологии 21-го века". Люди, которые посещали этот сайт в течение недели накануне форума и не имели адекватной антивирусной защиты, заразили свои машины. Смотри рис. 2.

Рис. 2.

Выводы и рекомендации

Среди программ с открытым кодом существует небольшая часть программных продуктов с высокой степенью безопасности, например, Apache - самый популярный web-сервер.

Широко изучается уязвимости и ряда Linux и OpenOffice. А также ведутся системные исследования по уязвимостям баз данных MySQL и PostGress.

Данные относительно уязвимостей огромного класса разработанных программ с открытым кодом, либо слабо освещены, либо не освещаются вообще.

связи с вышеизложенным необходима разработка стандарта на проверку программ с открытым кодом на уязвимости разных типов, создание сетей сертификационных центров, а в случае уникальных программ, например, Lingvo, Physicon – разумно было бы ставить перед государственными органами вопрос об открытии кодов за достойную денежную компенсацию.