"Качество" opensource, а так же "как сделать 'уязвимость', которую сложно обнаружить при review"

топ 100 блогов sporaw08.08.2010 Искал на днях кое-какую информацию и абсолютно случайно вышел на баг-репорт один. Он меня, что называется, "поразил до глубины души".

Посмотрите вот на этот код в генераторе RSA-ключей. Между прочим - opensource (привет Debian-сообществу!).

{
        CK_MECHANISM mechanism = {CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0};
        CK_ULONG modulusBits = 1024;
        CK_BYTE publicExponent[] = { 65537 };
        CK_BBOOL _true = TRUE;
        CK_OBJECT_CLASS pubkey_class = CKO_PUBLIC_KEY;
        CK_OBJECT_CLASS privkey_class = CKO_PRIVATE_KEY;
Этим кодом в декабре 2008 года была "повышена" безопасность генератора RSA-ключей: раньше по умолчанию использовался размер ключа - 768 бит, а экспонента была 3. Произведенные изменения: размер ключа стал 1024 бита, а экспонента - 65537 (общепринятая, безопасная).

Итак, все отлично. Безопасность повышена. RSA-ключи генерируются отличные, теперь можно спать спокойно.

А между тем, безопасноть не только не повышена, но и сведена полностью "на нет". Причем так, что даже при не беглом анализе кода не очень-то и понятно "где баг" и есть ли он тут вообще. А он несет за собой ужасные последствия. Ключи становятся абсолютно небезопасными, уязвимыми.

Должен отметить: баг просуществовал в таком виде, в том самом opensource, где каждый может делать review или смотреть в исходники... до 08 мая 2009 года. То есть ПОЛГОДА данная утилита генерировала ключи-пустышки. И люди их использовали.

Этот баг, кстати, наглядный пример того, как можно легко вставить "правительственный бэкдор" (применяю журналисткий термин) даже в opensource код. Вы все еще верите в качестве opensource? А так же в то, как вы "наглядно и без проблем можете посмотреть, нет ли какой-нибудь лажи; можно сбилдить самому из исходников"? Смотрели, смотрели, и видели - да ничего не видели.

Так вот, суть ошибки: при таком коде экспонента будет не 65537, а 1. Все. Это провал. Подсказка: см. тип данных.

Собственно, вот патч:
- CK_BYTE publicExponent[] = { 65537 };
+ CK_BYTE publicExponent[] = { 0x01, 0x00, 0x01 }; /* 65537 in bytes */
Идея понятна? 65537, да не тот...

Еще. Заголовок звучит "как сделать 'уязвимость', которую сложно обнаружить при review". Самое главное даже не в этом. А что такую уязвимость очень легко списать на "ошибку по невнимательности". И попробуй докажи, что это не так. Обычная ошибка. Да, с кем не бывает. А вот последствия...

Как это происходило.

Оставить комментарий

Архив записей в блогах:
Россия имеет мгновенный и зеркальный ответ на возможный выход США из Договора о ликвидации ракет средней и меньшей дальности (РСМД) – возобновление производства модернизированной ракеты «Курьер», сообщил источник в ракетно-космической отрасли. Источник заявил, что ответом России может ...
А нельзя продолжать использовать “мужские” названия профессий, просто признать, что за ними могут скрываться как мужчины, так и женщины? Чтобы “редактор”, “водитель” и “повар” были мужского рода , но не обязательно мужского пола ? Я вот хочу оставаться программистом, не хочу, чтобы ...
Матрос подводной лодки анонимно рассказал The Village о том, что такое поцелуй кувалды, зачем закусывать вино воблой и почему некоторым подводникам приходится годами драить туалет. Подлодка Я учился в Военно-морском училище им. Дзержинского, но это офицерский путь. А матросом на ...
Дорогие друзья! Публикую два "вопроса в редакцию" в один день, потому что один из вопросов - срочный! А я ответа не знаю! Вкратце - человек поступил в два вуза и не знает какой выбрать. Кто знает один из двух или даже оба, и имеет что сказать по поводу ...
Говорят, в ВСУ замечены такие шевроны. А еще говорят, что СБУ отлавливает солдат и офицеров с такими шевронами и проводит профилактические беседы. Но почему-то потом всех отпускает. Пару месяцев назад на линии соприкосновения в зоне АТО начались братания. Вот что мне рассказал знак ...