Уязвимости в системах лояльности и процессах покупки
Александр Герасимов, 27/12/23
Риски, связанные с информационной безопасностью, все больше встречаются в реальных проектах сферы ритейла. О том, где скрываются уязвимости в бизнес-логике маркетплейсов, интернет-магазинов и мобильных приложений в крупном ритейле, я расскажу в этой статье.
Для того чтобы защитить бизнес от киберрисков, первое, что нужно сделать, – это определить потенциальных нарушителей, их навыки и способы мошенничества, иными словами, смоделировать угрозу. Например, один из рисков – это внешний нарушитель, который не имеет учетных данных пользователя, но может получить доступ к промокодам. Он может перебирать промокоды (брутфорс) или брать их из базы данных при наличии технической уязвимости. Это одна из угроз. атакующий может проникнуть в ИТ-инфраструктуру и будет рассматриваться как внутренний злоумышленник – так же, как если один из сотрудников захочет "слить" конфиденциальную информацию, – это вторая и третья модель нарушителя.
После того как гипотетические угрозы смоделированы, можно начать проверять, насколько они применимы на практике и думать о мерах защиты.
Простые технические уязвимости может обнаружить сканер в автоматическом режиме, а сложные проблемы, в том числе в бизнес-логике, смогут выявить и устранить только компетентные специалисты в ручном тестировании.
Уязвимости в сценарии покупки
Авторизация по почте и паролю
Злоумышленник может составить большой список e-mail-адресов и пробовать перебирать их через форму "забыл пароль". Если почта, которую он ввел, существует, сайт ответит, что "письмо с восстановлением пароля отправлено на почту". Если нет – "пользователь с таким e-mail не существует". Таким образом, злоумышленник поймет, какие адреса верные, и составит список пользователей, которые есть в системе. Дальше он сможет атаковать их фишинговыми рассылками или перебором паролей для их аккаунтов.
Если злоумышленник соберет клиентскую базу и будет использовать в своих целях, то для бизнеса это репутационный ущерб. В худшем случае он подберет пароль и украдет аккаунты пользователей, в лучшем – отправит запрос на восстановление пароля 10 тыс. раз и клиентам придет 10 тыс. нежелательных сообщений, которые забьют ящик.
Для защиты от подобной атаки следует использовать общие слова при восстановлении пароля, например: "Если пользователь существует, ему будет направлено письмо с восстановлением пароля". От множественных запросов к сервису помогают CAPTCHA-тесты или блокировка аккаунтов по различным показателям: user agent, IP-адресам или нескольким факторам.
Этапы онлайн-покупок
Алгоритм злоумышленника для формы "забыл пароль"
Слабая парольная политика
Злоумышленник будет пробовать перебирать самые простые пароли для e-mail-адресов, которые ему удалось собрать. Есть целые базы простых паролей, которые чаще всего используют люди, вроде QWERTY или 123456. Подбор происходит в автоматическом режиме и не требует усилий злоумышленника.
Угроза – захват пользовательских аккаунтов со слабым паролем. Для противодействия успешному подбору следует усилить парольную политику и не разрешать людям устанавливать пароли меньше девяти символов, обязательно использовать верхний регистр, спецсимволы и цифры. А чтобы блокировать возможность перебора, нужны средства защиты от множественных запросов.
Авторизация по СМС
Обычно для того, чтобы авторизоваться на сайте, пользователь просто вводит номер телефона, получает код подтверждения по СМС и проходит в личный кабинет. Если нет механизма защиты от множественных запросов, то злоумышленник может отправить запрос на СМС, например, 200 раз и клиенту придет 200 сообщений.
Если веб-сервис использует внешнего СМС-провайдера, то одно сообщение стоит от 75 копеек до 2 руб., в зависимости от тарифа. Обычно провайдер для крупных ритейлеров позволяет отправлять до 3 тыс. СМС/с.На отправку 200 запросов компания тратит 400 руб./с. Если атака длится час, то злоумышленник сожжет почти 1,5 млн руб. с баланса компании.
Самый распространенный метод защиты от этого – троттлинг, когда на один фиксированный телефонный номер стоит запрет отправки больше двух сообщений сразу. Третье и все последующие СМС будут отправляться все с большей и большей задержкой. Если тайм-аут между сообщениями достигнет часа, злоумышленник не сможет нанести значительный ущерб компании и клиентам. Помогут и уже известные механизмы защиты блокировки множественных запросов, настроенные по совокупности критериев. Не менее важно внедрить постоянный мониторинг всевозможных аномалий.
Резкое увеличение количества СМС должно незамедлительно создавать alert в службе безопасности, где специалисты зарегистрируют и разберут инцидент.
Подбор пароля
СМС-атаки
Безлимитный ввод кода
Неограниченное количество попыток ввода кода подтверждения также является уязвимостью и встречается довольно часто. Злоумышленник сможет перебирать цифры до бесконечности, пока не подберет нужные. Это делается автоматически и очень быстро, особенно для 4-значных кодов, где это всего 10 тыс. комбинаций. Для автоматического перебора значений и 6-значный код – нетрудная задача. Если злоумышленнику в руки попала база с номерами клиентов, остальное для него не проблема.
Для противодействия подобной угрозе важно ограничивать попытки ввода кода до трех раз, увеличить длину кода с четырех до шести цифр. в качестве общей рекомендации – внедрить мониторинг аномалий.
"Бессмертный" код
Уязвимость возникает, даже когда количество попыток ввода кода фиксированно, но время его жизни большое или вообще не ограничено.
Перебор в этом случае действует наоборот. Злоумышленник фиксирует код подтверждения и пытается подобрать к нему подходящий номер телефона, опять же автоматически. У СМС-кодов небольшая энтропия – небольшое количество вариантов, поэтому такой способ проникновения вполне рабочий.
В таком случае необходимо уменьшить жизнь проверочного кода до 30 с. и увеличить длину кода.
Чужой товар в корзине
Существует технология защиты от так называемых атак на подделку запроса. Это происходит с помощью уникальных токенов. Токен – это уникальное значение для каждого пользователя и для каждого товара. Когда пользователь добавляет товар в корзину, вместе с запросом на добавление в корзину он отправляет этот уникальный токен.
Если пользователь залогинен в интернет-магазине со своего браузера, но продолжает параллельно серфить в интернете и заходить на разные сайты, то в какой-то момент он может зайти на сайт злоумышленника. На этом сайте может быть специальный код Java Script, который незаметно для пользователя отправит в магазин запрос на добавление своего товара в корзину.
Для магазина это выглядит так, будто пользователь сам добавляет товар. Многие люди забывают проверить корзину, а кто-то просто невнимателен, поэтому просто заказывают ненужный товар, а плохие продавцы на этом зарабатывают.
При наличии токена злоумышленник не знает уникального значения и не может выполнять запрос к системе, а без него запрос злоумышленника воспринимается системой как легитимный. Атака сложна в реализации и не слишком распространена, однако эта уязвимость присутствует.
Для защиты нужно внедрить CSRF-токен и установить атрибуты Same-Site, Secure, HTTPOnly для Cookies. Совет неактуален при использовании API, где вместо сессии используются токены в заголовках. Токен не может автоматически подхватиться, а сессия может.
Безлимитный ввод кода
"Бессмертный" код как угроза
Преднамеренное разглашение
Еще одна не слишком критичная, но очень распространенная уязвимость – передача чувствительных данных в адресной строке. Разработчики могут некорректно реализовать процесс, например, чек-аута (сохранения контактных данных или биллинга), и данные на сервер будут передаваться не в скрытом теле запроса, а в GET-параметрах прямо в адресной строке наверху. Администратор, который имеет доступ к журналу логирования, может таким образом увидеть все телефонные номера клиентов, ФИО или адреса. При наличии технической уязвимости, которая позволяет читать файлы на сервере, злоумышленник может просмотреть журнал логирования и получить конфиденциальные данные клиентов, а затем развить вектор своей атаки разными способами.
Устранить такую проблему очень легко. Нужно перенести параметры из GET в тело запроса, где оно, как правило, не логируется.
Гуляющий идентификатор
После оплаты пользователь получает от сайта номер своего заказа. Часто бывает, что в логике работы магазина не предусмотрена проверка принадлежности номера заказа определенному пользователю. В таком случае можно изменить номер заказа и получить чужой. Злоумышленник для начала проводит тестовую покупку и получает идентификатор своего заказа. Так он понимает, как этот идентификатор формируется. Затем он отправляет запрос на получение данных о покупке, но уже с другим идентификатором, и получает информацию о заказе другого пользователя. Условно его настоящий запрос выглядит так: /get_order?id=1111, где id – это номер заказа. Если его изменить: /get_order?id=1234, то можно получить чужой заказ.
Обязательно нужно организовать логику работы магазина таким образом, чтобы сопоставлять идентификатор заказа с пользователем. В случае несоответствия – не отдавать информацию.
Саботаж логистики
На многих сайтах есть возможность выбора оплаты "при получении", а значит, злоумышленника ничего не останавливает от того, чтобы создать неограниченное количество заказов. Он может регистрировать случайные контактные данные и несуществующие адреса. Далее заказ попадает в CRM-систему, затем отгружается в логистику и отдается курьерам. Если ненастоящих заказов будет 1 тыс., то это нанесет логистике компании колоссальный ущерб. Особенно опасно, если в магазине есть возможность оформлять заказы как "гость" без регистрации на сайте.
Для защиты логистики от подобных атак нужно рассматривать каждый конкретный бизнес-процесс в отдельности. Но совет, одинаково актуальный для всех, – дополнительное подтверждение заказа. Это может быть звонок, СМС или e-mail. Можно дополнительно рассмотреть лимит и блокировку множества заказов с одного IP-адреса.
Возможность присвоения чужой покупки
Кража чужой карты
Уязвимости в системе лояльности
Кража чужой карты
У карт лояльности, на которых копятся баллы, чаще всего есть фиксированная часть номера в начале и изменяемая часть в конце. Злоумышленник может получить пару карт и посмотреть на разницу между ними, затем зайти в личный кабинет и начать перебирать ту изменяемую часть для активации карты. Так, он может активировать чью-то реальную карту, где много бонусов, на свой аккаунт и использовать баллы, например, такого покупателя, который давно копит баллы, но не активирует карту.
Такие инциденты несут угрозу репутации компании. Чтобы защититься, нужно привязывать карты лояльности к аккаунтам пользователей, отслеживать аномалии – множественные запросы на привязку карты к аккаунту и блокировать пользователей, которые создают множественные запросы.
Мошенничество с промокодами
Частая уязвимость – слабая энтропия промокодов, когда их генерируют очень понятным способом. Например: первое значение – это слово, второе – размер скидки или год. Злоумышленник может собрать список уже использованных ранее промокодов и понять способ их генерации. Начав перебирать разные варианты на сайте, он может наткнуться на существующий в системе код, который еще неизвестен клиентам, и использовать его.
Для защиты лучше генерировать случайные значения для промокодов, внедрить мониторинговые системы, которые помогут выявить использование кодов раньше начала акции.
Скупка акционных товаров ботами
Во время акции магазины выкладывают товары с большой скидкой на ограниченное время. Злоумышленники пишут боты, которые скупают все акционные товары в автоматическом режиме за считаные секунды. Затем они продают товары после акции уже с большой наценкой.
Особенно это актуально для дорогой техники и смартфонов. Методы борьбы с такими угрозами разнятся в зависимости от площадки и специфики бизнеса. Например, можно делать поведенческий анализ пользователя и блокировать его на время, зафиксировав отклонения, либо просить подтвердить действия введением дополнительной CAPCHA или кода из СМС.
Почему аналитики не могут определить мошенников
Как мы видим, существует много стандартных моделей поведения нарушителя и немало способов противодействия. Почему же часто аналитики пропускают мошеннический действия?
- Отсутствует модель угроз и модель нарушителя. Сотрудники компании не представляют достаточно хорошо, кто нарушитель и какие угрозы он может реализовать.
- Отсутствует мониторинг и поведенческий анализ пользователя. Нет журналов событий, по которым можно отследить действия злоумышленника.
- Уязвимости в бизнес-логике сложно определить, поскольку эксплуатация бизнес-логики выглядит как обычное поведение пользователя. Эксплуатация технических уязвимостей, как правило, сразу видна по аномальным запросам, в которых присутствуют векторы атак.
- Отсутствие активных средств защиты. Без них определить атаку крайне сложно.
- Отсутствие собственных правил для оповещения об аномалиях, например резком росте количества отправляемых СМС.
Что делать?
- Моделировать угрозы.
- Убедиться, что необходимые события собираются и могут быть проанализированы.
- Убедиться, что есть оповещение при аномалиях, например резком росте количества отправляемых запросов к СМС-провайдеру.
- Проводить тестирование на проникновение и анализ защищенности с помощью внешних специалистов два – четыре раза в год.
Опубликовано в журнале "Системы безопасности" № 5/2023
Все статьи журнала "Системы безопасности"
доступны для скачивания в iMag >>
Фото: ru.freepik.com
Рисунки предоставлены автором