Bài viết này giới thiệu một phương thức lừa đảo mới đã hoạt động trong hai tháng qua, miễn là chữ ký bị đánh cắp, phương thức này cực kỳ ẩn và khó ngăn chặn, và các địa chỉ đã tương tác với Uniswap có thể gặp rủi ro. Bài viết này sẽ phổ biến kỹ thuật lừa đảo chữ ký này và cố gắng tránh tổn thất tài sản nhiều hơn cho mọi người.
Viết bởi: Spinach Spinach, Nhà nghiên cứu độc lập được mời của Beosin; Sivan, Nhà nghiên cứu bảo mật Beosin
Hacker, đây là sự tồn tại khiến tất cả mọi người trong hệ sinh thái Web3 khiếp sợ.Đối với phía dự án, khi hacker trên toàn thế giới có thể nhìn chằm chằm vào bạn, bản chất mã nguồn mở khiến phía dự án sợ viết sai một dòng mã khi phát triển Nếu để sơ hở, một khi xảy ra sự cố về ANTT thì hậu quả khó mà gánh nổi.
Về mặt cá nhân, mọi tương tác hoặc chữ ký trên Chuỗi mà bạn thực hiện đều có khả năng bị đánh cắp tài sản nếu bạn không hiểu mình đang làm gì. Do đó, vấn đề bảo mật luôn là một trong những vấn đề rắc rối nhất trong thế giới mã hóa và do đặc điểm của chuỗi khối, một khi tài sản bị đánh cắp, hầu như không có cách nào lấy lại được, vì vậy điều đặc biệt quan trọng là phải có kiến thức bảo mật trong thế giới mã hóa.
Mới đây, người bạn tốt của Beosin là Pincai đã phát hiện ra một phương thức lừa đảo mới đã hoạt động trong hai tháng qua , chỉ cần chữ ký bị đánh cắp, phương thức này cực kỳ ẩn và khó ngăn chặn, đồng thời các địa chỉ đã tương tác với Uniswap có thể bị lộ rủi ro Tiếp theo, trong bài viết này, Beosin và nhà nghiên cứu độc lập Pincai sẽ phổ biến kỹ thuật lừa đảo có chữ ký này và cố gắng tránh tổn thất tài sản nhiều hơn cho mọi người.

Sau đây là phần kể lại kinh nghiệm cá nhân của Spinach:
quá trình
Mới đây, một người bạn (tên tạm thời là Tiểu A) đã tìm thấy Spinach sau khi tài sản trong ví bị đánh cắp, khác với cách đánh cắp thông thường, Tiểu A không tiết lộ khóa cá nhân cũng như không tương tác với hợp đồng của trang web lừa đảo nên Spinach started Vụ trộm cắp tài sản bị điều tra.

Trong trình duyệt chuỗi khối, bạn có thể thấy rằng USDT bị đánh cắp từ ví A nhỏ được chuyển qua chức năng Chuyển từ. Hãy phổ biến khoa học ở đây. Khi chúng tôi chuyển Mã thông báo trên Ethereum, chúng tôi thực sự gọi chức năng Chuyển của hợp đồng thông minh Mã thông báo, sự khác biệt giữa hai loại này chỉ đơn giản là Chuyển khoản là hoạt động của chính chủ sở hữu tài sản để chuyển Mã thông báo sang địa chỉ khác, trong khi Chuyển từ là hoạt động chuyển Mã thông báo của bên thứ ba trong địa chỉ này sang các địa chỉ khác. Điều này cũng có nghĩa là tài sản bị đánh cắp đã được chuyển từ một địa chỉ khác, chứ không phải khóa riêng của ví đã bị rò rỉ.

Bằng cách truy vấn chi tiết giao dịch, chúng tôi có thể tìm thấy một số manh mối chính:
- Địa chỉ kết thúc bằng fd51 chuyển tài sản của Little A đến địa chỉ kết thúc bằng a0c8
- Thao tác này tương tác với hợp đồng Permit2 của Uniswap
Vì vậy, ở đây có nghi ngờ, làm thế nào mà địa chỉ kết thúc bằng fd51 nhận được sự cho phép của nội dung này? Tại sao nó lại liên quan đến Uniswap?

Trước hết, chúng ta cần biết rằng điều kiện tiên quyết để gọi thành công chức năng Chuyển từ là người gọi cần phải có thẩm quyền hạn ngạch của Chuỗi thông báo này, tức là phải phê duyệt. Khi chúng tôi sử dụng một số Dapp Đôi khi, sau khi liên quan đến việc chuyển giao tài sản, trước tiên chúng tôi cần thực hiện thao tác ủy quyền (phê duyệt) để hợp đồng Dapp có quyền chuyển giao tài sản của chúng tôi.
Để giải câu đố này, chúng ta cần tiếp tục tìm hiểu và câu trả lời nằm trong bản ghi tương tác của địa chỉ kết thúc bằng fd51. Trước khi địa chỉ này thực hiện Chuyển từ để chuyển nội dung của A, bạn có thể thấy rằng địa chỉ này cũng đã thực hiện thao tác Cấp phép, và đối tượng tương tác của hai thao tác này là hợp đồng Permit2 của Uniswap, vậy tình hình giữa chức năng Permit này và Uniswap Permit2 là gì?

Hợp đồng Uniswap Permit2 là một hợp đồng thông minh mới được Uniswap ra mắt vào cuối năm 2022. Theo tuyên bố chính thức, đây là hợp đồng phê duyệt token cho phép chia sẻ và quản lý ủy quyền token trong các ứng dụng khác nhau, tạo ra một Chi phí thống nhất và nhiều hơn -hiệu quả, trải nghiệm người dùng an toàn hơn.
Và trong tương lai, khi ngày càng có nhiều dự án tích hợp với Permit2, Permit2 có thể đạt được sự phê duyệt Mã thông báo tiêu chuẩn hóa trong tất cả các ứng dụng. Permit2 sẽ cải thiện trải nghiệm người dùng bằng cách giảm chi phí giao dịch đồng thời tăng tính bảo mật của hợp đồng thông minh.

Trước tiên chúng ta hãy hiểu tại sao Uniswap ra mắt Permit 2. Giả sử một tình huống, khi chúng ta muốn thực hiện Swap trên một Dex nào đó, phương pháp tương tác truyền thống là chúng ta cần ủy quyền (phê duyệt) Dex trước khi thực hiện Swap. , đó là quá nhiều chi phí ma sát cho người dùng, tôi tin rằng mọi người đều đã từng có trải nghiệm như vậy.

Nguồn hình ảnh: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/potypes/permit2
Sự ra mắt của Permit2 có thể thay đổi luật chơi của toàn bộ hệ sinh thái Dapp. Nói một cách đơn giản, phương pháp truyền thống là bạn cần ủy quyền mỗi khi bạn tương tác với Dapp để chuyển tài sản và Permit2 có thể lưu bước này. Điều này có thể giảm người dùng một cách hiệu quả chi phí tương tác và mang lại trải nghiệm người dùng tốt hơn.
Giải pháp là Permit2 hoạt động như một trung gian giữa người dùng và Dapp. Người dùng chỉ cần ủy quyền cho phép Mã thông báo đối với hợp đồng Permit2. Tất cả các Dapp tích hợp hợp đồng Permit2 đều có thể chia sẻ số tiền ủy quyền này. Đối với người dùng, nó làm giảm chi phí tương tác và cải thiện Trải nghiệm người dùng, đối với Dapp, việc cải thiện trải nghiệm người dùng mang lại nhiều người dùng và tiền hơn, đây là một tình huống đôi bên cùng có lợi, nhưng đồng thời nó cũng có thể là con dao hai lưỡi và vấn đề nằm ở chỗ cách tương tác với Permit2 .
Trong chế độ tương tác truyền thống, cho dù đó là ủy quyền hay chuyển tiền, đó là một tương tác trên Chuỗi cho người dùng hoạt động. Mặt khác, Permit2 biến Chuỗi của người dùng thành chữ ký ngoài Chuỗi và tất cả các hoạt động trên Chuỗi được hoàn thành bởi các vai trò trung gian (chẳng hạn như hợp đồng Permit2 và bên dự án tích hợp Permit2, v.v.). được chuyển từ người dùng sang vai trò trung gian. Ngay cả khi người dùng không có ETH trong ví, người dùng có thể sử dụng các Token khác để trả phí gas hoặc được hoàn trả đầy đủ bởi vai trò trung gian, tùy thuộc vào sự lựa chọn của vai trò trung gian.

