Ngày 21 tháng 6, một trong những MEV Bot hoạt động sôi nổi nhất trên mạng Ethereum, Jaredfromsubway.eth, đã trở thành mục tiêu của một cuộc tấn công “bẫy mật” (honeypot attack) được thiết kế tinh vi, gây tổn thất hơn 7,5 triệu USD tài sản tiền điện tử. Dưới đây là phân tích và theo dõi luồng tiền bị đánh cắp từ nhóm an ninh Beosin về cuộc tấn công này.
Phân tích quy trình tấn công
Attack contract family
- Hợp đồng điều phối (0xb84db016324e8f2bfdd8dd9c260338aee0a8df52): chịu trách nhiệm ghi lại trạng thái armed của khối hiện tại và gọi lặp lại các hợp đồng con trong giai đoạn cuối để rút tiền. - Hợp đồng kích hoạt (0x4de8c729a064ff6087cc84a4152969349e4feb98): chịu trách nhiệm thiết lập trạng thái cặp giao dịch giả trong cùng một khối, khiến các lộ trình arbitrage trông có vẻ có thể thực hiện được. - Hợp đồng con / Hợp đồng tiền giả: giả dạng là token ERC-20 bình thường để nhận quyền ủy quyền thật. - Hợp đồng Hub: chịu trách nhiệm thanh toán lợi nhuận thật nhỏ để khiến MEV Bot cảm thấy có lợi nhuận. - Cặp Ring V2: cặp giao dịch Uniswap v2 giả. - Hợp đồng tiền trung gian giả: dùng để xây dựng lộ trình arbitrage đa bước, như fCAP, fUSDC.
Chìa khóa của cuộc tấn công: lừa đảo cấp quyền
Bằng cách phân tích các giao dịch trên chuỗi, kẻ tấn công đã tạo ra nhiều nhóm giao dịch bẫy:
- USDC lớn: robot kiếm được khoảng 36,997120 USDC, nhưng giữ lại 20 USDC để cấp quyền. - USDT lớn: robot kiếm được khoảng 37,053440 USDT, nhưng giữ lại 20 USDT để cấp quyền. - WETH lớn: robot kiếm được khoảng 0,0179 WETH, nhưng giữ lại 16 WETH để cấp quyền. - Giao dịch nhỏ diễn ra bình thường, quyền được tiêu thụ trong cùng giao dịch để giảm sự nghi ngờ.
Trong các giao dịch nhỏ, sau khi robot được cấp quyền hạn mức token thật, hợp đồng con sẽ ngay lập tức chuyển đi token thật, quyền hạn bị tiêu hao và trông hoàn toàn bình thường.
Trong các giao dịch lớn, hợp đồng con không gọi transferFrom để chuyển các token thật, mà thay vào đó tạo ra các token giả thông qua giao dịch giả mạo. Robot nghĩ rằng nó đã hoàn thành các bước tiền xử lý swap bình thường, nhưng quyền hạn chuyển nhượng token thật vẫn được giữ nguyên.
Đây là cốt lõi của toàn bộ cuộc tấn công: các giao dịch nhỏ tiêu thụ quyền hạn bình thường, trong khi các giao dịch lớn giữ nguyên quyền hạn.
Quy trình tấn công
Ví dụ về giao dịch tấn công nhắm vào USDC:
(1) Kẻ tấn công gọi bộ điều phối để đặt khối hiện tại ở trạng thái armed (2) Kẻ tấn công gọi bộ kích hoạt để cập nhật trạng thái của nhiều cặp Ring V2 giả mạo (3) MEV Bot phát hiện cơ hội arbitrage và thực hiện giao dịch
Quy trình nội bộ của bot MEV như sau:
(1) Hợp đồng MEV Bot cấp quyền hạn lớn USDC cho một hợp đồng con (2) MEV Bot gọi hàm wrapTo/wrap của hợp đồng con (3) Do trạng thái hiện tại là armed, hợp đồng con không tiêu hao USDC thật, mà đúc token giả vào cặp giao dịch, giữ nguyên quyền hạn USDC (4) MEV Bot tiếp tục gọi swap trên cặp giao dịch giả (5) Cặp giao dịch nhảy thứ hai gửi token đến MEV Bot (6) Hợp đồng hub thanh toán một khoản lợi nhuận USDC thật nhỏ cho MEV Bot

ví dụ về sự chấp thuận
tx hash: 0x0121e07a916c06eea3e7daf11893f3f0b95b9e1684124545ae14c32aee6029bb
Kết quả mà MEV Bot nhìn thấy: Một giao dịch arbitrage thành công, mang lại lợi nhuận USDC thực tế. Tuy nhiên, quyền truy cập USDC đã bị hợp đồng con giữ lại. Quy trình này được lặp lại riêng biệt cho USDC, USDT và WETH, cuối cùng tạo ra một lượng lớn quyền truy cập.
Attack transaction hash:
0x2be8704f5a59b69e0b71f64aefdb99eb0e8ae9fb3926147c581910d71bcf3e65
Kẻ tấn công gọi hàm drain loop của hợp đồng điều phối, trong calldata chứa 66 địa chỉ hợp đồng con và địa chỉ hợp đồng MEV Bot. Chỉ cần hợp đồng MEV Bot trước đó đã cấp hạn mức ủy quyền cho các hợp đồng con, các hợp đồng con có thể trực tiếp chuyển các token thực tế tương ứng cho kẻ tấn công.
Kết quả cuối cùng:
- Đã sử dụng hết 20 khoản ủy quyền lớn USDC - Đã sử dụng hết 16 khoản ủy quyền lớn WETH - Vẫn còn một phần hạn mức ủy quyền USDT, nhưng số dư USDT không đủ
Fund Flow Analysis
Sau khi thành công trong cuộc tấn công, địa chỉ của kẻ tấn công (0x3e37f4A10d771Ba9dE44b6d301410b1BEdeA65d0) đã nhận được $2,87M USDC, $2,04M USDT và 1.474 WETH. Sau đó, kẻ tấn công đã đổi các tài sản ổn định thành ETH và chuyển đến 4 địa chỉ sau:
- 0xe3Da36E4bd1a5738fa5D6Ef4F0e4dF40bDeB5f17 (khoảng 1.000 ETH) - 0x74Dc5b93586D248D5Aec64b3586736FF0A0D0e65 (1.001 ETH) - 0xd8C125efCBc99408eC8723E9BBd81d1E8D39D845 (1.001 ETH) - 0x71d4416A7A85e08a5Fe7227Ca3B44Fc639e94e97 (1.423 ETH)
Trong đó, 0xe3Da3 đã chuyển 1.000 ETH đến Tornado Cash, còn ba địa chỉ khác không có thêm chuyển nhượng ETH nào. Dòng tiền của nó được hiển thị như sau:

Kết luận
Cuộc tấn công này cho thấy một phương thức tấn công tinh vi: kẻ tấn công không trực tiếp nhắm vào mã hợp đồng, mà dựa trên logic nghiệp vụ của MEV Bot, tạo ra các kịch bản arbitrage tương ứng để lừa MEV Bot thực hiện các quyền hạn trông có vẻ không có vấn đề, sau đó chuyển tài sản của nó. Đối với các bot arbitrage và MEV Bot, không nên chỉ dựa vào lợi nhuận mô phỏng để đánh giá tính an toàn của lộ trình, đặc biệt khi lộ trình arbitrage chứa các hợp đồng lạ, token giả mạo hoặc wrapper tùy chỉnh, cần thận trọng và xem xét thực hiện kiểm tra bắt buộc đối với sự thay đổi allowance sau giao dịch.

