«Без разочарований не ощутишь вкус победы» © Мемфис Реймс
История началась банально. В каком то ролике на YouTube рассказывали про каршеринг. С демонстрацией функции «приветствия», когда вам не удается найти автомобиль на большой парковке. У меня тут же возникла мысль проверить — а не смогу ли я активировать функцию приветствия на абсолютно все автомобили этой компании?! Ну весело же. Крупный российский город. И в какой то момент тысячи автомобилей по команде начинают сигналить и моргать фарами. Почти как в фильме «Крепкий Орешек 4».
В результате все получилось куда интереснее. Ведь фактически я нашел возможность угона любого автомобиля.
Внутри приложения для пользователей все стандартно. Загрузка ресурсов, splash-screen и форма входа в приложение.
Но тут моя идея по манипулированию всеми автомобилями разбилась о камни. С недавних пор я живу не в России и в приложение нельзя войти без российского номера телефона. Приложение не поддерживает международный формат номеров. А о виртуальных номерах я почему-то не вспомнил.
От отчаяния я догадался ввести +7 000 0000000. И удивлению не было предела, когда появился следующий шаг с предложением ввести код из sms. Еще запустился обратный отсчет на 60 секунд, намекающий о том что срок жизни пароля очень короткий. И что нужно торопиться.
Как так? Какое sms если номер вообще не может быть реальным?!
Эта ситуация заставила меня сделать несколько выводов:
- приложение не проверяет формат телефона.
- вероятно, формат номера можно будет подбросить другой, просто перехватив запрос и изменив его на лету
- приложение, не зависимо от того какой телефон получен, отправляет команду на генерацию пароля пользователю.
Т.е где то в базе нас ждет пароль. Который был присвоен нашему красивому номеру +7 000 0000000.
Вообще такой метод аутентификации пользователя принято называть OTP (One Time Password).
Т.е пароль, который нам «присвоили», должен быть использован только один раз.
Вроде бы тупик. Можно выключать ноутбук, телефон и ложиться спать. Но меня не отпускала мысль — а что если подобрать этот пароль? Ведь у нас всего 10000 возможных вариантов! Успешность этой затеи была сомнительная. Можно было словить капчу, блокировку, в конце концов, я своим подбором мог спровоцировать единичный вызов «успешного пароля». И в формате OTP, повторное использование этого пароля не допустимо. Что же говорить о таймере обратного отсчета, который уже давно закончился.
Подходящий момент для этой гифки.
Ловлю запрос ввода пароля. Делаю пароль — динамическим параметром. Устанавливаю диапазон возможных значений для перебора. Со скрещенными пальцами запускаю атаку на подбор. В процессе подобных атак я никогда не пытаюсь маскировать свои действия. Не подменяю ip адреса. Не пользуюсь VPN. Не ставлю маленькое количество потоков. Мне это не надо. У меня нет мотивации чтоб меня не заметили.
Через 60 секунд на глаза попадается ответ сервера. Найден успешный пароль.
Но получится ли использовать его повторно? Ведь это One Time Password.
В приложении таймер обратного отсчета уже грустно подсветил поле ввода пароля серым цветом. Намекая тем самым на то что я опоздал.
Ставлю курсор в поле с паролем. Стираю ранее веденный, ввожу успешно подобранный пароль и нажимаю кнопочку входа.
И тут очередная проблема. Приложение говорит что мы какой-то «не подтвержденный пользователь». И выбрасывает через пару секунд на главную страницу.
Или мне не удалось реализовать все задуманное. Или мой пользователь реально не прошел какую то модерацию, подтверждение документов и все такое…
В такой ситуации оставалось только два варианта. Либо искать друзей, которые пользуются этим сервисом. Либо искать активных пользователей, которые засветили на просторах интернета свои мобильные номера.
Ну как вы понимаете друзей в столь позднее время, я даже если бы захотел, не нашел.
По-этому я пошел искать пользователей. Это было самое легкое. В социалочках нашел официальные сообщество каршеринга. Посмотрел комментарии последних публикаций. Открыл страницы нескольких пользователей. На 3 или 4 профиле одного из пользователей удалось обнаружить опубликованный мобильный номер.
Взял этот номер и пошел проверять теорию о взломе.
Через пару минут я уже бродил по приложению и изучал его возможности. У пользователя оказалась огромная история поездок. Несколько десятков тысяч бонусных денег, которые можно использовать для поездок. Ну и несколько карт для оплаты, которые были привязаны к профилю данного пользователя.
По изучав ролики на youtube и обзоры, стало понятно, что при аренде автомобиля от данного пользователя мне не придется вводить какие то дополнительные комбинации цифр защищающие автомобиль от угона через взломанный аккаунт.
Т.е у меня была абсолютно открытая возможность взять любой автомобиль в аренду без предъявления требуемых документов. При этом взять автомобиль и расплатиться от лица взломанного пользователя. Оплачивать возможные штрафы от ГИБДД пришлось бы так же нашей жертве.
К этому моменту у меня просто пропал сон. Безусловно, то что я получил доступ к учетной записи пользователя — это не правильно. Но благодаря этому мне удалось обнаружить опасную логическую уязвимость.
Несколькими секундами позже я уже писал сообщения управляющим каршеринга и руководителю ИТ департамента. Найти их было не сложно.
Люди адекватно отреагировали на ситуацию. Без возражений приняли во внимание все проблемы, которые я обнаружил. И приступили к исправлению. Через 1-2 недели проблемы были устранены. Мне даже был предложен автомобиль в бесплатное пользование на несколько дней. Но я предпочел не усложнять себе жизнь чужим авто в чужом городе (в период командировки).
Из всей этой истории нужно сделать следующие выводы:
- Не стоит пренебрегать защитой от Brute-force.
- Проверяйте формат номера телефона если он используется в качестве логина.
- После однократного использования OTP не должен работать.
- Срок жизни OTP должен быть коротким, даже если его не использовали.
- В качестве логина не стоит использовать номер телефона.
- Лучше делать дополнительную авторизацию пользователя при аренде автомобиля через PIN-код (код, который устанавливает сам пользователь при регистрации). Этот PIN-код пользователь должен вводить для того чтобы разблокировать автомобиль.
Такие дела.
Комментарии (43)
Apatic
24.11.2017 12:18Судя по скриншоту, Белка кар? Один из лидеров рынка.
Что же творится у менее крупных каршерингов, которых нынче в Москве уже более 10 штук…Valya-roller Автор
24.11.2017 12:26«Штирлиц как никогда был близок к провалу» ;)
На самом деле я бегло пробежался по нескольким из них. А то мало ли беду навлеку. Одни товарищи даже были уведомлены о неосторожной работе с данными. Но последствий после моего сообщения не последовало, к сожалению… :(Apatic
24.11.2017 12:42А что за каршеринг, который не ответил? Я почти во всех зарегистрирован, хотелось бы понять, какой из них для меня опасен :)
Можно в ЛС.Valya-roller Автор
24.11.2017 13:35Я абсолютно все не смотрел. Так что за все не ручаюсь. Серьезного для пользователей там ничего не было. А вот для самого каршеринга опасность есть. Но они решили что поживут видимо с этим.
Всю эту ситуацию надо воспринимать как напоминание о том что никто не в безопасности. Завтра найдут зеродэй и даже те кто были в безопасности перестанут там находится. Я склонен пользоваться подобными вещами с осторожностью. И не привязывать карты на которых внушительные суммы могут быть. Для интернета у меня всегда отдельная карта.
vism
24.11.2017 12:42Читая такие истории, я думаю о том, как хорошо что я программист и знаю как сильно говнокодят такие системы и забивают на безопасность.
Вернее конечно не забивают, когда проект вырос и стал огромный, даже стараются что-то сделать. Но до того как он вырастет там такое накодят и потом оставят, что страшно.
Поэтому не ввожу данные карт и стараюсь использовать всякие сервисы по минимуму.
Насмотрелся я на кухню этих Федеральных компаний изнутри. Снаружи конфетка, а внутри такие же говнокодеры как и везде)
Как-то был на собеседовании в подпроект для Госуслуг(ДЛЯ ГОСУСЛУГ!!!), где используются соответственно все данные.
Цитирую слова нанимателя «Проект работает, но нужно дорабатывать и рефакторить код. Код конечно там очень легаси, проект начинали писать 7 лет назад, но потом он перерос в данный. и уже 2 года работает как часть госуслуг. Нам туда очень нужен человек и ближайшие пол года вы будете там работать один.»
Тоесть не зная меня, и что я могу натворить с безопасностью, как минимум, меня на пол года хотели поставить на работающий проект где происходить обработка таких данных:)
Ну нафиг веб сервисы))
Akuma
24.11.2017 12:53А я так надеялся, что все закончится массовым бибиканьем :(
Valya-roller Автор
24.11.2017 13:37Вроде бы мы с этой компанией договорились посмотреть их сервисы по подробнее. Так что может удасться еще по бибикать :)
RusXP
24.11.2017 12:53а можно поподробнее, каким образом подбор был реализован. Разве трафик между клиентом и сервером не зашифрован?
Valya-roller Автор
24.11.2017 13:40В этом плане все там окей. MITM в чистом виде реализовать не получится. Но мне никто руки не держал, и я на свой телефон смог поставить сертификат и проснифить трафик через свой проксик. Ну а дальше нужный запрос на отправку пароля был просто реализован через брутфорс.
meequz
24.11.2017 13:36Я так понял, посигналить всеми машинами вы не попытались?
NTG24
24.11.2017 13:40Пошел удалился из каршеринга…
Valya-roller Автор
24.11.2017 13:44не нужно поспешных решений принимать. используйте просто отдельную карту для «интернетов» и вероятно все будет хорошо.
youtu.be/KopWe2ZpVQI
Посмотрев это вы же не перестанете пользоваться банками?
Vitaly83vvp
24.11.2017 13:45Люди адекватно отреагировали на ситуацию. Без возражений приняли во внимание все проблемы, которые я обнаружил. И приступили к исправлению. Через 1-2 недели проблемы были устранены.
Да, действительно, адекватные. Потому что читал о многих случаях, когда в аналогичных ситуациях на тех кто нашёл уязвимости, заводят уголовные дела. Да, и срок исправления небольшой.Valya-roller Автор
24.11.2017 13:46Это действительно так. Иной раз так стремно на контакт выходить если что-то случайно обнаружил… Каждый раз лотерея как твои замечания воспримут.
Filex
24.11.2017 15:51Почитайте пользовательские соглашения каршерингов, там вообще жуть.
Некоторые из них пишут, что будут передавать ваши личные данные любым 3м лицам. А это ваши сканы паспорта, прав, селфи с паспортом.
У «белки» отношении договора нормально, но через пару дней, после того, как я там зарегистрировался, на мой номер позвонили из некой «службы безопасности Сбербанка», назвали мое полное ФИО и просили назвать паспортные данные для «авторизации». Хотя в сбере я незарегистрирован, свой номер телефона в интернете не свечу.
Конечно, может просто совпадение, но какое-то странное.Viacheslav01
24.11.2017 19:10СБ Сбербанка не будет звонить, просто так, для какой то авторизации. Так что я бы насторожился, о том, кто то и зачем звонил.
Filex
27.11.2017 10:02Это были не СБ Сбера, а мошенники, которые хотели что-то от меня получить. Начали с попытки выяснить мои паспортные данные.
devop-su
27.11.2017 09:20Как минимум все эти компании не дают работать, не привязав предварительно карту.
Так что карту "для работы с мудаками" обязательно приходится иметь на такие случаи.
Filex
27.11.2017 10:03Да, я завел себе виртуальную карту и все платежи в интернете провожу через нее. На основной карте заблокировал платежи через интернет.
MacIn
24.11.2017 17:38Кто знает без гугления или помнит, откуда взялась фраза «угнать за 60 секунд»? (Точнее, «угнана за 60 секунд»).
F0iL
24.11.2017 18:09Фильм с Николасом Кейджем же!
firej
24.11.2017 19:14до фильма с Кейджем был оригинальный фильм 74 года
MacIn
24.11.2017 20:01Вооот, уже теплее. Так, 74 год — Gone in 60 seconds. Почему? Кстати, оригинал на порядок интереснее в плане погони. В 74 году бОльшая часть фильма — погоня за Мустангом, в новом слишком много лирики.
firej
24.11.2017 20:02потому что надо фильм посмотреть?
я так понимаю вы знаете ответ.MacIn
25.11.2017 05:27Да, просто забавный факт. Без просмотра оригинала название не понять.
В оригинале была сцена, где машину угоняют с парковки около автодрома. И там было табло-бегущая строка, на которой был текст «Lock your car, or it may be gone in 60 seconds».
123
24.11.2017 18:44Атмосферный пост. Только у меня в голове при чтении звучало «Bring Sally up and bring Sally down»? ) www.youtube.com/watch?v=hJkm5R40Hj0
Psychosynthesis
25.11.2017 04:32Стоп, я немного не понял про OTP. Это что, получается вы смогли ввести успешно подобранный пароль к одному юзеру, в окно ввода пароля к другому юзеру, да ещё и после того как на первом окне закончился срок ввода?
Tomatos
25.11.2017 10:05На сколько я понял, нет — брутфорсился тот же пользователь (номер телефона со страницы в vk), просто по одному паролю получилось авторизоваться, как минимум, дважды и уже после того, как в форме авторизации написали, что пароль просрочен.
Valya-roller Автор
25.11.2017 12:56Да Tomatos, вы все верно поняли. Ну это и из выводов в конце статьи можно понять :)
granade18
28.11.2017 02:08Где технические детали ???
А вообще уязвимость не серьезная. Все авто застрахованны по полной, компания купит новый. Клиент штрафы не будет оплачивать, так как штрафы приходят на собственника автомобиля.infolex
28.11.2017 10:11Ага, вообще не серьезная, особенно когда кто-то наездит по вашей карте тысяч на 200. На счет штрафов: не исключено, что у каршеринга в оферте оговорен этот момент. По времени штрафа не трудно выяснить, кто был за рулем авто.
dikansky
28.11.2017 19:53приходят штрафы — операторы каршеринга прекрасно умеют сопоставлять время, место и ID клиента
ДелиМобиль, кстати, теперь успевает в срок, достаточный, чтобы оплатить 50%
sshmakov
Что-то мне эта статья (в сочетании с профессией автора) напомнила историю про собеседование идеального тестировщика.
Valya-roller Автор
У меня примерно так и получилось с моим последним сотрудничеством на одну крупную фирму. После репорта о критической уязвимости, они очень охотно присылают теперь предложения протестировать то или иное приложение.