В последние лет 5 часто встречаются в сети красиво изложенные мысли на тему открытых исходников различных приложений. Суть в следующем: «Если код закрыт, то пользоваться приложением нельзя или нежелательно». Ведь если нельзя заглянуть под капот, нет никаких гарантий, что там не спрятан какой-нибудь червяк.

Чаще всего подобные мысли исходят от активных комментаторов в социальных сетях. Люди посерьёзнее крайне сдержанно подходят к данному вопросу, в основном мысли этой публики сводятся к «Закрытый код означает полный контроль над разработкой и эксплуатацией решений», со всеми атрибутами: это значительно усложняет создание любого вредоносного ПО, не даёт возможности угнать и модифицировать наработки (содержать даже небольшой штат кодеров – удовольствие не из дешёвых, чтобы потом дарить плоды труда кому бы то ни было).

И ведь и те, и другие говорят верно. Но дьявол кроется в деталях – об этом и поговорим.

Во-первых, где одни хотят что-то спрятать, другие хотят это «что-то» раскрыть. Но много ли среди всех, высказывающихся по данному вопросу, реально будут тратить время на аудит приложения? И обладают ли компетенциями, чтобы в короткое время провести аудит даже небольшого приложения? Может быть, один из ста или из тысячи.

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

Третий камень в огород любителей open source, возводящих этот подход в абсолют –обилие всевозможных проблем, обнаруженных в таких продуктах. Даже в *никсах есть дыры, которые не закрываются годами. Гарантий, что в перспективе приложение с открытыми исходниками будет работать лучше, нежели аналогичное, но закрытое, нет никаких – всё решает уровень разработчиков.

Что же до закрытого кода, ситуации, когда приложения подбрасывают свинью, встречались и будут встречаться. Далеко за примерами ходить не надо – одна телеметрия Win10 (и косяки предыдущих версий) чего стоят. Будь оно полностью открыто, нашлись бы те, кто не поленился и купировал этот функционал. Казалось бы: всё, говорить дальше смысла нет! Но не будем забывать: истоки подобной ситуации вовсе не закрытые коды Windows, а задачи и уровень тех, кто его разрабатывал.

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

Для примера подобной работы можно взять беглый анализ активности Utopia Ecosystem. В этой статье заявлено:

  1. приложение является пиринговой системой.

  2. оно преимущественно использует ассиметричное шифрование.

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

Теперь запускаем нетстат и видим:

В списке найдутся как адреса из окна приложения, так и много других. Зная особенности поведения пиринговых приложений, это можно считать нормальным: узлы сети постоянно обмениваются между собой информацией. Исходя из особенностей работы любой p2p-сети, информация со списком узлов должна храниться у каждого участника, и, действительно, при детальном рассмотрении файлов ноды сети, мы находим такой список: файл называется p.db и хранится в рабочем каталоге ноды. Дав узлу поработать день-два (чтобы набрать базу), мы извлекаем данные и помещаем их в удобный для чтения вид:

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

Далее интересен вопрос шифрования – наличие слабых мест с применением TLS-протокола. Я запустил WireShark и понаблюдал за активностью системы, проверил сеть на наличие обмена по данному протоколу. Не обнаружил ничего, ни одного tls-пакета в дампе на адрес целевой машины. Использование асинхронных методов шифрования данным софтом для меня лично можно считать фактом.

Заодно и глянул пакеты, соответствующие адресам, полученным раннее. Удалось найти даже пакет-пустышку, о которых говорилось в статье:

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

