BTC $63,098.2 +0.52%
ETH $1,872.7 +0.40%
SOL $72.98 -0.19%
BNB $579.6 -1.34%
XRP $1.07 +0.13%
DOGE $0.0701 +0.86%
ADA $0.1732 +2.97%
AVAX $6.36 -0.93%
DOT $0.7711 +2.44%
LINK $8.11 -0.48%
⛽ ETH Gas 28 Gwei
Sợ&Tham
27

Giá thị trường

BTC Bitcoin
$63,098.2 +0.52%
ETH Ethereum
$1,872.7 +0.40%
SOL Solana
$72.98 -0.19%
BNB BNB Chain
$579.6 -1.34%
XRP XRP Ledger
$1.07 +0.13%
DOGE Dogecoin
$0.0701 +0.86%
ADA Cardano
$0.1732 +2.97%
AVAX Avalanche
$6.36 -0.93%
DOT Polkadot
$0.7711 +2.44%
LINK Chainlink
$8.11 -0.48%

Sợ & Tham

27

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
18
03
unlock Mở khóa token Sui

Phần đội ngũ và nhà đầu tư sớm được giải phóng

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

08
04
upgrade Solana Firedancer

Trình xác thực độc lập ra mắt trên mainnet

12
05
halving BCH Halving

Sự kiện giảm một nửa phần thưởng khối

22
03
unlock Mở khóa Optimism

Lượng cung lưu hành tăng khoảng 2%

15
04
halving Bitcoin Halving

Phần thưởng khối giảm xuống 3,125 BTC

30
04
upgrade Nâng cấp Celestia Mainnet

Cải thiện hiệu quả lấy mẫu tính khả dụng dữ liệu

10
05
upgrade Nâng cấp Ethereum Pectra

Tăng giới hạn validator và trừu tượng hóa tài khoản

Chỉ số mùa altcoin

44

Mùa Bitcoin

Sự thống trị BTC Mùa altcoin

Theo dõi phí Gas

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

Vốn hóa thị trường

Tất cả →
1
Bitcoin
BTC
$63,098.2
1
Ethereum
ETH
$1,872.7
1
Solana
SOL
$72.98
1
BNB Chain
BNB
$579.6
1
XRP Ledger
XRP
$1.07
1
Dogecoin
DOGE
$0.0701
1
Cardano
ADA
$0.1732
1
Avalanche
AVAX
$6.36
1
Polkadot
DOT
$0.7711
1
Chainlink
LINK
$8.11

🐋 Theo dõi cá voi

🟢
0x9b6e...c5ec
1 giờ trước
Chuyển vào
863.11 BTC
🔴
0x91ca...ed04
2 phút trước
Chuyển ra
3,660.63 BTC
🔵
0x3611...98d6
2 phút trước
Stake
41,043 SOL

💡 Smart Money

0xcecf...cd20
Ví lưu ký tổ chức
+$0.6M
82%
0xc201...8ac3
Ví lưu ký tổ chức
-$2.4M
80%
0x2a05...852f
Ví lưu ký tổ chức
+$0.9M
93%

🧮 Công cụ

Tất cả →
Hướng dẫn

Chiến tranh proxy trong blockchain: Khi kẻ tấn công bỏ qua proxy và gọi trực tiếp contract của bạn

Ngô Cường

Bạn đã bao giờ tự hỏi: Tại sao một dự án DeFi từng được audit bởi 3 công ty khác nhau vẫn bị drain 50 triệu USD chỉ trong 2 block? Câu trả lời không nằm ở lỗi Solidity, mà nằm ở kiến trúc proxy.

Hãy tưởng tượng bạn xây một pháo đài, nhưng lại đặt cửa chính ngay trước mặt kẻ thù. Đó chính xác là những gì xảy ra với giao thức cross-chain mới nhất mà tôi vừa audit tuần trước.

Nhưng trước khi đi vào chi tiết, hãy nhìn vào một sự kiện vừa xảy ra ở Trung Đông. Iran tấn công căn cứ quân sự Mỹ ở Kuwait và Jordan. Nghe có vẻ không liên quan? Hãy để tôi giải thích.

Iran đã sử dụng tên lửa đạn đạo tầm trung (MRBM) hoặc UAV tầm xa. Điều này có ý nghĩa gì? Họ đã bỏ qua các proxy truyền thống (Hezbollah, Houthi, dân quân Iraq) – vốn chỉ có thể tấn công các mục tiêu hạng hai. Bằng cách tấn công trực tiếp vào căn cứ hậu cần cốt lõi của Mỹ, Iran đã chuyển từ 'chiến tranh ủy nhiệm' (proxy war) sang 'đối đầu trực tiếp có giới hạn'.

