![](https://habrastorage.org/files/1de/09a/bfe/1de09abfecff4863a3c3a952a66fbd6a.jpg)
На конференции Ruxcon в Мельбурне двое австралийских хакеров показали самодельное устройство на Arduino, которое подбирает комбинации на механических замках в некоторых сейфах.
Пентестеры Джей Дэвис (Jay Davis) и Люк Янке (Luke Jahnke) объясняют, что оборудование для взлома таких замков стоит дорого и отсутствует в свободной продаже. Они же с помощью 3D-печати и Arduino изготовили «устройство автонабора» из совсем дешёвых деталей общей стоимостью всего $150. Устройство способно подобрать код к механическому замку стандарта UL Group 2, где комбинация состоит из трёх чисел от 0 до 99, с допустимостью ошибки ±1 в каждом числе.
В конструкции использован шаговый электродвигатель, который подключается к плате Arduino через модуль расширения.
Для начала нужно было решить три проблемы: 1) крепление шагового электродвигателя к замку; 2) как проверить точность поворота ротора; 3) как тестировать устройство.
Для решения третьей проблемы взяли простенький замок, исключительно для проверки концепции.
Первую проблему решили с помощью распечатки самодельного адаптера. Обошлись без покупки 3D-принтера и использования сложных редакторов вроде AutoCAD. В интернете нашли простенькую, но подходящую программу для 3D-дизайна Tinkercad.
![](https://habrastorage.org/files/6bd/ab6/7ee/6bdab67eeda44bea8e23ae1b78ee0058.jpg)
Переходник от шагового привода к замку готов! Его распечатали у знакомых, хотя можно воспользоваться и каким-нибудь из коммерческих сервисов, всё равно обойдётся недорого.
![](https://habrastorage.org/files/518/d8a/b81/518d8ab81d494d3cb4ea28cc91ae1aab.jpg)
Для управления написали код для управляемого перемещения ротора на нужный угол. Программа даже поддерживает классные функции вроде ускорения. Теперь можно указывать числовую комбинацию с Arduino, а ротор поворачивался в нужное положение.
После первоначального тестирования привода решено было купить настоящий сейфовый замок. Выбор пал на модель La Gard 3330. Для него повторили ту же процедуру с распечаткой адаптера.
![](https://habrastorage.org/files/327/ba3/faa/327ba3faa1194155bc37150b5df3c982.jpg)
![](https://habrastorage.org/files/c12/36f/511/c1236f511ce844f2badf0f32618563ab.png)
Нужно было ещё придумать способ, как определять, что замок открыт. Для этого разработчики применили магнитные датчики, использующие эффект Холла.
Конструкцию для крепления к сейфу позаимствовали из игры Payday 2.
![](https://habrastorage.org/files/c8d/d36/a73/c8dd36a73c2a45fd8728fff4163cac30.jpg)
В Tinkercad её разработать не получилось, пришлось использовать SketchUp.
![](https://habrastorage.org/files/844/d5d/862/844d5d862c0e4ae68610b2fae191cb95.jpg)
Вот что получилось в итоге.
![](https://habrastorage.org/files/983/acf/f58/983acff584a74d34b4cc1f4072308a1b.jpg)
Дальнейшее понятно: устройство устанавливает комбинацию, проверяет, открыт ли замок, и дальше повторяет цикл. Проверка одной комбинации занимает 4 секунды, так что вряд ли вы уложитесь в одну сессию. Поэтому библиотека поддерживает загрузку комбинаций с SD-карты и работу в несколько сессий с запоминанием уже опробованных комбинаций. Можно создать заранее сгенерированный список наиболее часто используемых комбинаций, таких как даты рождения. Максимально возможное количество комбинаций составляет 100 000 (с учётом особенности спецификаций UL Group 2: запрет на использование чисел от 0 до 20 в последнем разряде), что даёт 4,6 дня чистого брутфорса.
Файлы с дизайном устройства и исходный код для управления приводом авторы скоро опубликуют в открытом доступе. По крайней мере, обещают.