1:我从审计公司工程师的 GitHub 里找漏洞

最重要的一点就是关注他们的github活动。有一部分项目方如果他们的项目代码被赏金猎人发现了问题。不一定会是他们自己的dev来修复这些漏洞。还有可能是其他安全公司的安全研究员。
通过这些收集,第一时间获取最重要且真实的漏洞。

例如:hexens-kasper似乎是hexens的安全技术人员。
根据他的Github pr记录,可以找到曾经对Solidity-RLP代码库做出了修改:
![[Becoming-a-True-SmartContract-Hunter/file-20251212133508850.png]]
这似乎和某种漏洞修复相关。

如何去收集到这些人员:
1.关注官方仓库,去查看他们的Public People(但实际情况是大多数公司都不会公开他们,如果公开也是非常不全的)
那么可以去查看他们仓库的pr贡献,最多的那部分很大概率就是公司的内部人员。

2:很多攻击,来自被遗忘的老合约

并不是所有的真实攻击漏洞信号都会被捕捉到。
如果你不能及时跟踪到新的合约被攻击(我们后面会讲到)
那么你可以对过去几年内没有合约过的有余额的老合约进行监控,定期检查余额是否变化。
并且随着GAS费用的降低,导致非常多的曾经不可能受到攻击的合约变成了可能
你以为是很大的工程?Dune就可以做到这一点(Bigquery也可以查,都特别慢。Dune建议修改下时间,可能会Timeout)

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
31
32
33
WITH latest_balances AS (
SELECT address, balance
FROM tokens_ethereum.balances_daily
WHERE day = (SELECT MAX(day) FROM tokens_ethereum.balances_daily)
AND token_symbol = 'ETH'
AND balance > 1
),
contract_candidates AS (
SELECT b.address, b.balance
FROM latest_balances b
JOIN ethereum.creation_traces ct ON b.address = ct.address
),
active_addresses AS (
SELECT DISTINCT "to" AS address
FROM ethereum.transactions
WHERE block_time > NOW() - INTERVAL '4' YEAR
-- 避免全表扫描
AND "to" IN (SELECT address FROM contract_candidates)

UNION ALL

-- 可选:因为合约较少作为发起方
SELECT DISTINCT "from" AS address
FROM ethereum.transactions
WHERE block_time > NOW() - INTERVAL '2' YEAR
AND "from" IN (SELECT address FROM contract_candidates)
)
SELECT c.address, c.balance
FROM contract_candidates c
LEFT JOIN active_addresses a ON c.address = a.address
WHERE a.address IS NULL
ORDER BY c.balance DESC
LIMIT 100
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
WITH current_balances AS (
-- 1. 获取今天的余额
SELECT address, balance
FROM tokens_ethereum.balances_daily
WHERE day = (SELECT MAX(day) FROM tokens_ethereum.balances_daily)
AND token_symbol = 'ETH'
AND balance > 0.1
),
past_balances AS (
SELECT address, balance
FROM tokens_ethereum.balances_daily
WHERE day = CAST(NOW() - INTERVAL '2' YEAR AS DATE)
AND token_symbol = 'ETH'
),
potential_zombies AS (
SELECT c.address, c.balance
FROM current_balances c
JOIN past_balances p ON c.address = p.address
WHERE c.balance = p.balance
)
SELECT p.address, p.balance
FROM potential_zombies p
JOIN ethereum.creation_traces ct ON p.address = ct.address
ORDER BY p.balance DESC
LIMIT 100

写个脚本去定期查看余额变化,你会发现非常多有趣的事件。
https://x.com/zmtO21/status/1995858979344286117

3:真实攻击发生后,我的第一步在做什么

当发生新的攻击事件的时候。你可以通过查询特定的选择器或者内部逻辑。
或者查找相关仓库是否有Fork项目。

这里以简单的单笔tx攻击为例子,首先进行一次模拟,本地或者直接用工具模拟都可以:
https://app.blocksec.com/explorer/tx/eth/0xa5fde4dd2d625d56e4a66134fca44f14c6622c25a355312477e25dac4e3cad2c
通过查看攻击者地址,接受者地址为0xd5dba6C0CC1c4Bde0a32EC8934dA49735ccc01CF。
通过cast读取rawdata:
cast tx 0xa5fde4dd2d625d56e4a66134fca44f14c6622c25a355312477e25dac4e3cad2c –rpc-url $ETH_RPC | grep “input”
![[Becoming-a-True-SmartContract-Hunter/file-20251213142444247.png]]

将d5dba6C0CC1c4Bde0a32EC8934dA49735ccc01CF替换为自己的地址。然后重放,可以发现成功模拟:
![[Becoming-a-True-SmartContract-Hunter/file-20251213142322863.png]]

如果这笔攻击结束,你要做的是:查找类似合约并进行白帽行动。个人推荐使用cast send(建议放到sh执行)

Glider,Dune,bigquery甚至区块浏览器的查找相似合约都是一个不错的查找工具。

4:跟踪攻击者,是我用过最便宜的威胁情报

尝试将攻击中的其他攻击者都收集起来,定期监控其活动是有效的方式,他们是链上最聪明的那批人。
例如Spoke中:
https://bscscan.com/tokentxns?a=0xdf4ffda22270c12d0b5b3788f1669d709476111e
合约在第一次经历攻击后又来了不同的攻击者来攻击。
其中有攻击者并没有舍弃钱包,最近依然有攻击活动:
0xf49632e3e0f19935d579a403f637ca75e05e4543。

![[Becoming-a-True-SmartContract-Hunter/file-20251213155858649.png]]
在其他攻击事件中寻找”攻击者”,例如balancer,port3等。
![[Becoming-a-True-SmartContract-Hunter/file-20251214164933506.png]]
同理也可以找一些有标签的白帽bot地址,比如:0xC0ffeEBABE5D496B2DDE509f9fa189C25cF29671,0xFDe0d1575Ed8E06FBf36256bcdfA1F359281455A,
0x5af00b073abb9f88832353bd4c919caaa114c972或者SEAL等救援团队地址。

5:论文和漏洞报告,是被严重低估的数据源

你可以从论文中找到遗漏漏洞的部分。论文的数据集和工具是一个绝佳的材料。
(以下仅仅作为例子参考,实际需要寻找实验合约数据足够大的数据集或维持良好本地个人合约数据集)
https://arxiv.org/abs/2407.07922
https://conf.researchr.org/details/ase-2025/ase-2025-papers/219/ACTaint-Agent-Based-Taint-Analysis-for-Access-Control-Vulnerabilities-in-Smart-Contr
https://github.com/AIS2Lab/DeFiScope
https://github.com/sujeetc/SCRUBD
https://ieeexplore.ieee.org/document/10810462
https://github.com/1052445594/SC_UEE
并且你可以通过研究公开赏金报告,这是一个非常不错的合集:https://solodit.cyfrin.io/
通过上述发现的漏洞去查找Fork合约去尝试发现更多受影响的合约。

6:后续我会持续分享这些内容

这类内容我会持续整理和公开,
包括新的攻击路径、真实案例,以及我在 hunting 过程中的一些判断。

如果你对这些方向感兴趣,可以关注 @vectorbits。
后面也会逐步开源一些我们在用的工具和 agent。

另外,我维护了一个长期更新的 Web3 Security 列表:
https://x.com/i/lists/1832755501790286247