История о том, как не надо делать авторизацию, особенно в важных для жизни и имущества сферах, таких как, например управление охранной сигнализацией через приложение с телефона.
Небольшое предисловие
Всё началось с того, что я построил дом, а дом без охранной сигнализации в наших реалиях существовать конечно может, но ничего мало-мальски ценного там оставить будет нельзя (печальные случаи соседей тому подтверждение). Пока делалась отделка внутри и снаружи постановка и снятие с охраны ключиком не вызывала никаких неудобств.
В доме есть гараж, ворота открываются с пультика и соответственно туда ставится машина. Если дом стоит под охраной, то открытие с пультика вызывает сработку "тревоги" на ворота и через 2-3 минуты приезд серьёзных ребят. Чтоб этого не было, нужно сначала снять охрану (открыть тамбур, приложить ключик, закрыть тамбур, опять сесть в машину) и потом уже открывать ворота. И как-то эта процедура немного напрягает, особенно зимой, да и вообще как-то теряется вся "магия".
Конечно можно хитро сделать, чтоб открытие ворот снимало и сигнализацию, но до этого я ещё не добрался.
Зато прознал, что у нашего охранного агентства есть чудо приложение "Мобильная клавиатура Феникс". Приложение не именно их, но с ним они работают. С его помощью можно с телефона управлять сигнализацией, что уже более-менее возвращает радость от пользования всем этим.
А теперь сама история
Чтоб подключить управление охраной с приложения нужно приехать в офис охранного агентства, найти нужного инженера, заплатить за "настройку" в кассу 400 рублей и тебе будет выдана учётка, которая вбивается в настройки на телефоне и вуа-ля, можно рулить охраной как хочешь, получать пуш-уведомления и не знать горя.
Всё бы ничего, но при регистрации тебе выдаётся логин в виде трёх букв, например abb (инициалы), а пароль делается из четырёх последних цифр номера телефона (как сказал инженер — чтоб не забывали), то есть например 0808. Немного опешив от услышанного, спросил можно ли пароль задать другой, сказали что можно, но только цифры. Ну ок, задал себе нужный пароль и удалился тестировать как всё работает.
В голове тем временем уже созрела идея — а не попробовать ли...
Берём айфон подключаем его к маку, запускаем: rvictl -s iPhone_UDID
, цепляемся к новому интерфейсу через Wireshark и глядим, как работает и что шлёт наше приложение. Можно брать и другие девайсы/инструменты, но у меня такие.
Работает оно, оказывается, через wamp протокол — это по сути почти тот же вебсокет. Естественно ничего не шифруется и можно посмотреть, как именно шлются запросы и собственно их повторить.
Теперь пытаемся воспроизвести полученные запросы. Всё это для быстроты тестов можно поставить расширение для хрома типа "Web Socket Client" и пробовать там.
Убедившись, что всё работает именно так как ожидалось, быстренько пишем клиента например на node.
Подмечаем, что АПИ нам отвечает разными сообщениями когда юзер не найден вообще и когда пароль неверный. Это ускорит процесс.
Наш клиент будет довольно тупой, но тем не менее эффективный. Клиент перебирает все логины состоящие из 3-х букв. Если логин существует — стартует перебор пароля по нему, если нет — переходим к следующему. Пароль же перебирается в диапазоне от 0000 до 9999.
Запускаем всё это и ждём. Логины перебрались довольно быстро (минут 10), получилось около 150 штук (сервисом не так чтоб много пользуются). Пароль к каждому логину находится примерно за 8 минут. Никаких ограничений на проверку в АПИ нет. Причём можно долбить многопоточно.
Пароли подбирались в 100% случаях. При успешном подборе пароля АПИ выплёвывает такую информацию как: ФИО владельца, адреса (объектов может быть множество), некие токены (видимо для отправки пушей), ид сессии и так далее.
Авторизовавшись, можно соответственно снять с охраны весь объект. Объекты сами по себе попадались довольно отдалённые от города. Попадись эта информация в руки "плохих парней", то вскрытие, как бы охраняемого объекта, прошла бы безо всяких проблем, а потом спокойно можно было бы поставить под охрану и никто ничего бы не заметил.
Осознав, что и я сам являюсь клиентом этой конторы — стало немного не по себе.
Радует одно, видимо какой-то всё-таки мониторинг у компании есть или может случайно заметили, но через некоторое время приложение перестало принимать пароли, и предложило обратиться в офис.
В итоге всем поменяли логины и сделали нормальные пароли. Протокол, правда, как был нешифрованный, так и остался, но уже хоть что-то.
К чему это всё? Может кому-то после этого захочется сделать свою систему немного побезопаснее, а кто-то, кто пользуется аналогичным сервисом со схожими паролями посмотрит на это с другой стороны и попросит принять меры. Такими вот нехитрыми действиями немного повысится уровень безопасности.
Я специально не привожу тут названий и максимально обезличил все данные, дабы тот, кто узнает себя — сделал выводы :)
P.S. Данная статья носит исключительно информационный характер, описанные здесь проблемы на момент публикации уже не актуальны — компания приняла меры.