Даниэль Стенберг из Керла на обеспечение 180 000 строк кода C

В своем выступлении на ежегодную конференцию с открытым исходным кодом Fosdem создатель Curl Даниэль Стенберг пообещал показать своей аудитории «чем заняться, чтобы хорошо спать при наличии вашего C -кода в 20 миллиардах установки».

Стенберг считает, что 20 миллиардов на самом деле являются низкой оценкой для количества инсталляций в мире,

Число, безусловно, дает утилиту передачи данных с открытым исходным кодом, которую он в одиночку написал, что дает проекту «немного ответственности».

«Но, конечно, мы пишем это на максимально безопасном языке», — говорит он, смеясь — потому что Керл написан на языке программирования С…

Его разговор с интересным, информативным и в конечном итоге обнадеживающим.

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

Не проект выходного дня

В конце разговора Стенберг поднял забавную слайд, пародирующую обложку книги О’Рейли, переписываясь в ржавчине. Проект выходного дня ». (Вершина обложки книги добавила слоган «рассказывать другим вместо того, чтобы делать это самостоятельно».)

«Это очень популярная книга», — говорит Стенберг, в то же время добавляя, что «никто не закончил ее».

Curl состоит из 180 000 строк C кода. Стенберг рассказывает свою аудиторию в 1,14 раза. Он передает данные ». Поэтому он решительно говорит: «Мы не собираемся переписывать завиток ржавчины. На любом языке-мы вообще не собираемся переписывать его. Это уже там ». Стенберг признает, что Руста-«возможно, великий язык», и говорит, что сторонние зависимости все еще могут быть написаны в ржавчине, что, как он предсказывает, что в проекте сгиба будет больше в проекте Curl в будущем ».

Но текущая кодовая база Керла все еще написана в C, и «мы просто терпеливо итерация и полировка с течением времени. Там не будет повторного писать ».

Итак, вместо этого разговор предлагал примеры всего остального, что они делали, чтобы сохранить уверенность в скручивании…

Для начала, в то время как они кодируют в C, Стенберг говорит, что они запретили «кучу нежелательных функций», которые легко использовать неправильный путь. Кто -то попросил примеры в конце разговора — и Стенберг начал с GetS () (который один комментатор на переполнении стека называет «инструментом дьявола для создания переполнений буфера»), а также Scanf (), strCopy () и Sprintf ().

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

Тестирование, тестирование…

Существует также специальный «тест на пытки», который проводится в специальной сборке отладки, в которой каждая функция, в которой распределение памяти может не сработать (например, Malloc или Calloc), имеет обертку, которая позволяет им вызывать эту функцию — и продолжает звонить, пока она не выйдет из строя. «Это должно просто провалиться — без утечки памяти, нет сбоя и просто выйти с кодом ошибки», — пояснил Стенберг. «Это отличный способ протестировать пути выхода на самом деле и убедиться, что мы всегда освобождаем вещи и убираем вещи, когда мы выходим».

Команда разработчиков не всегда проверяет их все. Он со смехом говорит: «Это не быстрый процесс», поэтому у них есть система, которая случайным образом проверяет меньшее подмножество. Стенберг говорит, что они также используют непрерывную интеграцию, которая в конечном итоге проходит более чем 400 000 тестов для каждого запроса и совершения. «Просто, я думаю, что год назад они могли бы заняться часами», — вспоминает он, но с тех пор они оптимизировали их, поэтому теперь они бегают через 30 минут. «Действительно удобно, чтобы они финишировали очень быстро, чтобы мы знали состояние последних изменений прямо сейчас».

В то время как вы, возможно, слышали фразу «второй процессор»-второй из полного мощного использования на серверном процессоре-86 400 секунд ЦП составляют полный день процессора. И в среднем, Стенберг говорит: «Мы проводим около 10 дней процессора в день, прямо сейчас, только в CI».

По словам Стенберга, для поддержания безопасности на протяжении всего проекта есть и широкий спектр других тестов — даже тот, который проверяет «что стиль кода правильный, а также отступил и правописание даже в коде». Есть также работа CI, чтобы убедиться, что у них нет бинарных каплей. (Хотя «в любом случае не должно быть никакого способа скрыть какие -либо зашифрованные полезные нагрузки в нашем репозитории», — говорит Стенберг, поскольку большинство их комитетов уже используют цифровые криптографические подписи.)

