Ключи от безопасности: Что важно учитывать, публикуя исходный код софта в национальном репозитории открытого ПО
«Безопасность Китая — замок, построенный на песке, в случае, если страна не будет иметь контроля над исходным кодом». Так Чжоу Хунъи, китайский предприниматель и CEO компании по обеспечению интернет-безопасности Qihoo 360, отозвался о важности хостинга open source-проектов в национальных репозиториях.
Это сравнение применимо и к России — на конец 2021 года 1,98 млн российских программистов использовали сервис GitHub, крупнейший в мире веб-сервис для хостинга ИТ-проектов и их совместной разработки. В 2022 году к платформе присоединились еще 582 тысячи наших разработчиков. Хотя в апреле, несмотря на давление сообщества, GitHub объявил, что не будет блокировать россиянам доступ, ничто не помешает сервису — который с 2018 года принадлежит Microsoft — в любой момент изменить решение. Тем более, что прецеденты уже есть: в 2019 году GitHub заблокировал репозитории пользователей из Крыма, Кубы, Ирана, Северной Кореи и Сирии.
Что представляет собой эксперимент
В феврале 2022 Минцифры объявило, что проведет эксперимент по созданию национального открытого репозитория с мая 2022 года по апрель 2024 года. На платформе, которая призвана стать «российским GitHub», планируется разместить софт, разработанный в том числе за бюджетные средства, для переиспользования в других проектах. Первыми свои разработки опубликуют Минцифры, МВД и Росреестр, однако к проекту могут присоединиться и все желающие коммерческие компании.
Помимо замещения зарубежного аналога национальный репозиторий поможет решить еще ряд задач. Во-первых, выиграет госбюджет: платформа исключит дублирование работ для разных госструктур. Во-вторых, открытие программного кода госсистем поможет улучшить его качество: код будет у всех на виду, а плохой код просто стыдно (а то и страшно) публиковать. В-третьих, выиграют и конечные потребители, ведь компании-разработчики смогут обмениваться опытом и результатами, вести совместную разработку кода, повышая качество и удобство программного обеспечения в стране.
Надежду на успех российского репозитория укрепляют удачные зарубежные прецеденты. Китайский аналог GitHub, сервис Gitee, существует вот уже девять лет. Сейчас им пользуются более 5 млн разработчиков и более 100 тыс. компаний. Развитие возможностей системы проводится под управлением сообщества разработчиков ПО с открытым исходным кодом open source China.
Под ударом — каждый второй
Несмотря на открывающиеся перспективы, при открытии кода нельзя забывать о возникающих дополнительных серьезных рисках для безопасности критических систем. По данным исследования SwordFishSecurity, в 33% российского ПО на базе open source есть критические уязвимости — те, что позволяют хакерам удаленно воздействовать на работу компьютеров. Внедряя такой код в новые проекты, разработчики автоматически делают программу-реципиент уязвимой к атакам извне. При этом хакеры стали атаковать российские компании гораздо активнее: количество атак в первом полугодии 2022 года выросло в 15 раз по сравнению с аналогичным периодом 2021 года. По словам вице-премьера Дмитрия Чернышенко, в 2022 году атаки были нацелены в первую очередь на госсектор: с попытками нарушения цифровой безопасности столкнулась почти половина российских ведомств.
Открытые исходные коды могут позволить хакерам изучить систему и найти в ней уязвимости без проникновения в нее — т.е., оставаясь незамеченными, и затем, подготовившись, нанести молниеносный удар — получить доступ к данным, заменить их, повредить или полностью уничтожить. Опасность еще и в том, что благодаря публичному тиражированию решений с открытым исходным кодом под удар попадает не одно, а сразу все решения и системы, использующие уязвимый участок кода.
Из недостатка в преимущество
Как ни парадоксально, решением проблемы безопасности открытого кода также может стать открытость кода. Эрик Раймонд в свое время сформулировал «закон Линуса», который в вольном переводе звучит так: «Когда на код смотрят тысячи глаз, все ошибки видны, как на ладони». Если к работе над открытым проектом привлечено широкое сообщество разработчиков, уязвимости будут обнаружены и устранены раньше, чем до них доберутся злоумышленники. И чем более развито сообщество, тем лучше работает этот закон. Сообщество развивает и совершенствует код, оценивает предлагаемые разработчиками патчи, вычитывает предлагаемый код, выявляя уязвимости и устраняя их. Поэтому самая важная задача при публикации исходного кода какого-либо проекта — обеспечить формирование сообщества вокруг него. Но как это сделать?
Как показывает мой личный опыт и опыт моих коллег, работающих с решениями с открытыми исходными кодами, сообщества формируются вокруг кода, соответствующего следующим требованиям:
1. Софт относится к системному ПО, библиотекам компонент или широко используемым прикладным решениям. Практика доказала, что open source хорошо работает тогда, когда пользователь и разработчик — люди близкие по уровню ИТ-квалификации. Такая ситуация характерна для системного ПО — операционные системы, утилиты, СУБД, компиляторы и т.п. Все эти классы ПО имеют широкую область применения, а значит, по умолчанию представляют важность для большего количества проектов и с большей вероятностью привлекут широкий круг разработчиков. Open source подход оказался достаточно успешным и для прикладного ПО широкого назначения — например, браузеров и почтовых клиентов. Однако для публикации открытого кода едва ли подойдет ПО для узкоспециальных прикладных областей, например, для бухгалтеров или юристов. Здесь попросту неоткуда взяться «критической массе» специалистов, которые будут формировать сообщество и развивать проект. То же касается и кода «штучных» систем — таких, как Яндекс, Google, Госуслуги. При том, что они содержат огромное количество компонент с открытым кодом, в целом эти системы являются закрытыми.
2. Код потенциально интересен разработчикам. Сообщество открытого кода работает по принципу probono. Разработчиками движет личный интерес и польза, которую они смогут извлечь в будущем, используя код в своей работе. Дополнительной мотивацией служит возможность решить сложную задачу, добавив ее в список собственных профессиональных достижений. Важно определить степень потенциальной заинтересованности со стороны разработчиков еще перед публикацией кода. В противном случае проект станет мертвой web-страницей, единственными гостями которой будут хакеры, стремящиеся найти уязвимости и воспользоваться информацией в противоправных целях.
3. Разработчики кода готовы поддерживать его и работать с сообществом. Жизнь проекта на начальном этапе должна обеспечить группа разработчиков, которые осуществляют поддержку опубликованного кода: принимают патчи, исправляют ошибки, консультируют других программистов. Если автор опубликовал код и бросил его, работа с ним будет непривлекательна и для других.
Зачем разработчикам открывать код своего продукта?
Предлагая разработчикам открывать код своего продукта, надо понимать, какие преимущества они могут от этого получить. Для этого стоит обратиться к мировому опыту. Изначально открытый софт развивали идейные программисты-одиночки, для которых эта деятельность была средством творческого самовыражения. Сейчас за любым крупным международным открытым проектом стоят корпорации — Google, Huawei, Microsoft и другие. Например, IBM спас Linux в 2013 году, вложив в проект 1 млрд долларов инвестиций. Microsoft в 2018 году купил GitHub, при этом платформу активно поддерживают и другие крупнейшие корпорации, включая Google, SAP, AirBnB, IBM, PayPal. Помощь китайскому репозиторию Gitee оказывают исследовательские университеты страны и частный сектор в виде группы из десятков компаний во главе с Huawei. Зачем же это корпорациям?
Решение особо крупных задач — например, разработка ядра Linux — проекты, которые не в состоянии самостоятельно осуществить ни отдельно взятый программист, ни даже отдельная крупная компания. Код подобных проектов стал настолько объемным и сложным, что для его разработки иногда объединяются ресурсы большого количества корпораций, в том числе и непримиримых конкурентов. Если мы хотим создавать сильные решения с открытым кодом, тот же процесс предстоит и российскому рынку.
Длинный путь
Экосистему с открытым исходным кодом нельзя создать за одну ночь. Это длительный и сложный путь проб, ошибок и побед. Однако при правильном подходе идея открытого исходного кода может принести много пользы отечественной ИТ-индустрии. Правильный подход здесь немыслим без понимания открытого кода как социального, а не только технологического феномена: основную роль в нем играет сообщество профессионалов, высоко мотивированных своими задачами.