ru:https://highload.today/blogs/zaderzhka-dazhe-v-dolyu-sekundy-mozhet-stoit-neskolkih-tysyach-dollarov-kak-sozdat-sistemu-antifroda-dlya-platezhnogo-servisa/ ua:https://highload.today/uk/blogs/zaderzhka-dazhe-v-dolyu-sekundy-mozhet-stoit-neskolkih-tysyach-dollarov-kak-sozdat-sistemu-antifroda-dlya-platezhnogo-servisa/
logo
Back-end      20/05/2021

Как сделать так, чтобы у вас и ваших клиентов не украли деньги: антифрод для онлайн-платежей

Арсений Андреев BLOG

backend-разработчик в Solid

Привет! Меня зовут Арсений Андреев, я backend-разработчик в Solid — финтех-компании, которая помогает бизнесам принимать онлайн-платежи по всему миру. Также наша платформа обеспечивает их максимальную конверсию при минимальных рисках, используя дополнительные сервисы: антифрод, систему по предотвращению чарджбэков (принудительный возврат платежа), сервис подписок и многие другие.

Прежде чем перейти к техническим деталям, хочу объяснить, что такое антифрод и почему он необходим.

Фрод (fraud) — это мошеннические операции с данными банковской карты пользователя, в нашем случае, в интернете. Система антифрода позволяет обнаружить и предотвратить рисковые операции по картам, которые пытаются провести злоумышленники. Рост электронной коммерции сопровождается и ростом числа мошеннических операций, поэтому для компаний, которые принимают онлайн-платежи, система антифрода очень важна.

В Solid мы ежемесячно проводим миллионы транзакций, и качественная система антифрода — один из наших главных приоритетов.

Почему антифрод — неотъемлемая часть продукта

Мы занимаемся комплексной разработкой инструментов для онлайн-оплат, где один из ключевых инструментов — платежный шлюз. Он позволяет автоматизировать процесс приема платежей в интернете, а антифрод — его неотъемлемая часть.

Помимо предотвращения рисковых операций, система антифрода автоматически анализирует транзакции, минимизирует связанные с фродом расходы и помогает сохранить высокий уровень конверсии.

Риски и проблемы, которые решает антифрод

Ответственность за финансовые риски несет продавец, так как он получает средства от клиента. Могут возникнуть финансовые или репутационные потери и у платежного шлюза, если злоумышленник получит к нему доступ. Поэтому в первую очередь система антифрода служит для минимизации рисков, связанных с кражей денег реального владельца карты.

Основные показатели, на которые мы хотим влиять с помощью системы антифрода:

  • уменьшение количества возвратов;
  • уменьшение количества алертов (сообщений от банков об обращениях владельцев карт);
  • Курс Project Manager від Powercode academy.
    Онлайн-курс Project Manager. З нуля за 3,5 місяці до нової позиції Без знання коду, англійської та стресу.
    Зарееструватися
  • уменьшение количества чарджбэков;
  • поддержка полноты и точности на высшем уровне, где полнота — процент выявленных мошенников, а точность — процент верно выявленных мошенников.

Итак, главная задача антифрода — минимизация рисков с сохранением высокого уровня конверсии платежей.

Требования к системам антифрода

Цель системы — выявить аномальные транзакции и принять решение о дальнейшем проведении таких платежей.

После проверки антифродом платежный шлюз должен получить четкую установку, что делать:

  • провести транзакцию;
  • отправить транзакцию на дополнительную проверку в банк-эмитент;
  • заблокировать транзакцию.

Для этого антифрод должен обладать такой информацией:

Онлайн-курс "Лідогенерація у B2B" від Laba.
Де шукати нових клієнтів, щоб збільшити дохід компанії та які інструменти лідогенерації застосовувати? Розбираємо покроково та комплексно.
Дізнатись більше про курс
  • данными об аккаунтах антифрода;
  • историческими данными о платежах;
  • конфигурационными данными для различных проверок.

Одна из главных целей в реализации антифрода — автоматизация процессов риск-менеджмента. Важно предоставить управляющим системой полноценный инструмент, который позволял бы решать повседневные задачи. Речь идет не только о конфигурации, но и о возможности проверки этой системы на корректность работы. Реализация такого функционала могла бы «объяснить» результат проверки антифрода.

Система антифрода должна соответствовать многим требованиям, чтобы решать задачи риск-менеджмента.

Среди них можно выделить:

  • скорость проверки платежа — в 99% случаев она должна длиться не более 0,2 секунды;
  • возможность обработки большого потока данных;
  • динамическую настройку проверок на основе любых параметров, которые получает антифрод от платежного шлюза;
  • Курс Power Skills For Tech від Enlgish4IT.
    Зменшіть кількість непорозумінь на робочому місці та станьте більш ефективним у спілкуванні в мультикультурній команді. Отримайте знижку 10% за промокодом ITCENG.
    Реєстрація на курс
  • удобную инфраструктуру как для разработчиков, поддерживающих систему, так и для операторов, которые настраивают, проверяют систему и обучают модели.

Система антифрода критически важна. Ее остановка может привести к росту риск-показателей, например, увеличению процента чарджбэков. Как следствие, ваша компания попадет в программу мониторинга международной платежной системы. А это спровоцирует штрафы и санкции против платежного провайдера.

Скорость ответа антифрода — один из главных факторов его эффективности, поскольку проверка осуществляется в момент проведения платежа. Поэтому наш сервис написан на Go — этот язык позволяет распараллелить операции-проверки, необходимые для предоставления заключения платежному шлюзу.

Время проверки платежа. Источник: Solid

Как создать антифрод — пример Solid

Мы используем PostgreSQL в качестве базы для хранения конфигурационных данных, а Elastic — для сохранения информации о платежах.

Этапы проверки платежа. Источник: Solid

В систему антифрода входят такие этапы проверки:

  • по включающему/исключающему списку;
  • по набору динамических правил, которые настраивает оператор системы;
  • по скору, полученному от ML-системы, которая работает с моделями;
  • по скору, полученному с помощью стороннего сервиса.
  • Курс Розмовної англійської від Englishdom.
    Після цього курсу ви зможете спілкуватись з іноземцями і цікаво розкажете про себе.
    Приєднатися

Чтобы определить судьбу транзакции, платежному шлюзу необходим однозначный результат:

  • Reject — заблокировать платеж;
  • Pass — пропустить платеж;
  • Force 3D — отправить пользователя на идентификацию;
  • Review — необходима мануальная проверка оператором системы или клиентом.

Коротко рассмотрим каждый из этапов.

Проверка по включающему/исключающему списку

Это первый этап, потому что он наименее ресурсозатратный. Списки хранятся в базе данных (БД) и могут включать разные поля — например, идентификатор карты.

Поскольку у этого этапа проверки самый простой функционал, доступ к нему есть не только у операторов системы, но и у пользователей клиента и других систем мониторинга. Можно сказать, что проверка по включающему/исключающему списку — базовый инструмент для блокировки пользователей.

Списки хранятся в таблице с такими полями:

Воркшоп "PR + AI: Рисерч, Креатив, Контент" від Skvot.
Навчіться адаптувати потенціал АІ під задачі піарника. Корисні тулзи, яким можна делегувати рутину, генерувати свіжі ідеї для контенту і піар-стратегій.
Дізнатись більше
  • key — например, Card ID;
  • value — значение Card ID;
  • expire at — необходимость вносить значения на время, например, до перевыпуска карты.

Несложным SQL-запросом мы проверяем, есть ли совпадение по одному из параметров платежа. Важный момент — если получаем Reject, то следующие проверки уже не производятся.

Проверка по набору динамических правил

Пример динамических правил для проверки платежа:

  • использование большого количества карт с одного IP за определенный период времени;
  • использование одной карты из нескольких IP/имейлов/аккаунтов за определенный период;
  • большое количество неудачных попыток за определенный период;
  • наличие возвратного платежа или большого количества возвратов за определенный период.
  • Основи Web дизайну від Ithillel.
    Цей онлайн-курс з основ веб-дизайну дозволить вам опанувати мистецтво створення ефективних та привабливих інтерфейсів для вебсайтів і застосунків. Ви оволодієте ключовими принципами UX/UI дизайну, створюватимете дизайн-макети та прототипи, розроблятимете адаптивні інтерфейси для різних пристроїв, готуючись до професійної кар'єри в галузі веб-дизайну.
    Дізнатися більше

Этот функционал мы реализовали с помощью агрегационных функций Elasticsearch. Все правила по аккаунту, хранящиеся в БД, собираются в один elastic-запрос — JSON-объект. В результате получаем «решение» по каждому из правил. Далее в каждом правиле проверяем значение, полученное из запроса, и формируем список решений (pass, reject и т.п.).

