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

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

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

Архив записей в блогах:
Снился адмирал Нахимов. Не человек, пароход. Тот день снился, я был тогда за Туапсе, недалеко от событий, помню как наших поднимали по тревоге. Выслали два катера. Мы стояли, смотрели в бинокли. Нихрена не видели. И во сне был туман и два гудка корабельных. Кстати, объясню почему снится ...
«Еще 28 мая пранкеры Вован (Владимир Кузнецов) и Лексус (Алексей Столяров) позвонили директору Всемирного антидопингового агентства ВАДА сэру Крейгу Риди и главе Американского антидопингового агентства (USADA) Трэвису Тайгарту, который и выступил инициатором расследования в отношении Росси ...
С Остарой всех причастных! Это время весеннего равноденствия, когда день и ночь становятся равными, а природа пробуждается после зимнего сна. Остара символизирует обновление, рост, баланс и новые начинания. В этом году Остара проходит в коридор затмений, который добавляет этому ...
Но все-таки расход энергии не тот. Конечно, если в таком темпе 3 часа - а мы-то с ним махнули на 6 часов - эпический анабазис по паркам севера Москвы - да еще с его сумасшедшей скоростью - то это большой расход был. Это он меня мощно раскрутил. Но моя оценка всё равно 1:4. В четыре ...
А ведь мы подозревали! Подозревали, шо с "самой древней на усей земле" мовой шо-то не так. А она (мова) оказываецца развиваецца и крепчает не по дня а по часам! А мы насмехались над ней. Говорили шо не соловьиная она. Таки соловьиная. Правда соловьи те особой породы. Ну те, которые крякают ...