Nguồn hình ảnh: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/potypes/permit2
Mặc dù sự xuất hiện của Permit2 có thể thay đổi luật chơi của Dapp trong tương lai, nhưng có thể thấy đây là con dao hai lưỡi mạnh mẽ, đối với người dùng, chữ ký ngoài chuỗi là Chuỗi dễ dàng nhất để phá vỡ sự phòng thủ của họ. khi chúng tôi sử dụng Khi ví đăng nhập vào một số Dapps, cần có chữ ký để kết nối và hầu hết mọi người không kiểm tra kỹ nội dung của chữ ký và không hiểu nội dung của chữ ký, và đây là phần đáng sợ nhất.
Sau khi hiểu hợp đồng Permit2, chúng ta sẽ hiểu tại sao hành vi trộm cắp tài sản lại tương tác với hợp đồng Permit2 khi chúng ta quay lại sự cố A nhỏ, vì vậy hãy để Spinach tái tạo phương thức lừa đảo chữ ký Permit2, trước hết, điều kiện tiên quyết quan trọng Ví lừa đảo cần phải có Token được ủy quyền cho hợp đồng Permit2 của Uniswap Spinach nhận thấy rằng miễn là Swap được thực hiện trên Dapp hoặc Uniswap tích hợp với Permit2 thì nó cần được ủy quyền cho hợp đồng Permit2 (Spinach sử dụng một plug-in bảo mật trong hình bên dưới).

Một điểm đáng sợ khác là cho dù bạn muốn Swap bao nhiêu, hợp đồng Permit2 của Uniswap sẽ mặc định cho phép bạn ủy quyền toàn bộ số dư của Token.Mặc dù MetaMask sẽ cho phép bạn tùy chỉnh số tiền đầu vào, nhưng tôi tin rằng hầu hết mọi người sẽ nhấp trực tiếp vào giá trị mặc định hoặc tối đa và giá trị mặc định của Permit2 là hạn ngạch không giới hạn....


Điều này cũng có nghĩa là miễn là bạn đã tương tác với Uniswap và ủy quyền số tiền cho hợp đồng Permit2 sau năm 2023, bạn sẽ phải đối mặt với rủi ro lừa đảo lừa đảo này.
Bởi vì trọng tâm là chức năng Giấy phép tương tác với hợp đồng Permit2 trong địa chỉ kết thúc bằng fd51. Chức năng này chỉ đơn giản là sử dụng ví của bạn để chuyển số lượng Mã thông báo mà bạn đã ủy quyền cho hợp đồng Permit2 đến một địa chỉ khác. Điều đó có nghĩa là, miễn là Với chữ ký của bạn, hacker có thể nhận được sự cho phép của Mã thông báo trong ví của bạn và chuyển tài sản của bạn đi.
Phân tích chi tiết sự kiện
chức năng cho phép:

Bạn có thể nghĩ về chức năng Giấy phép như một cách để ký hợp đồng trực tuyến. Chức năng này cho phép bạn (PermitSingle) ký trước một "hợp đồng" cho phép người khác (người chi tiêu) chi tiêu một số token của bạn vào một thời điểm nào đó trong tương lai.
Đồng thời, bạn cũng cần cung cấp chữ ký (signature), giống như ký hợp đồng bằng giấy, để chứng minh rằng “hợp đồng” này thực sự do bạn ký.
Vậy chức năng này hoạt động như thế nào?
- Đầu tiên, nó kiểm tra xem thời gian hiện tại có vượt quá ngày hết hạn chữ ký của bạn (sigDeadline) hay không. Giống như hợp đồng bạn đã ký có ngày hết hạn, nếu thời gian hiện tại vượt quá ngày hết hạn, thì "hợp đồng" này không thể sử dụng được nữa và chương trình sẽ dừng trực tiếp.
- Tiếp theo, nó kiểm tra xem chữ ký của bạn có thực sự là của bạn không. Chương trình sẽ sử dụng một phương pháp đặc biệt (signature.verify) để kiểm tra chữ ký nhằm đảm bảo rằng chữ ký đó thực sự do bạn ký và không bị người khác giả mạo.
- Cuối cùng, nếu kiểm tra vượt qua, chương trình sẽ cập nhật bản ghi để lưu ý rằng bạn đã cho phép người khác sử dụng một số token của mình.
Trọng tâm chủ yếu là chức năng xác minh và chức năng _updateApproval.
xác minh chức năng:

