"Качество" 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". Самое главное даже не в этом. А что такую уязвимость очень легко списать на "ошибку по невнимательности". И попробуй докажи, что это не так. Обычная ошибка. Да, с кем не бывает. А вот последствия...

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

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

Архив записей в блогах:
 Есть в Перми такой завод: ПЗСП (пермский завод силикатных панелей) и работают ...
Чья победа на президентских выборах в США будет выгоднее России? Я склоняюсь к мнению, что Дональда Трампа. Идеальным исходом было бы отсутствие президента, т.е., распад США или начало там гражданской войны. Это вынудило бы американцев сосредоточиться на своих проблемах и перестать ...
Произошла типичная подмена понятий, Фёдор! © Пендальф Этот пост щедро проплачен всемирной организацией русофобов и лично Михаилом Николаевичем. Теперь мучаюсь неврозом выбора: построить ли частную психиатрическую клинику где-нибудь в ...
Президент вызывает к себе генералов. – Сколько у Лукашенко дивизий? – 4 дивизии, Дмитрий Анатольевич! – Немного. То есть, если он пойдет на Москву, у нас проблем не возникнет? – Боимся, что возникнут - если Лукашенко пошлет на Москву четыре ...
*Уверен небо слышит нас и посылает то, что нужно!"(с) Не вповерите, только сегодня с утра ходила ныла, что никакой инфы от "учеников" нашего мальчика так и не поступила. Мачида и Ден, тьфу на вас!)) И вот, спасибо  limate , новые фото из Оберсдорфа!!! ...