Данным материалом хочу высказать ИМХО: возводить open source в абсолют, как и ругать закрытые исходники, глупо. Всё упирается в людей: если человек, вовлечённый в вопрос, может что-то увидеть и понять, то что сможет сделать профессионал?

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


  1. NickViz
    13.09.2022 11:09
    +7

    мне кажется, внешним исследованием вы можете доказать наличие чего-либо. доказать отсутствие чего-либо не получится. для этого нужны исходники (желательно всего! - процессора, биоса, ос, компилятора, etc).

    например, вы доказали наличие шифрования в продукте. но не доказали, что по "сигналу из космоса" (пакету из сети, локальному IP) это шифрование не отключается или ключ не передаётся ещё куда-либо.

    вообще говоря, интересно попробовать сделать 100% достоверный код. ну например - работать на 2-3 разных микроконтроллерах, простейший ассемблер сначала, потом что-то вроде Small-C собрать. с его помощью что-нибудь посложнее. ну и так далее. при этом все исходники проверять на отсутствие "закладок". по идее - должно получиться 2-3 идентичных бинарника (кросс-компилируем). для особых параноиков - цеплять дисплей к тому же микроконтроллеру и работать на нём же. :-)


    1. amarao
      13.09.2022 11:33
      +3

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

      Идёт работа в этом направлении (reproducible builds - первый шаг), но в целом, задача невероятно сложная.


      1. e_adamovskyi
        13.09.2022 13:04

        Как по мне для одной корпорации, или компании это трудно. Часто разработчики рассчитывают на своё комьюнити. Которое активно помогает и даёт новые идеи в плане улучшения. И только по этой причине зависит дальнейшее развитие этого направления.



    1. e_adamovskyi
      13.09.2022 11:54

      Мы объясняем саму суть исследований (Не давно люди в Open Source нашли вредоносный код в ПО). Наша цель показать как её обнаружить просто быстрее.


  1. iig
    13.09.2022 11:15
    +5

    Я не совсем понял, что доказал автор своим исследованием. Отсутствие управляющего центра? Так он может быть в одной ноде из 1000, например. Может размещаться в 1000 разных нодах.


    1. strongma_n
      13.09.2022 11:23
      -3

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


      1. iig
        13.09.2022 11:36
        +10

        Да. Но людей, умеющих в отладку без исходного кода, ещё меньше.


        1. e_adamovskyi
          13.09.2022 12:57

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

          Мы недавно столкнулись с новостью в Твиттере, об атаке вредоносного ПО на GitHab. И здесь мы больше просвещаем пользователей про открытый и закрытый исходных код, и как пользователю проверить ПО самостоятельно.

          Возможно если у вас есть дополнения, вы можете добавить. С удовольствием добавим ещё информации.


          1. iig
            13.09.2022 13:09

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


            1. e_adamovskyi
              13.09.2022 13:23

              Такую квалификацию, вы не получите в университете, или колледже, тем более на уроке информатики. Если у человека будет желание он изучит это сам, и будет знать как проверить это.

              Ближе кто с этим знаком это разработчики ПО, и то сейчас даже люди в этим не сильно задумываются, 2 комбинации, скопировать/вставить. И вот такие профессионалы у нас появляются.


  1. ioannes
    13.09.2022 11:23
    +3

    Из того, что мы глазами не можем прочитать пейлоад, никак не следует что:

    А. Пакет зашифрован сколько нибудь надёжно.

    Б. Пакет зашифрован вообще.

    А отличить глазами симметричное шифрование от несимметричного не возможно совсем.


    1. amarao
      13.09.2022 11:34
      +1

      troll mode:

      DEAD BEAF - несимметричное

      DEAD DAED - симметричное.


    1. SibylHahn
      14.09.2022 11:52

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


  1. lymes
    13.09.2022 13:53
    +3

    озводить open source в абсолют, как и ругать закрытые исходники, глупо. 

    Поздравляю, вы открыли что наш мир не черно-белый и во всем есть свои за и против. Добро пожаловать в мир взрослых. :-)


  1. MuuNu
    13.09.2022 14:30
    +6

    Опенсорс это не только про закладки в коде, безопасность, и всё такое.

    Это так же и множество других аспектов:
    Например, опенсорс (Да, я знаю, что свободная лицензия != открытый исходный код, но обычно под опенсорсом подразумевают GPL/MIT/BSD, так что я его буду использовать именно в этом контексте) - это возможность создать свой форк, который может быть лучше и удобнее.
    Или вторая жизнь для приложения, который очень любит комьюнити, но на который забил автор (Потерял интерес, мотивацию, позвали на крупный проект в крупную компанию, или просто перерос "подобного рода приложения")
    Это и возможность скоммуниздить код, когда не знаешь, как реализовывать ту или иную фичу.
    Это и банальная независимость от какой-то одной компании (Вспоминаем недавнюю историю с Rocky Linux и CentOS)

    Что касается безопасности - тут тоже побеждает Опенсорс. Если проект крупный, и используется крупными компаниями, то безопасники скорее всего будут со слезами на глазах умолять провести аудит исходного кода. И это не говоря уже о том, что львиную долю уязвимостей может подсветить какой-нибудь анализатор кода, вроде SonarQube. И да, я понимаю, что если есть потребность, то можно хоть Windows декомпилировать. Но согласитесь, провести аудит системы с закрытым исходным кодом куда сложнее, чем, имея исходники на руках.

    Ну и поддержка комьюнити тоже многого стоит. Регулярно вижу на Хабре, как какой-то автор находит баг/уязвимость, и предлагает свои патчи мейнтейнеру пакета.

    Так что вопрос OpenSource vs ClosedSource - это вопрос не дискуссионный. Он однозначен. И даже крупные компании уже начинают это понимать. Не говоря о том, что продаётся он ничуть не хуже, чем проприетарщина.


  1. kasiopei
    13.09.2022 16:37

    В первых N версиях может быть все хорошо, а потом начнут закладки вставлять.


  1. AMDmi3
    14.09.2022 23:09

    Вы зачем-то спорите с очевидно неверным утверждением, что оперсорс решает все проблемы, и делаете никак не следующие из этого выводы о том что опенсорс не лучше проприетарного ПО.

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

    > Но много ли среди всех, высказывающихся по данному вопросу, реально будут тратить время на аудит приложения?

    Их не должно быть много или вообще быть. Достаточно чтобы компания или индивид которым это понадобится имели возможность его провести. Достаточно просто потенциальной возможности, иначе это риски, например, не получить какую-нибудь сертификацию когда это <внезапно> понадобится. Более того, если мы говорим не про бумажки, а про реальное доверие, то только с открытыми исходниками оно и возможно.

    > замаскированный пакетик с ядом мимо глаз пропускают даже специализированное оборудование и служебные собаки

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

    > обилие всевозможных проблем, обнаруженных в таких продуктах

    Это не аргумент ни за одну сторону, потому что проблемы есть везде.

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

    > Для примера подобной работы можно взять беглый анализ активности Utopia Ecosystem

    В этом "анализе" из наличия соединений вы делаете вывод о том что приложение пиринговое, а из того что не можете понять содержимого пакетов - о том что используется асимметричное (не асинхронное:) ) шифрование. Мало того что эти предположения, даже будь они доказанными, бесполезны, так они и не доказаны - приложение могло лить с кучи нод на вашу машину ЦП cleartext'ом, или заливать на кучу нод ваши пароли от банков и кошельков с xor шифрованием, или делать что угодно создавая соедениния со случайным мусором, выводы были теми же. Чтобы только проверить наличие заявленной функциональности, нужно разобраться в нескольких мегабайтах дизассемблерных листингов и дешифровать трафик, я не говорю даже о том чтобы проверить наличие недокументированных возможностей. В случае же исходников же достаточно было бы просто в них посмотреть.

    > Данным материалом хочу высказать ИМХО: возводить open source в абсолют, как и ругать закрытые исходники, глупо.

    Напротив.


  1. ryzhehvost
    15.09.2022 23:07

    Гарантий, что в перспективе приложение с открытыми исходниками будет работать лучше, нежели аналогичное, но закрытое, нет никаких – всё решает уровень разработчиков.

    Это только пока разработка ведётся. А вот если разработка прекращена, то судьба приложения с открытым кодом куда более радужна - его всегда могут форкнуть и продолжить разработку, тогда как если заброшенное приложение с закрытым исходным кодом прекратило работать - всё, привет, перекапывать исходный код чтобы заставить его работать - неблагодарное занятие. И это не теория, это практика, я сам так когда-то пересобирал опенсорсное приложение под x64 архитектуру (просто поменял некоторые типы, разработчик не предусмотрел что указатель может стать 64-битным). А было бы приложение с закрытым - оно бы пошло в мусорку. Главное достоинство опенсорса - его можно доработать или переделать. Это не значит, что кто-то будет, но сама возможность - несомненно радует.