Массовое ограбление покупателей Fix-Price
Где то в начале лета с бонусной карты моего друга были сняты все бонусы в размере ~800р, для студента это огромные деньги которые он копил целый год, и мне стало интересно, как злоумышленникам удалось это сделать. Зайдя в личный кабинет мне было предложено скачать электронную версию карты в виде картинки на телефон. И вот тут то я осознал всю масштабность трагедии! Начнём расследование с самого начала:
Первый фактор: Слабые пароли.
Уязвимость, которая не поддаётся закрытию — сам человек. Я связался с продавцом взломанных аккаунтов и он прислал мне пароли на которые чаще всего попадались аккаунты:
1) Номер телефона без восьмёрки/семёрки
2) Номер телефона с 8, 7, +7
3) 123456
4) 123456789
5) 1234567890
6) qwerty
7) fixprice
8) 111111
9) 222222
10) 12345678
11) 1234567
12) 666666
13) 123123
Пароли отсортированы по популярности. Зайдя на сайт, можно было узнать персональные данные, такие как: почту, номер телефона, дату рождения, ФИО и адрес.
Второй фактор: Проверка номера через сайт
Где взять базу номеров для брута? Вот тут магазин очень сильно облегчил злоумышленникам работу. При авторизации отправлялся всего 1 POST запрос на URL следующего вида:
bonus.fix-price/login
В ответ приходил коротенький JSON который содержал исчерпывающий ответ:
1) Номер не зарегистрирован
2) Почта не зарегистрирована
3) Не верный пароль
4) Внутренняя ошибка сервера
До сих пор сайт помогает проверить номер выдавая ответ «клиент не найден», так же можно было проверить номер на другом поддомене:
konkurs.fix-price/profile/checkmail?email=&phone=
Он сейчас не работает, но раньше там была каптча, обойти которую не составляло проблем — можно было ввести её один раз и посылать кучу запросов. Таким способом, за сутки, злоумышленник перебирал ВСЕ диапазоны номеров небольшого города.
Третий фактор: Бруть без проблем
Сайт никак не блокировал брут с одного IP. Можно было поставить программу на взломанный компьютер и пить чифир не заботясь о прокси. Опять же, за день можно было перебрутить все логины которые нашли на этапе выше.
Кстати, администрацию интересуют масштабы:
Думаю и читателей тоже заинтересуют. После моего вопроса о колличестве аккаунтов, злоумышленник который занимался их продажей назвал цифру: 30 000. 30 тысяч аккаунтов было взломано всего за 3 месяца!
Общий баланс этих аккаунтов, по его словам, составляет порядка полумиллиона рублей.
Так же была собрана не хилая база номеров размером в более чем миллион записей! На каждый город примерно по 50 тысяч. Возможно, злоумышленник будет продавать эту базу спамерам (или уже продал).
Четвёртый фактор: генерируй штрихкоды сам
Сгенерировать штрихкод? Нет ничего проще:
hash:=sha256(2041 + номер карты)
GET bonus.fix-price/assets/fixprice/images/barcode/%hash%.png
Таким образом можно было украсть чужую карту просто зная её номер! Круто правда? Магазин заботиться о безопасности своих покупателей!
Пятый фактор: Сотрудники магазина
Я просто оставлю это здесь:
На сколько правдивы данные истории я не знаю, просто мимо проходил и заскринил.
События последних 5-ти месяцев
Как только я узнал о проблеме — сразу написал им, но за всё лето так и не получил ответа. Хотел позвонить, но зная старую мудрость «делай добро и беги» я не стал этого делать.
Где то в сентябре они прикрутили облако через которое шёл весь трафик, но сделали это так криво, что можно было брутить через другой поддомен, чем собственно и пользовались злоумышленники.
Примерно месяц назад какой то пользователь выложил огромное количество аккаунтов в продажу, первая половина школьников мигом ринулись запускать IDE и клепать свои бруты, а вторая половина устремилась в магазин обналичивать купленные за 10–15% от баланса карты. В итоге сайт лежал постоянно. И вот спустя неделю было принято такое решение:
А потом такое:
Заключение
Пострадали в первую очередь покупатели, телефоны всех кто регистрировался на сайте в руках у нехорошего человека, магазин мало того, что не вернул деньги, так вообще отключил всю бонусную систему! Хочу напомнить, что балансы начали пропадать как минимум в начале лета! В их группе вконтакте пользователи дико негодуют по этому поводу и обвиняют магазин во всех смертных грехах, да и если подумать, то правильно делают, если бы магазин отреагировал на моё письмо сразу же — можно было избежать такого развития событий.