НовостиКриптовалютыКонец эпохи закрытого исходного кода близок: сокрытие никогда не было безопасностью

Конец эпохи закрытого исходного кода близок: сокрытие никогда не было безопасностью

Автор: Bitcoin Magazine·

Ключевые выводы

  • Ошибка препроцессора в аппаратных кошельках Coldcard снизила энтропию seed примерно до 40 bits, что позволило атакующим перебира́ть возможные seed на потребительском оборудовании и похитить почти $90 million с примерно 4,585 addresses.
  • Уязвимость была внесена в March 2021 и более пяти лет оставалась в общедоступной прошивке, не будучи обнаруженной при человеческой проверке.
  • Исследователи показали, что несколько frontier models могут находить ту же ошибку в entropy за minutes по одному запросу, что подчёркивает растущие возможности AI в анализе уязвимостей кода.
  • Автор утверждает, что closed-source software и trade secrets в распространяемом ПО теряют защитную ценность по мере того, как AI-driven reverse engineering становится быстрее и доступнее.
  • У защитников остаётся структурное преимущество во времени, поэтому следует применять frontier models к собственному коду до релиза, делать builds reproducible и распределять keys между независимыми implementations.
Конец эпохи закрытого исходного кода близок: сокрытие никогда не было безопасностью

За последние несколько дней пользователи Bitcoin, которые следовали всем рекомендуемым практикам безопасности, всё равно потеряли свои средства. Они купили уважаемый аппаратный подписант, офлайн сгенерировали на этом устройстве seed-фразу — стандартный метод BIP39 для создания ключей Bitcoin, предназначенный для кодирования 128 to 256 bits of randomness — и доверили ему выполнить единственную по-настоящему критическую функцию, которую должен выполнять подписант: породить число, которое никто другой не сможет угадать.

Аппаратный подписант Coldcard этого не сделал. Проверка препроцессора, сверявшая неверное условие, незаметно перенаправила генерацию seed в слабый программный псевдослучайный генератор — Yasmarang в MicroPython — вместо аппаратного источника энтропии устройства. На некоторых моделях Coldcard эффективная энтропия упала примерно до 40 bits — около одного триллиона возможных seed, что достаточно мало, чтобы перебрать пространство на потребительском оборудовании, и более чем на 200 bits ниже целевого уровня безопасности. Уязвимость была внесена в March 2021 и более пяти лет оставалась в общедоступной для чтения прошивке.

Атакующие успели обработать 500 addresses, прежде чем была понята первопричина. За несколько дней счётчик Galaxy Research достиг 4,585 addresses и nearly $90 million in losses. По состоянию на дату статьи атака продолжается.

Coinkite, производитель Coldcard, исходит из предположения — широко разделяемого на X, — что атакующий использовал AI, чтобы просмотреть общедоступную прошивку и обнаружить ошибку. Был ли AI использован именно в этом случае или нет, следующий атакующий почти наверняка воспользуется им. Примечательно, что проведённый за несколько недель до кражи AI-assisted audit ничего не обнаружил, возможно, из-за ограничений модели или из-за конкретной постановки поиска. С момента начала атаки исследователи показали, что несколько frontier models способны найти ту же уязвимость за minutes по одному запросу.

Код оставался открытым для человеческой проверки пять лет, и ни один человек этого не заметил.

Изменения лицензии, которые ничего не изменили

Ранее Coinkite перевела прошивку с лицензии free software на source-available условия — в частности, MIT с Commons Clause — после того как Foundation Devices использовала этот код в конкурирующем продукте. По обновлённым условиям пользователи могли читать исходный код, но не могли строить на нём бизнес.

Это никак не повлияло на безопасность. Ошибка находилась в коде, который машина могла прочитать независимо от лицензионных ограничений. Более того, она попала в кодовую базу именно в том переписывании, которое удалило последние остатки кода под GPL. Изменение лицензии не усилило защиту; оно лишь изменило экономику поиска уязвимости.

Иллюзия закрытого исходного кода

В эпоху всё более способного AI всё, что распространяется, читаемо — или скоро станет читаемым. Если удалить из бинарного файла символы и пропустить его через декомпилятор, получится псевдо-C, знакомый каждому, кто открывал Ghidra: безымянные переменные, уплощённый поток управления, функции с метками FUN_00401a20. Для большинства людей это нечитаемо. Именно этот высокий барьер для человеческого понимания и составлял всю ценность безопасности «closed source».

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

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

В 02:19 UTC on July 20th математик Levent Alpöge, работавший с Claude Fable 5 от Anthropic, опубликовал контрпример к conjecture of Keller's Jacobian — задаче, остававшейся открытой since 1939 и достаточно сложной, чтобы попасть в список вызовов Stephen Smale for the twenty-first century. Её пытались решить поколения математиков. Опровержение состоит из трёх полиномов в трёх переменных. Lean verified it within hours, и любой может проверить его в computer-algebra system примерно за минуту.

Jacobian fell in a single afternoon, while the questioner was apparently watching the final match of the FIFA World Cup. In May model от OpenAI toppled the Erdős unit-distance conjecture, задачу, открытую since 1946. In late July 30-year-old graph-theory conjecture fell to four prompts. Между этими событиями произошло опровержение Jacobian и ряд других результатов, стоявших десятилетиями.

