The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Критическая уязвимость в криптографической библиотеке Libgcrypt 1.9.0 , opennews (??), 29-Янв-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


6. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +/
Сообщение от Аноним (6), 29-Янв-21, 22:09 
> и вызвана изменением в новой реализации хэш-функций, внесённым около двух лет назад

Работает - не трогай!

Ответить | Правка | Наверх | Cообщить модератору

8. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +8 +/
Сообщение от Wilem82 (ok), 29-Янв-21, 22:13 
«Не сломалось - не чини» - известный девиз говнокодеров. Поскольку у них всё на соплях, малейшее движение рушит всю систему. Поэтому да. Ценный совет.
Ответить | Правка | Наверх | Cообщить модератору

29. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +/
Сообщение от Аноним (4), 30-Янв-21, 01:15 
Не обязательно, просто новый непроверенный код будет с багами. А старый ломается в основном потому, что это теперь другой разработчик, который может быть в курсе некоторых аспектов. Или он в силу разных обстоятельств не может обеспечить тех уровня качества и рецензированности, что и прошлый разработчик.
Ответить | Правка | Наверх | Cообщить модератору

31. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +1 +/
Сообщение от Wilem82 (ok), 30-Янв-21, 02:16 
> просто новый непроверенный код будет с багами

С одной стороны - да. Это неизбежно.

С другой стороны, из этого следует, что программы писать вообще нельзя - ведь они неизбежно будут с багами. А если даже ты собрался с духом и что-то написал, то ни в коем случае нельзя делать новые фичи или чинить баги. Ведь починка бага - это тоже новый код. Что, разумеется, абсурд.

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

Другое дело, что есть техники по минимизации количества багов. Отчасти это зависит от языка (Си - плохой вариант), отчасти от уровня квалификации программиста - насколько он хорошо знает и понимает software engineering? Умеет ли правильно писать тесты? Пишет ли их? Понимает ли он, что алгоритмы в коде и состояния программы должны быть максимально простыми и следовательно предсказуемыми?

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

Ответить | Правка | Наверх | Cообщить модератору

37. "Критическая уязвимость в криптографической библиотеке Libgcr..."  –2 +/
Сообщение от Аноним (-), 30-Янв-21, 04:15 
У си довольно приличная система типов - вот что-что а на типы он вонять умеет неплохо. Сидиотничать можно, конечно, но все же.
Ответить | Правка | Наверх | Cообщить модератору

40. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +1 +/
Сообщение от Аноньимъ (ok), 30-Янв-21, 05:16 
Вы неочень понимаете о чём речь идёт.
В С с некоторой точки зрения вообще типов нет.

Что-то конечно похожее есть, но, войд указатель это всё стирает как та чёрная дыра.
Скорее их нет чем они есть в общем.

Ответить | Правка | Наверх | Cообщить модератору

98. "Критическая уязвимость в криптографической библиотеке Libgcr..."  –1 +/
Сообщение от Аноним (-), 30-Янв-21, 20:07 
Я то как раз очень хорошо понимаю что в сишке с типами. И знаю что если я дам ему что-то левое, вонять будет. А void* примерно как unsafe в расте. То-есть поюзать на свою задницу можно, но корректность того что за этим следует на совести програмера.

И да, без таких вещей яп просто не будет пригоден для системного программирования. И там вообще так по жизни довольно много небезопасных вещей. Так вон даже GOпники с фуксией вроде задолбались, что-то дрова и системные компоненты на го им не нравится :). Наверное, секрет в том что тявкать из кустов одно, а програмить это - другое.

Ответить | Правка | Наверх | Cообщить модератору

108. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +2 +/
Сообщение от Ordu (ok), 30-Янв-21, 23:55 
> А void* примерно как unsafe в расте.

Нет. unsafe в расте позволяет лишь две особые вещи: вызов unsafe функции и разадресацию raw-указателя. Собственно для этого и используется. void* же в C используется для полиморфизма, потому что система типов иначе не умеет. То есть вещи, которые вообще-то не являются небезопасными делаются программистом небезопасными, потому что иначе никак.

Например, в libc есть функция qsort:

       void qsort(void *base, size_t nmemb, size_t size,
                  int (*compar)(const void *, const void *));

Программист вызывающий функцию должен сам всё чётко проверить, чтобы если base имеет тип T*, то compar был бы типа int (*)(const T*, const T*). Он должен проверить, чтобы nmemb был бы равен количеству элементов в массиве. Чтобы size был бы равен sizeof(T). Эти проверки вполне возможно выполнить, но когда эти проверки надо выполнять на каждом шагу, то некоторые неизбежно выполняются ошибочно. Или они станут ошибочными после каких-то изменений.

Хотя параметрическая типизация легко спасает от этого, в гипотетическом C с темплитами это могло бы выглядеть так:

template<T> void qsort(T* base, size_t nmemb, int (*compar)(T*, T*));

Видишь? Теперь единственный способ ошибиться -- это передать кривой nmemb. Накосячить с типами невозможно, потому что когда ты присунешь в вызов функции указатели на массив и на функцию, компилятор проверит, чтобы их типы соотносились бы определённым образом. А если ещё добавить идею слайса (нисколько не динамического массива, но "знающего" свой размер), как структурки вида {T* base; size_t nmemb}, и заменить ими C'шные массивы, то тогда ещё проще, и компилятор выполнит все проверки:

