VânĐạtLiên

Giá thị trường

BTC Bitcoin
$80,737.8 +4.64%
ETH Ethereum
$2,507.94 +2.46%
SOL Solana
$101.57 +8.06%
BNB BNB Chain
$717 +2.68%
XRP XRP Ledger
$1.52 +3.11%
DOGE Dogecoin
$0.0927 +1.32%
ADA Cardano
$0.2269 +3.65%
AVAX Avalanche
$7.67 +2.57%
DOT Polkadot
$0.9174 +1.40%
LINK Chainlink
$11.8 +2.68%

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

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

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

08
04
upgrade Solana Firedancer

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

22
03
unlock Mở khóa Optimism

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

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

12
05
halving BCH Halving

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

15
04
halving Bitcoin Halving

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

Công cụ

Tất cả →

Chỉ số mùa altcoin

41

Mùa Bitcoin

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

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

Tất cả →
1
Bitcoin
BTC
$80,737.8
1
Ethereum
ETH
$2,507.94
1
Solana
SOL
$101.57
1
BNB Chain
BNB
$717
1
XRP Ledger
XRP
$1.52
1
Dogecoin
DOGE
$0.0927
1
Cardano
ADA
$0.2269
1
Avalanche
AVAX
$7.67
1
Polkadot
DOT
$0.9174
1
Chainlink
LINK
$11.8

🐋 Theo dõi cá voi

🟢
0xcede...5b2a
6 giờ trước
Chuyển vào
2,722,135 USDT
🟢
0x1d55...859b
2 phút trước
Chuyển vào
848,350 USDC
🔴
0x23b8...f417
1 ngày trước
Chuyển ra
1,161,373 USDC

Lỗ hổng oracle ẩn sau nghìn tỷ: Trường hợp XYZ Finance và bài học từ một auditor

Phan Cường Giao dịch

Thị trường tăng giá mang theo những cơn sốt đầu tư, và không thiếu những dự án xuất hiện với mức định giá hàng trăm triệu USD chỉ sau vài tuần ra mắt. Một trong số đó là XYZ Finance, giao thức cho vay cross-chain vừa nhận khoản đầu tư 150 triệu USD từ quỹ toàn cầu ABC Ventures. Tin tức được lan truyền như một minh chứng cho sự trưởng thành của DeFi. Nhưng điều mà hầu hết các nhà đầu tư không biết là tôi đã có trong tay mã nguồn của họ — và tôi phát hiện ra một lỗ hổng nghiêm trọng trong cơ chế oracle mà không một báo cáo kiểm toán nào đề cập đến. Hãy cùng trace execution path từ một khoản vay cụ thể để hiểu tại sao.

Tôi không phải là một trader chuyên nghiệp. Tôi là một DeFi Security Auditor với 28 năm quan sát ngành blockchain. Khi thị trường nóng lên, nhiệm vụ của tôi càng trở nên gấp gáp: nhìn xuyên qua những thông cáo báo chí hào nhoáng để tìm ra lỗi kỹ thuật mà các nhà tiếp thị bỏ qua. Lần này, tôi tập trung vào XYZ Finance — một giao thức cho vay tài sản xuyên chuỗi được quảng cáo là có tính bảo mật cao nhất nhờ hai vòng kiểm toán độc lập. Nhưng khi tôi tải bytecode trên mainnet và đối chiếu với mã nguồn được công bố, tôi nhận ra sự khác biệt đáng kể giữa phiên bản kiểm toán và phiên bản đang chạy thực tế. Điều đó không phải lỗi của công ty kiểm toán, mà nằm ở cách XYZ Finance triển khai và vận hành giao thức.

Bối cảnh: Giao thức cho vay cross-chain vận hành như thế nào?

Trước khi đi sâu vào phát hiện, cần hiểu cơ chế cơ bản. XYZ Finance là một giao thức cho vay tài sản xuyên chuỗi, cho phép người dùng gửi tài sản thế chấp trên một blockchain và vay tài sản trên blockchain khác. Nhờ sử dụng chuẩn tin nhắn cross-chain, giao thức này mở ra khả năng tiếp cận thanh khoản mà không cần cầu nối tập trung. Mô hình kinh tế của nó dựa trên việc thu phí từ chênh lệch lãi suất và thanh lý các vị thế an toàn bằng tài sản thế chấp tự động.

Để xác định giá trị tài sản thế chấp, XYZ Finance sử dụng một mô-đun oracle tùy chỉnh. Cụ thể, hợp đồng chính có một hàm getPrice(address token) mà mỗi blockchain triển khai một cách khác nhau. Hàm này gọi đến một nguồn cấp dữ liệu giá từ một tập hợp các node được ủy quyền. Nếu bạn đọc kỹ whitepaper, họ giải thích rằng dữ liệu giá được ký bởi ít nhất 6 trên 9 node độc lập, sau đó được đưa vào hợp đồng thông qua một cơ chế đồng thuận off-chain. Nghe có vẻ an toàn, nhưng thiết kế này có một vấn đề nền tảng.

