Риски, связанные с информационной безопасностью, все больше встречаются в реальных проектах сферы ритейла. О том, где скрываются уязвимости в бизнес-логике маркетплейсов, интернет-магазинов и мобильных приложений в крупном ритейле, я расскажу в этой статье.
Для того чтобы защитить бизнес от киберрисков, первое, что нужно сделать, – это определить потенциальных нарушителей, их навыки и способы мошенничества, иными словами, смоделировать угрозу. Например, один из рисков – это внешний нарушитель, который не имеет учетных данных пользователя, но может получить доступ к промокодам. Он может перебирать промокоды (брутфорс) или брать их из базы данных при наличии технической уязвимости. Это одна из угроз. атакующий может проникнуть в ИТ-инфраструктуру и будет рассматриваться как внутренний злоумышленник – так же, как если один из сотрудников захочет "слить" конфиденциальную информацию, – это вторая и третья модель нарушителя.
После того как гипотетические угрозы смоделированы, можно начать проверять, насколько они применимы на практике и думать о мерах защиты.
Простые технические уязвимости может обнаружить сканер в автоматическом режиме, а сложные проблемы, в том числе в бизнес-логике, смогут выявить и устранить только компетентные специалисты в ручном тестировании.
Злоумышленник может составить большой список 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
Рисунки предоставлены автором