一、简介
说到ETH的转账方式,人们最常用的的就是sendTransaction,但是有一种转账方式经常被人们忽视,这种转账方式不仅在大量转账的时候手续费更低,而且隐蔽性相对sendTransaction来说更高,这种转账方式常常用于脚本批量转账当中,这种转账方法就是以太坊合约内部转账。
二、特点
合约内部转账有以下几种优点
-
手续费低
相对于普通的sendTransaction要求的手续费最少也要21000 GAS,通过合约进行转账仅需2300 GAS。
-
隐蔽性强
普通的sendTransaction的转账数量与目标地址可通过web3中的getTransaction直接查询,但是合约中的内部转账要通过对转账进行debug_traceTransaction才可以进行分析,相对于getTransaction直接获得结果来说,对自动化分析更加困难。
三、分析
伏宸区块链威胁情报平台通过全网交易自动化分析后发现当前以太坊上有6%的ETH转账都是通过智能合约进行的,虽然占比较小,但是其大多数都是用于大量的ETH转账,其对于分析黑色资产的流向来说重要性不言而喻。
近日,伏宸区块链威胁情报平台发现了以下地址有涉嫌黑色资产转移的嫌疑。
0x02CACEb4BFc2669156B2eb3b4d590E7aC10A4E73
该合约在ETHScan上开源了其合约代码,代码如下:
/** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract DistributeETH is Ownable { function distribute(address[] _addrs, uint[] _bals) onlyOwner{ for(uint i = 0; i < _addrs.length; ++i){ if(!_addrs[i].send(_bals[i])) throw; } } function () payable {} }
可以看的出,其合约代码其实很简单,就只有一个主要功能就是合约管理员通过数组来分发合约内的ETH。
在分析时,该合约已经向1800个地址发送了总共204,979.07个ETH
以下是其中一个交易
可以看的出其只支付了0.004251912个ETH就可以向25个地址发送了730.33678个ETH,可见这种转账方式如果用于黑色资金的混淆,将大大增加追踪的难度。
经过进一步分析,发现该地址最大的ETH来源就是
0x6705120db9fb682dec120cdecc8220385d25fc50
该地址向 0x02CACEb4BFc2669156B2eb3b4d590E7aC10A4E73转入了879笔总计181145.6个ETH。
而资金最大来源0x6705120db9fb682dec120cdecc8220385d25fc50的ETH来源于数千个钱包地址不断的转移,而这些钱包地址都是属于通过脚本创建的以试图掩盖其资金的来源,但是经过我们的跟踪,追踪发现资金其实来源于以下几个钱包地址。
地址 | 流出ETH总量 | ETH来源 | 备注 |
---|---|---|---|
0xb18cb7cda7779139b4c660275afa309a600b71bf | 31,813.98 ETH | Kraken交易所 | |
0xEcB979D7294c82d8B07a279f942AAe0ec458b0EF | 1,729.65 ETH | 币安交易所 | |
0x9ae63ee2e8ed29f4a4edb982f918a33c2caf3f98 | 11,370,000 ETH | Poloniex交易所 Bitfinex交易所 Kraken交易所 Bittrex交易所 |
|
0xe4abc54f5a6288b60c18b361442a151fc4911da6 | 30,297.50 ETH | Poloniex交易所 Bittrex交易所 |
总共流出 26,150,000 GNT币 总共流出 25,055 REP币 总共流出48,730,000 ZRX币 总共流出 21,793.17 MKR币 总共流出107,140.00 NMR币 |
0xd9acba6f45c7bed110cf7e86406ba2d295e9cc3a | 774.42 ETH | XRPC 和 ARB ICO | XRPC 和 ARB 的发行者 |
四、结论
可以看得出这个合约背后的主人通过做庄小币种和发行数字货币,并通过ICO和操盘获得大量的ETH后通过脚本或智能合约对ETH进行打散以试图掩盖其操盘的痕迹。
所以安全人员想追踪或分析以太坊上的黑色资金转移,则不应该仅仅关注普通的转账过程,更应注意的重点应该是合约内部转账,因为其天然的手续费低,隐蔽性强成为了滋养黑色资金转移的温床。
原文始发于微信公众号(伏宸区块链安全实验室):智能合约内部转账与一起洗钱案例分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论