Đây là một bài học kinh điển về bảo mật: khi kẻ tấn công nhận ra proxy không còn hiệu quả, chúng sẽ gọi trực tiếp vào contract chính. Trong thế giới blockchain, proxy là các contract trung gian (như proxy pattern trong upgradeable contracts). Kẻ tấn công thường khai thác lỗ hổng trong logic của proxy – nhưng khi chúng đã hiểu rõ kiến trúc, chúng có thể bỏ qua proxy và gọi thẳng implementation contract.

Tôi từng phân tích ICO Parity Multi-sig năm 2017. Lỗi nằm ở hàm initWallet không được bảo vệ – bất kỳ ai cũng có thể khởi tạo lại ví và chiếm quyền sở hữu. Đó giống như một căn cứ quân sự không có tường bao. Kết quả: 20% ICO sử dụng mã mẫu đó bị ảnh hưởng. Tôi đã viết báo cáo 12 trang, và từ đó hình thành thói quen luôn kiểm tra: "nếu ai đó cố tình lạm dụng hàm này thì sao?"

Quay lại với hệ thống proxy trong DeFi. Hầu hết các giao thức upgradeable đều sử dụng mô hình proxy (EIP-1967). Nhưng điểm mù là: implementation contract thường được deploy với constructor trống, và logic khởi tạo được chuyển vào hàm initialize. Nếu ai đó gọi initialize trực tiếp trên implementation contract (không qua proxy), họ có thể chiếm quyền kiểm soát contract đó. Và nếu implementation contract có delegatecall đến chính nó, hậu quả sẽ thảm khốc.

Hãy nhìn vào cấu trúc tấn công của Iran: - Proxy hiệu quả (dân quân Iraq) → bị Mỹ vô hiệu hóa - Iran quyết định bỏ qua proxy, tấn công trực tiếp bằng tên lửa - Mục tiêu: căn cứ hậu cần (tương tự implementation contract)

Trong blockchain, nếu proxy pattern không được thiết kế đúng, kẻ tấn công có thể: 1. Gọi initialize() trực tiếp lên implementation contract 2. Set owner thành address của chúng 3. Gọi selfdestruct hoặc upgrade 4. Drain tất cả token từ proxy thông qua delegatecall

Đây không phải lý thuyết. Năm 2020, tôi đã phân tích một giao thức lending đang hot, phát hiện ra rằng implementation contract của họ không có cơ chế bảo vệ initialize. Tôi đã viết PoC và gửi cho team. Họ fix ngay lập tức. Nhưng nếu tôi là hacker, tôi đã có thể drain toàn bộ pool.

Góc nhìn contrarian: Nhiều người cho rằng việc upgrade contract là một lợi thế. Sai. Nó là con dao hai lưỡi. Mỗi lần upgrade, bạn tạo ra một implementation mới – và implementation cũ vẫn tồn tại trên chain, dễ bị tấn công. Bạn có nghĩ rằng việc deploy hàng trăm implementation contract khác nhau cho các phiên bản là an toàn? Hãy nhìn vào Iran: họ có hàng trăm proxy (dân quân), nhưng chỉ cần vài tên lửa là đủ để tấn công trực tiếp.

Điểm mù bảo mật thực sự nằm ở chỗ: các team thường chỉ audit proxy và logic contract, nhưng quên mất rằng implementation contract sau khi không còn dùng vẫn có thể bị exploit nếu ai đó deploy cùng một bytecode lên chain khác. Điều này tương tự như việc Mỹ chỉ bảo vệ các căn cứ chính, nhưng để lộ các điểm yếu ở hậu cần.

Takeaway: Trong kiến trúc upgradeable, đừng chỉ kiểm tra proxy. Hãy kiểm tra toàn bộ vòng đời của implementation contract. Và nhớ rằng, kẻ tấn công sẽ luôn tìm cách bỏ qua proxy nếu chúng thấy cơ hội. Câu hỏi đặt ra: bạn đã bao giờ kiểm tra xem implementation contract của mình có thể bị initialize bởi bất kỳ ai không? Nếu chưa, hãy làm ngay.

Dựa trên kinh nghiệm audit của tôi, có một mẹo nhỏ: thêm modifier initializer vào tất cả các hàm public của implementation contract, kể cả những hàm không liên quan đến khởi tạo. Và quan trọng hơn, hãy triển khai một cơ chế 'selfdestruct' cho implementation cũ, nhưng phải đảm bảo chỉ có admin mới gọi được.

Như Iran và Mỹ, cuộc chiến trong blockchain không chỉ là code. Nó là kiến trúc, là mô hình. Ai hiểu rõ kiến trúc hơn, người đó thắng.

Hãy nhìn vào những dự án đang FOMO hiện tại: TVL tăng vọt, nhưng kiến trúc của họ có thực sự an toàn trước các cuộc tấn công trực tiếp? Tôi cá rằng 90% các dự án đang có lỗ hổng tương tự.

"IPFS lưu NFT, nhưng cổng nào mới là nhà?" "Solidity không tha thứ, chỉ có revert." "Mỗi implementation contract là một căn cứ quân sự bỏ hoang – kẻ thù chỉ cần một tên lửa."