The OpenNET Project / Index page

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

Техника предсказания содержимого буфера на основе анализа времени выполнения функции memcmp

08.05.2014 23:50

Специалисты из компании Red Hat подняли заслуживающий внимания вопрос интеграции средств защиты от проведения атак, основанных на корреляции времени выполнения операции и степени совпадения данных, сравниваемых функцией memcmp. Используемая по умолчанию в Glibc реализация memcmp подвержена проблеме, которая позволяет предсказать значение сравниваемых данных.

Например, если memcmp используется при сравнении ключа шифрования c входными данными, то атакующий может байт за байтом подобрать значение с которым осуществляется сравнение. Техника атаки основана на том, что memcmp завершает выполнение после первого несовпадения, т.е. атакующий может передать случайный набор данных и изменять значение первого байта, отслеживая время выполнения операции. Устойчивое увеличение времени будет сигнализировать об успешности подбора первого байта, после чего можно начать подбирать второй байт и т.д.

В качестве решения проблемы предлагается перейти на использование реализации функции memcmp, время выполнения которой явно не зависит от степени совпадения строки (например, можно сравнивать элементы в случайном порядке или сравнивать блоки в несколько байт). Включение по умолчанию подобного варианта функции в Glibc рассматривается как маловероятное (с позиции производительности, текущий вариант memcmp предпочтительней), поэтому как наиболее реалистичный вариант рассматривается возможность задействования защищённой версии memcmp при сборке Glibc с опцией "-D_FORTIFY_SOURCE=2".

  1. Главная ссылка к новости (https://securityblog.redhat.co...)
  2. OpenNews: Техника определения RSA-ключей через анализ изменения шума от компьютера
  3. OpenNews: Новая техника атаки для выявления содержимого отдельных блоков SSL/TLS-соединений
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/39730-security
Ключевые слова: security, glibc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (89) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Пиу (ok), 00:23, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    и насколько реально этим воспользоваться?
     
     
  • 2.3, Аноним (-), 00:30, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это ещё что, высший пилотаж - восстановление данные по шуму конденцаторов компьютера (http://www.opennet.me/opennews/art.shtml?num=38689)
     
  • 2.5, Аноним (-), 00:50, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > и насколько реально этим воспользоваться?

    В ряде случаев - вполне. К криптографическим примитивам одно из требований - чтобы время выполнения не зависело от ключа/пароля/etc. Иначе можно будет последовательно подобрать.

    И одно дело если ты будешь подбирать 20-символьный пароль как 26^20 и другое - как 26 * 20 :). Есть некоторая "небольшая" разница в сложности подбора. Первое ты загнешься подбирать, а вот 520 попыток в хучшем случае - это уже звучит как заявка на победу, не так ли?

     
     
  • 3.8, Аноним (-), 02:15, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    520*N всё-таки, потому что чтобы точно оценить разницу времени исполнения учитывая параллельно выполняющиеся задачи и другие факторы нужно много больше 1 попытки. Но таки да, сложность всё равно деградирует с экспоненциальной до линейной.
     
     
  • 4.46, Аноним (-), 14:47, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > 520*N всё-таки,

    Ну да, как-то так. Кстати не в тему, но по общей логике очень похоже на взлом WPS. Там, конечно, бестолковость в протоколе, но - именно такого плана.

     
  • 2.99, Аноним (-), 12:46, 10/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    нудк, обфускации в линуксе - практически не было(две наивные вещи были, по-дефолту и все).
    все из-за лобби и троллинга Линуса против "маструбирующих на безопасность" всех и вся, работу которых он либо не силен оценить, либо у него свой(или тех от кого он зависит)интерес против.
     

  • 1.2, asavah (ok), 00:25, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    ожидать релиза новой версии libastral.so ?
     
  • 1.4, Аноним (-), 00:48, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    > будет сигнализировать об успешности подбора первого байта

    На третий день Зоркий Глаз заметил что у сарая нет стены. В смысле, все кто хоть немного интересовался криптографией - уже давно в курсе что memcmp() использовать для вещей типа проверки паролей и прочего - не айс. Как раз вот поэтому вот. А редхат сказочно откапитанил, да :).

     
     
  • 2.11, Аноним (-), 02:48, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > - не айс. Как раз вот поэтому вот. А редхат сказочно
    > откапитанил, да :).

    редхат предложил с опцией "-D_FORTIFY_SOURCE=2" делать memcmp более защищённым,  и в чём капитанство ?

     
     
  • 3.21, Аноним (-), 09:01, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не капитанство, а слоупочество. Даже в дебиане это уже в стейбле по умолчанию, а в генте ещё лет 5 назад было.
     
     
  • 4.41, Аноним (-), 13:39, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    И что в Debian? Защищённый memcmp? Вы ничего не попутали?
     
     
  • 5.47, Аноним (-), 14:50, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > И что в Debian? Защищённый memcmp? Вы ничего не попутали?

    Капитанство и слоупочество - в том что кому оно было надо - уже много лет знали что memcmp в криптографии использовать *НЕЛЬЗЯ*. По именно этим причинам. И даже если в каком-то редхате это починят - кроме него есть туева хуча платформ где это не так, поэтому любой уважающий себя криптографический софт сам делает свою функцию сравнения которая всегда завершается за фиксированное время. Ну то-есть делается сравнение вообще целиком всего input, независимо ни от чего, при несовпадении взводится флаг, при возврате отдается состояние этого флага - или совпало, или нет. Это менее оптимально по скорости но более стойко к атакам на времянки типа упомянутых.

     
  • 3.76, Аноним (-), 18:48, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >редхат предложил с опцией "-D_FORTIFY_SOURCE=2" делать memcmp более защищённым,  и в чём капитанство ?

    В том что защищенность покупается хоооорошим просадом в скорости ... А очрованные на всю шляпу РХ-ники предлагают юзать этот слоупок для всех тонн софта...
    Вместо того чтобы написать свою реализацию для криптодел ...
    Но юзать для гвоздей молоток а для шурупов - отвёртку - это не по RH-ному :)

     

  • 1.6, Xasd (ok), 01:21, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Например, если memcmp используется при сравнении ключа шифрования c входными данными, то атакующий может байт за байтом подобрать значение с которым осуществляется сравнение.

    а нельзя например при сравнивании ключей -- использовать другую функцию нежели memcmp?

    кто именно (и кого?) заставляет ключи сравнивать именно через memcmp?

     
     
  • 2.12, pavlinux (ok), 02:58, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    да йопт code int memcmp void x, void z, size_t n struct timespec... большой текст свёрнут, показать
     
     
  • 3.33, irinat (ok), 12:20, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > clock_nanosleep

    Что, компьютеры стали слишком быстрыми?

    http://ru.thedailywtf.com/Articles/Uskoryayuschij-cikl.aspx

     
     
  • 4.61, Xasd (ok), 15:48, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    надеюсь за правду эти "ускоряющие циклы" ни кому в голову не придёт вставлять
     
     
  • 5.63, arisu (ok), 15:53, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > надеюсь за правду эти "ускоряющие циклы" ни кому в голову не придёт
    > вставлять

    за правду — вряд ли. а за деньги — запросто.

     
  • 3.48, Аноним (-), 14:53, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > да йопт

    Что это за буита, павлин? А просто сравнить весь input целиком и взвести флаг если не совпало, а потом вернуть флаг - это слишком просто, да? Хрена себе у благородного дона художества. Иди дельтаплан построй - хочу посмотреть что у тебя с таким подходом получится :).

     
     
  • 4.56, arisu (ok), 15:05, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Что это за буита, павлин? А просто сравнить весь input целиком и
    > взвести флаг если не совпало, а потом вернуть флаг - это
    > слишком просто, да?

    да. намекну: нужно как минимум два цикла.

     
     
  • 5.84, Аноним (-), 19:20, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем Гоняем цикл, прописываем в нем флаг Тезис о том что присвоение флагу о... большой текст свёрнут, показать
     
     
  • 6.90, arisu (ok), 19:27, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    вот чтобы не лезть глубоко и получить более-менее амортизированное время без копания в асме, проще всего сделать два цикла с двумя флажками.
     
  • 6.91, arisu (ok), 19:27, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    p.s. с одним циклом можно *попытаться* точнее определить, какой именно байт не совпал, если чо.
     
  • 4.103, Xaionaro (ok), 09:50, 12/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А просто сравнить весь input целиком и взвести флаг если не совпало, а потом вернуть флаг - это слишком просто, да?

    К сожалению, современные процессы работают очень хитро. И лично я не уверен, что при таком алгоритме нельзя будет повторить такого рода атаку. Например, вполне ненулевая вероятность, что timing будет отличаться из-за работы кеш-а. Нужно изучать этот вопрос внимательнее.

    А вообще, мне не нравится идея усилять memcpy в FORTIFY. Я его с какого-то времени начал использовать почти везде, а у меня нет нигде кода, требующего защищённого memcpy. А даже если был бы, я бы использовал отдельную реализацию (не вижу смысла тормозить весь код из-за этого).

     
  • 2.31, irinat (ok), 12:15, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а нельзя например при сравнивании ключей -- использовать другую функцию нежели memcmp?

    В openssl есть для этого CRYPTO_memcmp(), например. Но бывает так, что авторы кода по недосмотру используют memcmp. Вот от них и пытаются защищаться.

    Где-то проскакивала информация, что в DRM у консоли Wii использовалась strcmp вместо memcmp. Вот это был фейл.

     
     
  • 3.49, Аноним (-), 14:55, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Где-то проскакивала информация, что в DRM у консоли Wii использовалась strcmp вместо
    > memcmp. Вот это был фейл.

    А у Сони вообще рандом был не рандомным нифига, что позволило народу посчитать приватный ключ из-за особенности применяемого алгоритма на основе эллиптических кривых :). Читать факин мануалы на применяемые алгоритмы торгаши и DRMщики и их cpaныe наймиты не любят :).

     
  • 3.78, Аноним (-), 18:55, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В openssl есть для этого CRYPTO_memcmp(), например. Но бывает так, что авторы
    > кода по недосмотру используют memcmp. Вот от них и пытаются защищаться.

    Irinat - ты мужчина? Если так давай ко мы тебя кастрируем, чтоб ты кого не снасильничал. Ничего личного - просто "от них и пытаются защищаться" же.

    Ещё раз - в криптософте поведение стандартной memcmp() вызывает проблему (а в остальном софте - вызывает восторг :) ... значит и надо криптописателей снабдить медленной но в этом смысле надёжной финкцией, а всем остальным оставьте БЫСТРУЮ!

     

  • 1.7, Аноним (-), 02:03, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Интересно, а специалистам из редхата не приходило в голову, что подобная атака требует больше вычислительных ресурсов, чем простой подбор ключа?
     
     
  • 2.13, Аноним (-), 03:00, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Интересно, а специалистам из редхата не приходило в голову, что подобная атака
    > требует больше вычислительных ресурсов, чем простой подбор ключа?

    Думаю нет, посколько они образованные люди в отличие от вас и разницу между O(2^N) и (N) видят.

     
  • 2.50, Аноним (-), 14:55, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > требует больше вычислительных ресурсов, чем простой подбор ключа?

    Щаз. Вон WPS почти так и разломали - последовательно подбирая цифры по одной :).

     
     
  • 3.66, Xasd (ok), 17:04, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ну вообще -- при взломе WPS нет необходимости анализировать время.

    там просто две группы цифр.

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

    кстате взлом WPS работает только в том случае если WiFi-точка отвечает разными ответами взависимости от того в какой из двух групп ошибка (многие современные WiFi-точки так уже не делают).

     
     
  • 4.79, Аноним (-), 19:03, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > ну вообще -- при взломе WPS нет необходимости анализировать время.

    Да, однако логика последовательного подбора по цифрам - как раз в духе этого самого.

    > каждую из этих двух групп -- подбираем отдельно (сначало первую потом вторую).

    Насколько я помню, одну подбирают целиком, вторую по отдельным цифрам, что как раз очень даже ололо.

    > современные WiFi-точки так уже не делают).

    Ну да, конечно, известный бэкдор - это не айс!

     
     
  • 5.102, I11a (?), 18:07, 10/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Там 8 десятичных разрядов, первая группа из 4 разрядов проверяется отдельно от второй. Однако 8-й разряд последовательности - есть функция от первых семи, т. о. во второй группе надо перебирать лишь три разряда. Итого 11000 вариантов для полного перебора, а в среднем - 5500, что совсем плохо.

    Почему WPS придумали именно таким - для меня большая загадка. Да, потом разработчики оборудования понадобавляли всяких костылей для усложнения атаки, но от этого не стало сильно лучше.

     

  • 1.9, pavlinux (ok), 02:16, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Устойчивое увеличение времени

    При условии, что время компьютера устойчиво, а то это как секс в гамаке - попадёшь-непопадёшь.  

     
     
  • 2.51, Аноним (-), 14:56, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > При условии, что время компьютера устойчиво, а то это как секс в
    > гамаке - попадёшь-непопадёшь.

    А можно просто туда-суда пару тысяч раз, потом уже статистика - залетела/не залетела :).

     

  • 1.10, Аноним (-), 02:29, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > Включение по умолчанию подобного варианта функции в Glibc рассматривается как маловероятное (с позиции производительности, текущий вариант memcmp предпочтительней), поэтому как наиболее реалистичный вариант рассматривается возможность задействования защищённой версии memcpm при сборке Glibc с опцией "-D_FORTIFY_SOURCE=2".

    что-то в redhat понабрали каких-то тупых наркоманов, каждая новость хлеще другой. Вместо того, чтобы сделать отдельную ф-ю специально предназначенную для криптографии и аутентификации, они решили притащить эти костыли в библиотеку общего назначения. Идиоты.

     
     
  • 2.15, pavlinux (ok), 04:28, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > они решили притащить эти костыли в библиотеку общего назначения. Идиоты.

    Девиз онанимных оналитегов: Новость не читай - коммент пиши!!!
    https://sourceware.org/ml/libc-alpha/2014-01/msg00763.html
    Ща конечно заплачет "- этого нет русской новости,..." :'(

    Неидиот, английский-то знаешь? Упрощу задачу, для твоего IQ можешь перевести последние три слова.

    > We implemented the first approach, based on BSWAP, on top of the GNU C library
    > implementation of memcmp that is targeted at the current line of x86 CPUs which
    > have fast unaligned loads. It turned out that the cost was mostly negative. For
    > example, sorting a random permutation of /usr/share/dict/words using qsort was
    > about ten per cent faster than before

    .

     
     
  • 3.80, Аноним (-), 19:05, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> они решили притащить эти костыли в библиотеку общего назначения. Идиоты.
    > Девиз онанимных оналитегов: Новость не читай - коммент пиши!!!

    А то ! :)
    > https://sourceware.org/ml/libc-alpha/2014-01/msg00763.html
    > Ща конечно заплачет "- этого нет русской новости,..." :'(

    А ещё тот кусок овсокода который ты запостил - тоже не о том что по ссылке :)

    В общем понятно. У меня из нормальных остался только один аргумент против. То что они предложили - только для Ынтелей\(амд?) работает. На армах к примеру она так и будет опасной. Но юзать будут то что в мэйнстриме, а мэйнстрим 99,999% на ...

     

  • 1.14, pavlinux (ok), 04:25, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Техника атаки основана на том, что memcmp завершает выполнение после первого несовпадения

    Да нивапрос, будем проверять ВСЁ!!!



    int memcmp_s(void *x, void *y, size_t n)
    {
            unsigned char a, b;
            unsigned char ret;

            for (ret = 0; n--; x++, y++) {

                    a = *(unsigned char *)x;
                    b = *(unsigned char *)y;

                    if (a != b && ret == 0) {
                            ret = (a - b);
                    }
            }
            return (ret != 0 ? ret : 0);
    }


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

     
     
  • 2.16, Аноним (-), 05:19, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >


    >  return (ret != 0 ? ret : 0);
    >

    Я, конечно не мастер, и вообще мне страшно писать на такие сайты для взрослых, но что делает эта строка? проверяет равен ли ret нулю, если не равен возвращает ret иначе ноль?
    Может сократить до

    return ret

    . Или мы ret не очень доверям???

     
     
  • 3.17, pavlinux (ok), 05:28, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Или мы ret не очень доверям???

    Выбирай по-вкусу:

    1. Преждевременная оптимизация залог ошибок!
    2. Программирование "сверху-вниз".
    3. Это идея, а не код.


    Домашнее задание по оптимизации:

             Сделать туже логику, но без переменной ret;  

    Всех С Днём Победы!!!!

     
     
  • 4.24, arisu (ok), 09:21, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Домашнее задание по оптимизации:
    >          Сделать туже логику,
    > но без переменной ret;

    угу. потому что сейчас там ошибка.

     
  • 4.71, Led (ok), 17:53, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Или мы ret не очень доверям???
    > Выбирай по-вкусу:
    > 1. Преждевременная оптимизация залог ошибок!
    > 2. Программирование "сверху-вниз".
    > 3. Это идея, а не код.

    4. Говнокод

     
     
  • 5.74, arisu (ok), 18:27, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > 4. Говнокод

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

     
     
  • 6.75, Led (ok), 18:43, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> 4. Говнокод
    > судя по тому, как он этот говнокод защищает, не желая признавать ошибки
    > — это не просто говнокод, это выстраданый ночами кусок кода; лучшее,
    > на что павлуша способен, видимо. надеюсь, мне никогда не придётся увидеть
    > худшее.

    Ты что, первый раз такое от него увидел? павлуша всегда был говнокодером - ничем он не удивил и в этот раз.

     
     
  • 7.77, arisu (ok), 18:52, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    по-моему, раньше он свою чушь так яростно не защищал. или я внимания не обращал, или напился на праздник.
     
  • 3.32, irinat (ok), 12:18, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Может сократить до return ret



    return !!ret;


     
     
  • 4.34, arisu (ok), 12:21, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Может сократить до return ret
    >

    return !!ret;

    снова ошибка. man memcmp.

     
     
  • 5.35, irinat (ok), 12:36, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>> Может сократить до return ret
    >> return !!ret;
    > снова ошибка. man memcmp.

    Неа, ошибки нет. return ret можно заменить на return !!ret, если хочется редуцировать именно до 0 или 1, и это абсолютно корректно. Это демонстрация трюка на случай, если кто-то про него не знает.

    Участвовать в соревнованиях по переписыванию memcmp или других библиотечных функций я не собираюсь. Для занятий на досуге есть другие, более интересные и более нужные мне задачи.

     
     
  • 6.36, arisu (ok), 12:38, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    функция называется memcmp_s(). функция ЯВНО пытается (хоть и неправильно) возвращать именно то, что возвращает memcmp(). твой код поломал её ещё больше. но «ошибки нет», ага.
     
     
  • 7.37, irinat (ok), 13:06, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > твой код поломал её ещё больше. но «ошибки нет», ага.

    Обрати внимание на то, что ret объявлен как unsigned char.

    Может всё-таки обратишь своё стремление искать ошибки в более конструктивное русло? В мире куча open source проектов, которые не отказались бы от ещё одной пары глаз, просматривающих код на предмет багов. А искать ошибки в наколенных поделиях на форумах это, знаешь ли, как-то мелко.

     
     
  • 8.38, arisu (ok), 13:20, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    обрати внимание на то, что про уже наличествующую до тебя ошибку я сказал раньше... текст свёрнут, показать
     
     
  • 9.43, pavlinux (ok), 14:08, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Фишка в том, что возвращаемый результат сохраняется один раз, но проверяются все... текст свёрнут, показать
     
     
  • 10.44, arisu (ok), 14:18, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    фишка в том, что у тебя неправильно возвращает результат по спекам должно возвр... текст свёрнут, показать
     
     
  • 11.54, pavlinux (ok), 15:02, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да ты чо if 55 47 будет отличатся от if 56 48 хвать з... текст свёрнут, показать
     
     
  • 12.59, arisu (ok), 15:08, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а ты подумай про неполное вычисление условий и про записи в память, гыгы и про ... текст свёрнут, показать
     
  • 10.64, irinat (ok), 16:27, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    int memcmp_s const void s1, const void s2, size_t n return CRYPTO_memcm... текст свёрнут, показать
     
     
  • 11.70, pavlinux (ok), 17:21, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Пля, толант ... текст свёрнут, показать
     
     
  • 12.73, arisu (ok), 18:25, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    его код 8212 в отличие от твоего 8212 без ошибок ... текст свёрнут, показать
     
     
  • 13.86, Аноним (-), 19:24, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Глядя на авторов openssl я бы на него 100 баксов не поставил ... текст свёрнут, показать
     
     
  • 14.88, arisu (ok), 19:26, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а это уже совсем других людей ошибка нельзя же считать, что ошибка именно в код... текст свёрнут, показать
     
  • 11.82, Аноним (-), 19:17, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ха-за Но - таки - ДА ... текст свёрнут, показать
     
  • 11.105, Xaionaro (ok), 10:10, 12/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Можно сделать static inline, чтобы уменьшить на одну обёртку А ещё подумать на ... текст свёрнут, показать
     
  • 2.28, Anonymouse (?), 10:12, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Достаточно угадать длину ключа и последний байт.
     
     
  • 3.58, Anonymouse (?), 15:08, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >Достаточно угадать длину ключа и последний байт.

    Посмотрел на код еще раз, отменяетсяю

     
  • 2.104, Xaionaro (ok), 10:04, 12/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Техника атаки основана на том, что memcmp завершает выполнение после первого несовпадения
    > Да нивапрос, будем проверять ВСЁ!!!



      
        if (a != b && ret == 0) {  
            ret = (a - b);
        }


    Разное время выполнения в зависимости от того, "ret == 0" или нет. По сути ровно та же атака в силе, просто заметить увеличение/уменьшение времени выполнения становится сложнее.

    Чисто математически задача немного сложнее ведь, что все так пренебрежительно к ней относятся? :(

     
     
  • 3.106, arisu (ok), 06:57, 30/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Чисто математически задача немного сложнее ведь, что все так пренебрежительно к ней
    > относятся? :(

    понекропостим: на самом деле именно memcmp() в криптографии нафиг не упёрся, нужен memequ(). то есть, тупо флажок «равно/не равно», причём точно в виде ноля и единицы, например. вот тут задача уже резко упрощается и решается буквально в две строки.

    а кто продолжает использовать memcmp() там, где надо memequ(), тот идиот, и к криптографии его подпускать вообще нельзя.

     

  • 1.20, DV (ok), 07:49, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странный подход. Так-то взломщик может неким путём подменить библиотеку с оной функцией на самописную и спокойно ломать ключ. Надо не на реализации конкретной функции в системе полагаться, а разрабатывать надёжные алгоритмы защиты, не допускающие подобного рода анализов. Обновлять memcmp -- это просто сооружать костыль. Задача системных функций -- выполнить свою работу как можно быстрее при как можно меньшем объёме памяти. С тем же успехом можно в Уголовный Кодекс принять закон, запрещающий анализ времени выполнения memcmp.
     
     
  • 2.22, Аноним (-), 09:08, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >взломщик может неким путём подменить библиотеку с оной функцией на самописную и спокойно ломать ключ

    Ну, как-бы, взломщик не сможет перезапустить демоны, проверящие ключи со своей LD_PRELOAD_PATH=..., не имя при этом рутовых прав.

     
     
  • 3.53, Аноним (-), 15:01, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    а это и не обязательно делать. Достаточно пропатчить plt таблицу, не очень сложная операция
     
     
  • 4.57, arisu (ok), 15:06, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > а это и не обязательно делать. Достаточно пропатчить plt таблицу, не очень
    > сложная операция

    правда, сделать это весьма проблематично, если у тебя рута нет, но когда такие мелочи смущали благородных донов?

     
  • 2.25, arisu (ok), 09:22, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    если у человека уже есть рутовый доступ, то поздно пить боржоми. но часто это вовсе не так.
     
  • 2.100, Аноним (-), 12:48, 10/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Странный подход. Так-то взломщик может неким путём подменить библиотеку с оной функцией
    > на самописную и спокойно ломать ключ. Надо не на реализации конкретной
    > функции в системе полагаться, а разрабатывать надёжные алгоритмы защиты, не допускающие
    > подобного рода анализов. Обновлять memcmp -- это просто сооружать костыль. Задача
    > системных функций -- выполнить свою работу как можно быстрее при как
    > можно меньшем объёме памяти. С тем же успехом можно в Уголовный
    > Кодекс принять закон, запрещающий анализ времени выполнения memcmp.

    контроль целостности системы, с включенной реалтайм-частью - ведь никто не запрещает ставить ? Но НЕТУ этого на 99% серваков, тем не менее.

     

  • 1.23, Аноним (-), 09:11, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >рассматривается возможность задействования защищённой версии memcpm при сборке Glibc с опцией "-D_FORTIFY_SOURCE=2"

    А не лучше ли использовать выбор времени исполнения варианта memcmp, например, установкой какой-либо глобальной переменной?

     
     
  • 2.26, zed_0xff (?), 09:42, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    в любой непонятной ситуации - х*ячь глобальную переменную!!!111
     
     
  • 3.27, arisu (ok), 10:07, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в любой непонятной ситуации - х*ячь глобальную переменную!!!111

    всегда так делаю, брат жив!

     
     
  • 4.30, Аноним (-), 10:55, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> в любой непонятной ситуации - х*ячь глобальную переменную!!!111
    > всегда так делаю, брат жив!

    Пишешь с холодильника? :D

     
     
  • 5.52, Аноним (-), 14:58, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Пишешь с холодильника? :D

    Ты там этого, потише. Уже есть холодильники с ведроидом, так что вы уже довыпендривались, фаготы.

     
  • 4.65, anonymous (??), 17:01, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> в любой непонятной ситуации - х*ячь глобальную переменную!!!111
    > всегда так делаю, брат жив!

    А как же этот, multi-threading?

     
     
  • 5.67, arisu (ok), 17:11, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А как же этот, multi-threading?

    а нас в ПТУ такому не учили.

     
     
  • 6.83, Аноним (-), 19:19, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> А как же этот, multi-threading?
    > а нас в ПТУ такому не учили.

    Зато научили скакать :)

     

  • 1.39, Аноним (-), 13:22, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Чтобы добиться устойчивого среднестатистического увеличения времени при нынешних скоростях процессоров и задержек сети - необходимо вбивать один и тот же пароль как минимум 1000 раз. Задержка сети - миллисекунды, задержка memcmp - наносекунды, полученные результаты все равно будут в рамках погрешности.
     
  • 1.40, Нанобот (ok), 13:37, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    вообще-то memcmp предназначена для сравнения данных. безопасность там не предусмотрена by design. если кому нужна безопасность, разумнее сделать что-то типа memcmp_slow_but_secure_fapfap и использовать её (но только не пихать её во все дыры чисто из принципа, а использовать её в тех местах, где это действительно нужно, а во всех остальных местах использовать memcmp)
     
  • 1.42, umbr (ok), 13:45, 09/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так они придут к тому, что каждый вызов любой функции будет сопровождаться цифровой подписью.
     
     
  • 2.45, pavlinux (ok), 14:24, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Так они придут к тому, что каждый вызов любой функции будет сопровождаться
    > цифровой подписью.

    В правильных системах это, почти, так и есть. Не подпись, но аппаратный ключ.
    По крайней мере на всякие exec/open. А ещё есть VAX/Open/VMS там похожее by design


     
     
  • 3.55, Аноним (-), 15:02, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    прекрати бредить, обезъянка
     
  • 3.68, Xasd (ok), 17:16, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > В правильных системах это, почти, так и есть. Не подпись, но аппаратный ключ.

    иногда мне так и хочется процитировать какую-нибудь фразу из очередного американского кино про суперсекретных агентов...

    типа:

    "IP-адрес зашифрован через RSA.. о боже! мне потребуется не менее 30 минут чтобы взломать его!"

     
  • 3.85, Аноним (-), 19:21, 09/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > есть VAX/Open/VMS там похожее by design

    Это ты о чём? Чета не распарсил ....


     

  • 1.98, bircoph (ok), 10:13, 10/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Почему бы не оставить memcmp в покое и не добавить memcmp_crypto?
    Не вижу смысла терять производительность в тех приложениях и частях приложений, где нет необходимости защищать буфер.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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