🔥Gate.io Bots chiến lược giao dịch nhà đầu tư khuyến khích đã chính thức bắt đầu!
🤖 Ngay lập tức tạo chiến lược Bots, chia sẻ 10,900 USDT!
💰Có thêm sự phơi bày lưu lượng chính thức, hỗ trợ quảng bá chiến lược, nâng cao lợi nhuận!
🔗Chi tiết: https://www.gate.io/announcements/article/43944
Phân tích tấn công bánh sandwich MEV: Chuỗi chết người từ phân loại đến chuyển đổi
Tác giả: Daii Nguồn: mirror
Vào thứ Tư tuần trước (ngày 12 tháng 3), một nhà giao dịch tiền mã hóa đã bị tấn công MEV và mất 215.000 USD trong một lần.
Nói một cách đơn giản, người dùng này đã định đổi 22,08 vạn đô la Mỹ USDC stablecoin thành USDT có giá trị tương đương trong pool giao dịch Uniswap v3, nhưng cuối cùng chỉ nhận được 5,272 USDT, trong vài giây, tài sản đã bốc hơi 21,57 vạn, xem hình dưới đây.
Hình trên là ảnh chụp màn hình ghi chép trên chuỗi của giao dịch này. Nguyên nhân cơ bản dẫn đến thảm kịch này chính là việc gặp phải cuộc tấn công «Sandwich Attack» nổi tiếng trong thế giới blockchain.
Người đầu tiên tiết lộ cuộc tấn công MEV lần này là Michael (xem hình trên), anh ấy giải thích rằng:
Nội dung ở trên có lỗi đánh máy, robot tấn công MEV đổi ra một lượng lớn USDT, chứ không phải USDC.
Tuy nhiên, sau khi xem xong giải thích và báo cáo tin tức của anh ấy, bạn có thể vẫn còn mơ hồ, vì có quá nhiều thuật ngữ mới, như tấn công sandwich (Sandwich Attack), chạy trước (front-ran the tx), đưa lại tính thanh khoản (put back the liquidity), thưởng cho người xây dựng khối (tipped a block builder), v.v.
Hôm nay, chúng ta sẽ lấy vụ tấn công MEV này làm ví dụ, phân tích toàn bộ quá trình, đưa bạn vào khám phá thế giới tối tăm của MEV.
Đầu tiên, chúng ta cần giải thích MEV là gì.
1. MEV là gì?
MEV ban đầu được gọi là Giá trị có thể khai thác bởi thợ mỏ (Miner Extractable Value), chỉ về lợi nhuận bổ sung mà thợ mỏ có thể kiếm được thông qua việc sắp xếp lại, chèn hoặc loại bỏ giao dịch trong các khối trên chuỗi khối. Hành động này có thể dẫn đến việc người dùng bình thường phải trả chi phí cao hơn hoặc nhận được mức giá giao dịch bất lợi hơn.
Với việc các mạng blockchain như Ethereum chuyển từ cơ chế đồng thuận Proof-of-Work (PoW) sang cơ chế đồng thuận Proof-of-Stake (PoS), quyền kiểm soát thứ tự giao dịch đã chuyển từ các thợ mỏ sang các xác nhận viên. Do đó, thuật ngữ cũng đã tương ứng phát triển từ "Giá trị có thể khai thác bởi thợ mỏ" (Miner Extractable Value) thành "Giá trị có thể khai thác tối đa" (Maximal Extractable Value).
Mặc dù tên gọi đã thay đổi, nhưng khái niệm cốt lõi về việc khai thác giá trị thông qua việc thao tác thứ tự giao dịch vẫn giống nhau.
Nội dung ở trên vẫn có chút chuyên môn, bạn chỉ cần nhớ: MEV tồn tại là vì các thợ mỏ trước đây, và các người xác thực hiện tại có quyền sắp xếp các giao dịch trong bộ nhớ đệm (mempool). Việc sắp xếp này diễn ra trong một khối, hiện tại Ethereum khoảng 11 giây sẽ tạo ra một khối, điều đó có nghĩa là mỗi 11 giây sẽ có một lần thực hiện quyền lực như vậy. Tương tự, cuộc tấn công MEV lần này cũng được thực hiện thông qua việc sắp xếp của người xác thực.
Nhấp vào liên kết này, bạn sẽ thấy nội dung giao dịch của khối có số hiệu 22029771 liên quan đến cuộc tấn công này, như hình dưới đây.
Xin lưu ý, giao dịch trong hình 1, 2, 3 chính là cuộc tấn công MEV mà đã được đề cập ở đầu bài viết, thứ tự này là do người xác nhận (bobTheBuilder) sắp xếp. Tại sao lại có thể như vậy?
2. Nguyên lý của MEV
Để hiểu cách hoạt động của MEV, chúng ta cần hiểu trước cách mà blockchain ghi lại và cập nhật thông tin.
2.1 Cơ chế cập nhật trạng thái blockchain
Blockchain có thể được xem như một sổ cái đang tăng trưởng liên tục, nó ghi lại tất cả các giao dịch đã xảy ra. Trạng thái của sổ cái này, chẳng hạn như số dư của mỗi tài khoản, lượng dự trữ các token trong pool giao dịch Uniswap, v.v., đều được quyết định bởi các giao dịch trước đó.
Khi một khối mới được thêm vào chuỗi khối, tất cả các giao dịch trong khối đó sẽ được thực hiện lần lượt theo thứ tự sắp xếp của chúng trong khối. Mỗi khi một giao dịch được thực hiện, trạng thái toàn cầu của chuỗi khối sẽ thay đổi tương ứng.
Có nghĩa là, không chỉ thứ tự của các khối là quan trọng, mà thứ tự của các giao dịch trong khối cũng rất quan trọng. Vậy thứ tự của các giao dịch trong khối được quyết định như thế nào?
2.2 Người xác thực quyết định thứ tự giao dịch
Khi người dùng thực hiện một giao dịch trên mạng blockchain, chẳng hạn như giao dịch chuyển đổi USDC sang USDT thông qua Uniswap, giao dịch này sẽ được phát sóng đến các nút trong mạng. Sau khi được xác minh ban đầu, giao dịch này sẽ vào một khu vực được gọi là "mempool". Mempool giống như một khu vực chờ, nơi các giao dịch chưa được xác nhận và thêm vào khối tiếp theo của blockchain.
Các thợ mỏ trước đây (trong hệ thống PoW), giờ đây là những người xác thực (trong hệ thống PoS) có quyền chọn giao dịch từ pool bộ nhớ và quyết định thứ tự sắp xếp của các giao dịch trong khối tiếp theo.
Thứ tự của các giao dịch trong khối là rất quan trọng. Trước khi một khối được xác nhận cuối cùng và thêm vào chuỗi khối, các giao dịch trong khối này sẽ được thực hiện theo thứ tự mà các xác minh viên (chẳng hạn như bobTheBuilder) xác định. Điều này có nghĩa là nếu một khối chứa nhiều giao dịch tương tác với cùng một nhóm giao dịch, thì thứ tự thực hiện của các giao dịch này sẽ ảnh hưởng trực tiếp đến kết quả của từng giao dịch.
Khả năng này cho phép người xác thực ưu tiên xử lý các giao dịch nhất định, trì hoãn hoặc loại trừ các giao dịch khác, thậm chí chèn giao dịch của riêng họ để tối đa hóa lợi nhuận.
Sự sắp xếp của giao dịch lần này cũng rất quan trọng, chỉ cần một chút sai sót cũng không thể thành công trong việc tấn công.
2.3 Trình tự giao dịch trong cuộc tấn công MEV này
Chúng ta hãy cùng tìm hiểu sơ lược về 3 giao dịch liên quan đến cuộc tấn công MEV này:
Lần này, người xác thực của cuộc tấn công MEV là bob-The-Builder.eth, người đã chịu trách nhiệm sắp xếp các giao dịch theo thứ tự 1, 2, 3. Tất nhiên, bobTheBuilder cũng không làm việc miễn phí, anh ta đã thu được hơn 100 ETH từ việc sắp xếp này, trong khi đó, người khởi xướng cuộc tấn công MEV chỉ có 8000 đô la thu nhập. Nguồn thu nhập của họ chính là từ giao dịch thứ hai của nạn nhân.
Một câu, kẻ tấn công (robot MEV) và người xác nhận (bobTheBuilder) thông đồng, khiến nạn nhân của giao dịch thứ hai mất 215.000 đô la, trong đó kẻ tấn công nhận 8.000 đô la, người xác nhận nhận 200.000 đô la (hơn 100 ETH).
Họ sử dụng một hình thức tấn công có tên gọi hình ảnh - tấn công sandwich. Dưới đây, chúng ta sẽ giải thích từng giao dịch một để bạn hiểu rõ hơn về tấn công sandwich phức tạp của MEV là như thế nào?
3. Phân tích toàn diện về cuộc tấn công sandwich
Lý do được gọi là tấn công sandwich (Sandwich Attack) là vì hai giao dịch của kẻ tấn công (giao dịch 1 và giao dịch 3) lần lượt được đặt trước và sau giao dịch của nạn nhân (giao dịch 2), khiến cho toàn bộ thứ tự giao dịch giống như cấu trúc của một chiếc bánh sandwich (xem hình trên).
Giao dịch 1 và giao dịch 3 đảm nhận các chức năng khác nhau. Nói một cách đơn giản, giao dịch 1 chịu trách nhiệm thực hiện hành vi phạm tội, trong khi giao dịch 3 chịu trách nhiệm thu hoạch phần chia. Cụ thể, toàn bộ quá trình diễn ra như sau:
3.1 Giao dịch 1, chịu trách nhiệm tăng giá USDT
Nhấp vào liên kết giao dịch số 1 trong hình trên, bạn sẽ thấy chi tiết giao dịch số 1, kẻ tấn công đã nâng giá USDT một cách trực tiếp, đó là dùng 1865 triệu USDC để đổi toàn bộ 1758 triệu USDT bên trong, xem hình bên dưới.
! vi4i8ramCtgyZuTSNZLLVLsqry8MONxhGPRUVOsC.png
Lúc này, trong bể thanh khoản còn lại là một lượng lớn USDC và một lượng nhỏ USDT. Nếu theo những gì báo chí đã đưa tin, trước khi bị tấn công, thanh khoản của Uniswap có khoảng 19,8 triệu USDC và USDT, thì sau khi thực hiện giao dịch 1, trong bể chỉ còn lại 2,22 triệu USDT (=1980-1758), trong khi số dư USDC tăng lên khoảng 38,45 triệu (=1980+1865).
Lúc này tỷ lệ trao đổi giữa USDC và USDT trong hồ này không còn là 1:1 nữa, mà là 1:17, có nghĩa là lúc này cần 17 USDC mới có thể đổi được 1 USDT, tuy nhiên tỷ lệ này chỉ là ước chừng, vì hồ này là V3, trong đó tính thanh khoản không được phân phối đồng đều.
Còn một điều nữa, tôi muốn nói với bạn. Thực ra kẻ tấn công không sử dụng 18.650.000 USDC một lần, số USDC thực tế được sử dụng là 1.090.000, chưa đến 6%. Anh ta đã làm điều đó như thế nào? Chúng ta sẽ nói chi tiết hơn khi kết thúc câu chuyện về cuộc tấn công.
3.2 giao dịch 2, thực hiện 22 nghìn USDC đổi sang USDT
Nhấn vào liên kết giao dịch 2 trong hình trên để xem hình dưới đây.
Như trong hình trên, giao dịch 2 của nạn nhân bị ảnh hưởng bởi giao dịch 1, 220.000 USDC chỉ nhận được 5.272 USDT, vô tình mất 170.000 USDT. Tại sao lại nói là vô tình? Bởi vì, nếu nạn nhân giao dịch qua Uniswap, thì khi anh ta gửi giao dịch, anh ta sẽ thấy giao diện như sau.
Qua hình trên, bạn sẽ thấy rằng nạn nhân ít nhất sẽ nhận được 220.000 là được đảm bảo. Lý do nạn nhân cuối cùng chỉ nhận được hơn 5000 USDT là do đã xảy ra trượt giá lớn, đạt hơn 90%. Tuy nhiên, Uniswap có giới hạn trượt giá tối đa mặc định là 5.5%, xem hình dưới.
Có nghĩa là, nếu nạn nhân thực hiện giao dịch thông qua giao diện Uniswap, thì họ nên nhận được ít nhất 208381 USDT (= 220510 * 94.5%). Bạn có thể thắc mắc rằng, tại sao trong bản ghi blockchain ở trên lại hiển thị giao dịch này được thực hiện trên "Uniswap V3".
Bởi vì, giao dịch blockchain có phần đầu và phần đuôi tách biệt. Điều được đề cập ở trên "Uniswap V3" là chỉ đến quỹ thanh khoản USDC-USDT của Uniswap, quỹ này là công khai, bất kỳ phần đầu giao dịch nào cũng có thể giao dịch thông qua quỹ này.
Cũng chính vì điều này, có người nghi ngờ nạn nhân không đơn giản, không phải là người bình thường, nếu không sẽ không xảy ra mức trượt giá lớn như vậy, có thể là đang sử dụng cuộc tấn công MEV để rửa tiền. Chúng ta sẽ nói về điều này sau.
3.3 Giao dịch 3, thu hoạch + phân chia
Nhấp vào liên kết để xem chi tiết giao dịch 3, như hình trên. Chúng ta sẽ lần lượt nói về 3 giao dịch A, B, C.
Giao dịch A, phục hồi tính thanh khoản trong bể về trạng thái bình thường, đã đổi 17,32 triệu USDT để lấy lại 18,60 triệu USDC;
Giao dịch B, chuẩn bị chia chác, sẽ đổi một phần lợi nhuận - 20.4 nghìn USDC lấy 105 ETH;
Giao dịch C, chia phần, thanh toán 100.558 ETH cho người xác thực bob-The-Builder.eth.
Đến đây, cuộc tấn công sandwich kết thúc.
Bây giờ hãy trả lời một câu hỏi rất quan trọng đã được đề cập ở trên: Kẻ tấn công đã thực hiện một cuộc tấn công trị giá 18 triệu bằng cách sử dụng 1.09 triệu USDC như thế nào.
4. Kẻ tấn công đã thực hiện cuộc tấn công vào hồ 18 triệu USDC như thế nào
Nguyên nhân khiến kẻ tấn công chỉ cần 1,09 triệu USDC vốn để thực hiện cuộc tấn công trị giá 18 triệu đô la là vì trong thế giới blockchain tồn tại một cơ chế kỳ diệu và đặc biệt - Hoán đổi chớp nhoáng (Flash Swap) của Uniswap V3.
4.1 Thế nào là Hoán đổi Nhanh (Flash Swap)?
Nói một cách đơn giản:
Chỉ cần toàn bộ giao dịch được hoàn thành trong cùng một giao dịch, Uniswap cho phép hành vi "lấy hàng trước, trả tiền sau" này. Xin lưu ý, phải hoàn thành trong cùng một giao dịch. Thiết kế như vậy nhằm bảo vệ tính an toàn của nền tảng Uniswap.
Thiết kế của trao đổi chớp nhoáng nhằm mục đích thực hiện các giao dịch chênh lệch trên chuỗi hiệu quả hơn (Arbitrage), nhưng không may đã bị những kẻ tấn công MEV lợi dụng, trở thành công cụ để thao túng thị trường.
4.2 Hoán đổi chớp nhoáng, nó hỗ trợ như thế nào?
Dưới đây chúng ta sẽ xem hình và nói về bức tranh, từng bước tìm hiểu cách thức thực hiện việc trao đổi chớp nhoáng trong cuộc tấn công lần này, xem hình dưới.
Sau giao dịch này (giao dịch 1), số dư tài khoản của kẻ tấn công đã giảm 1,09 triệu USDC, vì trong số 18,64 triệu USDC được trả lại cho Uniswap, chỉ có 17,55 triệu USDC là được đổi từ Curve, phần còn lại 1,09 triệu USDC là vốn tự có của kẻ tấn công.
Bạn nên nhận thấy rằng giao dịch này thực sự tiêu tốn của kẻ tấn công 1,09 triệu. Tuy nhiên, giao dịch thứ 3, cũng thông qua phương thức hoán đổi chớp nhoáng, không chỉ lấy lại 1,09 triệu USDC mà còn kiếm được hơn 200.000 nhân dân tệ.
Dưới đây, chúng ta sẽ phân tích từng bước dựa trên dữ liệu của giao dịch 3.
Bạn có thể sẽ ngạc nhiên tại sao kẻ tấn công lại sẵn sàng trao tay cho những người xác thực khoản lợi nhuận lên đến 200.000 đô la?
4.3 Tại sao phải cho 200.000 đô la tiền "tip"?
Trên thực tế, đây không phải là sự hào phóng, mà là điều kiện cần thiết cho một cuộc tấn công MEV thành công như một cuộc tấn công bánh sandwich:
Do đó, kẻ tấn công thà hy sinh phần lớn lợi nhuận để đảm bảo cuộc tấn công thành công, và giữ lại một phần lợi nhuận cho bản thân.
Cần lưu ý rằng, tấn công MEV cũng có chi phí, trong giao dịch hoán đổi tức thời trên Uniswap có chi phí, trong giao dịch trên Curve cũng có chi phí, chỉ là do tỷ lệ phí khá thấp khoảng 0.01~0.05%, nên so với lợi nhuận từ tấn công thì có thể không đáng kể.
Cuối cùng, xin nhắc lại rằng việc phòng ngừa tấn công MEV thực sự rất đơn giản, bạn chỉ cần: thiết lập mức độ chịu đựng trượt giá, không vượt quá 1%; thực hiện các giao dịch lớn thành nhiều lệnh nhỏ. Vì vậy, bạn không cần phải vì một sự cố mà từ chối giao dịch trên DEX (sàn giao dịch phi tập trung) nữa.
Kết luận: Cảnh báo và tiết lộ trong rừng tối
Sự kiện tấn công MEV trị giá 215.000 USD này chắc chắn là một lần thể hiện tàn khốc khác của quy tắc "rừng tối" trong thế giới blockchain. Nó sống động tiết lộ rằng trong môi trường phi tập trung, không cần cấp phép, có những trò chơi phức tạp tiềm ẩn nhằm khai thác lỗ hổng cơ chế để thu lợi.
Từ một góc độ cao hơn, sự xuất hiện của MEV là minh chứng cho hiệu ứng hai mặt của tính minh bạch và khả năng lập trình của blockchain.
Đây không chỉ là một hành vi hack đơn giản, mà là sự hiểu biết sâu sắc và khai thác cơ chế nền tảng của blockchain, nó thử thách tính linh hoạt của thiết kế giao thức và cũng thách thức ý thức về rủi ro của các bên tham gia.
Hiểu MEV, nhận thức được rủi ro của nó, bạn mới có thể điều hướng tốt hơn trong thế giới số đầy cơ hội nhưng cũng ẩn chứa nhiều nguy cơ này. Hãy nhớ rằng, trong "rừng tối" của blockchain, chỉ có sự tôn trọng quy tắc và nâng cao nhận thức mới có thể giúp bạn tránh trở thành con mồi tiếp theo bị nuốt chửng.
Đây cũng là hiệu quả mà tôi muốn đạt được thông qua bài viết này.