Есть модульные тесты, библиотечные тесты, инструментальные тесты, «и, конечно, у нас есть анализаторы, которые все время проверяют код» — как статические, так и динамические анализаторы. Curl также является частью проекта Google OSS-Fuzz. (Как описывает Стенберг, «они не останавливают непрерывоореагируя на оборудовании Google…»)

«Мы хотим убедиться, что все эти 20 миллиардов установок работают нормально».

Исправление — и поиск — уязвимости

Когда дело доходит до уязвимостей, «мы исправляем их, как только сможем, мы предупреждаем дистрибутивы, как и должны, и документируем все действительно очень тщательно»,-говорит Стенберг, включая список затронутых версий Curl. Эта информация также доступна на веб -сайте Curl. Программа Curl теперь также является официальным управлением CVE, «чтобы мы могли немного лучше управлять нашими собственными CVES».

И они серьезно относятся к поиску уязвимостей, говорит Стенберг, добавив: «У нас было несколько аудитов».

Стенберг вспоминает, что их первый аудит в 2016 году «привел к семи CVE», а один в 2022 году привел к еще двум CVE. Но он гордится тем, что более узкий аудит в 2024 году привел к 0 CVES — обнадеживающей тенденции. Аудиты — это большое и дорогое мероприятие. «Кто-то собирается потратить много дорогих часов на код … это не то, что легко сделать для небольшого проекта с открытым исходным кодом. У вас должен быть кто -то, у кого просто глубокий карман, который внезапно хочет, чтобы это произошло ».

Тем не менее, он также отмечает, что стоимость аудитов все еще была «гораздо больше, чем вся наша программа Bug Bounty в течение многих лет», хотя программа Bug Bounty в конечном итоге нашла больше CVE.

Эта программа Bug Bounty работает в связи с Hackerone и программой Bug Bounty. Стенберг говорит, что они заплатили более 85 000 долларов с тех пор, как запустили программу почти шесть лет назад в апреле 2019 года- и 76% из 500 отчетов привели к CVE (более 15%- в то время как еще 19% привели к тому, что он не был не Исправление ошибки на уровне CVE). «Не все остальное — это дерьмо, — говорит Стенберг, — но это тоже достаточно… мы всегда раскрываем их все после того факта, чтобы вы могли следовать обсуждению…»

Хотя последняя пуля на слайде «Bug Bounty» просто говорит, что «AI Slop растет».

«На самом деле, сейчас у нас есть примерно такая же скорость достоверных отчетов, что и отчеты« Сляп », — говорит Стенберг — около 10-15% представлений!

Безопасность вниз

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

  • Все коммиты тщательно рассмотрены — людьми и машинами. И «в наши дни у нас действительно строгий стиль кода»,-говорит Стенберг, что облегчает кодовую базу на 180 000 линии, как будто она была написана одним автором (с этой последовательности, облегчая чтение и отладка).
  • «У нас много документации о исходном коде, внутренних API и все остальное». Позже Стенберг объясняет, что есть даже инструменты для проверки документов, а не только для написания и грамматики. «Например, мы стараемся избегать сокращений на английском языке, в которых мы пишем документацию. Так что« не » — это не то, что разрешено в документации … такими вещами…»
  • Команда разработчиков проекта использует двухфакторную аутентификацию для доступа к своему исходному коду с GitHub, проведенным…

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

«Большинство проектов с открытым исходным кодом, я думаю, начинаются с малого и« простой »», — ответил Стенберг, добавив, что «все это правильно и все сделано, и правильно с самого начала, даже не зная, может ли лехи проект не являются лучшим приоритетом. Я думаю, что очень немногие проекты делают это … [I]n Проект Curl, почти каждый болт был свободен, когда мы начали… »

Позже в обсуждении разработчик Curl Стефан Эйссинг пошутил, что ставки иногда чувствуют себя очень высоко. «У нас есть« Цивилизация »заканчивается на нескольких планетах, если вы испортите это проекты FOSS. Это не способ управлять цивилизацией ».

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

«Оглядываясь вокруг в мире, у многих проектов все еще есть несколько, которые могли бы использовать небольшую помощь…»

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид Кассель — гордый житель района залива Сан -Франциско, где он освещал технологические новости более двух десятилетий. За эти годы его статьи появлялись повсюду от CNN, MSNBC и The Wall Street Journal Interactive … Подробнее от Дэвида Касселя

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *