Статьи

Что бы вы заплатили, чтобы сделать 27% Интернета более безопасным?

Неделя с открытым исходным кодом

Это неделя с открытым исходным кодом в SitePoint! Всю неделю мы публикуем статьи, посвященные всему, что связано с открытым исходным кодом, свободным программным обеспечением и сообществом, поэтому постоянно проверяйте тег OSW на наличие последних обновлений.


Скотт Аркишевский, известный в Твиттере как CiPHPerCoder , является для безопасности тем, чем Крис Харджес является для модульного тестирования.

Иллюстрация щита со значком замка перед цифровым контентом

Он набросится на небезопасные приложения, библиотеки и пакеты, найдет лазейки, проблемы и неправильные реализации и поможет людям исправить их. Он является основным разработчиком нескольких популярных пакетов, ориентированных на безопасность, включая, помимо прочего, Halite для более удобного использования libsodium, gpg-mailer для отправки зашифрованных писем, random_compat и многое другое.

Как большой поклонник PHP-расширения libsodium, он в настоящее время пытается оценить заинтересованность более широкого сообщества в выделении средств на профессиональный аудит версии PHP. Короче говоря, Скотт хочет посвятить свое время написанию полифилла версии PHP (которая будет использовать libsodium в качестве расширения, если оно будет установлено), но хочет заплатить за профессиональный аудит своей работы, чтобы убедиться, что она действительно максимально безопасна. , Но вот в чем дело — профессиональные обзоры кода безумно дороги.

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


Привет, Скотт, спасибо, что нашел время ответить на несколько вопросов! Можете ли вы дать нам доброжелательное гражданское телевидение на libsodium? Что на самом деле делает расширение и в каких контекстах оно чаще всего используется?

Libsodium — это современная и простая в использовании криптографическая библиотека, доступная в настоящее время на PECL (хотя я надеюсь перенести ее в PHP 7.2). Он предлагает лучшие в своем классе криптографические функции (симметричное шифрование, шифрование с открытым ключом, цифровые подписи, хеширование паролей и т. Д.) И прилагает большие усилия, чтобы не быть уязвимым к тому, что мы называем побочным канальным криптоанализом.

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

Некоторые из наиболее интересных функций, которые предлагает libsodium, включают X25519 (Соглашение о ключе Диффи-Хеллмана с эллиптической кривой по Curve25519), Ed25519 (Алгоритм цифровой подписи на основе EdDSA — по Curve25519), хеширование паролей Argon2i и невероятно простое в использовании шифрование API. Например, этот фрагмент шифрует / дешифрует сообщение и избавляет вас от необходимости беспокоиться о атаках с использованием выбранного шифротекста:

$ciphertext = \Sodium\crypto_secretbox($message, $nonce, $key); $plaintext = \Sodium\crypto_secretbox_open($ciphertext, $nonce, $key); /* var_dump($message === $plainext); // bool(true) */ 

Вы можете использовать все эти замечательные функции криптографии сегодня, если вы можете установить расширение PHP из PECL.

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

Несмотря на эти проблемы, libsodium очень желателен по многим причинам. Его алгоритм цифровой подписи (Ed25519) является золотым стандартом для аутентификации с открытым ключом. В отличие от RSA (который допускает подделку сообщений, если вы используете заполнение PKCS1v1.5 и устанавливаете e = 3 с помощью атаки Bleichenbacher ’06) и ECDSA (что вызвало падение безопасности Sony PS3 при повторении одноразового номера), Ed25519 легко реализуется в постоянном время. Из-за Curve25519 вам не нужно беспокоиться о недопустимых кривых атаках или извращенной безопасности (или многих других уязвимостях криптографии с эксцентричными именами). Но самое главное, Ed25519 является детерминированным: вы никогда не будете повторять одноразовый номер и не будете пропускать свой секретный ключ, как в классическом ECDSA.

Многие программы PHP извлекут выгоду из криптографии, предлагаемой libsodium, если только они смогут сделать ее зависимой сегодня. Например, WordPress не использует какие-либо криптографические подписи в своих пакетах автоматического обновления. Если бы мы могли развернуть современную криптографию даже на устаревших системах, мы могли бы спасти 27% Интернета от взлома, если api.wordpress.org был взломан. Если бы WordPress мог начать с Ed25519 вместо того, чтобы заняться чисткой в ​​RSA и создать проблемы обратной совместимости, это избавило бы многих от головной боли.

С этой целью я решил написать чистый PHP polyfill для libsodium, начиная с Ed25519 сначала и, возможно, с Argon2i последним. Полифилл оппортунистический; если установлено расширение PECL, оно будет использовать это вместо моей реализации.

Пока как продвигаются усилия? Есть признаки интереса со стороны корпораций?

Разработка ведется. Интерес сообщества достаточен, чтобы гарантировать создание полифилла, но я не буду чувствовать себя комфортно, раскрывая его миру, пока он не будет проверен третьей стороной.

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

Самым крупным бенефициаром будет Automattic, а также любой, кто использует WordPress для оплаты своих счетов.

Вы уже начали писать библиотеку и, если да, какие проблемы были самыми большими на сегодняшний день?

Я провел большую часть этого утра, портируя код ref10 curve25519 на PHP. Самые большие проблемы, которые я предвижу, будут:

  1. Целые числа со знаком PHP, особенно на 32-битных платформах без расширения GMP.
  2. Когда я доберусь до Argon2i, ограничения памяти могут оказаться сложными.

Проблемы с безопасностью ( mbstring.func_overload , тот факт, что chr() не является безопасным для кэширования и т. Д.) — это проблема, с которой я сталкиваюсь в своей повседневной работе в PIE, поэтому я не потею , Я пишу код, чтобы не было побочных каналов с первого дня.

Библиотека будет полностью с открытым исходным кодом и будет стремиться к 100% паритету с расширением libsodium, правильно?

Я мог бы отказаться от нескольких неосновных функций (например, crypto_pwhash_scryptsalsa208sha256 потому что теперь у нас есть Argon2i), если они явно не нужны. Это будет, однако, полностью открытый исходный код на условиях разрешительной лицензии (либо ISC, например, libsodium, либо что-то вроде MIT, CC0, WTFPL или Unlicense; у меня нет предпочтений, и есть слишком много вариантов для выбора).

По поводу проблем — будете ли вы публично развивать библиотеку? Т.е. будет ли это открытое репо, в которое другие также могут внести свой вклад, если найдут время?

Как только все функции NaCl (на которых основан libsodium) будут реализованы и хорошо протестированы, хранилище станет общедоступным. С этого момента мы сосредоточимся на том, чтобы проанализировать то, что реализовано, другими экспертами по безопасности и криптографии PHP, и на тестировании на странных платформах, которые PHP поддерживает.

Если (или это «когда» сейчас?) Вы пишете библиотеку, и мы полностью ее проверяем, кому это будет выгоднее всего? Насколько далеко будут продвигаться последствия чего-то подобного?

Без тени сомнения, пользователи WordPress получат наибольшую выгоду, так как мы сможем обсудить реализацию безопасных автоматических обновлений, не повышая требования к минимальной версии PHP до 7.2.

Далеко идущие последствия заключаются в том, что ни один PHP-криптографический проект не останется позади. Все они могут воспользоваться этим, даже если они поддерживают древние версии PHP и обслуживают клиентов, которые не могут устанавливать расширения PHP. Не будет общих, рациональных оправданий для того, чтобы цепляться за окаменелости, такие как mcrypt. Вся экосистема за пределами WordPress может продвинуться туда, где сегодня находятся такие проекты, как Halite и CMS Airship.

Из-за проектов, которые больше всего выиграют от этого, и их устаревшей по умолчанию природы, я предполагаю, что минимальное требование версии PHP было бы довольно низким для такого расширения?

Как и в случае с random_compat , я пишу lifodium polyfill для совместимости с PHP еще в 5.2.4. Однако, в отличие от random_compat , я намерен random_compat его на две ветви:

  • v1.xy — PHP 5.2.x — 7.xy совместимый
  • v2.xy — только PHP 7.xy; использует скалярные объявления типов со строгой типизацией

Предположительно, ни одна ветвь не должна будет делать много для PHP 7.2 и выше.

Что касается аудита — расскажите нам, как это обычно работает, и о каких ценовых диапазонах мы говорим здесь?

Аудит кода криптографии — это услуга, предоставляемая компанией по обеспечению безопасности программного обеспечения, которая специализируется на прикладной криптографии. Мой работодатель (Paragon Initiative Enterprises) — одна из таких компаний, которая предлагает эти услуги, но было бы не очень гигиенично проверять нашу собственную работу и говорить всем, чтобы они доверяли, что мы проделали основательную работу.

Аудит криптографического кода является дорогостоящим. Как правило, им требуются десятки человеко-дней от уважаемой третьей стороны, которая обычно выставляет счет своим консультантам по ставке от 1 до 5 тысяч долларов США на человека в день. Но если вы компания, это большие инвестиции, поскольку большинство фирм не имеют доступа к талантам в области безопасности, которые есть у компании, занимающейся защитой программного обеспечения. Две другие компании, помимо моего работодателя, которые предлагают эти услуги, — это NCC Group и Cure53. Я не знаю их ставки, но я уверен, что «дешево» нет в меню; они делают хорошую работу.

Действительно ли нужен сторонний аудит? Вы уже не общались со всеми лучшими разработчиками PHP? Разве хорошо организованная рецензия со стороны уважаемых коллег-разработчиков не будет иметь почти такой же эффект?

К сожалению, правда в том, что лучшие разработчики PHP редко имеют больше, чем несколько часов, чтобы посмотреть что-нибудь бесплатно. Аудит кода — это платное взаимодействие с командой экспертов по безопасности для тщательного анализа вашей реализации на наличие ошибок, которые имеют последствия для безопасности. Уровень внимания и внимания намного выше. Например, проверки кода, которые я проводил для клиентов, намного, намного тщательнее, чем связанные с безопасностью проблемы Github, которые я открыл. Хотя они концептуально похожи, это разница между днем ​​и ночью.

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

Если эта библиотека polyfill в конечном итоге защищает четверть веб-сайтов в Интернете, аудит не подлежит обсуждению.

Рассматривали ли вы Indiegogo или Kickstarter для сбора средств для аудита?

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

Однако, если ни одна из крупных PHP компаний (особенно тех, которые используют WordPress) не желает участвовать, краудфандинг, безусловно, мой следующий шаг. Если это произойдет, ни один из полученных доходов не пойдет на развитие, поэтому я не могу предложить многое с точки зрения растягивающихся целей. Может быть, я мог бы инвестировать что-то сверх цели в аудит библиотеки шифрования PHP Defuse Security? (Я открыт для предложений, конечно.)

Есть ли что-то, что мы или наши читатели можем сделать, чтобы помочь этим усилиям, кроме прямого вклада?

Расскажите своим коллегам и вашему боссу об этих усилиях, чтобы помочь им в этом.

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

Вы хотите поделиться чем-нибудь еще?

По крайней мере, 27% веб-сайтов в Интернете получают гораздо большую устойчивость. Мое рабочее место твердо верит, что безопасность начинается с разработчиков, и в случае успеха это будет выставка А, когда мы должны защитить нашу философию от поставщиков безопасности, продающих свои бесполезные мигающие коробки за 100 000 долларов на конференциях по информационной безопасности.

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

Любой, кому лично я не нравлюсь (возможно, из-за моих грубых сообщений об уязвимостях системы безопасности за последние годы), у вас скоро может появиться возможность буквально внести деньги для найма эксперта, который публично скажет мне, что я что-то напортачил, в то же время делая Интернет более безопасно в процессе. Где ты собираешься найти более сладкую сделку?


Вывод

Расширение libsodium, наконец, помогло большинству продвинутых PHP-разработчиков отойти от mcrypt и других устаревших подходов к безопасности. Однако использовать его было нелегко для всех людей на общих хостах или тех, кто был заблокирован на устаревших платформах CMS и CRM.

Его PHP-версия изменила бы это — она ​​помогла бы проектам, таким как WordPress, Joomla, Magento и другим, реализовать PHP-версию libsodium и заменить их устаревшие методы безопасности, и все это не заставляя общие хосты устанавливать какие-либо пользовательские расширения.

Естественно, версии PHP на таких хостах по-прежнему будут проблематичными во многих случаях, так как многие из этих CMS и CRM поддерживают давно устаревшие версии PHP, но со временем огромная часть веб-экосистемы может стать значительно более безопасной.

Если вы работаете в компании, которая использует популярное программное обеспечение CRM или CMS на основе PHP, обратите на это их внимание — попросите их прочитать ответы Скотта и рассказать им о преимуществах добавления libsodium в свои приложения и в основу их систем. Небольшая финансовая жертва сегодня может предотвратить невероятно дорогие ошибки позже.