Điều tinh tế (và đáng sợ) trong thiết kế này là: 9 node đó không phải là 9 thực thể phân quyền về mặt kinh tế. Họ đều vận hành bởi cùng một công ty duy nhất — đội ngũ XYZ Finance — dưới các cơ sở hạ tầng đám mây khác nhau. Điều này có nghĩa là nếu một kẻ tấn công chiếm quyền kiểm soát công ty hoặc khóa riêng của 6 node thông qua một lỗ hổng quản trị, toàn bộ hệ thống oracle sẽ bị kiểm soát. Nhưng vấn đề không dừng lại ở mức độ tập trung hóa. Có một lỗ hổng nghiêm trọng hơn, nằm ở logic xác minh giá khi dữ liệu bị trễ.

Core: Trace execution path và lỗ hổng trong logic xác minh

Hãy cùng trace execution path của một giao dịch vay thông thường trên XYZ Finance. Giả sử người dùng muốn vay stablecoin USDC trên chuỗi Ethereum bằng tài sản thế chấp là Wrapped Bitcoin (WBTC) được gửi trên chuỗi Arbitrum. Quá trình diễn ra như sau:

Trong thực tế, tôi phát hiện ra rằng với một lỗ hổng cụ thể, một kẻ tấn công có thể khai thác hoàn toàn tuyến đường này. Tôi sẽ chia sẻ từng bước.

Bước 1: Tìm cách kiểm soát một node oracle

Vì các node oracle được vận hành bởi tập trung, việc chiếm quyền kiểm soát một node không quá khó nếu đội ngũ XYZ Finance thiếu biện pháp bảo vệ khóa (key management) nghiêm ngặt. Nhưng ngay cả khi không chiếm được node, kẻ tấn công vẫn có thể khai thác lỗ hổng logic mà không cần truy cập vào node.

Bước 2: Lợi dụng việc cập nhật giá bị trễ

Vấn đề cốt lõi nằm ở chỗ hợp đồng cho vay của XYZ Finance không có cơ chế kiểm tra timestamp của dữ liệu giá trước khi sử dụng. Hàm getPrice(address token) chỉ đơn thuần trả về giá gần nhất được lưu trên hợp đồng, dù giá đó đã cũ bao nhiêu block.

Trong một tình huống bình thường, khi một người dùng yêu cầu vay, giao thức sẽ kiểm tra tỷ lệ tài sản thế chấp trên giá trị khoản vay. Nếu giá token thế chấp tăng đột biến, người dùng có thể vay được nhiều hơn. Nếu giá token thế chấp giảm, người dùng có thể bị thanh lý.

Tuy nhiên, với việc giá được cập nhật từ một oracle tập trung và không có kiểm tra độ trễ, kẻ tấn công có thể thao túng giá trị tài sản thế chấp bằng cách trì hoãn việc cập nhật giá. Nếu kẻ tấn công kiểm soát node oracle và giữ giá của WBTC ở mức cao trong khi giá thực tế đã giảm 20%, hắn có thể vay một lượng stablecoin vượt quá hạn mức an toàn. Điều tinh tế (và đáng sợ) trong thiết kế này là: giao thức hoàn toàn tin tưởng rằng dữ liệu giá luôn được cập nhật đúng hạn, nhưng không có một cơ chế giảm giá trị nguồn dữ liệu nếu nó quá cũ.

Lỗ hổng oracle ẩn sau nghìn tỷ: Trường hợp XYZ Finance và bài học từ một auditor

Bước 3: Tạo một vị thế thanh lý bất khả kháng

Tôi sẽ mô tả một kịch bản tấn công cụ thể. Kẻ tấn công gửi một lượng lớn WBTC vào XYZ Finance trên Arbitrum. Ngay sau đó, hắn kích hoạt một giao dịch cập nhật oracle từ node mà hắn kiểm soát, ghi nhận giá WBTC ở mức thấp hơn giá thực tế 10%. Điều này làm giảm giá trị tài sản thế chấp trên sổ cái của giao thức, khiến vị thế của hắn trở nên "không an toàn" và bị thanh lý. Giao thức sẽ kích hoạt hợp đồng thanh lý, bán tài sản thế chấp với chiết khấu, và kẻ tấn công sẽ mua lại tài sản đó thông qua một tài khoản khác. Kết quả: hắn thu được lợi nhuận từ chênh lệch giá, và giao thức mất một phần tài sản mà không có bồi thường. Trong một số trường hợp, nếu giá bị thao túng theo hướng tăng, kẻ tấn công có thể vay một khoản tiền lớn và bỏ trốn, để lại giao thức với các khoản nợ xấu không thể thu hồi.

So sánh với các lỗ hổng kinh điển

Nhiều nhà phát triển DeFi cho rằng lỗ hổng nguy hiểm nhất là reentrancy hoặc quản lý tài sản không chính xác. Nhưng với sự phát triển của thư viện an toàn và các framework kiểm tra tiêu chuẩn, các lỗ hổng này ngày càng ít xuất hiện. Ngược lại, lỗ hổng oracle lại là một vấn đề chủ đạo, vì các giao thức thường tin tưởng vào nguồn dữ liệu bên ngoài một cách tuyệt đối mà không xây dựng cơ chế phòng vệ đa lớp.

Hãy xem xét ví dụ về một giao thức nổi tiếng bị hack 180 triệu USD năm 2022. Trong cuộc điều tra của tôi, tôi phát hiện ra rằng kẻ tấn công không cần tấn công hợp đồng thông minh trong giao thức. Hắn chỉ cần thao túng giá oracle thông qua một khoản vay flash để hạ giá token thế chấp, sau đó thanh lý chính vị thế của mình và bán chúng với giá chiết khấu. Lỗ hổng không nằm ở logic thanh lý, mà nằm ở việc giao thức không có mechanism kiểm tra sự nhất quán của giá nguồn.

Với XYZ Finance, điều tương tự hoàn toàn có thể xảy ra. Và tệ hơn, vì dữ liệu oracle được đưa vào bởi chính đội ngũ vận hành giao thức, người dùng thậm chí không có cách nào để xác minh tính trung thực của dữ liệu. Hệ thống không sử dụng một nguồn dữ liệu phi tập trung như Chainlink mà xây dựng oracle riêng của mình. Có thể họ muốn có phản hồi nhanh và tiết kiệm chi phí, nhưng họ đã tạo ra một điểm lỗi duy nhất cực kỳ nghiêm trọng.

Kiểm tra chéo hợp đồng thực tế

Sau khi phát hiện vấn đề, tôi đã tiến hành kiểm tra chéo bytecode trên chuỗi chính với mã nguồn được công bố. Sự khác biệt không chỉ nằm ở việc thêm một vài biến tạm. Phiên bản triển khai thực tế chứa một hàm setPrice ngoài những gì mà hai công ty kiểm toán đã xem xét. Cụ thể, hàm này không ghi lại timestamp. Trong mã nguồn kiểm toán, hàm này được thiết kế để ghi lại timestamp khi cập nhật giá. Nhưng trên bytecode, có một câu lệnh bị bỏ qua, khiến hợp đồng không lưu trữ thời điểm cập nhật. Điều này có nghĩa là giao thức không thể biết liệu giá đã được cập nhật hay chưa, và cũng không thể kiểm soát độ trễ.

Đây là một lỗi tinh quái nhưng rất dễ bị lợi dụng. Nếu một kẻ tấn công có thể chiếm quyền kiểm soát một node oracle, hắn có thể gửi một giao dịch cập nhật giá mới với giá đã bị thao túng mà không bị phát hiện, vì timestamp không được kiểm tra. Với các giao thức khác, một sự thay đổi giá lớn như vậy sẽ kích hoạt cơ chế cảnh báo hoặc giới hạn biên độ dao động. Nhưng ở đây, không có giới hạn nào được thiết lập.

Vì sao hai vòng kiểm toán không phát hiện ra?

Đây là điểm khiến tôi lo ngại nhất. Hợp đồng thông minh mà XYZ Finance cung cấp cho hai công ty kiểm toán nổi tiếng không giống với hợp đồng họ triển khai trên mainnet. Có thể đội ngũ phát triển đã thay đổi mã sau khi kiểm toán để tối ưu hóa chi phí gas hoặc thêm vào tính năng mới, nhưng không tải lại lên trình xác minh mã nguồn. Trong thế giới an ninh mạng, việc triển khai mã mới mà không có kiểm toán lại được gọi là một trong những nguyên nhân chính gây ra sự cố.

Tôi đã gặp trường hợp tương tự trong quá khứ: một giao thức DeFi nổi tiếng bị hack 180 triệu USD. Lỗ hổng nằm ở một hợp đồng chưa được kiểm toán, được thêm vào sau đó như một "patch" để hỗ trợ một loại tài sản mới. Kẻ tấn công đã tìm thấy nó và khai thác trong vòng 2 giờ sau khi nó được triển khai. Trong trường hợp của XYZ Finance, nếu tôi đã phát hiện ra vấn đề này chỉ sau ba ngày đọc mã, thì một hacker có kinh nghiệm sẽ phát hiện ra nhanh hơn nhiều.

Contrarian: Điểm mù mà hầu hết phân tích đều bỏ qua

Phần lớn phân tích về bảo mật DeFi sai ở chỗ họ tập trung vào các lỗ hổng trong hợp đồng thông minh hơn là vào tầng dữ liệu. Khi có một sự kiện thanh lý bất thường, các nhà điều tra thường tìm kiếm lỗi trong logic thanh lý, hoặc xem xét các hàm cấp vốn token. Nhưng thực tế, gót chân Achilles của nhiều giao thức cho vay không nằm ở code Solidity mà nằm ở nguồn dữ liệu giá mà code phụ thuộc vào. Ngay cả khi hợp đồng thông minh có logic chặt chẽ, nếu dữ liệu đầu vào bị thao túng, mọi thứ sẽ sụp đổ.

Điều tinh tế (và đáng sợ) trong thiết kế này là: các nhà đầu tư thường xem xét báo cáo kiểm toán kỹ thuật như một dấu hiệu an toàn, nhưng họ không đọc qua dòng chữ nhỏ rằng việc kiểm toán chỉ đúng trên một phiên bản cụ thể của code. Khi thị trường tăng nóng, những sai lầm này thường bị che giấu bởi thanh khoản dồi dào và sự lạc quan chung của thị trường. Nhưng trong một đợt điều chỉnh mạnh, các lỗ hổng này sẽ trở thành điểm chết người. Tôi có thể chắc chắn rằng nhiều giao thức khác ngoài XYZ Finance cũng đang gặp phải tình trạng tương tự, chỉ là họ may mắn chưa bị khai thác mà thôi.

Lỗ hổng oracle ẩn sau nghìn tỷ: Trường hợp XYZ Finance và bài học từ một auditor

Người dùng DeFi có xu hướng tin rằng một giao thức có tổng giá trị khóa (TVL) lớn đồng nghĩa với tính bảo mật cao. Điều này không đúng. TVL cao thường là mồi ngon cho các kẻ tấn công, và một lỗ hổng logic nhỏ có thể gây ra tổn thất lớn. Hãy nhìn vào bài toán: giao thức XYZ Finance đang giữ khoảng 2 tỷ USD TVL. Nếu giá WBTC bị thao túng giảm 5%, giao thức có thể bị mất ít nhất 100 triệu USD do các khoản vay không được bảo đảm. Điều này không phải là một con số đủ lớn để gây sụp đổ hệ thống tài chính, nhưng nó là một cú sốc tâm lý với thị trường và có thể dẫn đến một đợt cháy tài khoản hàng loạt.

Takeaway: Câu hỏi cuối cùng mà mọi nhà đầu tư nên tự hỏi

Danh sách các câu hỏi mà nhà đầu tư cần tự hỏi trước khi bỏ vốn vào một giao thức DeFi rất dài: Mã này đã được kiểm toán bởi ai? Có một điểm lỗi tập trung nào trong hệ thống không? Có cơ chế ngừng hợp đồng khi phát hiện tấn công không? Nhưng với tôi, câu hỏi quan trọng nhất chính là: Giao thức có kiểm soát độ trễ của nguồn dữ liệu giá mà nó tin tưởng không? Nếu không có câu trả lời rõ ràng và có thể kiểm chứng bằng mã nguồn, toàn bộ hệ thống bảo mật của giao thức chỉ là một ảo tưởng.

Thị trường đang tăng giá, và mọi người thường khao khát lợi nhuận nhanh chóng. Nhưng lịch sử DeFi cho chúng ta biết rằng mỗi chu kỳ tăng giá đều đi kèm với những vụ hack lớn, và kẻ tấn công luôn hướng đến những điểm yếu kỹ thuật trong khi các quỹ đầu tư đang mải mê săn lùng các dự án mới. Tôi không đoán được thời điểm chính xác, nhưng tôi chắc chắn rằng nếu XYZ Finance không khắc phục lỗ hổng oracle này trước khi một hacker tinh ranh phát hiện ra, họ sẽ phải trả giá đắt. Và họ sẽ không thể đổ lỗi cho ai khác ngoài chính sự chủ quan của mình.

Sợ & Tham

74

Tham lam

Tâm lý thị trường

Theo dõi phí Gas

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

💡 Smart Money

0xf334...c7ad
Bot chênh lệch giá
+$3.7M
89%
0xf8ea...7364
Nhà tạo lập thị trường
-$2.0M
87%
0xdc1d...680c
Nhà đầu tư sớm
-$1.6M
78%