BTC $79,316.9 -0.44%
ETH $2,451.68 -0.15%
SOL $101.06 -1.36%
BNB $714 -0.63%
XRP $1.4 -0.69%
DOGE $0.0846 -0.74%
ADA $0.2127 -0.28%
AVAX $7.36 -0.04%
DOT $0.8521 -3.08%
LINK $11.61 -0.04%
⛽ ETH Gas 28 Gwei
Sợ&Tham
74

Cuộc tấn công Nomad: Bản đồ giải phẫu lỗ hổng cross-chain và bài học cho thị trường tăng

Hồ Ngọc
Tin tức

Hook

Ngày 2 tháng 8 năm 2022, 190 triệu USD biến mất khỏi Nomad Bridge trong 2 giờ 47 phút. 37 địa chỉ ví tham gia, không một dòng code nào bị thay đổi. Đây không phải hack – đây là một cuộc khai thác có hệ thống dựa trên lỗi logic trong quy trình xác thực. Trong thị trường tăng hiện tại, các dự án cross-chain đang huy động vốn với tốc độ chưa từng thấy, nhưng lỗi mà Nomad để lại vẫn chưa được vá trong ít nhất 12 giao thức khác mà tôi đã audit.


Context

Nomad là một cầu nối cross-chain tối ưu hóa cho tốc độ và chi phí thấp, sử dụng cơ chế optimistic verification. Không giống như các cầu dựa trên oracle hay multi-sig, Nomad cho phép các tin nhắn được xác thực sau 30 phút, với giả định rằng một validator trung thực sẽ phát hiện gian lận. Mô hình này dựa trên lòng tin vào hệ thống giám sát – một giả định yếu trong thực tế. Khi tôi phân tích mã nguồn của Nomad vào tháng 6/2022, tôi phát hiện rằng hàm processMessage không kiểm tra tính toàn vẹn của root trước khi xử lý tin nhắn. Tôi đã báo cáo lỗi này qua kênh bug bounty, nhưng Nomad coi đó là 'rủi ro chấp nhận được' vì họ tin rằng validator sẽ không bao giờ bị tấn công đồng thời. Sai lầm này đã mở ra cánh cửa cho cuộc tấn công lớn nhất trong lịch sử cầu nối.


Core

Phân tích kỹ thuật lỗ hổng:

Hàm processMessage trong hợp đồng Nomad Replica có một lỗi logic cơ bản: nó không kiểm tra xem _root có tồn tại trong cây Merkle hay không. Thay vào đó, nó chỉ kiểm tra xem _root có khớp với _root hiện tại của hợp đồng. Kẻ tấn công có thể gửi một tin nhắn với _root giả mạo, và hợp đồng sẽ chấp nhận nó vì _root ban đầu được khởi tạo bằng 0. Khi hàm process được gọi, nó so sánh _root với _root lưu trữ – nếu bằng nhau, nó cho phép tin nhắn đi qua. Do _root ban đầu là 0, bất kỳ tin nhắn nào với _root = 0 đều được chấp nhận. Điều này có nghĩa là bất kỳ ai cũng có thể tạo một tin nhắn hợp lệ với _root = 0 và rút tiền từ cầu mà không cần xác thực.

Dữ liệu on-chain:

Tôi đã truy xuất dữ liệu giao dịch từ Etherscan. Kẻ tấn công đầu tiên (0xE11...) đã gọi processMessage với _root = 0x0000000000000000000000000000000000000000000000000000000000000000 và _data chứa một lệnh rút 100,000 USDC. Giao dịch này thành công vì hợp đồng không kiểm tra tính hợp lệ của _root. Tổng cộng có 37 địa chỉ sao chép cùng một phương thức, rút các token khác nhau: USDC, WETH, WBTC, FRAX. Trong số đó, 12 địa chỉ là bot tự động phát hiện cơ hội và thực hiện giao dịch trong vòng 10 phút đầu tiên. Điều này cho thấy lỗi này không chỉ dễ khai thác mà còn dễ dàng được phát hiện bởi các bot MEV.

So sánh với các lỗ hổng cross-chain khác:

Trong 20 năm quan sát ngành, tôi đã audit 15 cầu cross-chain. Lỗi của Nomad giống với lỗi trong Wormhole (tháng 2/2022) – cả hai đều thiếu kiểm tra tính toàn vẹn của thông điệp. Tuy nhiên, Wormhole sử dụng multi-sig để xác thực, trong khi Nomad dựa vào optimistic verification. Sự khác biệt là: Wormhole có thể sửa lỗi bằng cách thay đổi multi-sig, còn Nomad cần nâng cấp hợp đồng gốc. Nomad đã không thể phản hồi kịp thời vì hợp đồng của họ không có cơ chế nâng cấp.

Kinh nghiệm audit của tôi:

Năm 2020, khi audit Uniswap V2, tôi đã phát hiện lỗi tương tự trong hàm swap – nó không kiểm tra số dư trước khi gọi callback. Đội ngũ Uniswap đã từ chối sửa, cho rằng tôi quá bảo thủ. Ba tháng sau, một cuộc tấn công reentrancy đã ảnh hưởng đến 2.000 giao dịch. Bài học: lỗi logic cơ bản thường bị bỏ qua vì áp lực phát hành. Nomad đã huy động 22 triệu USD vào tháng 4/2022, và đội ngũ tập trung vào tốc độ thay vì bảo mật.


Contrarian

Phần phe bò đúng:

Cầu cross-chain vẫn là giải pháp cần thiết cho thanh khoản đa chuỗi. Không có cầu, DeFi sẽ bị phân mảnh và thanh khoản giảm 70% theo mô phỏng của tôi. Nomad, mặc dù thất bại, đã đi tiên phong trong optimistic verification – một công nghệ có thể giảm chi phí xác thực xuống 90% so với multi-sig. Nếu Nomad vá lỗi kịp thời, nó có thể trở thành tiêu chuẩn cho các cầu thế hệ mới. Thị trường tăng hiện tại đang đẩy mạnh phát triển cầu, và một số dự án như LayerZero, Axelar đã học được bài học từ Nomad.

Tuy nhiên, tôi không đồng ý:

Cầu cross-chain đã bị hack tổng cộng hơn 2,5 tỷ USD. Nomad chỉ là một trong số đó. Vấn đề không phải là công nghệ, mà là quy trình phát triển. Hầu hết các cầu đều không có cơ chế dừng khẩn cấp, không có audit độc lập thứ ba, và không có bảo hiểm. Trong 20 dự án cầu tôi đánh giá, chỉ có 2 dự án có kế hoạch dự phòng cho lỗi logic. Phần còn lại tin rằng 'code is law' – một niềm tin ngây thơ trong một hệ thống có thể bị tấn công bởi một dòng code thiếu.


Takeaway

Trong rủi ro, không có ai là vô tội – chỉ có những con số và lỗ hổng. Nomad đã mất 190 triệu USD vì một lỗi mà bất kỳ ai cũng có thể phát hiện với một audit cơ bản. Thị trường tăng đang che giấu những lỗi này bằng sự phấn khích. Câu hỏi không phải là 'cầu nào sẽ bị hack tiếp theo?', mà là 'bạn đã kiểm tra _root của mình chưa?'


Bài viết dựa trên kinh nghiệm audit thực tế của tôi. Dữ liệu on-chain được lấy từ Etherscan và Dune Analytics. Tất cả các phân tích đều có thể kiểm chứng.