
Phân tích toàn diện tấn công sandwich MEV: Từ sắp xếp đến chuỗi chết chóc trong giao dịch chớp nhoáng
Tuyển chọn TechFlowTuyển chọn TechFlow

Phân tích toàn diện tấn công sandwich MEV: Từ sắp xếp đến chuỗi chết chóc trong giao dịch chớp nhoáng
Hiểu được MEV và nhận thức rõ các rủi ro của nó, chúng ta mới có thể điều hướng tốt hơn trong thế giới kỹ thuật số đầy cơ hội nhưng cũng tiềm ẩn nhiều nguy cơ này.
Tác giả: Daii
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 khiến mất tới 215.000 USD, sự việc này nhanh chóng lan truyền trên mạng.

Tóm lại, người dùng này định đổi 220.800 USD tiền ổn định USDC sang USDT tương đương trên nhóm giao dịch Uniswap v3, nhưng cuối cùng chỉ nhận được 5.272 USDT, tài sản bốc hơi 215.700 USD trong vài giây ngắn ngủi, như hình dưới đây.

Hình trên là ảnh chụp bản ghi giao dịch trên chuỗi. Nguyên nhân sâu xa của bi kịch này chính là do gặp phải "tấn công sandwich" (Sandwich Attack) – cái tên nổi tiếng xấu trong thế giới blockchain.

Michael là người đầu tiên tiết lộ vụ tấn công MEV này (xem hình trên), ông giải thích:
An MEV bot front-ran the tx by swapping all the USDC liquidity out. After the transaction executed, they put back the liquidity. The attacker tipped a block builder (bobTheBuilder) $200k and profited $8k from this transaction. Dịch: Bot MEV đã đi trước giao dịch bằng cách rút toàn bộ thanh khoản USDC ra. Sau khi giao dịch thực hiện xong, họ đưa thanh khoản trở lại. Kẻ tấn công đã trả thưởng cho người xây dựng khối (bobTheBuilder) 200.000 USD và thu lợi 8.000 USD từ giao dịch này.
Nội dung trên có lỗi chính tả, bot tấn công MEV thực tế đã rút lượng lớn USDT chứ không phải USDC.
Tuy nhiên, sau khi đọc lời giải thích và các bản tin báo chí, 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), "đi trước giao dịch" (front-ran the tx), "đưa thanh khoản trở lại" (put back the liquidity), "trả thưởng cho người xây dựng khối" (tipped a block builder), v.v.
Trong bài viết hôm nay, chúng tôi 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, giúp bạn khám phá thế giới tối tăm của MEV.
Trước 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ị khai thác được bởi thợ đào (Miner Extractable Value), đề cập đến lợi nhuận bổ sung mà thợ đào có thể thu được bằng cách sắp xếp lại, chèn thêm hoặc loại bỏ các giao dịch trong khối blockchain. Hành động này có thể khiến người dùng thông 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.
Khi các mạng blockchain như Ethereum chuyển từ cơ chế đồng thuận Bằng chứng Công suất (Proof-of-Work, PoW) sang cơ chế đồng thuận Bằng chứng Cổ phần (Proof-of-Stake, PoS), quyền kiểm soát thứ tự giao dịch đã chuyển từ thợ đào sang các trình xác thực. Do đó, thuật ngữ cũng thay đổi từ "Giá trị khai thác được bởi thợ đào" (Miner Extractable Value) thành "Giá trị trích xuất 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 trích xuất giá trị thông qua thao túng thứ tự giao dịch vẫn giữ nguyên.
Nội dung trên vẫn còn khá chuyên môn, bạn chỉ cần nhớ: MEV tồn tại vì thợ đào trước đây và trình xác thực hiện nay có quyền sắp xếp các giao dịch trong khu vực "mempool". Việc sắp xếp này xảy ra bên trong một khối, hiện tại Ethereum tạo ra một khối khoảng 11 giây, nghĩa là cứ mỗi 11 giây lại có một lần thực hiện quyền lực này. Vụ tấn công MEV lần này cũng được thực hiện thông qua việc trình xác thực sắp xếp thứ tự giao dịch.
Nhấp vào liên kết này, bạn sẽ thấy nội dung giao dịch trong khối số 22029771 liên quan đến vụ tấn công, như hình dưới đây.

Lưu ý rằng ba giao dịch 1, 2, 3 trong hình trên chính là vụ tấn công MEV mà chúng tôi đã nói ở đầu bài viết, thứ tự này được trình xác thực (bobTheBuilder) sắp đặt. Tại sao lại có thể như vậy?
2. Nguyên lý của MEV
Để hiểu cách thức hoạt động của MEV, trước tiên chúng ta cần hiểu rõ cách blockchain ghi nhận 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 coi là một sổ cái không ngừng mở rộng, 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, ví dụ như số dư của từng tài khoản, lượng dự trữ các loại token trong nhóm 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 blockchain, tất cả các giao dịch trong khối đó sẽ được thực hiện tuần tự theo thứ tự được sắp xếp trong khối. Mỗi khi thực hiện một giao dịch, trạng thái tổng thể của blockchain sẽ thay đổi tương ứng.
Nói cách khác, không chỉ thứ tự các khối quan trọng, mà thứ tự giao dịch trong khối cũng rất quan trọng. Vậy thì thứ tự giao dịch trong khối được quyết định như thế nào?
2.2 Trình xác thực quyết định thứ tự giao dịch
Khi người dùng khởi tạo một giao dịch trên mạng blockchain, ví dụ như giao dịch đổi USDC sang USDT thông qua Uniswap, giao dịch này trước tiên sẽ được phát sóng đến các nút trong mạng. Sau khi được xác minh sơ bộ, giao dịch sẽ đi vào khu vực gọi là "mempool". Mempool giống như một khu vực chờ đợi, 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ợ đào trước đây (trong hệ thống PoW), hoặc các trình xác thực hiện nay (trong hệ thống PoS) có quyền lựa chọn giao dịch từ mempool và quyết định thứ tự sắp xếp các giao dịch đó trong khối tiếp theo.
Thứ tự giao dịch trong khối cực kỳ quan trọng. Trước khi một khối được xác nhận cuối cùng và thêm vào blockchain, các giao dịch trong khối sẽ được thực hiện theo thứ tự do trình xác thực (ví dụ 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 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 trình xác thực ưu tiên xử lý các giao dịch cụ thể, trì hoãn hoặc loại bỏ các giao dịch khác, thậm chí chèn các giao dịch riêng của họ để tối đa hóa lợi nhuận.
Việc sắp xếp giao dịch trong giao dịch này cũng rất quan trọng, chỉ cần sai lệch nhỏ là không thể tấn công thành công.
2.3 Thứ tự giao dịch trong vụ tấn công MEV lần này
Chúng ta hãy tìm hiểu sơ qua ba giao dịch liên quan đến vụ tấn công MEV lần này:

-
Giao dịch 1 (giao dịch đầu tiên của kẻ tấn công): Được thực hiện trước giao dịch của nạn nhân. Mục đích của giao dịch này thường là đẩy giá token mà nạn nhân muốn giao dịch lên cao.
-
Giao dịch 2 (giao dịch của nạn nhân): Được thực hiện sau giao dịch đầu tiên của kẻ tấn công. Do hành động trước đó của kẻ tấn công, lúc này giá trong nhóm giao dịch bất lợi cho nạn nhân, anh ta phải trả nhiều USDC hơn để đổi được lượng USDT tương đương, hoặc chỉ nhận được ít USDT hơn.
-
Giao dịch 3 (giao dịch thứ hai của kẻ tấn công): Được thực hiện sau giao dịch của nạn nhân. Mục đích của giao dịch này thường là tận dụng biến động giá mới do giao dịch của nạn nhân gây ra để kiếm lợi.
Trình xác thực thực hiện sắp xếp giao dịch trong vụ tấn công MEV lần này là bob-The-Builder.eth, người chịu trách nhiệm sắp xếp thứ tự giao dịch 1, 2, 3 như vậy. Tất nhiên, bobTheBuilder không làm miễn phí, ông ta tham gia sắp xếp này và thu về hơn 100 ETH, trong khi kẻ phát động tấn công MEV chỉ thu được 8.000 USD. Nguồn thu nhập của họ chính là từ giao dịch thứ hai của nạn nhân.
Tóm lại, kẻ tấn công (bot MEV) và trình xác thực (bobTheBuilder) cấu kết với nhau, khiến nạn nhân ở giao dịch thứ hai mất 215.000 USD, trong đó kẻ tấn công được 8.000 USD, trình xác thực được 200.000 USD (hơn 100 ETH).
Họ sử dụng một phương pháp tấn công có tên gọi sinh động – "tấn công sandwich". Dưới đây, chúng ta sẽ phân tích từng giao dịch một cách chi tiết để bạn hoàn toàn hiểu rõ MEV và "tấn công sandwich" phức tạp này thực sự diễn ra như thế nào.
3. Phân tích toàn diện tấn công Sandwich
Được gọi là "tấn công sandwich" (Sandwich Attack) 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 toàn bộ thứ tự giao dịch trông giống cấu trúc một chiếc bánh sandwich (xem hình trên).
-
Giao dịch 1 và giao dịch 3 đảm nhiệm các chức năng khác nhau. Nói đơn giản, giao dịch 1 phụ trách gây án, giao dịch 3 phụ trách thu hoạch và chia lợi nhuận. Cụ thể, toàn bộ quá trình diễn ra như sau:
-
3.1 Giao dịch 1, phụ trách nâng giá USDT
-
Nhấp vào liên kết giao dịch số 1 ở hình trên, bạn sẽ thấy nội dung chi tiết của giao dịch 1. Cách mà kẻ tấn công nâng giá USDT rất trực tiếp: dùng 18,65 triệu USDC để đổi hết 17,58 triệu USDT trong nhóm, như hình dưới đây.

Lúc này, trong nhóm thanh khoản còn lại lượng lớn USDC và lượng nhỏ USDT. Nếu theo báo cáo tin tức, trước khi bị tấn công, nhóm thanh khoản Uniswap có khoảng 19,8 triệu USDC và USDT tương ứng, thì sau khi thực hiện giao dịch 1, nhóm còn lại 2,22 triệu USDT (=19,8 - 17,58), trong khi số dư USDC tăng lên khoảng 38,45 triệu (=19,8 + 18,65).
Lúc này tỷ lệ đổi giữa USDC và USDT trong nhóm này không còn là 1:1 nữa, mà là 1:17, nghĩa là lúc này cần 17 USDC để đổi được 1 USDT, mặc dù tỷ lệ này chỉ mang tính chất tham khảo vì đây là nhóm V3, thanh khoản bên trong không phân bố đều.
Thêm một điểm nữa, tôi phải nói với bạn. Thực tế, kẻ tấn công không huy động một lần 18,65 triệu USDC, số lượng USDC thực tế sử dụng chỉ là 1,09 triệu, chưa đến 6%. Làm thế nào hắn ta làm được điều này? Chúng ta sẽ giải thích kỹ sau khi phân tích xong vụ tấn công.
3.2 Giao dịch 2, thực hiện đổi 220.000 USDC sang USDT
Nhấp vào liên kết giao dịch 2 ở hình trên, bạn sẽ thấy hình dưới đây.

Như hình trên, do ảnh hưởng của giao dịch 1, giao dịch 2 của nạn nhân chỉ nhận được 5.272 USDT với 220.000 USDC, âm thầm mất mát 170.000 USDT. Tại sao nói là âm thầm? Bởi vì nếu nạn nhân thực hiện giao dịch qua Uniswap, khi gửi giao dịch anh ta sẽ thấy giao diện như sau.

Qua hình trên bạn thấy rằng, nạn nhân ít nhất cũng được đảm bảo nhận được 220.000. Tuy nhiên, cuối cùng nạn nhân chỉ nhận được hơn 5.000 USDT vì xảy ra trượt giá khổng lồ, vượt quá 90%. Nhưng Uniswap có giới hạn trượt giá tối đa mặc định là 5,5%, như hình dưới đây.

Nói cách khác, nếu nạn nhân thực hiện giao dịch qua giao diện Uniswap, anh ta ít nhất cũng nên nhận được 208.381 USDT (= 220.510 * 94,5%). Bạn có thể thắc mắc, tại sao bản ghi blockchain lại hiển thị giao dịch này được thực hiện trên "Uniswap V3".
Bởi vì giao diện và nền tảng của giao dịch blockchain là tách biệt. "Uniswap V3" được nhắc đến ở trên ám chỉ nhóm thanh khoản USDC-USDT của Uniswap, nhóm này là công khai, bất kỳ giao diện giao dịch nào cũng có thể thực hiện giao dịch thông qua nhóm này.
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 người bình thường, nếu không sẽ không xảy ra trượt giá lớn như vậy, có thể đang lợi dụng tấn công MEV để rửa tiền. Chúng ta sẽ bàn vấn đề này sau.
3.3 Giao dịch 3, thu hoạch + chia lợi nhuận

Nhấp vào liên kết, bạn có thể xem chi tiết giao dịch 3, như hình trên. Chúng ta lần lượt phân tích ba giao dịch A, B, C.
-
Giao dịch A: Khôi phục lại thanh khoản trong nhóm, dùng 17,32 triệu USDT đổi lại 18,60 triệu USDC;
-
Giao dịch B: Chuẩn bị chia lợi nhuận, đổi một phần lợi nhuận – 204.000 USDC sang 105 ETH;
-
Giao dịch C: Chia lợi nhuận, chuyển 100,558 ETH cho trình xác thực bob-The-Builder.eth.
Tới đây, cuộc tấn công sandwich kết thúc.
Bây giờ hãy trả lời câu hỏi quan trọng đã nêu ở trên: Làm thế nào kẻ tấn công chỉ dùng 1,09 triệu USDC lại thực hiện được vụ tấn công quy mô 18 triệu?
4. Kẻ tấn công đã thực hiện vụ tấn công nhóm 18 triệu USDC như thế nào?
Lý do kẻ tấn công chỉ cần 1,09 triệu USDC vốn, lại có thể thực hiện vụ tấn công quy mô 18 triệu USD là do trong thế giới blockchain tồn tại một cơ chế kỳ diệu và đặc biệt – Flash Swap (trao đổi chớp nhoáng) của Uniswap V3.
4.1 Flash Swap (Trao đổi chớp nhoáng) là gì?
Đơn giản来说:
Flash Swap cho phép người dùng trong cùng một giao dịch rút tài sản từ nhóm Uniswap trước, sau đó dùng tài sản khác (hoặc cùng loại tài sản cộng phí) để hoàn trả.
Miễn là toàn bộ thao tác hoàn tất trong cùng một giao dịch, Uniswap cho phép hành vi "nhận hàng trước, trả tiền sau". Lưu ý, phải hoàn tất trong cùng một giao dịch. Thiết kế này nhằm đảm bảo an toàn cho nền tảng Uniswap:
-
Vay không rủi ro: Uniswap cho phép người dùng tạm thời rút tiền từ nhóm mà không cần thế chấp (giống như vay), nhưng bắt buộc phải hoàn trả ngay khi kết thúc giao dịch.
-
Tính nguyên tử (Atomicity): Toàn bộ thao tác phải là nguyên tử, nghĩa là hoặc hoàn toàn thành công (tiền được hoàn trả), hoặc thất bại hoàn toàn (giao dịch bị hoàn tác).
Mục đích ban đầu của Flash Swap là để thực hiện chênh lệch giá hiệu quả hơn trên chuỗi (Arbitrage), nhưng đáng tiếc lại bị kẻ tấn công MEV lợi dụng, trở thành vũ khí thao túng thị trường.
4.2 Flash Swap hỗ trợ như thế nào?
Dưới đây chúng ta sẽ xem hình và phân tích từng bước cách Flash Swap hỗ trợ trong vụ tấn công này, như hình dưới đây.

-
F1: Kẻ tấn công dùng 701 WETH sở hữu từ AAVE vay 1,09 triệu USDC;
-
F2: Kẻ tấn công khởi tạo yêu cầu Flash Swap, rút trước 17,58 triệu USDT từ nhóm Uniswap (không cần trả tiền trước), tài khoản tạm thời tăng thêm 17,58 triệu USDT;
-
F3: Kẻ tấn công nhanh chóng chuyển 17,58 triệu USDT này vào nhóm Curve, đổi lại 17,55 triệu USDC; tài khoản giảm 17,58 triệu USDT, tăng 17,55 triệu USDC. Qua hình dưới đây bạn thấy tại sao kẻ tấn công chọn Curve vì thanh khoản ở đây rất dồi dào, USDT có hơn 70,54 triệu, USDC có 50,71 triệu, trượt giá tương đối thấp.

-
F4: Kẻ tấn công dùng 17,55 triệu USDC đổi từ Curve, cộng thêm 1,09 triệu USDC chuẩn bị sẵn (vay từ Aave), tổng cộng 18,64 triệu USDC, hoàn trả một lần cho Uniswap, hoàn tất Flash Swap;
Sau giao dịch này (giao dịch 1), số dư tài khoản kẻ tấn công giảm 1,09 triệu USDC, vì trong 18,64 triệu USDC hoàn trả cho Uniswap, chỉ có 17,55 triệu USDC là đổi từ Curve, còn lại 1,09 triệu USDC là vốn tự có.
Bạn hẳn đã nhận ra, giao dịch này thực tế khiến kẻ tấn công thiệt hại 1,09 triệu. Nhưng ở giao dịch 3 sau đó, bằng cách sử dụng lại thủ thuật Flash Swap, không những lấy lại 1,09 triệu USDC, mà còn kiếm thêm hơn 200.000.

Dưới đây chúng ta sẽ phân tích từng bước theo dữ liệu giao dịch 3.
-
K1: Kẻ tấn công dùng Flash Swap rút 18,60 triệu USDC từ Uniswap;
-
K2: Kẻ tấn công dùng một phần 17,30 triệu USDC vừa rút từ Uniswap để đổi lại 17,32 triệu USDT;
-
K1: Kẻ tấn công hoàn trả 17,32 triệu USDT đổi từ Curve cho Uniswap. Flash Swap hoàn tất. Bạn cần lưu ý, qua K2, kẻ tấn công chỉ tốn 17,30 triệu USDC để có được 17,32 triệu USDT. Trong số 130 triệu USDC còn lại (= 18,60 - 17,30), có 1,09 triệu vốn tự có, phần còn lại 210.000 USDC chính là lợi nhuận từ vụ tấn công.
-
K3: Kẻ tấn công hoàn trả vốn cho AAVE, lấy lại 701 WETH, đồng thời đổi 200.000 USDC sang 105 ETH, chuyển 100,558 ETH cho trình xác thực làm tiền boa (khoảng 200.000 USD), bản thân chỉ giữ lại lợi nhuận chưa đến 10.000 USD.
Bạn có thể ngạc nhiên, tại sao kẻ tấn công lại sẵn sàng nhường lợi nhuận lên tới 200.000 USD cho trình xác thực?
4.3 Tại sao phải đưa "tiền boa" 200.000 USD?
Thực tế, đây không phải là sự hào phóng, mà là điều kiện cần thiết để tấn công sandwich kiểu MEV thành công:
Chìa khóa thành công của vụ tấn công là kiểm soát chính xác thứ tự giao dịch, và người kiểm soát thứ tự giao dịch chính là trình xác thực (bobTheBuilder).
Trình xác thực không chỉ giúp kẻ tấn công đảm bảo giao dịch của nạn nhân nằm giữa hai giao dịch tấn công, mà quan trọng hơn là đảm bảo các bot MEV cạnh tranh khác không thể chen ngang hoặc làm gián đoạn quá trình tấn công.
Vì vậy, kẻ tấn công sẵn sàng hy sinh phần lớn lợi nhuận để đảm bảo thành công, đồng thời giữ lại một phần lợi nhuận cho mình.
Cần lưu ý đặc biệt, tấn công MEV cũng có chi phí, Flash Swap trên Uniswap có chi phí, giao dịch trên Curve cũng có chi phí, nhưng do phí suất thấp khoảng 0,01~0,05%, nên so với lợi nhuận thu được có thể coi là không đáng kể.
Cuối cùng nhắc lại, phòng thủ chống MEV thực ra cũng rất đơn giản, bạn chỉ cần: Đặt mức trượt giá hợp lý, không vượt quá 1%; chia giao dịch lớn thành nhiều giao dịch nhỏ. Vì vậy, bạn hoàn toàn không cần lo lắng quá mức mà từ bỏ luôn giao dịch trên DEX (sàn giao dịch phi tập trung).
Kết luận: Cảnh báo và bài học từ rừng tối
Vụ tấn công MEV 215.000 USD này rõ ràng là một lần nữa phơi bày luật "rừng tối" khắc nghiệt trong thế giới blockchain. Nó sinh động tiết lộ trong môi trường phi tập trung, không cần giấy phép, tiềm ẩn những trò chơi phức tạp nhằm chiếm đoạt lợi ích bằng cách lợi dụng kẽ hở cơ chế.
Xét ở cấp độ cao hơn, sự xuất hiện của MEV là biểu hiện hiệu ứng "lưỡi dao hai lưỡi" của tính minh bạch và khả năng lập trình của blockchain.
Một mặt, mọi giao dịch công khai, có thể kiểm tra, giúp hành vi tấn công có thể bị truy vết và phân tích;
Mặt khác, logic phức tạp của hợp đồng thông minh và tính xác định trong thực thi giao dịch lại tạo cơ hội cho những người tham gia tinh ranh.
Đây không đơn thuần là hành vi hacker, mà là sự hiểu biết sâu sắc và tận dụng cơ chế nền tảng blockchain, nó thử thách độ vững chắc trong thiết kế giao thức, cũng thách thức nhận thức rủi ro của người tham gia.
Hiểu rõ MEV, nhận thức được rủi ro, mới có thể vận hành tốt hơn trong thế giới số đầy cơ hội nhưng cũng tiềm ẩn nguy cơ này. Hãy nhớ rằng, trong "rừng tối" blockchain, chỉ có tôn trọng quy tắc, nâng cao nhận thức, mới tránh được trở thành con mồi tiếp theo bị nuốt chửng.
Đây cũng là điều tôi mong muốn đạt được qua bài viết này.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














