Magento 2 / Braintree的梳理攻击

问题描述

我正试图抵御Magento 2商店的刷卡攻击。

攻击者手动创建了一个购物车,并能够从中将重复的请求发送到Braintree和我的商店以测试信用卡号。我们的安全措施可以快速检测到何时从单个IP地址发生此行为,但在攻击被散布时却没有那么有效。

令人惊讶的是,Magento 2允许请求来自多个IP地址,即使它们引用了单个会话和购物车ID(请注意:验证REMOTE_ADDR,HTTP_VIA,HTTP_X_FORWARDED_FOR和HTTP_USER_AGENT的安全设置都已启用)。我试图引起Magento对这个问题的注意。但是与此同时,我正在尝试寻找解决方法。

看看下面的日志。如您所见,这些请求来自不同的IP地址,但它们引用相同的购物车ID(在这种情况下为oq2xk8h2h3ghvjrii93o)。我想创建一种机制来跟踪用于每个购物车ID的IP地址,并检测单个购物车ID的IP地址是否更改。如果发生此类更改,则将禁止用于购物车的IP地址以及任何尝试使用相同购物车ID的后续IP地址。

我们已经到位:Cloudflare(免费),fail2ban,具有OWASP规则的mod_security。我们可以利用这些。

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地址,购物车ID和时间戳保存在单独的文件中。然后生成一个单独的日志文件,其中仅包含我要禁止的IP地址,然后使用fail2ban读取该日志文件并执行其余操作。

我已经能够在fail2ban中创建自定义过滤器/监狱/行动,我现在面临的主要挑战是“监视”原始服务器日志,然后创建不良IP地址的自定义日志。

谢谢您的帮助!

解决方法

您可能想看看我的fail2ban示例Here

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监视日志文件,因此不需要单独的监视程序。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...