The OpenNET Project / Index page

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



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

Оглавление

Критическая уязвимость в  OpenSSL 1.1.0a, opennews (ok), 26-Сен-16, (0) [смотреть все]

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


4. "Критическая уязвимость в  OpenSSL 1.1.0a"  +9 +/
Сообщение от Аноним (-), 26-Сен-16, 17:54 
Потому что в критически важных программах (особенно в криптографии) критически важна скорость и низкое потребление памяти.
Ответить | Правка | Наверх | Cообщить модератору

5. "Критическая уязвимость в  OpenSSL 1.1.0a"  +1 +/
Сообщение от Аноним (5), 26-Сен-16, 18:25 
Как использование ссылок вместо указателей влияет на производительность?
Ответить | Правка | Наверх | Cообщить модератору

12. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от Аноним (-), 26-Сен-16, 18:57 
Ты дурак? OpenSSL написан на С, откуда там ссылки?
Ответить | Правка | Наверх | Cообщить модератору
Часть нити удалена модератором

22. "Критическая уязвимость в  OpenSSL 1.1.0a"  –2 +/
Сообщение от KonstantinB (ok), 26-Сен-16, 21:38 
Управляемый язык подразумевает виртуальную машину. Вот есть Java SSL, например, и что с этим делать вне JRE-мира?
Ответить | Правка | Наверх | Cообщить модератору

23. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от anonymous (??), 26-Сен-16, 21:40 
C++ не является управляемым языком, однако ссылки там есть, вывод - надо писать на плюсах. А то на сишечке такой код нормально компилится и ждет своего часа.

    char a[256];
    char *buf = a;
    recv(hSocket, &buf, 256);

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

24. "Критическая уязвимость в  OpenSSL 1.1.0a"  +3 +/
Сообщение от KonstantinB (ok), 26-Сен-16, 21:46 
Вы так говорите, как будто в C++ нельзя сделать dangling reference.

Есть, конечно, smart pointers, но это решает проблемы только локально и не всегда.

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

34. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (-), 27-Сен-16, 00:04 
Rust?
Ответить | Правка | Наверх | Cообщить модератору

47. "Критическая уязвимость в  OpenSSL 1.1.0a"  +3 +/
Сообщение от KonstantinB (ok), 27-Сен-16, 02:34 
Разве что теоретически - если вообще всё на нем вообще переписать, не используя unsafe-функции и raw pointers. На практике малореализуемо.

Вот что на практике реализуемо - так это использовать инструменты статического и динамического анализа и придерживаться единого стиля. Большинство проблем с openssl - следствие исторически сложившейся запутанности его кода и отсутствия этих самых best practices: когда ответственность за выделение/освобождение памяти разнесена как попало, подобные ошибки просто неизбежны. Форки типа libressl как раз это и пытаются решить.

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

78. "Критическая уязвимость в  OpenSSL 1.1.0a"  +4 +/
Сообщение от Аноним (-), 27-Сен-16, 15:10 
Настолько категорично переписывать всё и не обязательно – даже с unsafe-ом количество мест за которыми нужно следить сокращается многократно.

Но всё же это всё мечты – переносить проект после такого длинного пути развития на plain c даже на плюсы уже целая эпопея (см. gcc).

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

80. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (5), 27-Сен-16, 15:23 
> Настолько категорично переписывать всё и не обязательно – даже с unsafe-ом количество
> мест за которыми нужно следить сокращается многократно.
> Но всё же это всё мечты – переносить проект после такого длинного
> пути развития на plain c даже на плюсы уже целая эпопея
> (см. gcc).

Многие проекты на C переносятся на плюсы переименованием файлов в .cpp, и добавлением префикса extern "C" для функций API

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

83. "Критическая уязвимость в  OpenSSL 1.1.0a"  +3 +/
Сообщение от Аноним (-), 27-Сен-16, 15:39 
Может всё же не стоит путать пренос кода на другой язык с подключением этого же кода к коду на другом языке?
Ответить | Правка | Наверх | Cообщить модератору

86. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от Аноним (5), 27-Сен-16, 17:01 
> Может всё же не стоит путать пренос кода на другой язык с
> подключением этого же кода к коду на другом языке?

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

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

66. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Клыкастый (ok), 27-Сен-16, 11:28 
D?
Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

87. "Критическая уязвимость в  OpenSSL 1.1.0a"  +1 +/
Сообщение от Аноним (-), 27-Сен-16, 17:06 
Его главная проблема в том, что он метит скорее к высокоуровенным языкам, и в плане безопасности от тех же плюсов без использования GC не ушёл никуда.
Ответить | Правка | Наверх | Cообщить модератору