Có thể thấy rằng chức năng xác minh sẽ lấy ba dữ liệu của v, r và s từ tham số thông tin chữ ký. v, r và s là các giá trị của chữ ký giao dịch và chúng có thể được sử dụng để khôi phục lại địa chỉ của chữ ký giao dịch. Bạn có thể thấy trong đoạn mã trên Sau khi hợp đồng khôi phục địa chỉ của chữ ký giao dịch, hãy so sánh nó với địa chỉ chủ sở hữu token đến. Nếu chúng giống nhau, quá trình xác minh sẽ được thông qua và lệnh gọi tới _updateApproval chức năng được tiếp tục. Nếu chúng khác nhau, giao dịch sẽ được khôi phục.
_updateChức năng phê duyệt:


Khi xác minh chữ ký được thông qua, hàm _updateApproval sẽ được gọi để cập nhật giá trị ủy quyền, điều đó có nghĩa là quyền của bạn đã được chuyển. Tại thời điểm này, thuận tiện để gọi hàm transferfrom để chuyển token đến địa chỉ được chỉ định sau khi được ủy quyền, như được hiển thị trong mã bên dưới.


Chà, sau khi giải thích chức năng cho phép, chúng ta hãy xem các giao dịch thực trên Chuỗi, chúng ta có thể tìm hiểu chi tiết về sự tương tác này:
- chủ sở hữu là địa chỉ ví của A (số cuối 308a)
- Trong phần Chi tiết, bạn có thể xem địa chỉ hợp đồng Token được ủy quyền (USDT) và số tiền cũng như các thông tin khác
- Spender là địa chỉ hacker kết thúc bằng fd51
- sigDeadline là thời gian có hiệu lực của chữ ký và chữ ký là thông tin chữ ký của Little A

Và nhìn lại hồ sơ tương tác của Little A, chúng ta sẽ thấy rằng khi Little A sử dụng Uniswap trước đây, anh ấy đã nhấp vào số tiền ủy quyền mặc định, gần như không giới hạn.

Một bản tóm tắt đơn giản cho thấy Little A đã ủy quyền Uniswap Permit2 hạn ngạch USDT không giới hạn trong quá trình sử dụng Uniswap trước đó và Little A đã vô tình rơi vào bẫy lừa đảo chữ ký Permit2 do hacker thiết kế khi thực hiện các thao tác ví và hacker đã lấy được chữ ký của Little A. đã sử dụng chữ ký của Little A để thực hiện hai thao tác, Giấy phép và Chuyển từ, trong hợp đồng Permit2 để chuyển tài sản của Little A. Spinach đã quan sát thấy rằng hợp đồng Permit2 của Uniswap đã trở thành một thiên đường câu cá. cách đây hai tháng.

Nguồn: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3
Và trong các bản ghi tương tác, có thể thấy rằng hầu hết chúng đều được đánh dấu là địa chỉ lừa đảo (Fake_Phishing) và mọi người liên tục bị lừa.

Nguồn: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3
Làm thế nào để ngăn chặn nó?
Xét rằng hợp đồng Uniswap Permit2 có thể trở nên phổ biến hơn trong tương lai và nhiều dự án sẽ tích hợp hợp đồng Permit2 để chia sẻ quyền hạn, chúng ta có thể nghĩ ra các phương pháp phòng ngừa hiệu quả như sau:
1 Hiểu và nhận biết nội dung chữ ký:
Định dạng chữ ký của Permit thường bao gồm một số định dạng chính như Chủ sở hữu, Người chi tiêu, giá trị, nonce và thời hạn, nếu bạn muốn tận hưởng sự tiện lợi và chi phí thấp do Permit2 mang lại, bạn phải học cách nhận dạng định dạng chữ ký này. (tải xuống plug-in bảo mật là một lựa chọn tốt)


