问题描述
我正试图抵御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监视日志文件,因此不需要单独的监视程序。