Многабукаф
Я обнаружил уязвимость, которая позволяет открывать электронные сейфы компании Sentry Safe и Master Lock без пин-кода. Производителя я уведомил, но ответа от них так и не получил.
Я создал альтернативную плату и прошивку для решения этой проблемы, они доступны по ссылке.
Предыстория
Однажды по случаю я прикупил логический анализатор и задумался, что же с ним делать?
Посмотрел вокруг... Телевизор... принтер...
... электронный сейф!
Разборка
Попробуем понять, как это работает. Для начала разберём дверь и заглянем внутрь.
Там всего две платы:
1 плата снаружи с батареями, клавиатурой, светодиодами и зуммером.
1 плата внутри с памятью и соленоидом (который механически отпирает болты).
Захват
Между этими двумя платами есть 4 провода (чёрный, жёлтый, зелёный и красный). Поскольку цвета проводов не всегда соответствуют назначению, не будем безоговорочно им доверять. Мы можем осмотреть дорожки на плате, чтобы найти схему проводки, но поскольку мой новый логический анализатор может обрабатывать 8 каналов, давайте просто подключим каждый провод.
Такому электронному сейфу нужен 5-значный код, поэтому для первого захвата я просто нажму клавишу «1» 5 раз.
Результат: только сигнал зелёного провода начал меняться. Чёрный всегда низкий, жёлтый и красный всегда высокие (значит, цветам можно доверять).
На захваченном сигнале мы видим 5 повторений одной и той же фигуры подряд, поэтому можно сделать вывод, что эта фигура соответствует нажатию клавиши «1» (так как именно её мы и нажимали 5 раз). Чтобы декодировать полный сигнал, мы должны найти используемый протокол.
Этот сейф не относится к открытому аппаратному или программному обеспечению, поэтому мы не знаем, как он работает. Нужно копаться.
Давайте рассмотрим чипы на платах. На каждой из них только один микроконтроллер.
Согласно техническому описанию, основными протоколами связи, используемыми с этим микроконтроллером, являются SPI и I²C. Но не в этот раз, потому что им обоим нужен тактовый сигнал, а на других проводах нет никакого движения. Так что это скорее всего наиболее часто используемый протокол асинхронной шины: UART.
Хорошие новости: ПО с открытым исходным кодом для просмотра импульсов содержит множество декодеров, включая UART.
Но какая частота используется?
Чтобы узнать частоту, я начинаю с измерения времени между каждой фигурой, которая, как мы предполагаем, соотносится с нажатой клавишей.
Для передачи всего ключа потребовалось 2,1 мс, а самый короткий пик занял примерно 0,2 мс. Обычно UART использует 1 стартовый бит, 8 бит данных и 1 стоповый бит. Итого 10 бит.
2,1 мс / 10 = 0,21 мс
Это значение соответствует нашему самому короткому пику.
10 бит за 2,1 мс. Таким образом (1000 мс / 2,1 мс) * 10 = количество бит, которое можно передать за секунду, примерно равно 4762.
Частота UART должна соответствовать 9600 делениям. Значение 4762 очень близко к 4800, что соответствует 9600/2, обычной скорости для UART.
Поэтому мы пытаемся установить эту частоту в нашем декодере.
Работает! Мы можем прочитать наши 5x "1" ключей.
После некоторых попыток с разными кодами можно сделать следующие наблюдения о разных частях сигнала:
сигнал всегда начинается с формы пробуждения с низким состоянием 2,7 мс, затем высоким 0,25 мс (не является частью протокола UART);
после пробуждения сигнал всегда отправляет 0x0 байт;
после этого отправляется фиксированное значение 0x71, похоже это командный байт (0x71 = попытка разблокировать);
затем отправляются 5 цифр введённого кода;
наконец, последний байт меняется в зависимости от кода, похоже, это кастомная контрольная сумма (Checksum, строка чисел и букв, используемая для уникальной идентификации).
Вот данные:
Байт команды |
Пробный код |
Контрольная сумма |
0x71 |
11111 |
0x76 |
0x71 |
22222 |
0x7B |
0x71 |
12345 |
0x80 |
Мы видим, что контрольная сумма равна байту команды, к которому добавили каждый байт кода.
Теперь у нас есть вся информация, необходимая для автоматизации этого процесса с помощью короткой функции Arduino.
void send_command(int command, int a, int b, int c, int d, int e) {
int checksum = (command + a + b + c + d + e);
// Wake-up signal shape
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delayMicroseconds(2750);
digitalWrite(pin, HIGH);
delayMicroseconds(200);
// Data
Serial.begin(4800);
Serial.write(0x0);
Serial.write(command);
Serial.write(a);
Serial.write(b);
Serial.write(c);
Serial.write(d);
Serial.write(e);
Serial.write(checksum);
Serial.end();
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
}
Но даже если каждый вариант кода можно попробовать очень быстро, в сейфе есть защита от брутфорса. Поэтому я пытаюсь зафиксировать сигнал во время изменения кода, чтобы увидеть, что добавляется.
Чтобы изменить код:
Нажмите кнопку «P».
Введите заводской код.
Введите новый код.
Когда мы смотрим на сигнал:
Некоторые странные кастомные формы отправляются во время нажатия «P».
Плата клавиатуры отправляет заводской код с командным байтом 0x74.
Чип внутри отвечает, действителен заводской код или нет (заводской код печатается в руководстве, генерируется случайным образом и не может быть изменен)
Клавиатура отправляет новый код с командным байтом 0x75
Я также фиксирую обмен сигналами во время загрузки, так что теперь мы можем сопоставить некоторые функции:
Байт команды |
Функция |
Предоставленный код |
0x71 |
Попытка разблокировки |
Код, чтобы попробовать |
0x74 |
Попытка инициировать изменение кода |
Заводской код |
0x75 |
Завершить процесс изменения кода |
Новый код |
0x78 |
Загрузка |
00000 (ноль) |
Но что произойдёт, если вы напрямую пошлёте новый кодовый сигнал, пропустив шаг заводского кода?
...код перезаписывается!!! Таким образом, мы можем сбросить код, не зная об этом.
Теперь мы можем открыть любой электронный сейф Sentry Safe & Master lock за секунду.
Доказательство
В качестве доказательства концепции я создам карманный инструмент.
Возьму микроконтроллер Atmega328, 8бит AVR на 8МГц (без кварца). Залив программу на свою флешку, припаиваю две батарейки CR2032, кнопку и два пина.
Программа просто отправит сигнал сброса, чтобы установить фиктивный код, а затем отправит сигнал разблокировки, чтобы открыть сейф.
И всё это устройство я поместил в ручку! В итоге у меня получился настоящий инструмент для пентеста! (здесь у нас непереводимая игра слов, потому что ручка "pen" стала инструментом для пентеста "pen-test'')
Как это использовать:
Снимите крошечный винт у сейфа.
Прикоснитесь к черному и зеленому проводам двумя кончиками ручки.
Нажмите кнопку.
Сейф открыт!
Демонстрация
Как исправить
Чтобы устранить эту уязвимость, проверьте другой мой репозиторий.
Спасибо за внимание!
Что ещё интересного есть в блоге Cloud4Y
→ Малоизвестный компьютер SWTPC 6800
→ Сделайте Linux похожим на Windows 95
→ Как распечатать цветной механический телевизор на 3D-принтере
→ WD-40: средство, которое может почти всё
→ Quantel Paintbox — устройство, изменившее мир телевизионных передач
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу.
Комментарии (37)
IDDQDesnik
07.06.2022 14:56+11MasterLock? не удивительно. Не советую защищать ничего ценнее использованной туалетной бумаги "замками" данной фирмы.
SergeyMax
07.06.2022 18:42+16Это сейф для хранения оружия дома, предназначен он для ограничения доступа детей, и делает это гораздо надежнее, чем ящик с механическим замком. А взломать его за две секунды можно болгаркой, так что для хранения миллионных драгоценностей он все равно не подходит, даже если бы пинпад был подключен по квантовому каналу передачи данных.
FreeRusland
07.06.2022 21:07+4Зато креативно, значит в тренде)))
Большой цифровой кодовый сейф Master Lock
Если вы хотите защитить свои ценные вещи, такие как наличные деньги,
конфиденциальные документы, электроника, планшеты, чековые книжки,
USB-накопители, изображения или устройства хранения данных, не ищите
дальше. chipdip"не ищите дальше" самое разумное решение при выборе сейфа за 80 тысяч рублей :-D
AgentFire
07.06.2022 16:28+11MasterLock - любимая тема для LPL
DirectoriX
07.06.2022 23:00+9И заголовок у этой статьи такой характерный для LPL… Я надеялся увидеть, как колпачком будут нажимать на кнопку сброса или что-то подобное, а вместо этого не увидел даже ручки как таковой, только корпус от неё. С таким же успехом можно было бы термита в корпус тостера насыпать и расплавить этот сейф к чертям — «Как я уничтожил сейф с помощью тостера»
AlexanderS
07.06.2022 22:11Производителя я уведомил, но ответа от них так и не получил.
В принципе, это всё, что нужно знать об этом производителе сейфов.
ULTRAWEN
08.06.2022 08:13Скорее всего данный бытовой сейф рассчитан на гостиницы/офисы/квартиры где он защищает от мелких воришек, детей и тд. Он точно не рассчитан, что его будет вскрывать высококвалифицированный специалист, а против таких девайсов будут уже другие сейфы с более высокой стоимостью. А так, статья интересная, как технический челлендж норм.
Tarakanator
08.06.2022 11:19я так понимаю при подходящем инструменте этот сейф легко вскрывается ребёнком. Какой высококвалифицированный специалист?
iig
08.06.2022 11:25Не каждый ребенок схватит ардуину и сделает себе отмычку.
Tarakanator
08.06.2022 12:04+2вы думаете незаконопослушные граждане сами себе весь инструмент делают?
Aquahawk
08.06.2022 12:29+4Все подобные сейфы с соленоидами элементарно открываются ударом сверху, пример тут: https://youtu.be/Pe8qQLCO_2c?t=58 с 58 секунды если не сработает.
StanislavHabr
09.06.2022 12:06Когда в моём сели батарейки, а мастер-ключ был давно потерян - я именно так цвой сейф и открыл - сильно хлопнув по нему ладонью сверху.
Pab10
08.06.2022 12:45+12This is the Lockpicking Lawyer, and what I have for you today...
shoguevara
08.06.2022 12:57Тоже про него сразу вспомнил и даже хотел порекомендовать автору скооперироваться с ним
rdo
08.06.2022 12:49-1Ну надо быть снисходительными, механические замки существуют около пятисот лет, а электронные лет пять-десять. Через пару десятилетий научатся делать нормальные электронные замки, без этих детских болячек.
DMGarikk
08.06.2022 15:53а электронные лет пять-десять
у меня очень похожий сейф в офисе стоял в 2009 году, 12 лет назад
судя по всему ничего не поменялось
BiW
08.06.2022 13:49Господа, обсуждающие надежность данного или любого другого сейфа. Любой, абсолютно любой сейф при наличии достаточного количества времени и физического бесконтрольного доступа элементарно вскрывается любым ребенком, который чисто физически сможет удержать УШМ в руках... Поэтому, с точки зрения стойкости ко взлому, все сейфы в данной весовой категории, по факту, идентичны. Вне зависимости от конструкции замка или реакции производителя на письма.
Flat_Earth_Omen
08.06.2022 14:36Ну даже если это всё театр безопасности, то к данному конкретному "артисту" у "Станиславского" возникнет известная реакция... Ну уж можно было постараться вжиться в роль получше, кмк.
Aquahawk
08.06.2022 15:08+2На самом деле не любой. Ну т.е. при наличии бесконечного количества времени и бесконечного количества дисков и болгарок конечно любой, но есть сплавы которые будут ну очень плохо пилиться болгаркой и не факт что ресурса бытовой блогарки в принципе хватит для вскрытия. Речь конечно не про бытовые сейфы. На то у них и существуют классы взломостойкости чтобы как-то классифицировать. Ибо просто факта что любую защиту можно вскрыть ценнсть применения такой защиты к 0 не приходит.
BiW
08.06.2022 16:01+1но есть сплавы которые будут ну очень плохо пилиться болгаркой и не факт что ресурса бытовой блогарки в принципе хватит для вскрытия.
Вообще-то даже титан неплохо режется болгаркой. Главное диски хорошие, от 3М, к примеру, для высокопрочных сталей.
На то у них и существуют классы взломостойкости чтобы как-то классифицировать.
На самом деле там, где хранится что-то действительно ценное, сейф охраняется 24/7, просто потому, что никто не строит иллюзий касательно взломостойкости.
aPiks
08.06.2022 15:26Да как бы любую защиту можно обойти. Смысл защиты в том, чтобы сделать атаку нецелесообразной. Либо слишком долгой, либо слишком дорогой, а в идеале и то и другое. Смысл этого сейфа не в том, чтобы его нельзя было болгаркой распилить за 10 минут, а в том, чтобы дети не нашли оружие дома, или в гостинице положить кошелек внутрь, чтобы случайно зашедшие люди в комнату не забрали. И статья собственно говорит, что с помощью отвертки и маленького устройства сейф можно вскрыть за 2 минуты и без шума, что делает его применение почти бессмысленным.
BiW
08.06.2022 16:40+1Смысл этого сейфа
в том, чтобы дети не нашли оружие дома, или в гостинице положить кошелек внутрь, чтобы случайно зашедшие люди в комнату не забрали.
И статья собственно говорит, что с помощью отвертки и маленького устройства сейф можно вскрыть за 2 минуты и без шума, что делает его применение почти бессмысленным.
А статья вам не говорит, что создание данного устройства заняло отнюдь не 2 минуты? У меня оружейный сейф вообще на почтовые замочки закрывается - от детей вполне хватает...
aPiks
08.06.2022 16:46+1Вы это устройство создаёте не в гостинице, а дома. Условно говоря, вы останавливаетесь в гостинице, замечаете палёный сейф, а в следующий раз забираете у уборщицы мастер ключ и гуляете по всем комнатам, пока отдыхающие валяются на пляже.
staticmain
А у этого сейчас вот так легко снимается голова замка и дает возможность тыкать в себя щупами?
dvserg
Да там видимо пластиковые защелки - свернуть пару минут. Наверное производитель больше надеялся на недоступность внутреннего контроллера.
DrPass
Даже если бы легко не снималась, в такой конструкции можно и стамеской пинпад сковырнуть, чтобы до проводов добраться.
Aleksandr-JS-Developer
... Тем более, что вся начинка (которая "принимает решения") в голове. По-хорошему, в голове нужно делать только ввод/вывод, а обработка уже внутри. Это как поставить сервер в гараж к хакеру и потом удивляться, что сервер неправильно шлёт сетевые запросы. Причём, хакеру даже не нужно вмешиваться в начинку сервера.
AKudinov
Вроде же, решение принимается на контроллере соленоида, который внутри двери стоит. "Голова" только коды нажатых клавиш отсылает.
DrPass
Ну как бы собственно «принятие решений», открывать или нет — там в правильном месте, в контроллере прямо на соленоиде. Но вот проверку старого пароля перед записью нового они почему-то сделали на пинпаде. Наверное, думали «это же надо протокол обмена усложнять, сразу отправлять и старый, и новый код в одном пакете, и ответ обрабатывать. Да ну нафиг, все равно никто не полезет проверять»
garageman
Разобрал ради интереса аналогичный китайский сейф. Снаружи только клавиатура 4х4, внутрь уходит шлейф на 8. Только кнопки.
EGiGoka
Так это же MasterLock, от них меньшего и ждать не приходится