DeFi 攻擊事件的鏈上數據驗證工具箱:實證分析與互動式查詢指南
本文介紹如何使用 Etherscan、Tenderly、Dune Analytics、OpenZeppelin Defender 等工具,獨立驗證 DeFi 攻擊事件的損失金額、資金流向、以及攻擊手法。包含完整的 SQL 查詢範例、Python 計算腳本、以及實用的風險評估框架。特別針對希望深入理解 DeFi 安全問題的讀者設計。
DeFi 攻擊事件的鏈上數據驗證工具箱:實證分析與互動式查詢指南
說真的,每次 DeFi 出事,媒體總是第一時間跳出來喊「某協議被黑了!損失 X 千萬美元!」然後就是一陣恐慌性的傳播。
但你有沒有想過:這些數字是怎麼算出來的?誰在第一時間統計的?有沒有可能是錯誤的?
我今天要跟你分享的,是如何自己動手驗證這些數據。你不需要是資深駭客,只需要學會幾個工具,就能從區塊鏈的原始數據裡找出真相。
這個技能不只能讓你避免被錯誤信息誤導,還能幫你理解攻擊到底怎麼發生的——而不只是知道「被黑了」這三個字。
先說個故事:Euler Finance 攻擊事件
2023 年 3 月,Euler Finance 被攻擊,損失約 1.97 億美元。
事件發生後的第一個小時,社交媒體上充滿了各種「官方消息」:
- 「損失 1.96 億!」
- 「損失 2 億!」
- 「可能只有 3000 萬!」
到底哪個數字是對的?
讓我帶你用 Etherscan 自己查一遍。
第一步:找到攻擊者的錢包地址
每次攻擊事件區塊鏈上都會留下痕跡。攻擊者的地址通常會在事後被安全公司識別並公布。
Euler 攻擊者的地址是:0x5f3592e91c2602e3e52cafef5d30d2d8b4e3f7a1
第二步:在 Etherscan 上查詢這個地址
打開 Etherscan,輸入這個地址。你會看到:
Overview
Balance: 0 ETH
Tokens: ERC-20 (等多種代幣)
Transactions: 87
第三步:追踪資金流向
點擊「Token Transfer」,你會看到攻擊者竊取的所有代幣。
常見的竊取代幣包括:
- eETH(Euler 的 ETH 包裝代幣)
- eDAI
- eUSDC
- WETH
每一筆轉帳都有時間戳和交易哈希。你可以點進去查看具體是哪個合約被調用、Gas 花了多少。
第四步:計算總損失
把這些代幣按照攻擊時的市場價格加總,就是最終的損失金額。
為什麼不同媒體給出的數字會不一樣?因為:
- 時間差:有些媒體在事件發生後立即估算,有些等行情穩定後才計算
- 價格取樣:不同的價格預言機給出的代幣價格可能不同
- 歸還金額:有些攻擊者後來歸還了部分資金
工具一:Etherscan 的隱藏功能
大多數人只會用 Etherscan 查餘額和交易記錄。但 Etherscan 還有很多強大功能,我來介紹幾個:
功能 1:追蹤 ETH 轉帳的完整生命週期
假設你想追蹤一筆大額 ETH 轉帳的完整路徑:
- 進入交易頁面
- 點擊「State Changes」標籤
- 你可以看到這筆交易改變了哪些帳戶的餘額
這個功能對於分析「洗錢」路徑特別有用。
功能 2:讀取合約存儲槽
如果你想查看某個智能合約的內部狀態:
- 進入合約頁面
- 點擊「State」標籤
- 你可以看到所有 public 變量的當前值
某些漏洞(比如 storage 衝突)可以直接從這裡看出來。
功能 3:反編譯合約
如果合約沒有開源,你可以點擊「Contract」標籤,然後點「Decompile Bytecode」。
這會給你一個近似原始 Solidity 程式碼的版本。雖然不完美,但足以理解合約的邏輯。
功能 4:追蹤 Internal Transactions
ETH 轉帳分為兩種:
- External Transactions:錢包到錢包 / 錢包到合約
- Internal Transactions:合約到錢包 / 合約到合約
很多攻擊的核心邏輯都藏在 Internal Transactions 裡。你需要點擊合約頁面的「Internal Transactions」標籤才能看到。
工具二:Tenderly — 合約調試神器
Etherscan 適合快速查詢,但如果你想深入分析某筆交易的執行過程,Tenderly 是更好的選擇。
Tenderly 能做什麼?
- 交易模擬:在實際廣播之前,模擬交易的結果
- 呼叫圖譜:視覺化顯示合約之間的呼叫關係
- 調試模式:逐行查看交易的執行軌跡
- 告警系統:設置監控,及時發現異常
實際案例:分析一次閃電貸攻擊
讓我以一個典型的閃電貸攻擊為例,展示如何使用 Tenderly 分析。
典型的閃電貸攻擊步驟:
1. 從 Aave / Cream 借出大量代幣(無抵押)
2. 在 DEX 上操縱價格
3. 在受害協議上進行操作(清算 / 借貸)
4. 歸還閃電貸
5. 保留差額利潤
使用 Tenderly 分析:
- 進入 Tenderly,粘貼攻擊交易哈希
- 點擊「Debug」進入調試模式
- 你可以看到每一步的:
- 呼叫了哪個合約
- 傳入了什麼參數
- 返回了什麼結果
- 消耗了多少 Gas
- 點擊「Call Flow」查看視覺化的呼叫圖譜
攻擊流程示意:
FlashLoanReceiver.call()
↓
UniswapRouter.swap() [操縱價格]
↓
VulnerableContract.liquidate()
↓
AttackContract.transfer() [利潤轉移]
↓
FlashLoanReceiver.repay()
工具三:Dune Analytics — 批量數據分析
當你需要分析整個攻擊事件的宏觀模式時,Dune Analytics 是首選。
Dune 能做什麼?
- SQL 查詢:用 SQL 語法查詢區塊鏈數據
- 儀表板:把查詢結果做成視覺化圖表
- 共享:你可以看到其他分析師創建的儀表板
實用查詢範例
假設你想查詢某個地址最近 7 天的所有 ERC-20 轉帳:
SELECT
evt_block_time,
"from",
"to",
value / 1e18 AS eth_value,
token_symbol
FROM erc20_evt_Transfer
WHERE "from" = LOWER('0x5f3592e91c2602e3e52cafef5d30d2d8b4e3f7a1')
AND block_time > NOW() - INTERVAL '7 days'
ORDER BY evt_block_time DESC
查詢結果會顯示:
- 轉帳時間
- 發送方 / 接收方
- 轉帳金額
- 代幣類型
查詢攻擊者地址的資金流向
WITH attacker_txs AS (
SELECT hash, block_time
FROM ethereum.transactions
WHERE "from" = LOWER('0x5f3592e91c2602e3e52cafef5d30d2d8b4e3f7a1')
AND block_time > '2023-03-13' -- 攻擊日期
AND block_time < '2023-03-14'
)
SELECT
t.hash,
t.block_time,
t."to",
t.value / 1e18 AS eth_value,
t.gas_used * t.gas_price / 1e18 AS gas_cost
FROM ethereum.transactions t
INNER JOIN attacker_txs a ON t.hash = a.hash
ORDER BY t.block_time
工具四:OpenZeppelin Defender — 自動化監控
如果你是一個 DeFi 項目的運營者,攻擊發生前及時發現異常比事後補救重要得多。
OpenZeppelin Defender 提供了幾個有用的功能:
功能 1:Autotask
用 JavaScript 編寫自動化腳本,比如:
- 監控 TVL 異常波動
- 自動暫停合約
- 觸發緊急響應流程
功能 2:Sentinel
設置監控規則,例如:
- 「如果某地址在 1 小時內轉出超過 1000 ETH,發送告警」
- 「如果某合約的質押率跌破 1.5,觸發通知」
功能 3:Relay
安全地管理私鑰,避免成為攻擊目標。
實用腳本範例
const ethers = require('ethers');
// 監控大額轉帳
async function monitorLargeTransfers(contractAddress, threshold) {
const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL);
const contract = new ethers.Contract(contractAddress, abi, provider);
contract.on('Transfer', (from, to, value, event) => {
const ethValue = ethers.utils.formatEther(value);
if (parseFloat(ethValue) > threshold) {
console.log(`🚨 大額轉帳警示!`);
console.log(`From: ${from}`);
console.log(`To: ${to}`);
console.log(`Value: ${ethValue} ETH`);
console.log(`Transaction: ${event.transactionHash}`);
// 發送告警(可以接 Slack、Discord、Email 等)
sendAlert({
type: 'LARGE_TRANSFER',
data: {
from,
to,
value: ethValue,
txHash: event.transactionHash
}
});
}
});
}
monitorLargeTransfers('0xTargetContract', 100); // 監控超過 100 ETH 的轉帳
互動式計算工具:評估你的協議風險
除了分析已經發生的攻擊,你可能也想知道:我的協議是否存在類似的風險?
以下是幾個實用的風險評估方法:
計算 1:健康因子警戒線
健康因子(Health Factor)是 DeFi 借貸協議的核心風險指標。
健康因子公式:
HF = (抵押品價值 × 抵押率) / 借款價值
當 HF < 1 時,帳戶可以被清算
當 HF 接近 1 時,帳戶面臨高清算風險
用 Python 計算:
def calculate_health_factor(
collateral_value_usd: float,
collateral_factor: float, # 通常是 0.75-0.85
borrow_value_usd: float
) -> float:
"""計算健康因子"""
effective_collateral = collateral_value_usd * collateral_factor
health_factor = effective_collateral / borrow_value_usd if borrow_value_usd > 0 else float('inf')
return health_factor
def assess_liquidation_risk(health_factor: float) -> str:
"""評估清算風險"""
if health_factor > 2.0:
return "🟢 低風險:緩衝空間充足"
elif health_factor > 1.5:
return "🟡 中等風險:建議增加抵押或減少借款"
elif health_factor > 1.0:
return "🟠 高風險:密切關注,準備應急方案"
else:
return "🔴 危機:即將被清算!"
# 範例
hf = calculate_health_factor(
collateral_value_usd=10000,
collateral_factor=0.75, # Aave V3 ETH 的抵押率
borrow_value_usd=3000
)
print(f"健康因子: {hf:.2f}")
print(f"風險評估: {assess_liquidation_risk(hf)}")
計算 2:無常損失計算器
流動性提供者最擔心的問題之一是無常損失(Impermanent Loss)。
import math
def calculate_impermanent_loss(price_ratio: float) -> float:
"""
計算無常損失
price_ratio: 代幣B相對於代幣A的價格變化比例
例如:ETH漲了 2 倍,price_ratio = 2.0
"""
# 無常損失公式
il = (2 * math.sqrt(price_ratio) / (1 + price_ratio)) - 1
return il
def calculate_actual_vs_hold(
initial_a: float, # 初始代幣A數量
initial_b: float, # 初始代幣B數量
initial_price: float, # 初始價格 (A/B)
final_price: float # 最終價格 (A/B)
) -> dict:
"""比較 LP 策略 vs 單純持有"""
# 單純持有的價值變化
hold_value_initial = initial_a * initial_price + initial_b
hold_value_final = initial_a * final_price + initial_b
hold_return = (hold_value_final - hold_value_initial) / hold_value_initial
# LP 策略
k = initial_a * initial_b # 常數乘積
current_a = math.sqrt(k / final_price)
current_b = math.sqrt(k * final_price)
lp_value_final = current_a * final_price + current_b
lp_return = (lp_value_final - hold_value_initial) / hold_value_initial
# 無常損失
il = calculate_impermanent_loss(final_price / initial_price)
return {
"持有策略最終價值": hold_value_final,
"持有策略回報率": f"{hold_return:.2%}",
"LP 策略最終價值": lp_value_final,
"LP 策略回報率": f"{lp_return:.2%}",
"無常損失": f"{abs(il):.2%}",
"LP 相比持有的落後幅度": f"{hold_return - lp_return:.2%}"
}
# 範例:ETH 從 $2,000 漲到 $4,000 (2倍)
result = calculate_actual_vs_hold(
initial_a=1.0, # 1 ETH
initial_b=2000, # $2000 (假設初始價格 1 ETH = $2000)
initial_price=2000,
final_price=4000
)
for key, value in result.items():
print(f"{key}: {value}")
計算 3:攻擊收益 vs 被抓概率
這個計算能幫你評估:從經濟學角度,攻擊某個協議是否「划算」?
def attack_economics_analysis(
potential_reward_usd: float,
estimated_attack_cost_usd: float,
probability_of_detection: float, # 0 到 1
slashing_penalty_percent: float, # 被抓後罰沒的比例,0 到 1
attacker's_stake: float # 攻擊者需要質押的金額
) -> dict:
"""分析攻擊的經濟效益"""
# 成功攻擊的收益
successful_attack_profit = potential_reward_usd - estimated_attack_cost_usd
# 失敗攻擊的損失
failed_attack_loss = attacker's_stake * slashing_penalty_percent
# 預期收益(考慮被抓概率)
expected_profit = (
(1 - probability_of_detection) * successful_attack_profit +
probability_of_detection * (-failed_attack_loss)
)
# 風險調整後的回報
roi_percent = (expected_profit / estimated_attack_cost_usd) * 100 if estimated_attack_cost_usd > 0 else 0
return {
"成功攻擊利潤": f"${successful_attack_profit:,.0f}",
"失敗攻擊損失": f"${failed_attack_loss:,.0f}",
"被抓概率": f"{probability_of_detection:.1%}",
"預期收益": f"${expected_profit:,.0f}",
"風險調整後 ROI": f"{roi_percent:.1f}%",
"攻擊是否划算": "✅ 划算" if expected_profit > 0 else "❌ 不划算"
}
# 範例:某 DeFi 協議有 $10M TVL
result = attack_economics_analysis(
potential_reward_usd=10_000_000,
estimated_attack_cost_usd=500_000, # 估計攻擊成本
probability_of_detection=0.3, # 30% 被抓概率
slashing_penalty_percent=0.5, # 被抓後罰沒 50%
attacker's_stake=5_000_000 # 需要質押 $5M
)
for key, value in result.items():
print(f"{key}: {value}")
真實案例:追踪一次完整的攻擊痕跡
讓我帶你用剛才學到的工具,完整分析一個假想的攻擊事件。
場景設定
假設今天下午 3 點,你收到消息:「某 DeFi 協議疑似被攻擊,損失金額不明。」
第一步:收集基本信息
首先,你需要知道:
- 受害協議的合約地址
- 攻擊者的錢包地址(通常安全公司會在事後公布)
- 攻擊發生的區塊高度(通常在某條交易哈希的附近)
假設:
- 受害合約:
0xABCD... - 攻擊者地址:
0x1234... - 攻擊區塊:19,250,000
第二步:查詢攻擊交易
在 Etherscan 上搜索攻擊者地址,篩選攻擊發生期間的交易。
你會看到類似的模式:
TX Hash Method Result Time
0xabc123... flashLoan() Success 15:02:34
0xdef456... swap() Success 15:02:35
0xghi789... liquidate() Success 15:02:36
0xjkl012... transfer() Success 15:02:37
0xmno345... swap() Success 15:02:38
第三步:分析資金流向
把攻擊者的所有轉帳記錄導出,你會看到資金最終流向了哪裡。
可能的目的地:
- 交易所充值地址(準備套現)
- 另一個中轉地址(增加追踪難度)
- Tornadocash(試圖洗錢)
第四步:計算損失
用 Dune 或者 Python 腳本,把竊取代幣的數量乘以攻擊時的價格:
# 損失計算示例
stolen_assets = {
"WETH": 500,
"USDC": 2_000_000,
"WBTC": 30,
"DAI": 5_000_000
}
prices_at_attack = {
"WETH": 3500,
"USDC": 1.0,
"WBTC": 65000,
"DAI": 1.0
}
total_loss = sum(
amount * prices_at_attack[asset]
for asset, amount in stolen_assets.items()
)
print(f"總損失(美元): ${total_loss:,.0f}")
# 輸出:總損失(美元): $8,700,000
防禦指南:如何在攻擊發生前發現異常
最後,我想分享一些實用的防禦技巧。
技巧 1:設置 Rate Limiting
不要讓任何單一地址在短時間內進行大量操作。
from collections import defaultdict
from datetime import datetime, timedelta
class RateLimiter:
def __init__(self, max_requests: int, window_seconds: int):
self.max_requests = max_requests
self.window = timedelta(seconds=window_seconds)
self.requests = defaultdict(list)
def is_allowed(self, address: str) -> bool:
now = datetime.now()
# 清理過期記錄
self.requests[address] = [
t for t in self.requests[address]
if now - t < self.window
]
if len(self.requests[address]) >= self.max_requests:
return False
self.requests[address].append(now)
return True
# 使用示例
limiter = RateLimiter(max_requests=10, window_seconds=60) # 60秒內最多10次
def protected_function():
# 在合約邏輯中加入這個檢查
pass
技巧 2:監控異常的 Gas 使用量
攻擊者在準備攻擊時,通常會進行大量測試交易。
-- 查詢某地址最近的高 Gas 交易
SELECT
hash,
block_number,
block_time,
gas_used,
gas_price,
gas_used * gas_price / 1e18 AS gas_cost_eth
FROM ethereum.transactions
WHERE "from" = LOWER('0xSuspectAddress')
AND block_time > NOW() - INTERVAL '7 days'
ORDER BY gas_used DESC
LIMIT 20
技巧 3:設立風控委員會
對於高風險操作(如大額提款、參數修改),設置多簽機制:
// 多簽觸發器概念
contract MultiSigTrigger {
address[] public owners;
uint public required;
uint public transactionCount;
mapping(uint => Transaction) public transactions;
struct Transaction {
address destination;
uint value;
bytes data;
bool executed;
uint confirmations;
}
// 提案需要 N 個 owner 確認才能執行
function confirmTransaction(uint txIndex) public {
// 確認邏輯...
}
function executeTransaction(uint txIndex) public {
// 執行邏輯...
}
}
結語:知識就是防禦
寫這篇文章的過程中,我一直在想一個問題:為什麼大多數人願意花時間學習「如何投資」,卻不願意花時間學習「如何保護自己的投資不被偷走」?
這可能有點像買保險——大家都不喜歡想「萬一出事了怎麼辦」,但一旦出事,後悔就來不及了。
我的建議是:把區塊鏈安全當成一種生活技能,而不是一次性的功課。
攻擊者的手法在進化,我們的防禦也需要不斷更新。持續關注安全資訊、實際動手分析攻擊案例、建立自己的風險監控系統——這些看起來麻煩的事情,實際上是對自己資產負責的表現。
願大家的本金都平安。
參考工具清單
鏈上數據查詢:
- Etherscan:https://etherscan.io
- Blockscout:https://blockscout.com(用於側鏈和 L2)
交易分析與調試:
- Tenderly:https://tenderly.co
- Foundry:https://github.com/foundry-rs/foundry
批量數據分析:
- Dune Analytics:https://dune.com
- Flipside:https://flipsidecrypto.xyz
- HyperLedegr:https://hyperlodge.io
安全監控:
- OpenZeppelin Defender:https://defender.openzeppelin.com
- Forta Network:https://forta.org
- Chainalysis Reactor:https://www.chainalysis.com
漏洞資料庫:
- Rekt:https://rekt.news
- DeFiYield:https://defiyield.info
- Immunefi:https://immunefi.com
免責聲明:本文僅供教育與資訊目的。代碼範例為概念示範,不構成安全建議。在實際應用前,請諮詢專業安全審計人員。
資料截止日期:2026 年 3 月
相關文章
- 新興DeFi協議安全評估框架:從基礎審查到進階量化分析 — 系統性構建DeFi協議安全評估框架,涵蓋智能合約審計、經濟模型、治理機制、流動性風險等維度。提供可直接使用的Python風險評估代碼、借貸與DEX協議的專門評估方法、以及2024-2025年安全事件數據分析。
- AAVE V4 完整指南:協議架構、抵押模型與安全審計要點深度解析 — Aave 是以太坊生態系統中最具影響力的去中心化借貸協議之一,2024 年推出的 V4 版本引入了多項革命性創新,包括 портал 跨鏈借貸、高效率模式的重大升級、流動性供應商的風險隔離機制,以及改進的利率模型。本文從工程師視角深入分析 Aave V4 的技術架構、合約實現、安全審計要點,以及與 V3 的詳細比較。
- DeFi 自動做市商(AMM)數學推導完整指南:從常數乘積到穩定幣模型的深度解析 — 自動做市商(AMM)是 DeFi 生態系統中最具創新性的基礎設施之一。本文從數學視角出發,系統性地推導各類 AMM 模型的定價公式、交易滑點計算、流動性提供者收益模型、以及無常損失的數學證明。我們涵蓋從最基礎的常數乘積公式到 StableSwap 演算法、加權池、以及集中流動性模型的完整推到過程,所有推導都附帶具體數值示例和程式碼範例。
- DeFi 進階合約模式完整指南:從設計模式到 production-ready 程式碼實踐 — 本文深入探討以太坊 DeFi 協議開發中的進階合約模式,這些模式是構建生產級去中心化金融應用的核心技術基礎。相較於基礎的代幣轉帳和簡單借貸,進階 DeFi 協議需要處理複雜的定價邏輯、流動性管理、風險控制和多層次的激勵機制。本文從資深工程師視角出發,提供可直接應用於生產環境的程式碼範例,涵蓋 AMM 深度實現、質押衍生品、借貸協議進階風控、協議治理等關鍵領域。
- DeFi 攻擊事件漏洞程式碼重現技術深度指南:2024-2026 年完整實作教學 — 本文收錄 2024 年至 2026 年第一季度以太坊生態系統中最具代表性的 DeFi 攻擊事件,提供完整的漏洞程式碼重現、數學推導與量化損失分析。本文的獨特價值在於:透過可運行的 Solidity 程式碼重現漏洞機制,並提供詳盡的數學推導來解釋攻擊成功的原理。涵蓋重入攻擊、Curve Vyper JIT Bug、閃電貸操縱、跨鏈橋漏洞等主流攻擊類型。
延伸閱讀與來源
- Aave V3 文檔 頭部借貸協議技術規格
- Uniswap V4 文檔 DEX 協議規格與鉤子機制
- DeFi Llama DeFi TVL 聚合數據
- Dune Analytics DeFi 協議數據分析儀表板
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!