Tác giả: Daii Nguồn: mirror
Thứ tư tuần trước (ngày 12 tháng 3), tin tức về một nhà giao dịch tiền điện tử đã mất 215.000 đô la chỉ trong một lần do bị tấn công MEV đã tràn ngập trên khắp các bản tin.

Nói một cách đơn giản, người dùng này muốn đổi USDC stablecoin trị giá 220.800 đô la Mỹ lấy một lượng USDT tương đương trong nhóm giao dịch Uniswap v3, nhưng cuối cùng chỉ nhận được 5.272 USDT. Chỉ trong vài giây, tài sản của anh ta đã bốc hơi 215.700 đô la Mỹ, như thể hiện trong hình bên dưới.

Hình ảnh trên là ảnh chụp màn hình bản ghi trên chuỗi của giao dịch này. Nguyên nhân gốc rễ của thảm kịch này chính là "Cuộc tấn công Sandwich" khét tiếng trong thế giới blockchain.

Người đầu tiên tiết lộ cuộc tấn công MEV là Michael (xem hình trên), người đã giải thích:
Một bot MEV đã chạy trước giao dịch bằng cách hoán đổi toàn bộ thanh khoản USDC. Sau khi giao dịch được thực hiện, chúng đã đưa thanh khoản trở lại. Kẻ tấn công đã boa cho một người xây dựng khối (bobTheBuilder) 200.000 đô la và kiếm được 8.000 đô la từ giao dịch này.
Bản dịch: MEV Bot chạy trước giao dịch 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 đã trả cho người xây dựng khối (bobTheBuilder) 200.000 đô la và kiếm được 8.000 đô la tiền lãi từ giao dịch.
Có lỗi đánh máy trong nội dung trên. Robot tấn công MEV đã trao đổi một lượng lớn USDT, không phải USDC.
Tuy nhiên, sau khi đọc lời giải thích và các bản tin của ông, bạn vẫn có thể thấy bối rối vì có quá nhiều thuật ngữ mới, chẳng hạn như Sandwich Attack, front-run the tx, put back the liquid, tipped a block builder, v.v.
Hôm nay, chúng ta sẽ lấy cuộc tấn công MEV này làm ví dụ, phân tích toàn bộ quá trình của nó và đưa bạn vào 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ị trích xuất của thợ đào, ám chỉ 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 hoặc loại trừ các giao dịch trong các khối blockchain. Hoạt độ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 phải chịu 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 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 sẽ chuyển từ thợ đào sang người xác thực. Do đó, thuật ngữ đã phát triển từ "Giá trị khai thác được của thợ mỏ" thành "Giá trị khai thác được tối đa".
Mặc dù tên đã thay đổi, nhưng khái niệm cốt lõi là trích xuất giá trị bằng cách điều chỉnh thứ tự giao dịch vẫn giữ nguyên.
Nội dung trên vẫn mang tính chuyên nghiệp một chút, bạn chỉ cần nhớ rằng: MEV tồn tại là do những thợ đào trước đây và những người xác thực hiện tại có quyền sắp xếp các giao dịch trong nhóm bộ nhớ (mempool). Việc phân loại này diễn ra trong một khối. Ethereum hiện tạo ra một khối khoảng 11 giây một lần, điều đó có nghĩa là sức mạnh này được thực hiện một lần sau mỗi 11 giây. Tương tự như vậy, lần này cuộc tấn công MEV cũng đạt được thông qua việc sắp xếp trình xác thực.
Nhấp vào liên kết này và bạn sẽ thấy nội dung giao dịch có trong khối số 22029771 liên quan đến cuộc tấn công này, như hiển thị bên dưới.

Xin lưu ý rằng các giao dịch 1, 2 và 3 trong hình trên là cuộc tấn công MEV được đề cập ở đầu bài viết này. Thứ tự này được sắp xếp bởi trình xác thực (bobTheBuilder). Tại sao điều này lại có thể xảy ra?
2. Nguyên lý của MEV
Để hiểu nguyên lý hoạt động của MEV, trước tiên chúng ta cần hiểu cách blockchain ghi lại và cập nhật thông tin.
2.1 Cơ chế cập nhật trạng thái chuỗi khối
Có thể coi chuỗi khối như một sổ cái liên tục phát triển ghi lại tất cả các giao dịch diễn 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, dự trữ của nhiều loại token khác nhau trong nhóm giao dịch Uniswap, v.v., đều được xác đị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ó trong khối đó sẽ được thực hiện từng cái một theo thứ tự chúng được sắp xếp 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 blockchain sẽ thay đổi tương ứng.
Tức là không chỉ thứ tự các khối là quan trọng mà thứ tự các giao dịch trong các khối cũng quan trọng. Vậy thứ tự các giao dịch trong một khối được xác định như thế nào?
2.2 Trình xác thực xác định thứ tự giao dịch
Khi người dùng khởi tạo 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, trước tiên giao dịch đó sẽ được phát đến các nút trong mạng. Sau khi xác minh ban đầu, giao dịch sẽ đi vào một vùng 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.
Những người khai thác trước đây (trong hệ thống PoW), giờ là người xác thực (trong hệ thống PoS) có quyền chọn các giao dịch từ nhóm bộ nhớ và quyết định thứ tự sắp xếp các giao dịch này trong khối tiếp theo.
Thứ tự các giao dịch trong một khối rất quan trọng. Trước khi một khối được hoàn thiện 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ự do trình xác thực xác định (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 nhóm giao dịch, thứ tự thực hiện các giao dịch này sẽ ảnh hưởng trực tiếp đến kết quả của mỗi giao dịch.
Khả năng này cho phép người xác thực ưu tiên các giao dịch cụ thể, trì hoãn hoặc loại trừ các giao dịch khác hoặc thậm chí chèn các giao dịch của riêng họ để tối đa hóa lợi nhuận.
Thứ tự của giao dịch này cũng quan trọng không kém. Nếu có bất kỳ sai sót nào, cuộc tấn công sẽ không thành công.
2.3 Thứ tự giao dịch của cuộc tấn công MEV này
Trước tiên, chúng ta hãy xem qua 3 giao dịch liên quan đến cuộc tấn công MEV 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 các hoạt động trước đó của kẻ tấn công, giá trong nhóm giao dịch hiện 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 một lượng USDT tương đương hoặc chỉ có thể đổi lấy í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à để kiếm lợi nhuận từ những biến động giá mới do giao dịch của nạn nhân gây ra.
Người xác thực cuộc tấn công MEV này 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 làm việc vô ích. Anh ta đã kiếm được hơn 100 ETH khi tham gia vào việc phân loại này. Ngược lại, người khởi xướng cuộc tấn công MEV chỉ kiếm được 8.000 đô la Mỹ. Nguồn thu nhập của họ là giao dịch thứ hai của nạn nhân.
Tóm lại, kẻ tấn công (robot MEV) đã thông đồng với trình xác thực (bobTheBuilder) để 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 được 8.000 đô la và trình xác thực nhận được 200.000 đô la (hơn 100 ETH).
Phương pháp tấn công mà họ sử dụng có một cái tên rất hay - tấn công kiểu bánh sandwich. Tiếp theo, chúng tôi sẽ giải thích từng giao dịch một để bạn có thể hiểu đầy đủ về cuộc tấn công sandwich phức tạp hơn của MEV.
3. Phân tích đầy đủ về cuộc tấn công kiểu sandwich
Nó được gọi là cuộc tấn công kiểu sandwich vì hai giao dịch của kẻ tấn công (giao dịch 1 và giao dịch 3) được đặt trước và sau giao dịch của nạn nhân (giao dịch 2), khiến toàn bộ chuỗi giao dịch giống như cấu trúc kiểu sandwich (xem hình trên).
Giao dịch 1 và Giao dịch 3 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 tội phạm, còn Giao dịch 3 chịu trách nhiệm thu thập và phân chia chiến lợi phẩm. Cụ thể, toàn bộ quá trình như sau:
3.1 Giao dịch 1, chịu trách nhiệm tăng giá USDT
Click vào link giao dịch số 1 trong hình trên, bạn sẽ thấy thông tin chi tiết về giao dịch số 1. Kẻ tấn công trực tiếp tăng giá USDT bằng cách đổi toàn bộ 17,58 triệu USDT lấy 18,65 triệu USDC, như hình dưới đây.

Lúc này, số tiền còn lại trong nhóm thanh khoản là một lượng lớn USDC và một lượng nhỏ USDT. Nếu như theo như các bản tin đưa, trước vụ tấn công, thanh khoản của Uniswap lần lượt có khoảng 19,8 triệu USDC và USDT, thì sau khi giao dịch 1 được thực hiện, chỉ còn 2,22 triệu USDT (=1980-1758) trong nhóm, trong khi số dư USDC tăng lên khoảng 38,45 triệu (=1980+1865).
Hiện tại, tỷ lệ trao đổi giữa USDC và USDT trong nhóm này không phải là 1:1 mà là 1:17, tức là cần 17 USDC để đổi lấy 1 USDT. Tuy nhiên, tỷ lệ này chỉ mang tính chất tương đối, vì nhóm này là V3 và tính thanh khoản trong đó không được phân bổ đều.
Tôi còn muốn nói với bạn một điều nữa. Trên thực tế, kẻ tấn công không sử dụng 18,65 triệu USDC cùng một lúc. Số lượng USDC thực tế được sử dụng là 1,09 triệu, ít hơn 6%. Anh ấy đã làm điều đó như thế nào? Chúng ta sẽ đi sâu hơn vào chi tiết sau khi nói về cuộc tấn công.
3.2 Giao dịch 2, thực hiện 220.000 USDC để đổi lấy USDT
Nhấp vào liên kết của Giao dịch 2 trong hình trên để xem hình bên dưới. Như hình trên, do ảnh hưởng của giao dịch 1 nên giao dịch 2 của nạn nhân chỉ nhận được 5272 USDT cho 220.000 USDC và mất 170.000 USDT mà không hề hay biết. Tại sao chúng ta lại nói là vô thức? Bởi vì nếu nạn nhân giao dịch qua Uniswap, họ sẽ thấy giao diện sau khi gửi giao dịch.

Từ hình ảnh trên, bạn có thể thấy rằng chắc chắn các nạn nhân sẽ nhận được ít nhất 220.000 nhân dân tệ. Lý do khiến các nạn nhân cuối cùng chỉ nhận được hơn 5.000 USDT là do mức trượt giá lớn hơn 90%. Tuy nhiên, Uniswap có giới hạn trượt giá tối đa mặc định là 5,5%, hãy xem hình bên dưới.

Tức là nếu nạn nhân giao dịch thông qua giao diện Uniswap, anh ta phải nhận được ít nhất 208.381 USDT (= 220.510 * 94,5%). Bạn có thể tự hỏi tại sao bản ghi blockchain ở trên lại cho thấy giao dịch này được thực hiện trên "Uniswap V3".
Bởi vì phần đầu và phần cuối của giao dịch blockchain là riêng biệt. "Uniswap V3" được đề cập ở trên đề cập đến nhóm quỹ USDC-USDT của Uniswap. Nhóm này là công khai và bất kỳ giao dịch nào cũng có thể giao dịch thông qua nhóm này.
Chính vì vậy, một số người nghi ngờ nạn nhân không phải là người bình thường, nếu không sẽ không có sự trượt giá lớn như vậy, và có thể vụ tấn công MEV được sử dụng để 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 + Chia chiến lợi phẩm

Nhấp vào liên kết để xem thông tin chi tiết về Giao dịch 3, như hiển thị ở trên. Chúng ta hãy nói riêng về các giao dịch A, B và C.
Giao dịch A, khôi phục tính thanh khoản trong nhóm về mức bình thường, đổi 17,32 triệu USDT lấy 18,6 triệu USDC;
Giao dịch B, chuẩn bị chia sẻ chiến lợi phẩm, đổi một phần số tiền thu được - 204.000 USDC lấy 105 ETH;
Giao dịch C, chia sẻ chiến lợi phẩm, trả 100,558 ETH cho trình xác thực bob-The-Builder.eth.
Lúc này, đòn tấn công kiểu bánh sandwich kết thúc.
Bây giờ chúng ta 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 đã sử dụng 1,09 triệu USDC để thực hiện cuộc tấn công 18 triệu USD như thế nào?
4. Kẻ tấn công đã thực hiện cuộc tấn công vào nhóm 18 triệu USDC như thế nào
Lý do tại sao kẻ tấn công có thể thực hiện cuộc tấn công cấp độ 18 triệu USDC chỉ với 1,09 triệu USDC tiền gốc là vì có một cơ chế kỳ diệu và đặc biệt trong thế giới blockchain - Flash Swap của Uniswap V3.
4.1 Flash Swap là gì?
Nói một cách đơn giản:
Hợp đồng hoán đổi nhanh cho phép người dùng rút tài sản khỏi nhóm Uniswap rồi hoàn trả bằng một tài sản khác (hoặc cùng tài sản đó cộng với một khoản phí) trong cùng một giao dịch.
Miễn là toàn bộ hoạt động được hoàn tất trong cùng một giao dịch, Uniswap cho phép hành vi "lấy trước, trả sau". Xin lưu ý rằng việc này phải được thực hiện trong cùng một giao dịch. Thiết kế này nhằm đảm bảo tính bảo mật của chính nền tảng Uniswap:
Cho 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 tài sản thế chấp (tương tự như cho vay), nhưng phải hoàn trả ngay lập tức khi kết thúc giao dịch.
Tính nguyên tử: Toàn bộ hoạt động phải có tính nguyên tử, hoặc hoàn toàn thành công (hoàn trả tiền) hoặc hoàn toàn thất bại (hoàn nguyên giao dịch).
Mục đích ban đầu khi thiết kế Flash Swap là để thực hiện giao dịch chênh lệch giá trên chuỗi hiệu quả hơn, nhưng thật không may, nó đã bị những kẻ tấn công MEV lợi dụng và trở thành công cụ thao túng thị trường.
4.2 Lightning Exchange hỗ trợ như thế nào?
Chúng ta hãy xem hình ảnh và hiểu từng bước cách thực hiện đòn tấn công chớp nhoáng này, hãy xem hình bên dưới.

F1 Kẻ tấn công đã vay 1,09 triệu USDC từ AAVE bằng 701 WETH của chính hắn;
F2 Kẻ tấn công đã khởi tạo một yêu cầu trao đổi flash và đầu tiên rút 17,58 triệu USDT từ nhóm Uniswap (không yêu cầu thanh toán tại thời điểm này). Tài khoản của kẻ tấn công tạm thời tăng thêm 17,58 triệu USDT;
F3 Kẻ tấn công đã nhanh chóng đầu tư 17,58 triệu USDT vào Curve Kẻ tấn công đã đổi lại 17,55 triệu USDC vào nhóm. Tài khoản USDT của kẻ tấn công giảm 17,58 triệu và USDC tăng 17,55 triệu. Từ hình bên dưới, bạn có thể thấy rằng kẻ tấn công đã chọn Curve vì tính thanh khoản ở đây đủ lớn, với hơn 70,54 triệu USDT và 50,71 triệu USDC, và mức trượt giá tương đối thấp.
"Text-Align: Left;"> 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ì 18,64 triệu USDC đã trở lại UNISWAP Chỉ có 17,55 triệu USDC được trao đổi từ Curve, và 1,09 triệu USDC còn lại là tiền của kẻ tấn công.
Bạn hẳn đã phát hiện ra rằng giao dịch này thực sự khiến kẻ tấn công mất 1,09 triệu đô la. Tuy nhiên, giao dịch tiếp theo thứ 3, cũng thông qua phương thức hoán đổi nhanh, anh ta không chỉ lấy lại được 1,09 triệu USDC mà còn kiếm được hơn 200.000 USDC.

Tiếp theo, 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.
Kẻ tấn công K1 đã sử dụng Lightning Swap để rút 18,6 triệu USDC khỏi Uniswap;
Kẻ tấn công K1 đã trả lại 17,32 triệu USDT được trao đổi từ Curve sang Uniswap. Hoàn tất hoán đổi sét. Bạn cần lưu ý rằng kẻ tấn công chỉ chi 17,3 triệu USDC thông qua K2 để lấy được 17,32 triệu USDT. Trong số 1,3 triệu USDC còn lại (= 18,6 triệu - 17,3 triệu), 1,09 triệu là quỹ tự sở hữu và 210.000 USDC còn lại là lợi nhuận của cuộc tấn công này.
Kẻ tấn công K3 đã trả lại tiền gốc cho AAVE, lấy đi 701 WETH của chính mình và đổi 200.000 USDC lấy 105 ETH, đồng thời gửi 100,558 ETH cho người xác thực dưới dạng tiền boa (khoảng 200.000 đô la Mỹ), chỉ giữ lại chưa đến 10.000 đô la Mỹ tiền lãi cho chính mình.
Bạn có thể ngạc nhiên khi biết tại sao kẻ tấn công lại sẵn sàng trả tới 200.000 đô la tiền lợi nhuận cho người xác thực?
4.3 Tại sao lại phải boa 200.000 đô la?
Thực tế, đây không phải là sự hào phóng, mà là điều kiện cần thiết để các cuộc tấn công MEV như tấn công sandwich thành công:
Cốt lõi của một cuộc tấn công thành công là kiểm soát chính xác lệnh giao dịch và người xác minh (bobTheBuilder) là người kiểm soát lệnh giao dịch.
Trình 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à quan trọng hơn, trình xác thực có thể đảm bảo rằng các robot MEV cạnh tranh khác không thể chen vào hàng đợi hoặc can thiệp vào quá trình hoàn tất suôn sẻ của cuộc tấn công.
Do đó, kẻ tấn công sẽ 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 lượng lợi nhuận nhất định cho mình.
Cần đặc biệt lưu ý rằng các cuộc tấn công MEV cũng có chi phí. Có chi phí cho các giao dịch hoán đổi nhanh trên Uniswap và có chi phí cho các giao dịch trên Curve. Tuy nhiên, vì phí tương đối thấp, khoảng 0,01~0,05%, nên chúng không đáng kể so với số tiền thu được từ cuộc tấn công.
Cuối cùng, tôi xin nhắc lại rằng biện pháp phòng thủ chống lại các cuộc tấn công MEV thực ra rất đơn giản. Bạn chỉ cần: đặt mức độ chịu trượt giá không quá 1%; và thực hiện các giao dịch lớn theo nhiều đợt. Do đó, bạn không cần phải sợ 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 khu rừng tối
Cuộc tấn công MEV trị giá 215.000 đô la này chắc chắn là một màn trình diễn tàn khốc khác của luật "rừng tối" trong thế giới blockchain. Nó cho thấy rõ ràng rằng trong một môi trường phi tập trung, không cần sự cho phép, có một trò chơi phức tạp khai thác lỗ hổng trong cơ chế để thu lợi.
Ở cấp độ cao hơn, sự xuất hiện của MEV là biểu hiện của hiệu ứng con 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, tất cả hồ sơ giao dịch đều được công khai, cho phép theo dõi và phân tích các cuộc tấn công;
Mặt khác, logic phức tạp của hợp đồng thông minh và tính chắc chắn của việc thực hiện giao dịch cũng mang đến cơ hội cho những người tham gia thông minh.
Đây không phải là hành vi hack đơn giản, mà là sự hiểu biết sâu sắc và sử dụng cơ chế cơ bản của blockchain. Nó kiểm tra tính mạnh mẽ của thiết kế giao thức và thách thức nhận thức rủi ro của những người tham gia.
Chỉ bằng cách hiểu MEV và nhận ra những 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 rẫy những cơ hội nhưng cũng ẩn chứa nhiều nguy hiểm. Hãy nhớ rằng, trong "khu rừng tối tăm" của blockchain, chỉ bằng cách tôn trọng các quy tắc và nâng cao nhận thức, bạn mới có thể tránh trở thành con mồi tiếp theo bị nuốt chửng.
Đây cũng chính là hiệu ứng mà tôi muốn đạt được thông qua bài viết này.