eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Gideon Vi
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Как подобрать добавочные байты, чтобы сошлась MD5 сумма файла?
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 19:20 New!
Цитата · Личное сообщение · #1

Прошу немного просветить про МД5.
Вобщем есть прошивка под контроллер. В ней проверяется целостность байт по следующей схеме:
Считается MD5 сумма, заданного количества байт (все полезные байты прошивки). Потом эта сумма криптуется алгоритмом RSA с 1760 битным ключем. Менять RSA ключи нельзя, они проверяются. (Вернее можно, но придется прошивку в корне переписать).
Что я хочу сделать. Увеличить размер проверяемых байт (например) на размер блока МД5, 64 байта. И подобрать эти последние добавленные байты, так чтобы сумма МД5 нового файла прошивки сошлась с суммой оригинальной прошивки.
Соответственно вопросы:
1. Не преувеличиваю-ли я размер добавляемых байт? Может достаточно добавить 4 - 16 байт?
2. Есть какие-то известные брутфорсы, которые допускают ввести начальную МД5, отличную от стандартной (0123456789ABCDEFFEDCBA9876543210), и считающую размер в битах для финального блока не от нуля, а от заданного размера?


Ранг: 260.1 (наставник)
Статус: Участник
RBC

Создано: 23 июня 2018 19:22 New!
Цитата · Личное сообщение · #2

это тебе не crc32


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 19:30 · Поправил: f13nd New!
Цитата · Личное сообщение · #3

Забей. Просто забей. То, что ты ищешь, называется "рассчет коллизии" и этого покамест никто еще не сделал. Когда сделают, можно будет забыть о цифровых подписях. Были пара ученых (японец и словак вроде), которые придумали туннелирование. Когда флипаешь несколько определенных бит на входе и получаешь как бы ту же хеш-сумму, но это скорей забавный фокус и практического никакого смысла не несет.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 19:31 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #4

Ну а по существу-то можно ответить? Я готов на брутфорс потратить и пол-года и год. В принципе сейчас прошивка работает как надо, но надо все сделать правильно. Есть комп, который можно не отключать. Если надо то и друзей подключу к брутфорсу.
Про коллизии читал, но это не мой случай. Там расчитывается один блок по оригинальному блоку. В моем случае оригинального блока нет. Поэтому только брутфорс.

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 19:32 New!
Цитата · Личное сообщение · #5

Это pre-image attack, сложность где-то 2^128, т.к. для MD5 нету хороших атак в случае pre-image.
Вы не сможете сделать такой перебор.

Можно попробовать сделать атаку meet-in-the-middle.
Нужно, чтобы паддинг в RSA не проверялся.
То есть, любой рандомный кусок байт должен считаться валидной подписью с неким MD5 хешем внутри.

Итак, на i-ом шаге вы генерите случайно подпись Si, расшифровываете ее публичным ключом, получаете некий MD5 хеш Hi.
Далее, генерите случайно прошивку, получаете хеш прошивки Li.
Согласно парадоксу дней рождения, одно из L1, ..., Li совпадет с одним из H1, ..., Hi при i около 2^(128/2)=2^64.
2^64 - возможно, не такой и сложный перебор.

Если не выйдет, то есть всякие атаки на подпись RSA, кроме тупо факторизации, но там жесть.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 19:36 New!
Цитата · Личное сообщение · #6

Атаки на RSA я не рассматриваю. Только на МД5.
Хотя-бы на первый вопрос ответьте? Хватит добавки из 4-16 байт или обязательно 64 байта?

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 19:38 New!
Цитата · Личное сообщение · #7

Подбор хеша MD5 сводится к одному простому действию - вы рандомно меняете что-то в прошивке и получаете совершенно случайный хеш.
Длина прибавки вообще ни на что не влияет, это все равно случайный хеш.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 19:43 · Поправил: f13nd New!
Цитата · Личное сообщение · #8

Kuzya69 пишет:
Хотя-бы на первый вопрос ответьте? Хватит добавки из 4-16 байт

Не факт, что хватит 64. МД5 считается с блоков по 64 байта, хвост выравнивается. У тебя на выходе 2^(8*16) комбинаций, ты хочешь с 2^32 туда заехать?


Ранг: 516.5 (!)
Статус: Участник
Победитель турнира 2010

Создано: 23 июня 2018 19:43 New!
Цитата · Личное сообщение · #9

Гуглится элементарно, зачем с этим на форум приходить(.

Для MD4 достаточно просто находится, даже в тасках CTF попадается подобное.
Для MD5 тяжелее.

Теория и исходный код: http://www.win.tue.nl/hashclash/
Пример использования: https://natmchugh.blogspot.com/2015/02/create-your-own-md5-collisions.html

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 19:46 · Поправил: kunix New!
Цитата · Личное сообщение · #10

OKOB, надо различать pre-image attack и collision attack.
Вы дали ссылку на collision attack. Человеку нужен pre-image attack, точнее даже 2nd pre-image attack.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 19:49 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #11

..Теория и исходный код..
Опять вы про коллизии, это не мой случай. Мне нельзя менять байты прошивки, чтобы подобрать коллизию, мне как-бы надо подобрать пароль (комбинацию байт) под известный хэш. При заданном начальном векторе и заданном размере в битах.

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 19:55 · Поправил: kunix New!
Цитата · Личное сообщение · #12

Мужыки, так вот эта фигня реалистична или нет?
https://exelab.ru/f/index.php?action=vthread&forum=5&topic=25222#5
2^64 шагов нужно сделать, описанных выше.
Сколько будет стоить, сколько времени, если на ботнете, и т.п.?


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 19:57 · Поправил: f13nd New!
Цитата · Личное сообщение · #13

Kuzya69 пишет:
Мне нельзя менять байты прошивки, чтобы подобрать коллизию,

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

Добавлено спустя 6 минут
kunix пишет:
Можно попробовать сделать атаку meet-in-the-middle.

Это техника Блехенбахера, 2006 год. Работает только с публичной экспонентой 3, уже давным-давно все либо от нее отказались, либо ввели значащее поле в младших битах.

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 20:05 · Поправил: kunix New!
Цитата · Личное сообщение · #14

Kuzya69, какой алгоритм проверки подписи?
Какая экспонента, какой паддинг, как проверяется?
Просто есть еще атака кубического корня, если экспонента=3 и проверка паддинга с ошибкой.\

[f13nd пишет:
Это техника Блехенбахера, 2006 год. Работает только с публичной экспонентой 3, уже давным-давно все либо от нее отказались, либо ввели значащее поле в младших битах.

Что-то мне кажется, это две совершенно разные атаки.
meet-in-the-middle насрать на экспоненту.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 20:08 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #15

Твоя задача взять значение предпоследней итерации MD5 и подбирать содержимое последнего буфера.
Все верно, только все брутфорсы, которые я находил, подбирают со стандартным начальным вектором и считают размер от начала подбираемого "пароля". А тут надо немного изменять алгоритм брутфорса. Может кто встречал уже готовый, под мою задачу? Боюсь сам я его не напишу, я знаком только с Делфи. Вернее напишу, но он будет медленным.
какой алгоритм проверки подписи?
Я-же писал - RSA с 1760 битным ModulusN. После декриптовки, обычное побайтное сравнение.
Какая экспонента, какой паддинг, как проверяется?
Экспонента стандартная 0х10001, а вот что такое паддинг, пойду гуглить, я такое слово первый раз слышу.
Если неправильно понял, то поправьте. Если паддинг - это добивка криптуемых байт до определенного размера сообщения, то в моем случае к МД5-сумме, перед криптовкой в RSA, спереди, добавляются 0х12 байт, и они тоже учавствуют в побайтном сравнении. Я это не написал сразу, так как считал, что это не важно.
Но вообще, мне не нужно RSA трогать, пусть остается как есть. Мне нужен подбор МД5.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 20:11 · Поправил: f13nd New!
Цитата · Личное сообщение · #16

kunix пишет:
вы попутали две совершенно разные атаки.

Ну допустим, у меня глаз за "Нужно, чтобы паддинг в RSA не проверялся" зацепился. По сути то же самое и на той же уязвимости основано.

Добавлено спустя 7 минут
Kuzya69 пишет:
Я-же писал - RSA с 1760 битным ModulusN. После декриптовки, обычное побайтное сравнение.

128 бит или 1760 сравнивает?

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 20:25 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #17

128 бит или 1760 сравнивает?
272 бита сравниваются. Там даже немного посложнее, еще перед этими битами-байтами, дожны стоять 0хFF байты обязательно, иначе проверку не пройдет.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 20:32 · Поправил: f13nd New!
Цитата · Личное сообщение · #18

Kuzya69 пишет:
272 бита сравниваются. Там даже немного посложнее, еще перед этими битами-байтами, дожны стоять 0хFF байты обязательно, иначе проверку не пройдет.
Ну значит парадокс дней рождения и 136 бит экспоненциального модулирования. Займет это год или меньше, не узнаешь, пока не попробуешь.

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 23 июня 2018 20:50 · Поправил: kunix New!
Цитата · Личное сообщение · #19

Kuzya69 пишет:
272 бита сравниваются. Там даже немного посложнее, еще перед этими битами-байтами, дожны стоять 0хFF байты обязательно, иначе проверку не пройдет.

Если так, то meet-in-the-middle без шансов
Будете перебирать до тепловой смерти вселенной.
Перебор уже 2^80 вариантов считается невозможным.

Kuzya69 пишет:
Мне нужен подбор МД5.

Вы не подберете содержимое прошивки по заданному MD5 хешу, еще раз повторяю, прямым текстом.
Там будет сложность где-то 2^128.

Kuzya69 пишет:
Экспонента стандартная 0х10001

Про атаку Bleichenbacher можно забыть.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 21:05 New!
Цитата · Личное сообщение · #20

Ну кстати хешклеш можно посмотреть https://github.com/cr-marcstevens/hashclash-old-svn-repo/blob/master/downloads/hashclash-r38-win32-cpcgui-beta.zip
Напиши что он выдаст.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 21:12 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #21

Там будет сложность где-то 2^128.
Это понятно, но это максимальная сложность. Вероятность попадания на меньшей размерности добавляемых байт все-же существует (не 16 байт, а например 8).
Кто-бы помог подправить исходник BarsWF, чтобы принимал в параметрах начальный вектор и начальную длину? Я в Сях не силен, была бы Делфи, разобрался-бы.
Ну кстати хешклеш можно посмотреть...
Ну тут что-то много настроек, может лучше выложить что нужно, и сами посмотрите, боюсь быстро я с этой прогой не разберусь. Скажите какие данные нужны, выложу.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 21:22 · Поправил: f13nd New!
Цитата · Личное сообщение · #22

Kuzya69 пишет:
Кто-бы помог подправить исходник BarsWF, чтобы принимал в параметрах начальный вектор и начальную длину?


Code:
  1.                  g->hash_i[0]=g->hash_ref[0]-0x67452301;
  2.                  g->hash_i[1]=g->hash_ref[1]-0xefcdab89;
  3.                  g->hash_i[2]=g->hash_ref[2]-0x98badcfe;
  4.                  g->hash_i[3]=g->hash_ref[3]-0x10325476;

В 15й раз напоминаю, что длина у тебя в последнем кадре и подбираешь ты только его. Не подойдет тебе эта программа. Хешклеш вон вверху предназначен для подгонки мд5 одного файла под мд5 другого, шут его знает работает ли оно и сколько.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 21:31 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #23

В 15й раз напоминаю, что длина у тебя в последнем кадре и подбираешь ты только его. Не подойдет тебе эта программа.
А вот это высказывание не понятно. BarsWF работает с паролями длиной 1-15 символов-байт. Как раз получается последний кадр. Т.е. он на лету меняет размер в последнем блоке. Когда только начинаются итерации, он присваивает длине значение 0 (или 1), и постепенно ее длину инкрементирует. Если в самом начале задать не 0(или 1), а то что введем в параметрах, то все будет идти и дальше как надо.


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 21:34 · Поправил: f13nd New!
Цитата · Личное сообщение · #24

Kuzya69 пишет:
и постепенно ее длину инкрементирует


Инкременирует от 1 до 15? Длина вот. В каждом способе надо самому это выставлять в исходнике.
Code:
  1. set32(sse2_lendata, len*8);
  2. for(int i=0;i<4;i++)
  3. {
  4.          set32(target_sse[i], g->hash_i[i]);
  5. }

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 21:37 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #25

Инкременирует от 1 до 15?
Я язык Си не понимаю, но это естественно вытекает из алгоритма брутфоса. Прога начинает с коротких паролей и переходит к следующим.
Правда там есть еще параметр как минимальная длина пароля. Тут я не знаю как реализовано.
В каждом способе надо самому это выставлять в исходнике.
Скорее всего в исходнике можно выставить максимальную длину, чтобы прога не брутила до конца вселенной. А в параметрах, можно задать минимальную длину.
for(int i=0;i<4;i++)
Да и наверное это не то. Откуда "i<4" взялось? Это скорее размерность Dword-а, единицы информации для МД5.

Ранг: 407.8 (мудрец)
Статус: Участник

Создано: 23 июня 2018 21:44 · Поправил: dosprog New!
Цитата · Личное сообщение · #26

А как меняют прошивки для этого девайса штатным образом?


Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 21:46 New!
Цитата · Личное сообщение · #27

dosprog пишет:
А как меняют прошивки для этого девайса штатным образом?

Штатным образом очевидно прошивка с валидной цифровой подписью.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 23 июня 2018 21:49 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #28

Штатным образом очевидно прошивка с валидной цифровой подписью.
Так точно. Только мы не знаем закрытой экспоненты, чтобы самим подписать изменившуюся МД5 сумму.

Ранг: 407.8 (мудрец)
Статус: Участник

Создано: 23 июня 2018 21:55 · Поправил: dosprog New!
Цитата · Личное сообщение · #29

Там точно не участвует размер кода? - Откуда такая уверенность?

И проверками занимается код из этой самой прошивки?
- Это к тому, что в таком случае надо ковырять это самое гадство в самой прошивке.
Если это возможно



Ранг: 198.2 (ветеран)
Статус: Участник

Создано: 23 июня 2018 21:58 · Поправил: f13nd New!
Цитата · Личное сообщение · #30

Kuzya69 пишет:
Да и наверное это не то. Откуда "i<4" взялось?

Code:
  1.                         .if ebx = [nPaddedSize]
  2.                               mov eax,[nSize]
  3.                               mov ecx,8
  4.                               xor edx,edx
  5.                               mul ecx
  6.                               mov DWORD[binCalcBuffer + 64 - 8],eax
  7.                               mov DWORD[binCalcBuffer + 64 - 4],edx
  8.                         .endif

Взял бы уже реализацию мд5 на понятном тебе языке да посмотрел. Цикл лишним видимо зацепил. Размер 8 последних байт кадра, в битах. Следующий за последним байтом выставляется 0x80. Set32 очевидно длину устанавливает. Для пароля 32бит длины за глаза.

Добавлено спустя 15 минут
dosprog пишет:
- Это к тому, что в таком случае надо ковырять это самое гадство в самой прошивке.

Знал бы ты, как это ковыряют, не имея возможности поменять алгоритм проверки. И флеш умудряются без стирания патчить единицами поверх через дыру в протоколе, лишь бы это обмануть; и неиспользуемые инженерные интерфейсы находят чтоб подрезать ключ для авторизации тоже в инженерном режиме прямо из оперативки. А некоторые даже то ли покупают у разработчиков, то ли воруют с заводов рса ключи для этой авторизации.
. 1 . 2 . 3 . >>
 eXeL@B —› Вопросы новичков —› Как подобрать добавочные байты, чтобы сошлась MD5 сумма файла?

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS