Đừng để mất lợi nhuận vào thao túng giá oracle
Dạo gần đây, vấn đề thao túng các oracle giá on-chain và off-chain nhằm tấn công các dự án dApp Ethereum đang tăng lên, tuy nhiên lại chưa nhận được sự quan tâm đúng mức, chính vì vậy Coin98 Insight mang đến cho anh em bài viết này nhằm đảm bảo anh em sẽ cẩn thận hơn khi đưa ra quyết định đầu tư của mình vào dự án nào và ở trên sàn nào.
Bài viết bao gồm 2 phần:
Phần 1: Giới thiệu về oracle và hình thức thao túng giá.
Phần 2: Những sự cố và bài học rút ra từ những vụ thao túng giá gần đây.
Phần 1: Oracle
Oracle giá là gì?
Nói đơn giản, oracles giá là bất cứ thông tin gì mà anh em dùng để tham khảo giá cả.
Ví dụ: Tí hỏi Tèo giá một đồng đôla Mỹ là bao nhiêu, Tèo được coi là một oracle giá.
Trên nền tảng Ethereum, mọi thứ hoạt động dựa trên hợp đồng thông minh vì vậy oracle giá là vô cùng quan trọng.
Oracle lấy thông tin giá từ đâu?
Có 2 cách oracle lấy thông tin giá. Mỗi cách có ưu và nhược điểm riêng:
- Cách 1: Lấy dữ liệu giá có sẵn ngoài chuỗi (Off-chain) từ những APIs hoặc các sàn giao dịch sau đó đưa lên trên chuỗi (on-chain)
- Phản ứng với biến động giá chậm có thể được xem là ưu điểm hoặc nhược điểm tùy vào mục đích sử dụng.
- Đòi hỏi anh em đặt niềm tin vào nhóm người dùng có đặc quyền đưa thông tin giá lên chuỗi.
- Cách 2: Tham khảo giá của các sàn phi tập trung (DEX) và tính toán ra giá tức thời
- Mọi người đều có quyền truy cập và DEX cập nhật thông tin giá liên tục. Nếu một số kẻ xấu thao túng giá có thể dẫn đến thiệt hại nặng nề cho dự án DeFi và những người tham gia giao dịch.
Phần 2: Điểm yếu của oracle giá
Anh em tham khảo một số sự cố dưới đây để thấy rõ chỉ cần đánh vào một lỗ hổng ở oracle giá là có thể gây ra những thiệt hại rất nặng nề.
Sự cố oracle Synthetix sKRW
Synthetix là ai và hoạt động như thế nào?
Sythetix là một nền tảng phái sinh cho phép người dùng tiếp cận với các nhiều loại tài sản khác nhau. Tại thời điểm xảy ra sự cố, Synthetix đang hoạt động dựa trên nguồn dữ liệu giá off-chain tùy chỉnh, được tổng hợp và tải lên chuỗi từ một nhiều nguồn cấp dữ liệu giá bí mật theo một khung thời gian cố định. Các mức giá này giúp người dùng chọn vị thế long hoặc short so với các tài sản tương quan.
Sự cố Synthetix sKRW
25/6/ 2019, một nguồn cấp dữ liệu giá cho Synthetix báo sai giá đồng Won Hàn Quốc cao hơn 1000 lần so với tỷ giá thực, cộng thêm một số lỗi khác trong hệ thống khiến giá sai được hệ thống chấp nhận và tải lên chuỗi, sau đó nhanh chóng được một con bot giao dịch trong và ngoài thị trường sKRW.
Hậu quả sự cố:
Con bot thu lợi nhuận hơn 1 tỷ USD dù sau đó nhóm Synthetix đã thương lượng với bên giao dịch trả lại tiền để đổi lấy tiền thưởng bug bounty.
Bài học rút ra: Một trong những rủi ro lớn nhất của việc dựa vào giá off-chain là anh em không biết được cách các nguồn bên ngoài tính giá, chính vì vậy khi đầu tư anh em phải xem xét hệ thống lấy giá dự án đó có được thiết kế cẩn thận để xử lý ổn thỏa tất cả các vấn đề tiềm ẩn hay không?
Nợ thế chấp dưới giá trị
Anh em muốn mang vay phi tập trung vào blockchain. Anh em được phép đặt cọc tài sản thế chấp và vay các tài sản khác với số tiền được xác định dựa trên giá trị của tài sản mà anh em đã đặt cọc.
Ví dụ:
Anh em thế chấp ETH để vay USD với giả định 1 ETH = 400 USD và tỷ lệ thế chấp là 150% ( thế chấp 1.5 USD vay được 1 USD).
Nếu người dùng thế chấp 375 ETH (375x 400 = 150,000 USD) với tỉ lệ 150% vậy họ sẽ có thể vay tối đa 100,000 USD từ hệ thống.
Tuy nhiên, một số kẻ xấu có thể tuyên bố 1 ETH = 1000 USD và lấy tiền từ hệ thống. Vì vấn đề này, các nhà developers đang tiếp cận với giá spot trading sát nhất trên các sàn DEX như Uniswap, Kyber, ….
Mọi người tin rằng giá trên DEX sẽ chính xác do bất kỳ sự sai lệch nào đều được các nhà kinh doanh chênh lệch giá nhanh chóng điều chỉnh. Tuy nhiên, giá spot trading trên DEX có thể không chính xác trong giao dịch, ví dụ dưới đây cho thấy rõ điều đó:
Hãy xem cách thức hoạt động của pool ETH/USD trên Uniswap. Giá được tính toán dựa trên số lượng tài sản trong pool, nhưng tài sản trong pool sẽ thay đổi khi người dùng giao dịch giữa ETH và USD. Nếu kẻ xấu thực hiện giao dịch trước và sau khi vay thì điều gì sẽ xảy ra?
Giả sử kẻ xấu là A.
Ban đầu trong pool có 8,000 ETH và 3,200,000 USD, tính ra 1 ETH =400 USD. Tại thời điểm này, A mua 5,000 ETH với giá 2,000,000 USD.
Sàn giao dịch Uniswap tính lại giá, khi ấy trong quỹ dự trữ có 3,000ETH và 5,200,000 USD, tính ra 1 ETH = 1,733.33 USD. A thế chấp 375 ETH để vay USD theo tỷ lệ 150% thì A có thể vay tài sản có giá trị lên tới 433,333.33 USD.
Cuối cùng, A bán 5,000 ETH thu về 2,000,000 USD ban đầu, giá trong pool Uniswap về lại ban đầu 1 ETH=400 USD. Hậu quả là hệ thống cho A vay thêm 333,333.33 USD mà không cần thêm bất kì tài sản thế chấp nào.
Bài học rút ra: Đây là một trong những sai lầm thường gặp khi sử dụng DEX như một oracle giá. Kẻ tấn công gần như có toàn quyền kiểm soát giá trong một giao dịch.
Sự cố MKR Sythetix
Tháng 12/2019, Hacker tấn công vào sMKR và iMKR (MKR nghịch đảo).
Cách thức kẻ tấn công thực hiện như sau:
Bước 1: Hacker mua sMKR.
Bước 2: Hacker mua số lượng lớn MKR từ Uniswap thông qua cặp ETH / MKR.
Bước 3: Sau một thời gian chờ đợi, chúng bán sMKR cho iMKR, rồi bán MKR lại cho Uniswap. Quá trình này lặp lại liên tục. Và chúng thu về lượng lớn ETH.
Chúng có thể làm được điều này nhờ vào 2 thứ:
- Giao dịch thông qua Uniswap cho phép kẻ tấn công chỉnh giá MKR trên Synthetix theo ý muốn vì nguồn cấp dữ liệu giá MKR off-chain mà Synthetix dựa vào thực chất lại dựa trên giá MKR on-chain,
- Không có đủ thanh khoản để các nhà kinh doanh chênh lệch giá điều chỉnh thị trường về trạng thái tối ưu.
Bài học rút ra: Nếu anh em nghĩ rằng anh em đang sử dụng giá off-chain, đôi khi thực ra anh em vẫn đang sử dụng giá on-chain và chịu tất cả các nguy cơ tiềm ẩn của giá on-chain.
Sự cố hack bZx
2/2020, Hacker dùng ETH mua gần hết sUSD trên Kyber. Sau đó, chúng mua gói sUSD thứ hai từ chính Synthetix rồi gửi vào bZx. Sử dụng sUSD làm tài sản thế chấp, kẻ tấn công đã vay số lượng ETH tối đa mà chúng được phép. Sau đó bán lại sUSD cho Kyber.
Sự cố này thật ra tương tự với sự cố liên quan đến nợ thế chấp dưới giá trị nhưng ở một thế chấp và DEX khác.
Bug vault
Hệ thống yVault cho phép anh em đặt cọc token và kiếm được lợi nhuận từ nó mà không cần tự mình quản lý.
YVault đầu tiên cho phép người dùng kiếm được lợi nhuận trên USDC bằng cách cung cấp thanh khoản cho pool Balancer MUSD / USDC. Khi anh em cung cấp thanh khoản, anh em sẽ được nhận BPT mà có thể đổi được cho một tỷ lệ pool nhất định. Do đó, yVault đã tính toán giá trị của các khoản nắm giữ dựa trên số lượng MUSD / USDC mà có thể được đổi thành BPT.
Tuy nhiên, trạng thái của pool Balancer trong một giao dịch không ổn định và không đáng tin. Trong trường hợp này, do bonding curve mà Balancer đã chọn, người dùng không thể giao dịch giữa USDC sang MUSD theo tỷ lệ 1: 1, mà sẽ để lại một số MUSD trong pool. Điều này có nghĩa là giá trị của BPT có thể bị lạm phát và là kẽ hở cho phép kẻ tấn công thao túng giá theo ý muốn rồi lấy hết tiền trong Vault.
Bài học rút ra: Sự cố này cho thấy rằng oracle giá không phải lúc nào cũng chính xác, anh em phải thật cảnh giác về các nguồn dữ liệu giá mà dự án anh em đầu tư sử dụng, xem liệu nguồn đó có dễ dàng bị thao túng bởi người khác không.
Hack Harvest Finance
Vào ngày 26 tháng 10 năm 2020, một người dùng vô danh đã hack các pool của Harvest Finance. Hacker làm giá USDC giảm xuống trong pool Curve bằng cách thực hiện một giao dịch, tham gia pool Harvest tại mức giá giảm, sau đó khôi phục giá bằng cách đảo ngược giao dịch trước đó và thoát khỏi pool Harvest ở mức giá cao hơn.
Hậu quả: khiến dự án Harvest Finance thiệt hại hơn 33 triệu USD.
Lời kết
Qua các sự cố kể trên, anh em có thể thấy đầu tư là một hành trình nghiên cứu lâu dài và giá là một yếu tố cực kì quan trọng trong đó. Anh em nên chú ý xem xét kỹ các nguồn dữ liệu giá mà dự án anh em đầu tư hay sàn anh em giao dịch đang sử dụng để phòng tránh tất cả những sự cố đáng tiếc về giá hoặc thậm chí là mất trắng tài sản.