"Kẻ săn mồi" trong khu rừng tối tăm của Ethereum
Lưu ý của biên tập viên: Bài viết này đến từThung lũng tiền điện tử trực tiếp (ID: cryptovalley)Thung lũng tiền điện tử trực tiếp (ID: cryptovalley)
Những con quái vật trong rừng tối của Ethereum không phải là trò đùa. Các bot chạy trước này có thể phân tích các cuộc gọi hợp đồng thông minh và các chức năng mà chúng chưa bao giờ sử dụng trong hợp đồng thông minh để kiếm lợi nhuận tiềm năng.
, Tác giả: Alex MenUskin, bản dịch: Sherrie, được Odaily tái bản với sự cho phép.
Những con quái vật trong rừng tối của Ethereum không phải là trò đùa. Các bot chạy trước này có thể phân tích các cuộc gọi hợp đồng thông minh và các chức năng mà chúng chưa bao giờ sử dụng trong hợp đồng thông minh để kiếm lợi nhuận tiềm năng.
Do sự thiếu hiểu biết chung về những rô-bốt này, chúng tôi bắt tay vào một cuộc thám hiểm để tìm hiểu thêm về tình hình và xem mức độ phổ biến của chúng. Chúng tôi đã "bắt" được một số bot giao diện người dùng chung và phân tích hành vi của chúng. Chúng tôi đã xem xét hiệu quả của chúng và khả năng một giao dịch được "săn lùng". Chúng tôi cũng đã thử nghiệm nhiều cách khác nhau để tránh chúng.
tiêu đề phụ
Frontrunning là gì?
Một ví dụ đơn giản về chạy trước là đặt giá thầu hoán đổi. Giả sử ai đó có ý định mua một lượng lớn ETH trên Uniswap, số lượng này đủ để đẩy giá ETH lên. Một cách để hưởng lợi từ tình huống này là giao dịch trước khi mua số lượng lớn ETH trong khi giá vẫn ở mức thấp. Sau đó, sau khi giá tăng, hãy bán ETH để kiếm lời.
Ngoài ví dụ về chênh lệch giá này, Frontrunning cho nhiều giao dịch khác cũng có thể có giá trị, bao gồm thanh lý, mua NFT hiếm hoặc lỗi người dùng đơn giản. (Giá trị trích xuất từ một giao dịch hoặc chuỗi giao dịch được gọi là MEV).
Trên Ethereum, chạy trước đạt được bằng cách đặt giá thầu giao dịch cao hơn một chút trong các giao dịch, khuyến khích những người khai thác thực hiện trình tự sớm hơn khi xây dựng các khối, với các giao dịch thanh toán cao hơn được thực hiện trước. Do đó, nếu hai giao dịch kiếm được lợi nhuận từ cùng một lệnh gọi hợp đồng được đặt trong cùng một khối, thì chỉ giao dịch đầu tiên sẽ tạo ra lợi nhuận.
tiêu đề phụ
Hành vi
Dan Robinson và Georgios Konstantopoulos đã mô tả một nỗ lực chạy trước trong một bài đăng trên blog trên "ETH là một Khu rừng đen tối", trong đó 12.000 đô la đã rơi vào nanh vuốt của một "kẻ săn mồi" tinh vi. Predator đi trước đến mức nó có thể theo dõi bất kỳ giao dịch có giá trị nào trong nhóm giao dịch Ethereum và gặt hái phần thưởng thông qua Frontrunning.
Câu chuyện về "Khu rừng đen tối" "đáng sợ" đến mức thoạt nghe khó có thể tin được. Thật vậy, chúng ta có lý do để nghi ngờ về sự tồn tại của những "kẻ săn mồi" như vậy. Làm cách nào để rút tiền từ Uniswap, một nền tảng chênh lệch giá được giám sát chặt chẽ bởi một số lượng lớn robot? Nó có thể là một nhà kinh doanh chênh lệch giá "thông thường"?
Đầu năm nay, phân tích chuyên sâu của chúng tôi đã chứng minh điều ngược lại. Đây không phải là robot bình thường. Nó đã gọi thành công một hàm hợp đồng mà theo hiểu biết của chúng tôi, chưa bao giờ được gọi trước đây. Các khoản tiền đã bị bòn rút mặc dù đã làm xáo trộn giao dịch thông qua các hợp đồng thông minh proxy.
Đó là khá đáng lo ngại, để nói rằng ít nhất. Khả năng giám sát bất kỳ giao dịch nào trong nhóm giao dịch là một vũ khí siêu mạnh. Đáng lo ngại là một số dịch vụ đang bắt đầu cung cấp công khai lớp giao dịch "dark pool".
Lớp giao dịch "nhóm tối" không sử dụng các dịch vụ như Infura hoặc thậm chí là các nút riêng, mà gửi các giao dịch trực tiếp đến những người khai thác với lời hứa sẽ không truyền chúng đến phần còn lại của mạng, giữ cho họ an toàn trước những kẻ săn mồi rình mò.
Samczun và cộng sự đã sử dụng một phương pháp tương tự khi cố gắng trích 9,6 triệu đô la từ một hợp đồng dễ bị tổn thương. Không khó để tưởng tượng những người khai thác bắt đầu sử dụng bot của Frontrunning, chỉ cung cấp quyền truy cập an toàn cho những người trả phí.
Không giống như các yếu tố khác của ethereum, chẳng hạn như hợp đồng thông minh có thể được thử nghiệm trong môi trường phát triển hoặc trên mạng thử nghiệm, những bot này chỉ tồn tại trên mạng chính ethereum. Ngoài một số thử nghiệm ban đầu, việc họ thử và chạy trước các giao dịch testnet không có ý nghĩa tài chính nào. Ngoài ra, họ không phải chơi theo luật giống như mọi người vì logic của họ bị ẩn.
Để đảm bảo rằng những Người chạy trước mà chúng tôi bắt được là những Người chạy trước chung chung "thực sự", chúng tôi cần một cái bẫy duy nhất. Cái bẫy là một hợp đồng mới được tạo, được bắt đầu bởi một chuỗi bí mật được băm SHA256, với một số tiền có sẵn để mua lại. Tiền bị khóa chỉ có thể được rút nếu bí mật này được cung cấp và tiền sẽ được gửi trực tiếp đến người gửi giao dịch rút tiền.
Ý tưởng là gửi một giao dịch "chim mồi" cung cấp bí mật chính xác, xem liệu có ai cố gắng sao chép nó không và sau đó tự cung cấp bí mật, nhờ đó kiếm được tiền có thể sử dụng được. Nếu ai đó nhận được tiền trước giao dịch mồi nhử, điều đó có nghĩa là ai đó có thể phân tích giao dịch khi nó vẫn còn trong nhóm giao dịch l, sao chép nội dung có liên quan của nó và tự cung cấp bí mật.
Thật thú vị, họ sẽ đưa ra một bí mật mà họ chưa từng biết trước đây, một hợp đồng mà họ chưa từng thấy trước đây, để lấy tiền.
tiêu đề phụ
Người dẫn đầu trung bình hoạt động như thế nào?
Một phần quan trọng của thử nghiệm này là hiểu cách hoạt động của Frontrunner. Tuy nhiên, nếu ai đó xây dựng một cỗ máy kiếm tiền thì có lẽ nó sẽ không được chia sẻ trên Github. Do đó, chúng ta chỉ có thể quan sát và đảo ngược hành vi của tội phạm.
Thường có hai phần để xây dựng một người tiên phong cho mục đích chung. Thành phần đầu tiên là một tài khoản Ethereum mà các giao dịch đã sửa đổi có thể được gửi đến, có hoặc không có đại lý ví thông minh. Thứ hai là "phụ trợ", bộ não của hoạt động, phần lớn diễn ra ngoài chuỗi. Người điều hành sử dụng một số kỹ thuật để kiểm tra từng giao dịch trong nhóm, phân tích cú pháp, thay thế các tham số của nó (ví dụ: trình gọi tx) và xác định xem nó có lợi nhuận hay không.
Ngoài ra, thời gian cũng rất quan trọng do nhu cầu phân tích từng giao dịch (trong đó có nhiều giao dịch) trong nhóm giao dịch. Mất trung bình 12 giây để khai thác một khối Ethereum. Nếu phí giao dịch cho giao dịch này đủ cao, nó phải được phân tích và thay thế đủ nhanh trước khi khối tiếp theo đến.
Đây là một quy trình xác suất và có thể khai thác một khối ngay khi giao dịch được phát, khiến các bot không có thời gian để phân tích thành công và phát một giao dịch đang chạy.
Với những cân nhắc này và một số suy nghĩ, chúng tôi đã kiểm tra xem rô-bốt mất bao lâu để ngoạm mồi."tiêu đề phụ"Hợp đồng của chúng tôi (người trao giải) có số dư ban đầu là 0,035 ETH, trị giá khoảng 20 đô la vào thời điểm đó. Những khoản tiền đó có sẵn cho bất kỳ ai cung cấp tiền giả chính xác cho hàm băm được lưu trữ trong hợp đồng. Để có được tiền và hoạt động như một công cụ kích hoạt cho những kẻ săn mồi, một tài khoản riêng (người có tiền) sẽ cố gắng có được tiền bằng cách cung cấp thông tin thích hợp.
đảo ngược hình ảnh
Thích rút tiền.
Vòng đầu tiên: gọi hợp đồng trực tiếp
Để đảm bảo bẫy cơ sở của chúng tôi hoạt động, trước tiên chúng tôi sử dụng tài khoản getter để gọi hợp đồng. Trong lần thử đầu tiên, với phí giao dịch tương đối cao (do khuôn khổ ETH đặt), chúng tôi đã lấy lại được tiền của mình.
Điều này có thể là do tỷ suất lợi nhuận quá thấp để thu hút những kẻ săn mồi hoặc do các giao dịch được khai thác quá nhanh khiến chúng không kịp phản ứng. Rõ ràng, đây không phải là điều chúng tôi muốn, bởi vì bắt kẻ săn mồi là mục tiêu của chúng tôi.
tiêu đề phụ
Trong vòng này, chúng tôi đã giải quyết các vấn đề mà chúng tôi gặp phải trước đó. Chúng tôi đã tăng lợi nhuận tiềm năng và giảm phí giao dịch để các giao dịch không được khai thác quá nhanh, giúp bot có thời gian khám phá. Hợp đồng cũng đã thêm 0,04 ETH (tăng 0,005 so với trước đó).
Lần này, chúng tôi đã thành công. Giao dịch đợi khoảng 3 phút trước khi được khai thác, không thu được giá trị nào từ hợp đồng. Theo giao dịch nội bộ của hợp đồng, chúng ta có thể thấy rằng tiền chảy vào người khác.
Giao dịch hiện tại sử dụng 25.000001111 Gwei (0,000001111 Gwei cao hơn những gì chúng tôi đang sử dụng) và được khai thác trong cùng một khối với nỗ lực "trích xuất".
tiêu đề phụ
Tu luyện người theo dõi
Bây giờ chúng tôi đã tìm được một bot (với một số chi phí), chúng tôi có thể rút ra một số thông tin chi tiết thú vị. Đầu tiên, các giao dịch chỉ ra rằng các cuộc gọi đến hợp đồng không được thực hiện trực tiếp. Thay vì chỉ sao chép giao dịch và gửi một cách mù quáng từ một tài khoản được sở hữu, bot sẽ chuyển giao dịch đó qua một hợp đồng thông minh proxy hoạt động như một chiếc ví thông minh để thực hiện các giao dịch đó.
Giờ đây, chúng tôi có thể theo dõi các địa chỉ giao dịch trước đó và trong tương lai để xem mức độ thành công của bot và cách thức hoạt động của bot.
Hợp đồng dịch ngược có hai chức năng chính:
Thông qua chức năng này, hợp đồng proxy hoạt động như một chiếc ví thông minh cho nhà điều hành. Ngoài khả năng thực hiện các cuộc gọi đến các chức năng bên ngoài, nó cũng đảm bảo rằng số dư khi bắt đầu giao dịch ít nhất lớn bằng số dư khi kết thúc giao dịch, nếu không nó có thể được khôi phục, do đó tránh được khả năng mất tài khoản. tiền khi gọi các hợp đồng không xác định (tất nhiên là ngoại trừ phí giao dịch. ).
Khi sử dụng Dune Analytics, chúng ta có thể thấy mức độ thành công của các bot kể từ tháng 5 năm 2018!
Giả sử bot cụ thể này luôn sử dụng cùng một proxy và gửi địa chỉ để phát hành giao dịch, chúng tôi có thể ước tính tổng thu nhập của nó là khoảng 17 ETH (~ $10K tại thời điểm viết bài).
tiêu đề phụ
Vòng Ba: Họ thông minh đến mức nào?
Bây giờ chúng tôi tin rằng bot đang tấn công chúng tôi, chúng tôi muốn kiểm tra xem chúng tôi có thể trích xuất mồi nhử hay không. (Trong hợp đồng cũng có chức năng "nhận", có thể trả lại tiền cho chúng tôi).
Chúng tôi đã triển khai hợp đồng ProxyTaker và gọi chức năng thích hợp để cố gắng rút tiền của mình. Do chi phí nhận tiền thông qua proxy cao hơn một chút, hợp đồng của người cấp có số tiền cao hơn một chút là 0,055 ETH. Thật đáng ngạc nhiên, giao dịch của chúng tôi ngay lập tức bị một bot khác chộp lấy.
Lần này thậm chí còn ấn tượng hơn. Bot không chỉ có thể phát hiện giao dịch rút tiền của chúng tôi mà còn xác định được giao dịch đó từ một cuộc gọi nội bộ, từ một hợp đồng hoàn toàn khác! Các giao dịch rút tiền của chúng tôi được khai thác trong vòng vài giây (bot cũng vậy).
Với cùng một kiểu hành vi của bot (gọi một đại lý từ tài khoản A và chuyển tiền vào tài khoản B) và mức độ gần của vụ việc, có thể giả định rằng bot cũng đang thực hiện một hoạt động tấn công chung chống lại tin tặc da trắng trong vụ việc này sự cố.
Robot này phức tạp hơn nhiều so với cái trước. Nó không chỉ tập trung vào ETH mà còn thực hiện các giao dịch chênh lệch giá khác nhau.
Nó cũng thành công hơn nhiều về số dư tài khoản mà từ đó nó thu tiền. Hiện tại, số dư là khoảng 300 ETH (~$180k tại thời điểm viết bài). Chúng tôi cũng có thể trừ tất cả các dòng tiền vào và ra khỏi địa chỉ hợp đồng để ước tính lợi nhuận của nó, tổng cộng là ~900 ETH. Đây chỉ là ước tính sơ bộ vì tài khoản có thể đã thực hiện các giao dịch không liên quan đến hoạt động trước đó của nó. (Dưới đây là danh sách tất cả các giao dịch bot có giá trị dương).
tiêu đề phụ
Vòng cuối cùng: khai thác thành công
Để làm cho thử thách này thú vị hơn một chút, chúng tôi đã thực hiện một nỗ lực che giấu khác, lần này sử dụng hợp đồng ủy quyền mà chỉ chúng tôi mới có thể sử dụng, OwnedTaker.
Thiết lập tương tự như vòng thứ ba. Hợp đồng cấp thêm 0,05 ETH. Các khoản tiền cũng được chuyển lại cho chúng tôi trong cùng một giao dịch thay vì vẫn còn trong hợp đồng.
Trong lần thử đầu tiên, giao dịch đối với hợp đồng OwnedTaker mất khoảng 1 phút để khai thác và chúng tôi đã rút được tiền.
Thử nghiệm được lặp lại, lần này nạp lại hợp đồng người tặng với 0,06 ETH, khoản thanh toán cao nhất mà chúng tôi đã sử dụng cho đến nay, để đảm bảo khoản thanh toán thấp hơn không phải là lý do dẫn đến việc thiếu các nỗ lực chạy trước.
Yêu cầu chỉ chủ sở hữu hợp đồng mới được phép thực hiện lệnh gọi hoặc thực tế là tiền được gửi đến một điểm đến khác với hợp đồng gọi, giúp tránh các nỗ lực chạy trước.
Vì vậy, chúng ta đã thắng?
Các bot có thể sẽ nghĩ đến việc tự bảo vệ trước tiên; xét cho cùng, chúng đang gọi một hợp đồng không xác định, hợp đồng này có thể thực thi mã tùy ý. Lý do là họ sẽ tránh rủi ro không cần thiết hoặc mất phí giao dịch nếu lợi nhuận không được đảm bảo.
tiêu đề phụ
Tại sao lần trước chúng ta có thể chống lại (Frontrunning)?
Tóm lại là
Khó nói. Có thể bot đã không mạo hiểm giao tiếp với hợp đồng đã được xác thực hoặc việc tiền được chuyển đến một địa chỉ khác là do ngẫu nhiên. Tất nhiên, điều đó không có nghĩa đó là một cách để tránh hoàn toàn Frontrunners. Rất có thể, có nhiều bot phức tạp hơn đang ẩn nấp trong nhóm giao dịch l mà đơn giản là chúng không sẵn sàng mạo hiểm với một khoản lợi nhuận nhỏ như vậy.
tiêu đề phụ
Tóm lại là
Trong thử nghiệm ngắn này, chúng tôi có thể chỉ ra rằng các bot chạy trước có mục đích chung tồn tại và chúng rất tinh vi.
Tất nhiên, chúng tôi biết các thí nghiệm của chúng tôi còn lâu mới hoàn thành hoặc dứt khoát. Có rất nhiều bot khác với các kích hoạt và phương thức hoạt động rất khác nhau. Các yếu tố như tiềm năng tăng giá, mô hình giao tiếp và độ phức tạp tối thiểu (ví dụ: giới hạn phí giao dịch) có thể ảnh hưởng đến cách chúng hoạt động.
Tuy nhiên, chúng tôi tin rằng công việc của chúng tôi cung cấp bằng chứng về khái niệm và làm sáng tỏ thêm về cách thức hoạt động của những rô-bốt ngoại vi có mục đích chung này.
Do đó, điều quan trọng là phải hiểu những robot này và cách chúng hoạt động để chúng ta có thể xây dựng các hệ thống an toàn hơn ngay bây giờ và trong tương lai. Các dự án như Flashbots cố gắng thực hiện điều này bằng cách dân chủ hóa việc khai thác MEV và biến nó thành tài nguyên công khai. Chúng tôi hy vọng nghiên cứu này sẽ giúp đạt được mục tiêu này.
Nếu bạn đã gặp bất kỳ bot nào trong số này hoặc đang tìm kiếm các kỹ thuật che giấu tinh vi hơn, vui lòng liên hệ với chúng tôi. Bằng cách chia sẻ kinh nghiệm của bạn, chúng tôi sẽ hiểu rõ hơn về các bot này và xây dựng một cộng đồng tiền điện tử an toàn hơn cho tất cả chúng ta.
Cảm ơn Tal Be'ery, Omer Shlomovitz, Oded Leiba, Dan Robinson và những người khác đã giúp đỡ cho bài viết này
tiêu đề phụ
ruột thừa


