id: Гость   вход   регистрация
текущее время 01:50 26/04/2024
Владелец: SATtva (создано 23/02/2014 10:17), редакция от 23/02/2014 10:17 (автор: SATtva) Печать
Категории: криптография, софт, протоколы, ошибки и баги, уязвимости, стандарты, свободный софт, ssl, закрытый софт
http://www.pgpru.com/Новости/2014/ЛишнийGotoПоломалSSLTLSВIOS
создать
просмотр
редакции
ссылки

23.02 // Лишний goto поломал SSL/TLS в iOS


Анализ внезапно выпущенного на днях обновления iOS до версии 7.0.6 выявил замечательную ошибку, позволяющую сайту отдавать iOS-устройствам одноразовые ключи, подписи которых вообще не имели отношения к его сертификату. Т.е. приводящей к фактически полной неработоспособности всего механизма SSL/TLS.


Причина ошибки – лишний goto (привет копипасту), который всегда приводил к переходу в конец функции, минуя проверку sslRawVerify.


А вообще, увидев в 21 веке такое количество goto в коде, хочется передать отдельный привет отпраздновавшему на той неделе 80 лет Вирту. Спагетти-код неистребим.


Источник: http://bugtraq.ru/rsn/archive/2014/02/02.html


 
— Гость (23/02/2014 10:57)   <#>


Губит людей не пиво не goto, а бездумная копипаста. Иногда проще использовать goto чем наворачивать лишние сущности. Да какие там макароны, красота сплошная и читабельность.
— Гость (23/02/2014 12:24)   <#>
#ifdef USE_CDSA_CRYPTO
невольно читается, как
#ifdef USE_NSA_CRYPTO


Каждое goto — ветвление в логике. Каждое ветвление увеличивает число вариантов исполнения программы в два раза. Например, 4 ветвления — уже окло 16 вариантов. Человеку их будет тяжело проанализировать, поэтому даже в императивщие goto рекомендуют, только когда уж совсем без него никак. А по-хорошему, императивщина — помойка изначально. К счастью, создатели современных языков это понимают и стараются вводить нужные функциональные концепты в язык, даже если он преимущественно позицинируется, как императивный.
— sentaus (23/02/2014 12:54)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32
Анализ внезапно выпущенного на днях обновления iOS до версии 7.0.6

Я так понимаю, ошибка была в обновлении добавлена? А вот интересно, что вообще надо было исправлять сейчас в таком месте кода?
— SATtva (24/02/2014 09:15)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Вот такое наблюдение:

There are still a few suspicious items. Most notably, this bug is triggered if and only if something called "perfect forward secrecy" (PFS) has been offered as an encryption option for the session.
— sentaus (24/02/2014 10:38, исправлен 24/02/2014 11:26)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32

Я хочу по итогам немного побрюзжать следующее сказать:
1) В if-else всегда надо использовать операторные скобки. Два оператора после if – очень частая ошибка. Наличие операторных скобок по крайней мере позволяет заметить, что что-то не так после автоматического переформатирования кода. (У них же есть внутренние стандарты на стиль и форматирование, да?)


2) Появление неиспользуемых участков кода также должно настораживать, особенно, если это не целая функция/метод, а какой-то небольшой участок.


3) Ошибка также могла быть вызвана некорректным слиянием двух веток. Интересно, были ли при это конфликты?

— Гость (24/02/2014 12:50)   <#>

Торчат уши одного небезызвестного агенства? :)
— SATtva (26/02/2014 16:57)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118

Автор далее рассуждает, почему такой вариант представляется маловероятным.
— Гость (03/03/2014 21:48)   <#>
Да, дедушке Вирту – здоровья и многая лета! Великолепный язык создал, равных ему нету.
— sentaus (04/03/2014 21:41)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32
А тем временем ещё и в GnuTLS обнаружилась похожая уязвимость.
— unknown (04/03/2014 22:11)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664

А Б. Шнайер рассуждает наоборот.

[offtop]
А ещё Шнайер пишет местами бред про пароли.

Modern password crackers combine different words from their dictionaries

This is why the oft-cited XKCD scheme for generating passwords — string together individual words like "correcthorsebatterystaple" — is no longer good advice. The password crackers are on to this trick.

Эта цитата из блога Шнайера, в общем случае — бред. В словарях Diceware примерно 12.8 бит энтропии на слово. Если фразу выбирать из 10 рэндомных слов, то получится 128-бит стойкости. Мы это уже обсуждали.
[/offtop]
— SATtva (05/03/2014 11:44)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
[offtopic]
В принципе, каждый, кто много пишет (речь не о выверенных научных статьях) имеет шанс время от времени выдавать какой-нибудь бред.
[/offtopic]
— Гость (05/03/2014 12:03)   <#>
[offtopic]
Пользуясь медицинскими аналогиями: наивный подход что к созданию паролей, что к анонимности — лечение симптомов, а не болезни. Вместо того, чтобы найти оценку стойкости пароля, часто пытаются создать методику, устойчивую к уже известным методам перебора по словарю. С анонимностью так же: вместо того, чтобы добиваться неразличимости по всем параметрам, дёргают только некоторые (часто ещё и в сторону уникальности), полностью игнорируя все остальные.


Научных статей это тоже касается, просто вероятность появления бреда ниже. При росте общего числа статей вероятность написать хотя бы одну полностью ошибочную работу стремится к единице. Живой пример.
[/offtopic]
— unknown (05/03/2014 15:09)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
[offtopic]
Шнайеру уже вроде как напостили комментов с указанием ошибки.
[/offtopic]
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3