template<T> void qsort(T base[], int (*compar)(T*, T*));

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

И, заметь, это даже без деления кода на safe/unsafe, просто изменена система типов: в неё добавлены параметризованные типы и слайсы. void* в C нужен как костыль для полурабочей системы типов, потому как без него она не юзабельна.

Ответить | Правка | Наверх | Cообщить модератору

111. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +1 +/
Сообщение от Аноньимъ (ok), 31-Янв-21, 00:12 
>и компилятор выполнит все проверки

Разработчики компиляторов Си бросили все силы на то чтобы сделать этот "портируемый" язык портируемым. И получается всё еще плохо. Какие там проверки.

Ответить | Правка | Наверх | Cообщить модератору

110. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +1 +/
Сообщение от Аноньимъ (ok), 31-Янв-21, 00:09 
> Я то как раз очень хорошо понимаю что в сишке с типами.

Без толики упрёка, я боюсь, что вы в принципе очень плохо понимаете что такое типы, и почему их в Си нет. Я вот сам не очень понимаю, потому что тема сложная, но понимаю настолько чтобы знать, что их в Си нет.

>И да, без таких вещей яп просто не будет пригоден для системного программирования.

Вы правы отчасти.
Системное программирование такой-же маркетинговый булщит как скорость и портируемость Си.
Си даёт вам прямой доступ к части функционала ЦП(который изначально под выполнение Си кода заточен).

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

Ответить | Правка | К родителю #98 | Наверх | Cообщить модератору

42. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +/
Сообщение от Аноньимъ (ok), 30-Янв-21, 05:29 
Кстати, а эти либы сишные вроде либжкрипта и опенссл вообще юнит тестами покрывают?
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

80. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +2 +/
Сообщение от Аноним (11), 30-Янв-21, 13:48 
Удивительно, но тесты есть.
https://github.com/gpg/libgcrypt/tree/master/tests
https://github.com/openssl/openssl/tree/master/test
Покрытие правда неизвестно, кто хочет может поискать.

Но такой баг тестами покрыть сложно - там нужны особые входные данные. Возможно бы помог fuzz testing, но это уже хипстота и смузихлебство, настоящий сишник на такое не пойдет.

Ответить | Правка | Наверх | Cообщить модератору

99. "Критическая уязвимость в криптографической библиотеке Libgcr..."  –1 +/
Сообщение от Аноним (-), 30-Янв-21, 20:08 
Вот те раз, syzkaller то оказывается - хипстота?!
Ответить | Правка | Наверх | Cообщить модератору

55. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +/
Сообщение от Аноним (54), 30-Янв-21, 09:58 
>Для этого нужна сильная система типов (поэтому Си, как и Го - в пролёте).

Не могли бы пояснить, почему в Go слабая система типов?

Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

85. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +1 +/
Сообщение от Wilem82 (ok), 30-Янв-21, 15:57 
P.S. Только щас понял, что возможно имеет место конфуз - под сильной я имею ввиду "фичастую", а не в смысле strongly / weakly typed. :)

>>Для этого нужна сильная система типов (поэтому Си, как и Го - в пролёте).
> Не могли бы пояснить, почему в Go слабая система типов?

- Нет дженериков. Причём сам создатель языка (Роб Пайк) сказал, что в Гугле работают тупые мартышки которые не могут осилить сложные концепции, поэтому язык Го - мега-тупой, то есть дженериков там нет не потому, что они не нужны, а что бы у сотрудников Гугла голова случайно не заболела

- Нет dependent types - а они есть даже у прости господи фронтэндщиков (TypeScript)

- Нет sum types / tagged unions

- Даже явного указания на реализацию какого-то интерфейса нет - там тупо duck typing. Программирование через "а вдруг мне повезёт и у этого типа будут функции совпавшие по сигнатурам с сигнатурами вон того типа" - это дорога в непредсказуемые баги

Может ещё чего-то нет - можно погуглить про критику Го и почитать про то, почему это язык застрявший своими концепциями в 1960-ых.

Пример языков с сильными системами типов - Scala, Haskell, TypeScript.  Это не значит, что они во всём хороши - просто как пример, можно посмотреть им в доку и почитать какие фичи даёт язык, с примерами как это применять и тд. На типах TypeScript например написали исполнитель SQL-запросов на стадии компиляции просто как демонстрацию крутизны компилятора.

Ответить | Правка | Наверх | Cообщить модератору

100. Скрыто модератором  +/
Сообщение от Аноним (-), 30-Янв-21, 20:13 
Ответить | Правка | Наверх | Cообщить модератору

33. "Критическая уязвимость в криптографической библиотеке Libgcr..."  +4 +/
Сообщение от Аноним (-), 30-Янв-21, 04:06 
> «Не сломалось - не чини» - известный девиз говнокодеров.

Дебианщики как-то раз починили не сломаное. Нет, буфера не переполнялись, но вообще все возможные варианты ключей которые их openssl мог генерить описывались примерно 6Мб блеклистом. Как вы понимаете - это ультра-мега-критикал, когда 6-метровый список содержит ВСЕ ключи ВСЕХ дебианов и прочих убунт на планете. Просто потому что хакеры его быстро сгенерили и пошли получать рут по ssh на вообще всех машинах которые найдут.

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру