DefBrute - система распределенного перебора хешей.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by c0n Difesa, 13 Jul 2009.

  1. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Не многим из нас нравится выполнять трудоемкую задачу в одиночку. Процесс тянется долго, расходуются физические/умственные/нервные ресурсы. И в который раз мы понимаем, сколько времени можно было сэкономить, работая в коллективе.

    Компьютер не является исключением из этого правила. Только он не способен осознавать, насколько сложна поставленная перед ним задача, поэтому процесс ее выполнения может растянуться на долгий срок. Другое дело кластер – своего рода коллектив компьютеров, работающих над общей задачей и каждый из которых делает то, на что способен. Однако и здесь нужен сервер, который будет распределять задачу…

    Оставим эту «балталогию» и, чтобы не обсуждать абстрактные вещи, поставим конкретную задачу – перебор пароля по MD5-хешу. Другими словами: поиск коллизии.

    Частенько возникает потребность восстановить строку, имея на руках ее MD5-хеш. Забудем идею перебора по словарю, чтобы не ограничивать себя его размерами и предположим, что не нашлось коллизии ни на одном из ресурсов в сети. Остается генерировать посимвольно строки и сравнивать их хеш с целевым. Не иначе как настоящий брутфорс! Однако выполнять этот процесс на одной машине, по меньшей мере, нерационально.


    Гвоздь программы.

    DefBrute – система распределенного перебора строк для MD5-хешей. Особенности ее функционирования и процесс создания были детально описаны в статье "Система распределенных вычислений. Грид-сеть." . Там же можно найти исходные коды программного обеспечения, лежащие в основе рассматриваемой системы, с подробными комментариями.

    Система состоит из серверной и клиентской частей.


    Сервер.

    Серверная часть (DefBrute v1.0.exe) выполняет функции генерации, учета и передачи диапазонов строк клиентам.

    Генерация диапазонов основана на множестве символов (Char Set) (из которых, как предполагается, состоит пароль) и длины пароля (Password Length). Процесс генерации представляет собой простую инкрементацию числа из n-ричной системы счисления. Каждому числу соответствует биективное (взаимно-однозначное) отображение из множества строк. За подробностями генерации обращайтесь к статье многоуважаемого ZaCo «Разделение диапазона перебора паролей» . Далее сгенерированный диапазон строк передается клиенту с помощью технологии .NET Remoting.

    Главное (и единственное) окно программы состоит из нескольких областей. Рассмотрим эти области детальнее.

    Область Connect Settings содержит в себе опцию: Server Port, которая (как нетрудно догадаться) отвечает за номер порта, который будет открыт на сервере и который также необходимо указать клиенту.

    Следующая область объединяет все опции для перебора. Поле User CharSet позволяет пользователю задать множество символов, которые, по его предположению, могут быть использованы в пароле.

    Preset - предустановленные множества символов (латинские в верхнем регистре, в нижнем регистре, цифры и специальные символы). Думаю, тут все понятно.

    Enemy Hash - поле в котором указывает целевой MD5-хеш.

    Password Length - предполагаемая длинна пароля. Незнаем? – указываем с запасом.

    Statistics - область статистики, в которой первым пунктом является поле Clients Online. Оно показывает количество клиентов, получивших диапазон для перебора.

    Range Brute Progress - прогресс-бар, отображающий процесс перебора диапазона всех возможных строк.

    Collision - область, в которой выводится строка, соответствующая целевому MD5-хешу.


    Клиент.

    Клиент представляет собой консольное приложение, формат запуска которого: defbc.exe <server ip> <server port>.

    Возможно, кому-то покажется, что программа далека от совершенства, о чем могут свидетельствовать необработанные исключения и т.п. Для искушенного пользователя, а также для любителей оптимизировать и подгонять все «под себя», в архиве с программой присутствуют исходные коды на C# в виде проекта (Solution) для Visual Studio 2008.

    DefBrute v1.0 *

    * Требуется наличие .NET Framework 2.0 или выше.

    (c) c0n Difesa (defec.ru)
     
    #1 c0n Difesa, 13 Jul 2009
    Last edited: 28 Nov 2009
    4 people like this.
  2. schwarze

    schwarze Member

    Joined:
    1 Dec 2008
    Messages:
    64
    Likes Received:
    38
    Reputations:
    5
    Переборщик лично твой? Или ты чей-то взял?
     
  3. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Лично мой.

    P.S. Главное окно программы содержит копирайты.
     
    1 person likes this.
  4. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Особенности генерации диапазона строк.

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

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

    Предположим, пользователю требуется перебрать всевозможные комбинации (строки), составленные из символов:

    Code:
    str = “skz!&#”
    Пронумеруем каждый символ:

    Code:
    s(1); k(2); z(3); !(4); & (5); #(6)
    Всего символов n=6, значит работать будем в n-ричной системе счисления.

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

    Code:
    Число               Соответствующая ему строка
     
    1	             s
    2	             k
    3	             z
    …
    6                       #
    
    [I](Т.к. система 6-ричная, то если число >6 переходим в следующий разряд)[/I]
    
    7                       s#
    8                       k#
    9                       z#
    И т. д.

    Данный принцип используется подавляющим большинством переборщиков паролей. Надеюсь он описан понятно.
     
    #4 c0n Difesa, 18 Aug 2009
    Last edited: 18 Aug 2009
  5. ErrorNeo

    ErrorNeo Elder - Старейшина

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    836
    Reputations:
    402
    http://ru.wikipedia.org/wiki/Коллизия

    1. если ты реализуешь нахождение коллизии хеш-функции от заранее заданного блока данных с хеш-функцией от произвольного другого блока данных (на современных компьютерных мощностях) - тебе как минимум дадут нобелевскую премию, возьмут ведущим криптоаналитиком пентагона(или любой другой спец-структуры по твоему желанию)
    + ты, конечно же, прославишься на весь мир. :cool:

    2. находить MD5 хеш методом прямого перебора с использованием CPU, пусть даже распределённо - не есть тру, потому как даже одна видеокарта с поддержкой технологии CUDA или Bars способна выдавать скорость перебора, равную 100(!) мощностям обычных процессоров.

    Если же задумка в том, чтобы раздавать клиентскую часть скрытно тысячам юзеров, и грузить их процы не более, чем не 5-10%... то даже в этом случае 1 единственная видеокарта сможет заменить 1000-2000 таких ботов.

    :(
    в общем и целом всё красиво, интересно, любопытно....
    но бесполезно. не совсем понимаю, зачем именно ты это сотворил)

    хотя за старания все равно плюс) будет тебе от этого хоть какая-то польза :D
     
    #5 ErrorNeo, 18 Aug 2009
    Last edited: 18 Aug 2009
    1 person likes this.
  6. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Из той же Вики:
    Отсюда: коллизия – равенство. В принципе, считаю уместным использовать данное понятие в качестве равенства двух хешей (Целевого и Найденного).

    Факт. Однако не все видеокарты работают с той же CUDA, что существенно сокращает "доноров".

    Программа разрабатывалась в целях самообразования и ознакомления с платформой .NET и С# в частности, поэтому я не ставил цель написать брутер «бест оф зе бест», что упоминал в своей статье, посвященной данной системе.
     
    #6 c0n Difesa, 18 Aug 2009
    Last edited: 18 Aug 2009
  7. ErrorNeo

    ErrorNeo Elder - Старейшина

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    836
    Reputations:
    402
    коллизия - это 2 одинаковых хеша от двух разных исходных блоков данных.
    Иными словами, это - если ты сломаешь хеш 2 раза, и полуичишь при этом разные пароли.
    Это - чёткий термин. Называя же им простой подбор пароля ты лишь вводишь тех, кто знает его значение, в заблуждение, и усложняешь понимание тем, кто его не знает)

    В общем мне все равно, можешь коллизией хоть прогноз погоды называть - просто это будет не верно)

    как я уже написал - в любом случае молодец, что старался, и надеюсь, что твоё следующее творение будет более полезным с практической (а не только теоретической) точки зрения :)
     
    1 person likes this.
  8. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Примите извинения за отсутствие строгости к употребляемым терминам. Спасибо за замечание.

    Большое спасибо за критику. Приму к сведению, но все же надеюсь, что эти исходники кому-нибудь пригодятся в качестве концепта ;)
     
    1 person likes this.
  9. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    а ты не подумал вариант - если у меня на компе куды нету, зато из всего ботнета есть десяток ботов с кудами, либо даже не ботов а друзей, с которыми я договорился.
     
  10. ErrorNeo

    ErrorNeo Elder - Старейшина

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    836
    Reputations:
    402
    gold-goblin, "прикрутить куду" это ты жостко сказал.
    Если есть реальное желание - напиши сначала свой брутер под неё))
    А сделать распределение, это уже, прямо скажем, не особенно то и сложно.

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

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

    О распределенном же "куда-брутере", diehard, я ничего не говорил.
    В определенной степени это могло бы быть полезно... хозяину ботнета из куд :DD
     
    #10 ErrorNeo, 18 Aug 2009
    Last edited: 18 Aug 2009
  11. ViLKaa

    ViLKaa Member

    Joined:
    24 Jul 2009
    Messages:
    41
    Likes Received:
    7
    Reputations:
    5
    Перезалей пжалуста
    Сервер не найден
     
    3 people like this.
  12. _==wolf==_

    _==wolf==_ Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    да, лежит. поднимите или перелейте
     
  13. c0n Difesa

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Сервер вновь работает, так что "Добро пожаловать!" :)
     
    #13 c0n Difesa, 19 Aug 2009
    Last edited: 19 Aug 2009
  14. _==wolf==_

    _==wolf==_ Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    исходники это круто, я как раз пишу на си шарпе )