Кардерная атака на Magento 2 / Braintree

Я пытаюсь отразить кардинговые атаки на магазин Magento 2.

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

Удивительно, но Magento 2 позволяет отправлять запросы с нескольких IP-адресов, даже если они относятся к одному сеансу и идентификатору корзины (Примечание: все настройки безопасности для проверки REMOTE_ADDR, HTTP_VIA, HTTP_X_FORWARDED_FOR и HTTP_USER_AGENT включены). Я пытаюсь привлечь внимание Magento к этой проблеме. Но пока я пытаюсь найти обходной путь.

Взгляните на журнал ниже. Как видите, это запросы, поступающие с разных IP-адресов, но ссылающиеся на один и тот же идентификатор корзины (в данном случае oq2xk8h2h3ghvjrii93o). Я хотел бы создать механизм, который отслеживает IP-адрес, используемый для каждого идентификатора корзины покупок, и определяет, есть ли изменение IP-адреса для отдельного идентификатора корзины. Если такое изменение происходит, IP-адреса, используемые для корзины покупок, блокируются, а также любые последующие IP-адреса, которые пытаются использовать тот же идентификатор корзины покупок.

У нас уже есть: Cloudflare (бесплатно), fail2ban, mod_security с правилами OWASP. Мы можем использовать и из них.

209.127.191.180, 173.245.52.210, 127.0.0.1 - - [06/Aug/2020:06:05:48 -0400] foobar.com "POST /rest/foobar_view/V1/guest-carts/oq2xk8h2h3ghvjrii93o/payment-information HTTP/1.0" 400 689 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
185.164.56.185, 162.158.63.7, 127.0.0.1 - - [06/Aug/2020:06:06:01 -0400] foobar.com "POST /rest/foobar_view/V1/guest-carts/oq2xk8h2h3ghvjrii93o/payment-information HTTP/1.0" 400 689 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
45.95.99.226, 162.158.78.135, 127.0.0.1 - - [06/Aug/2020:06:06:15 -0400] foobar.com "POST /rest/foobar_view/V1/guest-carts/oq2xk8h2h3ghvjrii93o/payment-information HTTP/1.0" 400 689 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
193.8.127.117, 162.158.62.120, 127.0.0.1 - - [06/Aug/2020:06:06:27 -0400] foobar.com "POST /rest/foobar_view/V1/guest-carts/oq2xk8h2h3ghvjrii93o/payment-information HTTP/1.0" 400 689 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"

Моя первоначальная мысль состояла в том, чтобы просмотреть файл журнала и всякий раз, когда есть запрос, соответствующий шаблону, сохранять IP-адрес, идентификатор корзины покупок и отметку времени в отдельном файле. Затем создайте отдельный файл журнала, который будет содержать только IP-адреса, которые я хочу заблокировать, а затем используйте fail2ban, чтобы прочитать этот файл журнала и сделать все остальное.

Я смог создать пользовательский фильтр/тюрьму/действие в fail2ban, основная проблема, с которой я сейчас столкнулся, — это часть просмотра исходного журнала сервера, а затем создание моего собственного журнала плохих IP-адресов.

Спасибо за помощь!


person Ruben Reyes    schedule 10.08.2020    source источник
comment
Привет, Рубен. У нас точно такие же проблемы, как вы описали выше с клиентом. Вы когда-нибудь находили решение для этого? Спасибо   -  person Thomas Harding    schedule 02.10.2020


Ответы (1)


Вы можете увидеть мой пример fail2ban Здесь:

vi /etc/fail2ban/filter.d/restapi.conf

[INCLUDES]
before = restapi.conf
[Definition]
failregex = ^ - .* "POST.HTTP." 400 .*$

vi /etc/fail2ban/filter.d/restapi.conf

[restapi]
enabled = true
port = http,https
filter = restapi
logpath = /var/www/vhosts/yourdomain.com/logs/access_ssl_log
bantime = 86400
findtime = 1200
maxretry = 5

service fail2ban restart

Короче говоря, fail2ban просматривает файл журнала, поэтому нет необходимости в отдельном наблюдателе.

person CD Brian    schedule 05.11.2020