Phân tích toàn diện về cuộc tấn công MEV sandwich: Chuỗi liên kết chết người từ sắp xếp đến trao đổi chớp nhoáng

Tác giả: Daii

Vào thứ Tư tuần trước (ngày 12 tháng 3), một nhà giao dịch tiền điện tử đã 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 muốn đổi 220.800 USD stablecoin USDC lấy USDT tương đương trong nhóm giao dịch Uniswap v3, nhưng chỉ nhận được 5.272 USDT và tài sản ngay lập tức bốc hơi 215.700 chỉ trong vài giây, như thể hiện trong hình bên dưới.

Hình trên là ảnh chụp màn hình ghi lại giao dịch trên chuỗi. Nguyên nhân cơ bản của thảm kịch này là đã gặp phải "Cuộc tấn công sandwich" (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:

Một bot MEV đã chạy trước tx bằng cách hoán đổi toàn bộ thanh khoản USDC. Sau khi giao dịch được thực hiện, họ đã đưa thanh khoản trở lại. Kẻ tấn công đã thưởng cho một nhà xây dựng khối (bobTheBuilder) 200.000 đô la và đã thu lợi 8.000 đô la từ giao dịch này.

Nội dung trên có lỗi chính tả, 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 lời giải thích và các báo cáo tin tức của anh ấy, bạn có thể vẫn còn bối rối, vì có quá nhiều thuật ngữ mới, như tấn công bánh mì kẹp (Sandwich Attack), chạy trước (front-ran the tx), đưa lại 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 tôi sẽ lấy cuộc tấn công MEV này làm ví dụ, tháo dỡ toàn bộ quá trình và đưa bạn qua thế giới đen tối 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), đề cập đến lợi nhuận bổ sung mà thợ mỏ có thể thu được bằng cách thay đổi thứ tự, chèn hoặc loại bỏ giao dịch trong các khối blockchain. Hành động này có thể dẫn đến việc người dùng thông thường phải chịu 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 việc (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ừ các thợ đào sang các xác thực viên. Do đó, thuật ngữ cũng đã phát triển từ "Giá trị có thể khai thác bởi thợ đào" (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 không thay đổi.

Nội dung ở trên vẫn có chút chuyên ngành, bạn chỉ cần nhớ: MEV tồn tại là vì các thợ mỏ trước đây, và các xác nhận viên hiện tại có quyền sắp xếp các giao dịch trong bộ nhớ (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, tức là cứ 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 các xác nhận viên.

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ập ở đầu bài viết này, thứ tự này là do người xác thực (bobTheBuilder) sắp xếp. Tại sao lại có thể như vậy?

  1. Nguyên lý của MEV

Để hiểu cách thức 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 coi là một sổ cái đang phát triển không ngừ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, chẳng hạn như số dư của mỗi tài khoản, lượng dự trữ của các token khác nhau trong bể giao dịch Uniswap, đề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 được chứa trong khối này sẽ được thực hiện 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.

Nói cách khác, 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 khởi tạo một giao dịch trên mạng blockchain, chẳng hạn như giao dịch chuyển đổi USDC sang USDT 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 thực sơ bộ, giao dịch này sẽ vào một khu vực được gọi là "hồ nhớ" (mempool). Hồ nhớ 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), 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ừ 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ự giao dịch trong một 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 đó sẽ được thực hiện theo thứ tự được xác định bởi các xác thực viên (chẳng hạn như bobTheBuilder). Đ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 pool giao dịch, thì thứ tự thực hiện của những 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 các xác thực viên ưu tiên xử lý các giao dịch cụ thể, trì hoãn hoặc loại trừ các giao dịch khác, thậm chí chèn các giao dịch của chính 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 sai sót một chút là không thể tấn công thành 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 tìm hiểu một cách đơn giản về 3 giao dịch liên quan đến cuộc 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): 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á của token mà nạn nhân muốn giao dịch lên.

Giao dịch 2 (Giao dịch của nạn nhân): Thực hiện sau giao dịch đầu tiên của kẻ tấn công. Do các hoạt động trước đó của kẻ tấn công, giá trong pool giao dịch lúc này không có lợi cho nạn nhân, anh ta cần phải trả nhiều USDC hơn để đổi lấy USDT tương đương, hoặc chỉ có thể đổi được ít USDT hơn.

Giao dịch 3 (Giao dịch thứ hai của kẻ tấn công): 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 sự biến động giá mới gây ra bởi giao dịch của nạn nhân để thu lợi.

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 không phải làm miễn phí, anh ta đã tham gia vào việc sắp xếp và thu được hơn 100 ETH, 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à giao dịch thứ hai của nạn nhân.

Một câu, kẻ tấn công (robot MEV) đã thông đồng với người xác thực (bobTheBuilder), khiến nạn nhân của giao dịch thứ hai mất 215.000 USD, trong đó kẻ tấn công nhận được 8.000 USD, người xác thực nhận được 200.000 USD (hơn 100 ETH).

Họ sử dụng một phương pháp tấn công có một cái tên hình tượng - 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 khá phức tạp của MEV là như thế nào?

  1. Phân tích toàn diện về cuộc tấn công sandwich

Lý do được gọi là cuộc 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 sandwich (xem hình trên).

Giao dịch 1 và Giao dịch 3 đảm nhận những chức năng khác nhau. Nói đơn giản, Giao dịch 1 chịu trách nhiệm thực hiện hành vi phạm tội, 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 nội dung chi tiết của giao dịch số 1. Kẻ tấn công đã tăng giá USDT một cách trực tiếp, đó là sử dụng 18,65 triệu USDC để đổi hết 17,58 triệu USDT bên trong, xem hình dưới.

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ư các báo cáo tin tức cho biết, trước khi bị tấn công, trong thanh khoản của Uniswap có khoảng 19,8 triệu USDC và USDT, thì sau giao dịch 1, trong bể chỉ còn 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ồ bơi này không còn là 1:1 nữa, mà là 1:17, tức 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ồ bơi này thuộc V3, bên trong tính thanh khoản không được phân bố đồng đều.

Còn một điều nữa, tôi muốn nói với bạn. Trên thực tế, kẻ tấn công không sử dụng 18,65 triệu USDC một lần, mà chỉ sử dụng 1,09 triệu USDC, thậm chí còn chưa đến 6%. Anh ta đã làm như thế nào? Chúng ta sẽ nói chi tiết hơn khi kết thúc phần tấn công.

3.2 Giao dịch 2, thực hiện 22 vạn USDC đổi sang USDT

Nhấp vào liên kết giao dịch 2 trong hình trên để xem hình dưới đây.

Như 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 thực hiện giao dịch qua Uniswap, thì khi nộp giao dịch, họ 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 nhận được 220.000 nên sẽ được đảm bảo. Lý do nạn nhân cuối cùng chỉ nhận được hơn 5000 USDT là do có sự 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.

Nói cách khác, nếu nạn nhân thực hiện giao dịch 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, 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 trước và phần sau tách biệt. "Uniswap V3" mà đã đề cập ở trên chỉ đến bể thanh khoản USDC-USDT của Uniswap, bể này là công khai, bất kỳ phần trước nào của giao dịch cũng có thể giao dịch thông qua bể này.

Cũng chính vì điều này, có người nghi ngờ rằ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à sử dụng tấn công MEV để rửa tiền. Điều này, chúng ta sẽ nói sau.

3.3 Giao dịch 3, thu hoạch + chia chác

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ề ba 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 18,60 triệu USDC.

Giao dịch B, chuẩn bị chia chác, đổi một phần lợi nhuận - 20.4 nghìn USDC lấy 105 ETH;

Giao dịch C, phân chia, 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 cuộc tấn công trị giá 18 triệu bằng cách nào với 1,09 triệu USDC.

  1. Kẻ tấn công đã thực hiện cuộc tấn công vào pool 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 đã có thể thực hiện cuộc tấn công cấp độ 18 triệu đô la là do trong thế giới blockchain tồn tại một cơ chế kỳ diệu và đặc biệt - Hoán đổi nhanh (Flash Swap) của Uniswap V3.

4.1 Flash Swap là gì?

Nói một cách đơn giản:

Chuyển đổi chớp nhoáng cho phép người dùng rút tài sản từ bể Uniswap trước, sau đó sử dụng một tài sản khác (hoặc cùng một tài sản cộng với phí) để hoàn trả trong cùng một giao dịch.

Chỉ cần toàn bộ thao tác được thực hiện trong cùng một giao dịch, Uniswap cho phép hành vi "lấy hàng trước, thanh toán sau" này. Xin lưu ý, phải được hoàn thành trong cùng một giao dịch. Thiết kế như vậy nhằm đảm bảo an toàn cho nền tảng Uniswap.

Cho vay không rủi ro: Uniswap cho phép người dùng rút tiền từ pool tạm thời mà không cần thế chấp (giống như vay mượn), nhưng phải trả lại ngay lập tức khi giao dịch kết thúc.

Tính nguyên tử (Atomicity): Toàn bộ thao tác phải là nguyên tử, hoặc hoàn toàn thành công (tiền được hoàn trả), hoặc hoàn toàn thất bại (giao dịch bị hoàn lại).

Mục đích thiết kế của việc trao đổi chớp nhoáng là để thực hiện việc kiếm lợi từ chênh lệch giá trên chuỗi một cách 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, là cách nào để hỗ trợ?

Dưới đây chúng ta sẽ xem hình ảnh và nói về nó, từng bước một để 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 này, xem hình dưới.

F1 kẻ tấn công đã vay 1,09 triệu USDC từ AAVE bằng 701 WETH của riêng mình;

F2 kẻ tấn công phát động yêu cầu đổi tiền nhanh, trước tiên rút 17,58 triệu USDT từ bể Uniswap (lúc này không cần thanh toán trước) tài khoản của kẻ tấn công tạm thời tăng 17,58 triệu USDT;

F3 kẻ tấn công nhanh chóng đưa 17,58 triệu USDT vào bể Curve, đổi lại 17,55 triệu USDC. Tài khoản của kẻ tấn công giảm 17,58 triệu USDT, tăng 17,55 triệu USDC. Qua hình dưới đây, bạn sẽ nhận thấy kẻ tấn công chọn Curve vì ở đây có tính thanh khoản rất dồi dào, USDT có hơn 70,54 triệu, USDC cũng có 50,71 triệu, trượt giá tương đối thấp.

F4 tấn công đã trả lại 17,55 triệu USDC đổi từ Curve, cộng với 1,09 triệu USDC mà mình đã chuẩn bị (do vay Aave), tổng cộng là 18,64 triệu USDC, hoàn trả một lần cho Uniswap, hoàn tất việc trao đổi chớp nhoáng;

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 18,64 triệu USDC được hoàn trả cho Uniswap, chỉ có 17,55 triệu USDC là đổi từ Curve, số 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.

K1 kẻ tấn công đã rút 18,6 triệu USDC từ Uniswap bằng cách sử dụng giao dịch chớp nhoáng.

K2 tấn công, đã đổi 17,3 triệu USDC mà vừa mới rút từ Uniswap sang 17,32 triệu USDT.

K1 kẻ tấn công đã trả lại 17,32 triệu USDT từ Curve cho Uniswap. Giao dịch hoán đổi chớp nhoáng đã hoàn thành. Bạn cần lưu ý rằng, kẻ tấn công đã chỉ tiêu tốn 17,3 triệu USDC thông qua K2 để có được 17,32 triệu USDT. Số USDC còn lại là 1,3 triệu (= 1.860 - 1.730), trong đó có 1,09 triệu là vốn tự có, số USDC còn lại 210.000 chính là lợi nhuận từ cuộc tấn công này.

K3 kẻ tấn công, trả lại vốn gốc cho AAVE, lấy đi 701 WETH của mình, đồng thời đổi 200.000 USDC thành 105 ETH, và trong số đó đã gửi 100.558 ETH cho người xác thực như tiền boa (khoảng 200.000 đô la Mỹ), bản thân chỉ giữ lại chưa đầy 10.000 đô la lợi nhuận.

Bạn có thể sẽ ngạc nhiên, tại sao kẻ tấn công lại sẵn sàng nhường cho 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 trả "tiền boa" 200.000 đô la?

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:

Điều cốt lõi của việc tấn công thành công chính 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à người xác thực (bobTheBuilder).

Người xác thực không chỉ giúp kẻ tấn công đảm bảo rằng giao dịch của nạn nhân nằm giữa các giao dịch tấn công, mà điều quan trọng hơn là người xác thực có thể đảm bảo rằng các robot MEV cạnh tranh khác không thể vượt mặt hoặc gây cản trở cho việc hoàn thành tấn công một cách suôn sẻ.

Do đó, kẻ tấn công sẵn sàng 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 phải nói rõ rằng, các cuộc tấn công MEV cũng có chi phí, trong việc trao đổi chớp nhoáng Uniswap có chi phí, trong giao dịch Curve cũng có chi phí, chỉ là do tỷ lệ phí tương đối thấp khoảng 0.01~0.05%, nên so với lợi nhuận từ cuộc tấn công thì có thể không đáng kể.

Cuối cùng nhưng không kém phần quan trọng, việc phòng thủ chống lại các cuộc tấn công MEV thực sự rất đơn giản, tất cả những gì bạn cần làm là: đặt dung sai trượt không quá 1%; Các giao dịch lớn được thực hiện thành nhiều đợt. Vì vậy, bạn không cần phải nghẹt thở trên DEX (sàn giao dịch phi tập trung) nữa.

Kết luận: Cảnh báo và bài học từ rừng tối.

Cuộc tấn công MEV trị giá 215.000 đô la chắc chắn là một minh chứng tàn bạo khác về luật "rừng tối" trong thế giới blockchain. Nó tiết lộ một cách sinh động trò chơi phức tạp ẩn nấp trong một môi trường phi tập trung, không được phép, khai thác các lỗ hổng trong cơ chế để đạt được lợi ích.

Từ một góc độ cao hơn, sự xuất hiện của MEV là biểu hiện của hiệu ứng hai lưỡi dao trong tính minh bạch và khả năng lập trình của blockchain.

Mặt khác, tất cả các bản ghi giao dịch đều công khai và có thể kiểm tra, điều này làm cho các hành vi tấn công có thể bị theo dõi 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 việc thực hiện giao dịch cũng mang lại cơ hội cho những người tham gia thông minh.

Đây không chỉ là hành vi hack đơn giản, mà là sự hiểu biết sâu sắc và lợi dụng cơ chế nền tảng của blockchain, nó kiểm tra tính linh hoạt của thiết kế giao thức và cũng thách thức nhận thức rủi ro của các bên tham gia.

Hiểu về 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 tiềm ẩn nhiều nguy hiểm này. Hãy nhớ rằng, trong "khu rừng tối tăm" của blockchain, chỉ có sự tôn trọng quy tắc và nâng cao nhận thức mới 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.

Xem bản gốc
Nội dung chỉ mang tính chất tham khảo, không phải là lời chào mời hay đề nghị. Không cung cấp tư vấn về đầu tư, thuế hoặc pháp lý. Xem Tuyên bố miễn trừ trách nhiệm để biết thêm thông tin về rủi ro.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate.io
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • ไทย
  • Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)