В последние лет 5 часто встречаются в сети красиво изложенные мысли на тему открытых исходников различных приложений. Суть в следующем: «Если код закрыт, то пользоваться приложением нельзя или нежелательно». Ведь если нельзя заглянуть под капот, нет никаких гарантий, что там не спрятан какой-нибудь червяк.
Чаще всего подобные мысли исходят от активных комментаторов в социальных сетях. Люди посерьёзнее крайне сдержанно подходят к данному вопросу, в основном мысли этой публики сводятся к «Закрытый код означает полный контроль над разработкой и эксплуатацией решений», со всеми атрибутами: это значительно усложняет создание любого вредоносного ПО, не даёт возможности угнать и модифицировать наработки (содержать даже небольшой штат кодеров – удовольствие не из дешёвых, чтобы потом дарить плоды труда кому бы то ни было).
И ведь и те, и другие говорят верно. Но дьявол кроется в деталях – об этом и поговорим.
Во-первых, где одни хотят что-то спрятать, другие хотят это «что-то» раскрыть. Но много ли среди всех, высказывающихся по данному вопросу, реально будут тратить время на аудит приложения? И обладают ли компетенциями, чтобы в короткое время провести аудит даже небольшого приложения? Может быть, один из ста или из тысячи.
Во-вторых, если большая часть людей в силу различных причин не может или не будет возиться с чужим приложением, им остаётся только слушать и читать тех, кто это сделать может. Однако все мы люди, и если спрятанное за поясом оружие легко обнаружить, то замаскированный пакетик с ядом мимо глаз пропускают даже специализированное оборудование и служебные собаки.
Третий камень в огород любителей open source, возводящих этот подход в абсолют –обилие всевозможных проблем, обнаруженных в таких продуктах. Даже в *никсах есть дыры, которые не закрываются годами. Гарантий, что в перспективе приложение с открытыми исходниками будет работать лучше, нежели аналогичное, но закрытое, нет никаких – всё решает уровень разработчиков.
Что же до закрытого кода, ситуации, когда приложения подбрасывают свинью, встречались и будут встречаться. Далеко за примерами ходить не надо – одна телеметрия Win10 (и косяки предыдущих версий) чего стоят. Будь оно полностью открыто, нашлись бы те, кто не поленился и купировал этот функционал. Казалось бы: всё, говорить дальше смысла нет! Но не будем забывать: истоки подобной ситуации вовсе не закрытые коды Windows, а задачи и уровень тех, кто его разрабатывал.
В последнем пункте есть один немаловажный момент: а каким образом были обнаружены проблемы, если код закрыт? Выходит, что даже для закрытого кода есть инструменты, позволяющие оценить работу приложения. Если этим будет заниматься компетентный человек, он и без открытых исходников сможет многое узнать о целевом продукте.
Для примера подобной работы можно взять беглый анализ активности Utopia Ecosystem. В этой статье заявлено:
приложение является пиринговой системой.
оно преимущественно использует ассиметричное шифрование.
В этом можно убедиться или опровергнуть без открытого исходного кода. В сети есть приложения, анализирующие входящий и исходящий трафик с компьютера, подключенного к интернету. Поэтому можно создать пару виртуальных машин, установить приложения, запустить их и сопоставить списки подключений:
Теперь запускаем нетстат и видим:
В списке найдутся как адреса из окна приложения, так и много других. Зная особенности поведения пиринговых приложений, это можно считать нормальным: узлы сети постоянно обмениваются между собой информацией. Исходя из особенностей работы любой p2p-сети, информация со списком узлов должна храниться у каждого участника, и, действительно, при детальном рассмотрении файлов ноды сети, мы находим такой список: файл называется p.db и хранится в рабочем каталоге ноды. Дав узлу поработать день-два (чтобы набрать базу), мы извлекаем данные и помещаем их в удобный для чтения вид:
Получим большое количество строк. Адреса в списке часто повторяются, но с разными портами. Если сопоставить количество узлов с количеством нод сети (около 27 тысяч элементов), отображаемой в клиенте программы, и учесть, что в списке есть повторы – приложение действительное пиринговое. Вопросов нет.
Далее интересен вопрос шифрования – наличие слабых мест с применением TLS-протокола. Я запустил WireShark и понаблюдал за активностью системы, проверил сеть на наличие обмена по данному протоколу. Не обнаружил ничего, ни одного tls-пакета в дампе на адрес целевой машины. Использование асинхронных методов шифрования данным софтом для меня лично можно считать фактом.
Заодно и глянул пакеты, соответствующие адресам, полученным раннее. Удалось найти даже пакет-пустышку, о которых говорилось в статье:
Полагаю, говорить, что при попытке прочесть пейлоад из других пакетов мы получим случайный набор символов, смысла нет. Поэтому вопрос правдивости описания работы данной программы в статье закрыт: похоже на правду. Не пришлось лезть в исходники, чтобы провести элементарную проверку, достаточно лишь знать некоторые особенности сетевого поведения тех или иных вещей.
Данным материалом хочу высказать ИМХО: возводить open source в абсолют, как и ругать закрытые исходники, глупо. Всё упирается в людей: если человек, вовлечённый в вопрос, может что-то увидеть и понять, то что сможет сделать профессионал?