Автоматический перебор комбинаций в механических сейфовых замках



На конференции Ruxcon в Мельбурне двое австралийских хакеров показали самодельное устройство на Arduino, которое подбирает комбинации на механических замках в некоторых сейфах.
 
Пентестеры Джей Дэвис (Jay Davis) и Люк Янке (Luke Jahnke) объясняют, что оборудование для взлома таких замков стоит дорого и отсутствует в свободной продаже. Они же с помощью 3D-печати и Arduino изготовили «устройство автонабора» из совсем дешёвых деталей общей стоимостью всего $150. Устройство способно подобрать код к механическому замку стандарта UL Group 2, где комбинация состоит из трёх чисел от 0 до 99, с допустимостью ошибки ±1 в каждом числе.
 
В конструкции использован шаговый электродвигатель, который подключается к плате Arduino через модуль расширения.
 
Для начала нужно было решить три проблемы: 1) крепление шагового электродвигателя к замку; 2) как проверить точность поворота ротора; 3) как тестировать устройство.
 
Для решения третьей проблемы взяли простенький замок, исключительно для проверки концепции.
 
Первую проблему решили с помощью распечатки самодельного адаптера. Обошлись без покупки 3D-принтера и использования сложных редакторов вроде AutoCAD. В интернете нашли простенькую, но подходящую программу для 3D-дизайна Tinkercad.



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



Для управления написали код для управляемого перемещения ротора на нужный угол. Программа даже поддерживает классные функции вроде ускорения. Теперь можно указывать числовую комбинацию с Arduino, а ротор поворачивался в нужное положение.
 
После первоначального тестирования привода решено было купить настоящий сейфовый замок. Выбор пал на модель La Gard 3330. Для него повторили ту же процедуру с распечаткой адаптера.





Нужно было ещё придумать способ, как определять, что замок открыт. Для этого разработчики применили магнитные датчики, использующие эффект Холла.
 
Конструкцию для крепления к сейфу позаимствовали из игры Payday 2.



В Tinkercad её разработать не получилось, пришлось использовать SketchUp.