88. "Критическая уязвимость в  OpenSSL 1.1.0a"  –2 +/
Сообщение от Клыкастый (ok), 27-Сен-16, 17:40 
> Его главная проблема в том, что он метит скорее к высокоуровенным языкам,

высокоуровневые это C? он от сишника недалеко ушёл, и вынос некоторых вещей на уровень стиля программирования и проверку части ошибок на компилятор не сильно его приближает к жабам и окамлам. ИМХО то, что заказывали: "низкоуровневое" как C, чуть более безопасное, как C++. Это просто мои соображения, категорично утверждать не буду.

> и в плане безопасности от тех же плюсов без использования GC не ушёл никуда.

насколько я знаю использует подсчёт ссылок. уже хорошо.

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

92. "Критическая уязвимость в  OpenSSL 1.1.0a"  +1 +/
Сообщение от Аноним (-), 27-Сен-16, 18:26 
>насколько я знаю использует подсчёт ссылок. уже хорошо.

Нет, не использует. Ну, точнее есть самая наивная реализация самртпоинтеров в стандартной библиотеке как и в плюсах (при этом самое смешное что использовать их с отлкюченным GC или без рантайма не получится - эта реализация взаимодействует со сборщиком, чтобы тот корректно работал).
>высокоуровневые это C? он от сишника недалеко ушёл

Вот вообще ни разу - без сборщика течёт половина языка (те же билтиновые массивы, строки, замыкания и тд), аллокации на стёке в самом языке нет - есть в стандартной библиотекие, которая без GC не работает :)  

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

104. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от Клыкастый (ok), 28-Сен-16, 12:11 
> Нет, не использует. Ну, точнее есть самая наивная реализация самртпоинтеров в стандартной
> библиотеке как и в плюсах (при этом самое смешное что использовать
> их с отлкюченным GC или без рантайма не получится - эта
> реализация взаимодействует со сборщиком, чтобы тот корректно работал).

по хабрам и D-пабликам ходит статья про обёртки для работы с отключеным GC, не оно? (про ровность такого решения пока не будем).

> Вот вообще ни разу - без сборщика течёт половина языка (те же
> билтиновые массивы, строки, замыкания и тд), аллокации на стёке в самом
> языке нет - есть в стандартной библиотекие, которая без GC не
> работает :)

всё так плохо?

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

112. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от anonymous (??), 29-Сен-16, 09:35 
Бред. ""_ptr's (и smart_ptr) не имеют к GC никакого отношения. Все сводится к подсчету ссылок (ну, и определённые гарантии по жизненному циклу объектов).
Ответить | Правка | Наверх | Cообщить модератору

113. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (-), 29-Сен-16, 11:08 
Может стоит сначала открыть исходники и посмотреть прежде чем писать?
Или объяснить принцип работы GC и как память выделенная внутри объекта завёрнутого в смартпоинтер отслеживается сборщиком?
Ответить | Правка | К родителю #112 | Наверх | Cообщить модератору

114. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от yaa (?), 29-Сен-16, 11:23 
> Может стоит сначала открыть исходники и посмотреть прежде чем писать?

Именно так. Вам стоит таки открыть исходники.

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

115. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (-), 29-Сен-16, 16:26 
https://github.com/dlang/phobos/blob/master/std/typecons.d#L...
Ну...
Ответить | Правка | К родителю #114 | Наверх | Cообщить модератору

116. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от yaa (?), 29-Сен-16, 19:46 
А, так речь про D... Тогда все эти комментарии надо потереть.
Ответить | Правка | К родителю #115 | Наверх | Cообщить модератору

117. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Michael Shigorinemail (ok), 29-Сен-16, 19:55 
> А, так речь про D... Тогда все эти комментарии надо потереть.

Если какие-либо Ваши потеряли смысл после уточнения -- приведите их номера, пожалуйста.

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

90. "Критическая уязвимость в  OpenSSL 1.1.0a"  –2 +/
Сообщение от _ (??), 27-Сен-16, 18:11 
Теперь D принято писать так:
:-D

Потому что не взлетели.

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

59. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (-), 27-Сен-16, 09:53 
Так зачем писать фигню, а потом её компилить и релизить?
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

40. "Критическая уязвимость в  OpenSSL 1.1.0a"  –6 +/
Сообщение от iZENemail (ok), 27-Сен-16, 00:46 
> Потому что в критически важных программах (особенно в криптографии) критически важна скорость и низкое потребление памяти.

Но в Go как-то решили обе эти проблемы. Или нет?
http://golang-book.ru/chapter-08-pointers.html


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

49. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от angra (ok), 27-Сен-16, 02:37 
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lan...

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

51. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Led (ok), 27-Сен-16, 03:00 
> http://benchmarksgame.alioth.debian.org/u64q/compare.php?lan...

Результат предсказуем прежде всего из-за слабенького (по сравнению с GCC) оптимизатора в Go.

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