Сопоставьте этот темп с куда более скромной задачей чтения machine code, уже лежащего в Интернете. Сегодняшние модели лучше справляются с source code и output decompiler than raw bytes, поэтому полностью закрытый binary сохраняет лишь тонкий запас защиты. Этот запас — всего лишь экономический speed bump, и он тает с той же скоростью, с какой прогресс идёт во всех остальных областях. Делать ставку на безопасность, рассчитывая, как долго он продержится, значит спорить с часами, которые только ускоряются.

Более тихая жертва: торговая тайна

Тот же AI, который находит ошибку в entropy, способен читать proprietary methods. Это менее заметная жертва, и она затрагивает компании, которые никогда не считали себя уязвимыми для чего-либо, связанного с open source. Торговая тайна в поставляемом программном обеспечении всегда была лишь сокрытием в деловом костюме.

Закон признаёт это с тех пор, как существует trade-secret law: reverse engineering продукта, который вы законно приобрели, допустим, и потому секрет сохраняется только пока такой reverse engineering остаётся дорогим. Когда стоимость извлечения падает до цены подписки и запроса, секрет, воплощённый в коде, который вы передаёте клиентам, перестаёт быть секретом. Ваш clever algorithm, undocumented format, ваше преимущество в binary — всё это становится читаемым для любого, кто захочет посмотреть, в сроки, которые всё чаще измеряются минутами.

Open source не означает гарантии

Ничто из этого не делает open source автоматически безопасным. Heartbleed скрывался в самой широко развернутой TLS library на земле два года, потому что visibility without funded attention ничего не находит. Xz backdoor показал, что сама open contribution model — это attack surface, через который терпеливый противник может пройти с дружелюбным лицом и двумя годами качественных commits.

Когда-то openness служила щитом, но больше не служит. Зато она даёт reviewers, которым разрешено смотреть код, builds, которые можно independently reproduced and verified, возможность выхода, когда vendor умирает или меняет курс, и признание того, что всё это произойдёт независимо от ваших предпочтений.

Преимущество защитника

Теперь мы должны исходить из того, что каждая строка shipped code будет прочитана кем-то со злым умыслом, потому что так и будет. У защитника есть одно структурное преимущество, которого никогда не будет у атакующего: time. Разработчики могут прогонять те же frontier models по собственному коду до релиза, в промежутке между commit и ship, пока атакующий ждёт binary, которого ещё не существует.

Сборки следует делать reproducible — то есть любой должен иметь возможность собрать тот же source и проверить, что получившийся binary совпадает с поставленным byte for byte, — чтобы каждый binary можно было связать с source code, который поддаётся независимой проверке. Системы следует проектировать на fail closed, а доверенное ядро держать достаточно маленьким, чтобы одна ошибка не могла всё скомпрометировать.

Для тех, кто хранит Bitcoin, урок, который прямо сейчас преподаёт Coldcard, ясен: владейте entropy, которую вы не можете позволить себе чтобы её угадали, держите secure element минимальным и за опубликованным interface, и распределяйте keys между независимыми implementations — чтобы ни одно устройство и ни одна ошибка одного vendor не составляли всю вашу экспозицию.

Необратимые последствия

Для Bitcoin ставки особенно жёсткие, потому что одно лишь знание private keys даёт полный контроль над средствами. Ошибка в entropy оставила постоянные шрамы. Исправление generator ничего не меняет для seed, которые он уже сгенерировал; слабое keyspace остаётся sweepable forever, а disclosure передаёт атакующему рецепт.

Мы уже видели это раньше. Уязвимость Milk Sad в инструменте libbitcoin explorer, bx, генерировала private keys из 32-bit value, и attackers draining wallets, которые он создавал, ещё до того, как flaw был публично раскрыт. Атакующие живут по собственному расписанию, приглашены они или нет. Для денег, которые нельзя вернуть после расходования, «будет найдено позже» — это синоним «будет потеряно позже».

Стандарт, который Bitcoin уже установил

Bitcoin никогда не полагался на obscurity. Протокол открыт, его правила может проверить любой, а его безопасность держится не на secret, а на mathematics and incentives, которые действуют на виду у всех. Аппаратное и программное обеспечение, которое строится вокруг него, заслуживает того же стандарта, потому что альтернативы больше нет.

Выбор никогда не стоял между open и closed. Он стоял между disciplined и exposed.

Более широкий урок ситуации с Coldcard в том, что closed-source software — это как seed, сгенерированный сломанным Coldcard: он может выглядеть исправным, но по сути построен на песке. Код может прочитать каждый. Остаётся только один вопрос: признают ли разработчики этот факт добровольно — или они и их пользователи узнают это так же, как пользователи Coldcard, по одному опустошённому адресу за раз.

Это гостевой материал Colin Crossman, контент-продюсера в Fedi. Высказанные мнения принадлежат исключительно автору и не обязательно отражают позицию BTC Inc или Bitcoin Magazine. Эта статья впервые появилась на Bitcoin Magazine и написана Colin Crossman.