Premint恶意代码注入攻击细节分析

攻击细节

打开任意Premint项目页面,可以看到有个cdn.min.js注入到了页面中,看调用栈该js是由boomerang.min.js注入, 目前该s3-redwood-labs-premint-xyz.com域名已经停止解析,无法正常访问了

查询Whois, 该域名在2022-07-16注册于Tucows Domains Inc.

打开virustotal.com 可以看到该域名之前曾解析到CloudFlare

打开源代码可以看到boomerang.min.js 是Premint用到的一个UI库

该js是在s3-redwood-labs.premint.xyz域名下,猜测:

  • 上传文件接口有漏洞可以上传任意文件到任意Path(比较常见的Web漏洞)
  • 黑客拿到了他们这个Amazon S3的权限,从而可以注入恶意代码,
  • 这个第三方库被供应链攻击污染了

boomerang.min.js代码下载下来,前面都是正常的代码,但是末尾有一段经过加密的代码

这段代码负责把代码 s3-redwood-labs-premint-xyz.com/cdn.min.js注入到页面

恶意代码cdn.min.js

根据代码内容,可以看到大致有通过调用dappradar.com的接口来查询用户的NFT资产列表(此前我们也有看恶意网站到通过debank,opensea的API来查询用户资产等)

如果用户持有相关NFT资产:

恶意代码会以Two-step wallet验证的借口,发起setApprovalForAll让用户授权给他们后端接口返回的地址(攻击者一般为了提高封禁成本,基本上会分流并且每个地址控制在200个交易内)

如果用户点了approve,攻击者还会调用监测代码通知自己有人点击了

当如果用户地址没有NFT资产,还会尝试直接发起转移钱包里的ETH的资产请求:

另外这种代码变量名加密成_0xd289 _0x开头的方式,我们曾经在play-otherside.orgthesaudisnfts.xyz这些钓鱼网站也见到过

根据用户资产发起setApprovalForAll或者直接转移ETH,并且阻止用户使用开发者工具debug

如何预防

那么作为普通用户如何预防?现阶段MetaMask对ERC 721的setApprovalForAll的风险提示,远没有ERC20的approve做的好

很多新用户并无法感知到这个行为的风险,但我们作为普通用户看到带approve之类的交易一定要仔细打开授权给相关地址,看看这些地址最近的交易是否异常(比如清一色的safeTransferFrom),避免误授权!

这种攻击和上次Etherscan上Coinzilla利用广告注入恶意的攻击方式挺相似的,那么在技术上有没有可能预防?

理论上如果已知一些恶意js代码的行为和特征:

  • 比如说代码的加密方式
  • 恶意代码关键特征
  • 代码会反debug
  • 会调用opensea, debank, dappradar等API查询用户资产

根据这些恶意代码的行为特征库,那么我们可以尝试在客户端网页发起交易前,检测页面有没有包含已知恶意特征的代码来探测风险?

或者直接更简单一点,对常见的网站设立白名单机制,不是交易类网站发起授权,给到足够的风险提醒等?

接下来我们(Scam Sniffer)也会尝试探索一下如何在客户端来预防此类的攻击发生!

Recent Articles

Related Stories