68. "Критическая уязвимость в  OpenSSL 1.1.0a"  –2 +/
Сообщение от Аноним (-), 27-Сен-16, 11:58 
> Результат предсказуем прежде всего из-за слабенького (по сравнению с GCC) оптимизатора в Go.

Если ты оптимизируешь проверки границ массивов - тормозить, конечно, перестанет, но тогда и проверок не будет :)

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

76. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним84701 (?), 27-Сен-16, 14:31 
>> Результат предсказуем прежде всего из-за слабенького (по сравнению с GCC) оптимизатора в Go.
> Если ты оптимизируешь проверки границ массивов - тормозить, конечно, перестанет, но тогда
> и проверок не будет :)

Вы еще расскажите, что проверки границ достаточно крупных массивов обязятельно должны тормозить "потому что гладиолус" ;)


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

97. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от angra (ok), 27-Сен-16, 23:38 
Нет, не гладиолус, а по причине того, что проверка выполняется при каждой операции, так что абсолютно фиолетово какой там размер массива.
Ответить | Правка | Наверх | Cообщить модератору

99. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним84701 (?), 28-Сен-16, 00:47 
> Нет, не гладиолус, а по причине того, что проверка выполняется при каждой
> операции, так что абсолютно фиолетово какой там размер массива.

При последовательном обходе, копировании в/из и т.д:
mprotect(..., PROT_NONE) на страничку памяти (или несколько, зависит от размера элементов) после массива — и ваши массивы будут мягкими и шелковистыми! Да и проверка (одна) в таком случае нужна только перед началом сего действа  и только в том случае, если собираемся проходить не с нулевого элемента.

Просто "стOит" это дело одну-две дополнительные страницы памяти (т.к. "валидная" длина массива будет кратной размеру страницы памяти), и не спасет при произвольном доступе/заполнении.

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

100. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от angra (ok), 28-Сен-16, 02:15 
Массивы чаще всего используются так 'a[i]' или так 'a[i]=...', то есть читается или пишется один элемент. Даже если это делается в цикле, проходящем по всем элементам, то это ничего не меняет, проверка нужна на каждое обращение. Этого можно избежать в языках с конструкциями each/foreach, которые избавляют от явного индексирования, но в С их нет.

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

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

105. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним84701 (?), 28-Сен-16, 14:33 
> Массивы чаще всего используются так 'a[i]' или так 'a[i]=...', то есть читается
> или пишется один элемент. Даже если это делается в цикле, проходящем
> по всем элементам, то это ничего не меняет, проверка нужна на
> каждое обращение.

Нет. Нужна проверка адреса на валидность перед циклом и ширины шага в самом цикле (последнее, если не заниматься  извращениями, вполне нормально проверяется компилятором).
Если за один шаг цикла мы не можем перескочить "стража" .... то проверять каждое обращение конечно можно, но только "потому что гладиолус".

> Этого можно избежать в языках с конструкциями each/foreach, которые
> избавляют от явного индексирования, но в С их нет.

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

> mprotect это очень тяжелая операция,

Никто не говорил, что mprotect так уж "легок", но
strace ls
strace time
Вполне себе применяется для "разметки" границ стека или кучи.

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

107. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от angra (ok), 29-Сен-16, 01:34 
for (i=0;i<n;i++) {
if (smth) {
   i=m
}
a[i]=a[i-1]+a[i-2]
b[i]=f(a[i])
}

Вот тебе всего три из множества возможных вариантов, в которых твой наивный подход не работает.

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

108. "Критическая уязвимость в  OpenSSL 1.1.0a"  +1 +/
Сообщение от Аноним84701 (?), 29-Сен-16, 03:35 
>  if (smth) {
>    i=m
>  }
> Вот тебе всего три из множества возможных вариантов, в которых твой наивный
> подход не работает.

Ну-ну.

1. То, что вариант с smth != true => a[-1] + a[-2] => fail
можно, совершенно внезапно, ловить еще на этапе компиляции.
2. m в реальном коде берется не из либастрала и вполне прослеживается компилятором — как минимум возможные значения (для всяких разных constant propagation, partial evaluation и всего такого).
3.  см.
>> если не заниматься  извращениями
>

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

61. "Критическая уязвимость в  OpenSSL 1.1.0a"  +/
Сообщение от Аноним (-), 27-Сен-16, 10:23 
Хороший результат у Go. Даже в таком виде...
Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

65. "Критическая уязвимость в  OpenSSL 1.1.0a"  –1 +/
Сообщение от angra (ok), 27-Сен-16, 10:49 
Хороший, не спорю, но Изя то говорил про полное решение проблем с производительностью и памятью, не иначе как с помощью магии. На деле же видим типичный tradeoff и никакого волшебства.
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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