У оператора в арсенале есть набор доступных полей для агрегации:

  • Amount
  • Email
  • Payment IP
  • Country by Payment IP
  • Payment Status
  • Card ID
  • Card Bin
  • Бізнес англійська від Englishdom.
    Тут навчають за методикою Кембриджу, завдяки якій англійську вивчили понад 1 мільярд людей. Саме вона використовується в найкращих навчальних закладах світу, і саме за нею створені курси.
    Інформація про курс
  • Card Brand
  • Card Type
  • Card Holder Name

Операторы сравнения: «in», «not in», «>», «<», «=», «>=», «<=», «!=».

Агрегационные функции:

  • Count
  • Unique Count
  • Average
  • Sum
  • Онлайн-курс "Чистий код та патерни проєктування" від robot_dreams.
    Прискорюйте й спрощуйте процес розробки.Під менторством лектора з 15-річним досвідом ви навчитеся застосовувати 20+ шаблонів, опануєте рефакторинг і принципи чистого коду.
    Детальніше
  • Length

Таким образом, можно привести несколько примеров настроенных правил:

  1. Если страны банка, выпустившего карту, нет в списке тех, с которыми работает клиент — заблокировать.
  2. Если количество неуспешных платежей за время Y более X — заблокировать.
  3. Если сумма платежа больше, чем X, — отправить на 3D Secure верификацию.
  4. Если длина имейла более X — заблокировать.

Оператор системы может настроить любое правило.

Здесь важно выбрать оптимальный вариант хранения по индексам в elastic. Есть возможность хранить данные за короткий период (день) или за продолжительный (месяц).

Оба варианта имеют как плюсы, так и минусы. При хранении в «больших» индексах мы используем больше ресурсов при обновлении данных, что впоследствии негативно влияет на время выполнения поискового запроса. «Маленькие» индексы плохи тем, что при поиске за продолжительный период нужно тратить время на их объединение.

Онлайн-курс "Проджект-менеджер в ІТ" від Laba.
Навчіться запускати, контролювати й успішно реалізовувати ІТ-проєкти. Пройти весь шлях проєктного управління на реальному кейсі вам допоможе PMD із 19-річним досвідом в ІТ.
Детальніше про курс

Наша команда выбрала оба варианта. Для выполнения правил, которые используют короткий период (3–5 дней), мы сохраняем данные по дням. Для правил за большой период (более 5 дней) сохраняем данные в одном индексе за продолжительное время. У нас большинство правил настроено на короткий период — 1–3 дня, поэтому такой подход устраивает.

В результате имеем такую ​​разбивку по индексам:

  • payment-{clientId} — данные за продолжительное время;
  • payment-{clientId}-y-m-d — данные за 3–5 дней.

Также стоит учесть, что частая реиндексация значительно влияет на время выполнения поискового запроса. Пример запроса: подсчитать среднюю сумму успешных платежей в USD за последние три часа. Подсчет происходит по нескольким параметрам, идентифицирующим пользователя, например: ID аккаунта, card_id, имейл.

{
  "aggs": {
    "avgUsdSum": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "payment_status": ":order_status"
              }
            },
            {
              "range": {
                "created_at": {
                  "gte": "now-180m",
                  "format": "yyyy-MM-dd"
                }
              }
            }
          ]
        }
      },
      "aggs": {
        "avgUsd": {
          "avg": {
            "field": "amount_usd"
          }
        }
      }
    }
  },
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "email": ":customer_email"
                }
              },
              {
                "term": {
                  "card_id": ":card_id"
                }
              },
              {
                "term": {
                  "customer_account_id": ":customer_account_id"
                }
              }
            ]
          }
        }

Конфигурационные данные хранятся в базе данных. С помощью кода записи в БД, правила трансформируются в запросы (примеры такого запроса приведены выше). После получения данных в ответ на запрос, мы их парсим и сравниваем с заданными в правилах значениями.

Проверка по скору, полученному от ML-системы

В данном случае применяем реализованный аналитиками сервис, который использует модели, построенные на исторических данных клиента. Скор — это число от -100 до 100. Оператор добавляет маппинг в настройках аккаунта, например:

  • От -100 до -75 — Reject.
  • От -75 до -25 — Force 3d.
  • Онлайн-курс Pyton від Powercode academy.
    Опануйте PYTHON з нуля та майте проект у своєму портфоліо вже через 4 місяця.
    Приєднатися
  • От -25 до 25 — Review.
  • От 25 до 100 — Pass.

В этот сервис отправляются данные, которые:

  • пришли от платежного шлюза;
  • являются результатами динамических правил;
  • являются агрегационными данными, которые аналитик может вытянуть сам с помощью elastic-запроса.

Сервис, разработанный на моделях с историческими данными, заслуживает отдельного внимания. Его мы опишем в отдельной статье, поскольку настройка такой модели — сложный процесс, зависящий от многих факторов. Для каждого бизнеса мы формируем уникальную модель, потому что поведение пользователей чаще всего очень разное.

Проверка по скору с помощью стороннего сервиса

Интеграция со сторонним сервисом — это последний этап проверки. Сервис возвращает не только скор, но и другие параметры, которые можно использовать в конфигурации правил. У каждого сервиса есть свой флоу, но в целом они похожи. Необходимо передать определенное количество параметров, которые помогут этому сервису определить скор.

Одна из проблем реализации антифрода как отдельной системы — наполнение базы данных этой системы платежами. Для получения корректных проверок необходимо держать информацию в актуальном состоянии, в первую очередь — статус платежа.

Психологічний профорієнтаційний тест для IT-фахівців від Ithillel.
Пройдіть психологічний профорієнтаційний тест для IT-фахівців щоб дізнатися ваші сильні сторони, вподобання і інтереси і з'ясувати, яка IT-спеціальність вам підходить.
Пройти тест

Например, злоумышленник проверяет большое количество карточных данных за короткий отрезок времени. В таком случае данные о платеже должны обновляться мгновенно, поскольку задержка даже в 1 секунду может стоить нескольких возвратных платежей.

В нашем антифроде обновление данных происходит сразу же после изменения статуса платежа. Таким образом, данные в системе всегда в актуальном состоянии.

Еще интересный момент по поводу корректности работы антифрода. Технически все проверки могут функционировать правильно, но как узнать: заблокированный плательщик был действительно злоумышленником или просто имеет проблемы с вводом своих данных?

В первом случае можно ориентироваться на процент чарджбэков и возвратов. Во втором случае, если пользователь не обратится в службу поддержки (а это бывает очень редко — скорее всего, он просто воспользуется другим сервисом), то мы не узнаем, что блокирование сработало неправильно. Поэтому важна не только исправная техническая система, но и ее конфигурация и поддержка.

Результаты

Нам удалось реализовать систему антифрода, которую можно гибко настраивать под различные типы бизнесов. Для каждого из них есть ряд уникальных параметров, например, размер среднего чека, особенности товаров и услуг. Важно учитывать специфические для бизнеса параметры, поскольку это позволяет не только держать конверсию на высоком уровне, но и предупредить финансовые потери, связанные с фродом.

Платежный шлюз здорово упрощает жизнь своим клиентам, поскольку им не надо реализовывать сложную систему, которая помимо разработки требует еще и поддержки.

Наша система антифрода дает возможность посмотреть причины блокирования платежа прямо в админке, а также воспользоваться включающими/исключающими списками. При необходимости клиент может предоставить специфические для его бизнеса настройки антифрода, и они будут сконфигурированы риск-менеджментом в данной системе.

Важно, что разработчик исключается из процессов риск-менеджмента. То есть, система предоставляет полноценный функционал по управлению, настройке и мониторингу ее работы. Это позволяет аналитикам выполнять свои повседневные задачи без помощи программистов.

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Онлайн-курс "Створення особистого бренду" від Skvot.
Прокачайте особистий бренд для підсилення власного бізнесу, підвищення продажів та впізнаваність на ринку.
Дізнатись більше про програму курсу і досвід лектора

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров марта

PHP Developer в ScrumLaunch
Всего просмотровВсего просмотров
2434
#1
Всего просмотровВсего просмотров
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсего просмотров
113
#2
Всего просмотровВсего просмотров
113
Career Consultant в GoIT
Всего просмотровВсего просмотров
95
#3
Всего просмотровВсего просмотров
95
CEO & Founder в Trustee
Всего просмотровВсего просмотров
94
#4
Всего просмотровВсего просмотров
94
Рейтинг блогеров

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: