A cracked red padlock with a broken shackle, set

Cách thu hồi các phê duyệt độc hại và đóng đường dẫn rò rỉ

By AI News Crypto Editorial Team8 min read

Việc thu hồi các phê duyệt độc hại có nghĩa là gửi một giao dịch trên chuỗi để ghi đè lên khoản cho phép của một token, thường là đặt nó thành 0 cho người tiêu dùng có thể gọi transferFrom trên số dư của bạn. Ngắt kết nối ví khỏi một dApp chỉ là một hành động giao diện người dùng, vì vậy nó không xóa các phê duyệt token hoặc ngăn chặn một kẻ rút ví đã có quyền chi tiêu.

Điểm chính

  • Một phê duyệt token là một quyền cho phép tồn tại tại hợp đồng token, và nó vẫn tồn tại cho đến khi bạn thay đổi nó trên chuỗi.
  • Để thu hồi phê duyệt, bạn gửi một giao dịch đặt khoản cho phép của người tiêu dùng thành 0 hoặc một số nhỏ hơn, và bạn phải trả gas.
  • Các phê duyệt không giới hạn là phiên bản phình to của các khoản cho phép vì một người tiêu dùng bị xâm phạm có thể rút số dư token đó lên đến khoản cho phép.
  • Permit2 có thể ẩn giấu rủi ro sau các chữ ký: bạn có thể chỉ thấy một phê duyệt trên chuỗi cho Permit2 trong khi nguy hiểm thực sự là ký một ủy quyền EIP-712 độc hại.

Tại sao các phê duyệt token có thể nguy hiểm

Một phê duyệt độc hại không phải là “một kết nối dApp.” Nó là một quyền cho phép sống trên một hợp đồng token nói rằng một người tiêu dùng cụ thể có thể di chuyển token của bạn bằng transferFrom.ERC-20 các chuyển nhượng ủy quyền chạy trên ba chức năng: approve(spender, amount), allowance(owner, spender), và transferFrom(from, to, amount). Khi khoản cho phép đó tồn tại, người tiêu dùng không cần ví của bạn nữa. Nó chỉ cần khoản cho phép vẫn không bằng 0.

Sự tồn tại đó là toàn bộ vấn đề. Các khoản cho phép vẫn hoạt động cho đến khi được thay đổi rõ ràng, đó là lý do tại sao các nút “ngắt kết nối ví” và danh sách kết nối ví là một cảm giác an toàn sai lầm. Ngắt kết nối loại bỏ khả năng của một trang web để yêu cầu ví của bạn. Nó không làm gì với trạng thái hợp đồng token thực sự ủy quyền chi tiêu.

Đây là lý do tại sao lừa đảo phê duyệt hoạt động: mục tiêu của kẻ tấn công là có được một phê duyệt token (hoặc một chữ ký kiểu giấy phép) một lần, sau đó sử dụng nó sau khi nạn nhân không còn chú ý.

Các phê duyệt không giới hạn là nơi rủi ro đuôi sống. Nhiều giao diện người dùng mặc định là “vô hạn” vì nó giảm ma sát trong tương lai, nhưng việc phê duyệt số lượng tối đa uint256 thực sự trao cho người tiêu dùng một tấm séc trắng cho token đó. Nếu hợp đồng người tiêu dùng độc hại hôm nay, hoặc bị khai thác sau này, khoản cho phép là con đường rút tiền.

Đối với các nhà giao dịch, mô hình tâm lý mà giữ vững là “đường tín dụng đứng.” Mỗi phê duyệt token là một mục: token → người tiêu dùng → giới hạn. Nếu người đọc không thể chỉ ra hợp đồng chính xác hiện đang có quyền gọi transferFrom (hoặc trực tiếp, hoặc qua Permit2), thì sự tiếp xúc thực sự là không xác định. Đây là một trong những cơ chế cốt lõi đứng sau các trò lừa đảo ví crypto và cách để tránh chúng.

Cách thu hồi một phê duyệt hoạt động

Việc thu hồi không phải là một công tắc cài đặt. Nó là một thay đổi trạng thái trên chuỗi, có nghĩa là nó tốn gas và để lại một bản ghi giao dịch. Về mặt cơ học, một phê duyệt thu hồi chỉ là ghi đè lên bản đồ khoản cho phép tại hợp đồng token để khoản cho phép của người tiêu dùng trở thành 0 (hoặc một số nhỏ hơn nếu mục tiêu là tiếp tục sử dụng ứng dụng với một giới hạn bị giới hạn).

Hai chi tiết hoạt động quan trọng hơn hầu hết các hướng dẫn thừa nhận.

Một là “xóa phê duyệt token” là cụ thể cho token. Việc thu hồi USDC cho một người tiêu dùng không làm gì cho các phê duyệt WETH cho cùng một người tiêu dùng. Sổ cái khoản cho phép là theo hợp đồng token.

Chi tiết khác là các cập nhật khoản cho phép có thể có một trường hợp cạnh tranh khi thay đổi một khoản cho phép không bằng 0 N thành một khoản cho phép không bằng 0 khác M. Mô hình an toàn hơn là mô hình mà Speedrun Ethereum gọi là “phê duyệt-đến-không-để-rồi-đặt.” Ý tưởng rất đơn giản: đặt khoản cho phép thành 0 trước, chờ xác nhận, sau đó đặt số mới. Điều đó loại bỏ khoảng thời gian mà một người tiêu dùng có thể sử dụng cả giá trị khoản cho phép cũ và mới.

Nếu một ví hoặc dApp ném ra các lỗi như “Phê duyệt đến 0 thất bại” hoặc “Phê duyệt đến số mới thất bại,” thì thường không phải là dấu hiệu rằng việc thu hồi là không thể. Đó là dấu hiệu rằng hành vi phê duyệt của token là kỳ quặc hoặc giao diện người dùng không xử lý các quy tắc của token một cách sạch sẽ.

Cách khắc phục là sử dụng một công cụ khoản cho phép khác hoặc giao diện phê duyệt token của trình khám phá khối, sau đó thử lại cùng một thay đổi trên chuỗi.

Khung chính vẫn nhất quán: việc thu hồi chỉ đơn giản là ghi đè quyền cho phép trên chuỗi. Nếu người đọc không thể xác định người tiêu dùng nắm giữ quyền cho phép, thì việc thu hồi không thể được nhắm mục tiêu chính xác.

Quá trình thu hồi từng bước sử dụng Revoke.cash

Revoke.cash là một quy trình làm việc phổ biến vì nó hiển thị các phê duyệt trong một bảng điều khiển duy nhất và cho phép người dùng gửi giao dịch thu hồi trên chuỗi từ cùng một màn hình. Các bước dưới đây phản ánh quy trình trong ví mà Bifrost Wallet tài liệu, nhưng trình tự thì về cơ bản giống nhau trên các ví.

1. Mở một trình duyệt ví đáng tin cậy và điều hướng đến Revoke.cash. Sử dụng trình duyệt trong ví giảm khả năng rơi vào một miền giống như từ quảng cáo hoặc tin nhắn trực tiếp. 2. Kết nối ví và chọn mạng chính xác. Các phê duyệt là cụ thể cho chuỗi, vì vậy một phê duyệt Ethereum sẽ không xuất hiện khi công cụ được đặt thành Flare, Base, hoặc một chuỗi EVM khác. 3. Mở chế độ xem phê duyệt token và sắp xếp theo rủi ro.

Bắt đầu với các khoản cho phép không giới hạn và các token có số dư có ý nghĩa, vì đó là những con đường rút tiền có tác động cao nhất. 4. Xác định người tiêu dùng cho mỗi hàng rủi ro. Người tiêu dùng là hợp đồng có thể gọi transferFrom. Nếu tên người tiêu dùng trông không quen thuộc, hãy coi đó là kẻ thù cho đến khi được chứng minh ngược lại. 5. Nhấp vào thu hồi cho các phê duyệt đã chọn.

Điều này gửi một giao dịch đặt khoản cho phép thành 0 cho token và người tiêu dùng đó. 6. Xác nhận giao dịch trong ví và trả gas. Nếu gas cao, việc thu hồi các khoản cho phép lớn nhất trước vẫn là một giao dịch “phí bảo hiểm” hợp lý. 7. Kiểm tra lại danh sách phê duyệt sau khi xác nhận. Khoản cho phép bây giờ nên hiển thị là 0, hoặc hàng đó nên biến mất tùy thuộc vào giao diện của công cụ.

Đây là câu trả lời cốt lõi cho cách thu hồi các phê duyệt: người dùng không “ngắt liên kết” bất cứ điều gì. Người dùng đang thay đổi khoản cho phép tại hợp đồng token. Nếu kẻ rút ví đã có phê duyệt, thì đây là hành động đóng con đường.