Chúng tôi đề xuất plug-in chống lừa đảo Beosin Alert sau đây cho độc giả và bạn bè, plugin này có thể xác định hầu hết các trang web lừa đảo trong lĩnh vực Web3 và bảo vệ an toàn tài sản và ví của mọi người.

Tải xuống plug-in chống lừa đảo:
https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpgiobjacpmcgckfgodjeogceji?hl=vi
2 Ví tài sản và ví tương tác được sử dụng riêng:
Nếu bạn có một lượng lớn tài sản, bạn nên đặt tất cả tài sản vào ví lạnh và đặt một lượng tiền nhỏ vào ví tương tác trên Chuỗi, điều này có thể giảm đáng kể tổn thất trong trường hợp lừa đảo.
3 Không ủy quyền số tiền quá mức cho hợp đồng Permit2 hoặc hủy bỏ ủy quyền:
Khi bạn thực hiện Hoán đổi trên Uniswap, bạn chỉ ủy quyền số tiền bạn muốn tương tác, do đó, mặc dù mỗi tương tác cần được ủy quyền lại, sẽ có một số chi phí tương tác, nhưng nó có thể tránh được hành vi lừa đảo chữ ký của Permit2. Nếu bạn đã ủy quyền hạn ngạch, bạn có thể tìm plug-in bảo mật tương ứng để hủy ủy quyền.
4 Xác định bản chất token và liệu nó có hỗ trợ chức năng cho phép hay không:
Trong tương lai, ngày càng nhiều token ERC20 có thể sử dụng giao thức mở rộng này để thực hiện chức năng cấp phép. Đối với bạn, bạn cần chú ý xem token token bạn nắm giữ có hỗ trợ chức năng này hay không. Nếu nó hỗ trợ thì bạn phải hết sức cẩn thận, và kiểm tra nghiêm ngặt xem mỗi chữ ký không xác định có phải là chữ ký của chức năng cấp phép hay không.
5 Nếu có token được lưu trữ trên các nền tảng khác sau khi bị lừa, cần xây dựng kế hoạch giải cứu toàn diện:
Khi bạn phát hiện ra rằng mình đã bị lừa đảo và token đã bị hacker chuyển đi, nhưng bạn vẫn có token được lưu trữ trên các nền tảng khác thông qua các phương thức như thế chấp, v.v., bạn cần rút chúng và chuyển chúng đến một địa chỉ an toàn. lần này, bạn cần biết rằng hacker có thể luôn theo dõi bạn Token của địa chỉ, bởi vì anh ta có chữ ký của bạn, chỉ cần token xuất hiện trên địa chỉ bị đánh cắp của bạn, hacker có thể chuyển trực tiếp. Tại thời điểm này, cần phải xây dựng một quy trình giải cứu token hoàn chỉnh. Hai quá trình token và chuyển token cần được thực hiện cùng nhau. Các giao dịch hacker không thể được đưa vào đó . Có thể sử dụng chuyển MEV, yêu cầu một số kiến thức chuỗi khối và kỹ năng viết mã. Bạn có thể tìm một công ty bảo mật chuyên nghiệp như nhóm Beosin để sử dụng tập lệnh ưu tiên giao dịch để đạt được điều đó.
Đọc tình huống: Công ty mã hóa big V gặp phải cuộc tấn công "scavenger", nhóm bảo mật Beosin đã giúp anh ta lấy lại tiền như thế nào?
Người ta tin rằng sẽ ngày càng có nhiều hành vi lừa đảo dựa trên Permit2 trong tương lai . Phương thức lừa đảo bằng chữ ký này cực kỳ ẩn và khó ngăn chặn. Với việc áp dụng rộng rãi Permit2, ngày càng nhiều địa chỉ gặp rủi ro. Tôi hy vọng bạn trước màn hình có thể lan truyền nó cho nhiều người hơn sau khi đọc bài viết này, để tránh việc nhiều người bị đánh cắp hơn.

Thẩm quyền giải quyết:
https://t.co/G9Mnq8eUle
https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/potypes/permit2