Вот что получилось в итоге.
Написал : Оборудование

  • f119b
    f119b Пятница, 17 Октябрь 2014

    Холодильник с кодовым замком :).
    ( Это к последнему фото).

  • CodeMaster
    CodeMaster Пятница, 01 Май 2015

    Дверь сейфа должна быть шероховатой и тогда такие "перебощики" в пролёте ;-)

  • Гость
    Антон Четверг, 28 Май 2015

    По идее используют всегда ровные числа. то-есть 10 20 30 40 50 60 70 80 90. Получается общее кол-во комбинаций 9 в 3й степени? это получается 729 комбинаций. если на одну комбинацию где-то 12 секунд, то получится 145 минут. То есть с такой машинкой где-то за 2-3 часа можно узнать неизвестную комбинацию.

  • Гость
    Bob Четверг, 28 Май 2015

    а вот и не правда... на 3 из 5 известных мне "боевых" кодов банка были не ровные...эт раз
    во вторых чем ловить "правильность" комбинации без участия человека?
    в третьих есть совершенно практическая задача подбора неточно забитых кодов...
    например когда хотели забить 10-20-30 а в виду косорукости или разбитости лимба набили 8-22-28
    тогда с помощью автоподбора можно выставить границы 5-15/15-25/25-35 и решить задачку

    алгоритм не верный.. надо 2 движка или 2 режима движка... первый выставляет код.. второй быстро делает нужное кол-во оборотов... вернее поуоборотов...(полуборот нужен для финального движения лимба, соответственно чтобы не писать разные программы для контроллера удобно будет двигаться полуоборотами т.е. поаорот лимба на 180грд)
    т.е. ставим "10" 6 полуоборотов влево, "20" 4 полуоборота вправо, "40" 2 полуоборота влево, полуоборот вправо
    после чего либо "дергалка" за ручку сейфа с определением открылось или нет (отдельный датчик похоже)
    либо еще полуоборот вправо с определением клинануло лимб или нет...
    соответственно если клинануло то останавливаемся и свистим "все готово шеф"
    если не клинануло делаем 6 полуоборотов выставляем следующую комбинацию и переходим в начало алгоритма

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

    как-то так ;) а то что "было показано" в презентации оч теоретические изыски далекие от практики

  • Гость
    eis Вторник, 24 Май 2016

    слоупок-некропостер, аха = )
    собрал похожую штуку. два контроллера, один рулит шаговиком, другой периферией - энкодер, дисплей, пищалка, карта памяти. работает автономно либо с подключением к компу. Для управления шаговиком используютя grbl и G-коды (не программист, поэтому использовал готовое решение) Есть и ускорение и управление с компьютера (клавиатура, мышь, ввод коммандд). подходит любой совместимый софт. Для генерации файлов перебора отдельная утилита, математика простая. На 1 комбинацию уходит не 12, а в среднем 1 секунда. Зависит от расстояния 3го числа комбинации до 80 (или 85 - проверка на открытие). Проверка на открытие без человека реализуема - сравниваем данные контроллера по шаговому двигадетелю, с данными контроллера по энкодеру. При правильной комбинации прокрутить дальше будет невозможно отсюда пропуск шагов подряд энкодер стоит а шаговик как будто бы крутится. Пищалка радостно пищит что все готово, на дисплее последняя набранная комбинация. И да не нужно набирать каждый раз всю комбинацию, тогда будет 12 секунд, сдвигаем только последнее число от 0 до 99, потом двигаем второе число на единицу от 99 до 0, аналогично первое число. Т.е. по логике получается три вложенных цикла. Есть нюанс - иногда при проверке сбивается второе число больше 85.
    Круглые комбинации те самые 729 прокручивает за 11 минут 24 секунды.
    По поводу неточно забитых кодов - ерунда, у замков есть погрешность, перебирать можно вообще через одно. К примеру только четные комбинации. У моего шаговика 200 шагов на круг, 2 шага на одно деление, 4 на 2. Можно сделать 3шага и будет перебирать по 1,5 и не промахнется.Есть еще микрошаги, настроить можно на любую погрешность замка, достаточно почитать тех.характеристики замка, или опытным путем , если есть на чем тренироваться. Для "дергать ручку замка" - можно повесить мощный серводвигатель, но некоторые замки открываются легко, а бывает так туго, что дверь пошатать нужно, так что легко пропустить правильную комбинацию. Энкодер имхо надежнее. Утилита генерит файлы по заданным настройкам на выбор: диапазон для каждого числа и шаг (1,2,5,10). скидываем файлы на карту памяти и можно работать автономно, либо отправляем файлы на контроллер из программы по usb. Можно собрать вообще без энкодера и на слух определить при пропуске шагов двигатель будет заметно дергаться и трещать, но полный перебор занимает 36часов.... А полуобороты в предыдущем посте это ерунда если конечное число будет например 25 то да полуоборот клинанет, а если 70, то полуоборот это 20, не дойдет даже до проверки клина. Про дергалку тоже выше написал.

  • Гость
    Bob Среда, 25 Май 2016

    За идею с энкодером +500 в карму!
    А проблему с дергалкой можно и должно решить иначе.
    После выставления всей числовой последовательности нужно отследить удлось ли провернуть лимб на один оборот назад.
    Сделать это можно с помощью того же энкодера

  • Гость
    eis Пятница, 27 Май 2016

    ну может я непонятно выразился, энкодер у меня как раз на шаговике, который крутит лимб. А ручку вообще не дергаю. и лимб не всегда надо крутить на полный оборот назад это оооочень долго на 50*50*40 (только четные, с учетом ограничений на последнее число кода >10 и говит трещит, энкодер не крутится. Дергать ручку это еще секунда. Кстати у сервоприводов уже есть энкодер, он всегда занет своем положение, так что если кто-то все же хочет дергать ручку посмотрите как это реализовано в проекте combobreaker.
    Чтобы было совсем понятно, пример перебора кратных 10 (
    выставляем 0
    4 полных оборота против часовой стрелки и еще на 10 делений туда же
    1е чсило 10
    2 оборота по часовой + 10 делений
    2е число 90
    1 оборот против часовой и еще +10 делений
    3е число 10
    проверка по часовой до 85
    3е чсило против часовой до 20
    проверка по часовой до 85
    3е чсило против часовой до 20
    проверка по часовой до 85
    ....
    3е чсило против часовой до 90
    проверка по часовой до 85 с прохождением через 0, т.е. полный оборот +5 делений.
    по часовой 2 оборота
    2е чсило 2е число 80
    повсторяется цикло проверки всех третьих чисел
    2е чсило 2е число 70
    повсторяется цикло проверки всех третьих чисел
    ...
    С количеством оборотов между 1 и2 числами,а также между 2 и 3 на самом деле не все так просто. Зависит от того какое из двух чисел больше. Кому надо тот сам разберется.
    Помимо погрешности замка есть еще человеческий фактор. для полного сброса кода после закрытия замка нужно сделать 4 оборота в одном направлении. Бывает просто покрутят туда -обратно 1 оборот и думают что этого достаточно. В таких случаях можно 1е и 2е число кода наощупь узнать и тогда перебор даже вручную занимает 2-3 минуты. Ну и бывает коды выставляют неверно, не соблюдая количество оборотов, и по факту получаетя код из 2х чисел. А это джае без учета погрешности замка при скорости 1 комбинациия в секунду 100*100 =10 000 /3600 =2,77 меньше трех часов, а если пропускать через одну то 2500/3600 =0,69 или 40 минут.

  • Гость
    Bob Четверг, 02 Июнь 2016

    вообще была идея приспособить для операции "полоборота" отдельный движок с энкодером
    либо тот же движок но в более скоростном режиме
    соответственно это сильно ускорит операции
    "полоборота" дл индикации правильного подбора
    "оборот"=два раза по "полборота" для перехода между цифрами

  • Dudarev
    Dudarev Четверг, 22 Июнь 2017

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

  • Гость
    eis Среда, 19 Июль 2017

    Нда не тот метод брутфорсом назвали :)
    Вы конечно правы, уважаемый Dudarev, этот метод не практичен, только здесь изначально обсуждался автоматический перебор. Эта тема имеет больше "академический" интерес.
    Ручками перебирать комбинации дело муторное. Пример из практики - слабо закреплен диск на котором нанесены риски, тот что под лимбом. Кассир по неопытности пыталась покрутить именно его, после нескольких неудачных попыток набрать код. В итоге риски сместились примерно на 5 позиций (максимальный люфт этого диска, который позволяют крепёжные болты и овальные отверстия для них на диске. Банкомат NCR). Т.е. все три числа съехали на 5 в меньшую сторону (а могло бы и в другую сторону). Посчитайте сколько нужно перебирать комбинаций ручками не зная как именно сбился код. Есть конечно быстрый грубый метод для такой ситуации и без сноса лимба.
    Ну предположим у нас санкционированное вскрытие, но перебор ручками результата не дал. Про другой метод мы не знаем и запасного замка здесь и сейчас на замену нет. Медвежатник будет через день-два. Т.е. нам не критично 2 минуты или 2суток. В любом случае простоя не избежать. Вот тут подобный аппарат и пригодился бы и сэкономил денег на специалиста/новый замок.

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

Гость Вторник, 30 Май 2023