Các phê duyệt Permit và Permit2 để kiểm tra

Cuối năm 2022 là điểm chuyển mình mà hầu hết người dùng đã bỏ lỡ. Uniswap’s Universal Router đã làm cho Permit2 trở thành con đường phê duyệt mặc định, điều này đã chuyển nhiều “rủi ro phê duyệt” ra khỏi các giao dịch phê duyệt() rõ ràng và hướng về các chữ ký EIP-712.

Permit2 là một hợp đồng phê duyệt đơn lẻ của Uniswap Labs: người dùng phê duyệt Permit2 một lần cho mỗi token, sau đó các ứng dụng yêu cầu các ủy quyền đã ký bao gồm người tiêu dùng, số lượng, thời hạn và nonce.

Điều đó tạo ra hai sổ cái để kiểm toán.

Sổ cái một là các khoản cho phép ERC-20 cổ điển: token → người tiêu dùng. Đây là những gì hầu hết các bảng điều khiển “phê duyệt token” hiển thị, và đây là nơi các phê duyệt không giới hạn cho các hợp đồng ngẫu nhiên thường sống.

Sổ cái hai là Permit2: token → khoản cho phép Permit2 trên chuỗi, cộng với các ủy quyền đã ký ngoài chuỗi mà các ứng dụng yêu cầu. Permit2 hỗ trợ cả chế độ khoản cho phép đứng và chế độ chuyển nhượng một lần, và các ủy quyền của nó có thời hạn. Các thời hạn có thể giảm tiếp xúc từ các quyền cho phép không hoạt động vì các ủy quyền có thể tự động hết hạn, nhưng chúng không giải quyết được việc đánh cắp chữ ký.

Các chiến dịch lừa đảo phê duyệt ngày càng nhắm vào các lời nhắc ký Permit và Permit2 vì một thông điệp đã ký duy nhất có thể đủ để di chuyển quỹ.

Ý nghĩa thực tiễn là không thoải mái nhưng rõ ràng: “Tôi không nhớ đã phê duyệt bất cứ điều gì” không phải là tín hiệu an toàn. Một người dùng có thể bị tiếp xúc sau khi ký dữ liệu đã gõ mà chưa bao giờ trông giống như một giao dịch phê duyệt() trong lịch sử của họ.

Khi dọn dẹp sau một sự hoảng sợ, việc kiểm toán nên trả lời một câu hỏi cho mỗi token: hợp đồng nào hiện có thể gây ra một transferFrom của token này từ ví này? Đôi khi đó là một người tiêu dùng trực tiếp. Đôi khi đó là Permit2 vì token đã được phê duyệt cho đơn lẻ và người dùng tiếp tục ký các lời nhắc một cách mù quáng.

Thói quen ngăn chặn các sự cố lặp lại là thói quen giống như đã đề cập trong cách xác minh một giao dịch trước khi ký: coi mọi yêu cầu chữ ký như quyền chi tiêu cho đến khi được chứng minh ngược lại.

Danh sách kiểm tra phòng ngừa sau khi bạn thu hồi

Sau khi các giao dịch thu hồi được xác nhận, mục tiêu là ngừng tái tạo cùng một tiếp xúc lần tiếp theo khi một giao dịch hoán đổi, cầu nối, hoặc giao diện staking yêu cầu quyền cho phép. Tư thế sạch sẽ là coi các phê duyệt như kích thước vị trí: giới hạn nên phù hợp với hành động dự định, không phải số tối đa có thể.

1. Ưu tiên các phê duyệt số chính xác khi giao diện cho phép. Các phê duyệt không giới hạn là tiện lợi, nhưng chúng cũng là chế độ thất bại có tác động cao nhất nếu người tiêu dùng bị xâm phạm. 2. Nếu một khoản cho phép phải được thay đổi từ một giá trị không bằng 0 sang một giá trị không bằng 0 khác, hãy sử dụng “phê duyệt-đến-không-để-rồi-đặt.” Đây là một thói quen hoạt động nhỏ giúp giảm rủi ro cạnh tranh đã biết. 3.

Định kỳ xem xét các phê duyệt với một công cụ theo dõi khoản cho phép. Các công cụ được đề cập trong hướng dẫn bảo mật người dùng bao gồm Etherscan Token Approvals, Revoke.cash, Debank, và Unrekt. 4. Đối xử với các lời nhắc Permit và Permit2 như những khoảnh khắc rủi ro cao. Permit2 sử dụng các chữ ký EIP-712 với thời hạn và nonces, nhưng lừa đảo chữ ký vẫn là cách chính mà người dùng bị rút tiền. 5.

Giữ mô hình “hai sổ cái” trên bàn: các khoản cho phép cổ điển và Permit2. Việc thu hồi một người tiêu dùng ngẫu nhiên không giúp ích gì nếu token vẫn được phê duyệt cho Permit2 và ví vẫn tiếp tục ký các ủy quyền từ một trang không được xác minh.

Đây là nơi mà kỷ luật rộng hơn về các trò lừa đảo ví crypto và cách để tránh chúng trở nên hoạt động: giảm các quyền cho phép đứng, xác minh những gì đang được ký, và trả gas để đóng các đường cũ khi chúng không còn hữu ích.

Điểm chính

Tôi đã thấy mọi người thực hiện phiên bản tốn kém của việc dọn dẹp này: họ ngắt kết nối một trang web trong ví của họ, cảm thấy an toàn, và sau đó lại bị tấn công vì khoản cho phép tại hợp đồng token không bao giờ thay đổi. Câu hỏi duy nhất quan trọng là liệu một người tiêu dùng có thể vẫn gọi transferFrom trên token đó hay không. Nếu câu trả lời là “có,” con đường rút tiền vẫn mở.

Thói quen giữ cho điều này rẻ là coi các phê duyệt như các đường biên. Kích thước chúng theo giao dịch, và khi có điều gì đó cảm thấy không ổn, hãy thu hồi những cái không giới hạn trước ngay cả khi gas xấu. Nếu Permit2 đã có trong quy trình kể từ cuối năm 2022, thói quen thứ hai là từ chối ký các lời nhắc EIP-712 mà bạn không thể đọc. Đó là nơi lừa đảo phê duyệt sống bây giờ.

Nguồn

Frequently Asked Questions

Ngắt kết nối ví của tôi với một dApp có hủy bỏ các phê duyệt token không?

Không. Ngắt kết nối là một hành động ở cấp giao diện người dùng và không thay đổi mức phê duyệt được lưu trữ trên hợp đồng token. Người chi tiêu vẫn có thể sử dụng transferFrom lên đến số lượng đã được phê duyệt cho đến khi bạn hủy bỏ hoặc giảm mức phê duyệt đó trên chuỗi.

Làm thế nào để tôi biết phê duyệt token nào là nguy hiểm nhất?

Các phê duyệt không giới hạn có tác động cao nhất vì chúng cho phép người chi tiêu rút bất kỳ số token nào bạn nắm giữ nếu họ có ý định xấu hoặc bị xâm phạm. Các phê duyệt cũ cho các hợp đồng mà bạn không còn sử dụng cũng là bề mặt tấn công phổ biến vì chúng tồn tại cho đến khi được thay đổi.

Việc hủy bỏ phê duyệt có miễn phí không?

Không. Việc hủy bỏ là một giao dịch trên chuỗi cập nhật trạng thái phê duyệt, vì vậy nó tốn gas trên mạng mà phê duyệt tồn tại. Chi phí đó là lý do tại sao nhiều ví tích lũy các phê duyệt không hoạt động theo thời gian.

Permit2 là gì và tại sao tôi có thể không thấy giao dịch approve()?

Permit2 là một hợp đồng phê duyệt đơn lẻ của Uniswap Labs sử dụng chữ ký EIP-712 để ủy quyền chi tiêu với thời hạn và nonce. Bạn có thể chỉ thấy một phê duyệt trên chuỗi một lần cho Permit2 cho một token, trong khi các ủy quyền sau đó diễn ra thông qua các tin nhắn dữ liệu kiểu đã ký thay vì các giao dịch approve() riêng biệt.

Tôi có thể giảm phê duyệt thay vì hủy bỏ hoàn toàn không?

Có. Giảm mức phê duyệt là cơ chế tương tự như hủy bỏ, chỉ cần đặt nó thành một số nhỏ hơn thay vì 0. Khi thay đổi một mức phê duyệt không bằng 0 thành một giá trị không bằng 0 khác, mẫu hoạt động an toàn hơn là “phê duyệt-đến-không-để-sau-đó-đặt.”