Bởi: Suy nghĩ
lý lịch
Khi dự án sinh thái TON nóng lên, các nhóm lừa đảo Web3 cũng bắt đầu xâm nhập vào chiến trường sinh thái TON. Hiện tại, TonConnect SDK được sử dụng trong hệ sinh thái TON để giải quyết vấn đề kết nối và tương tác ví đa nền tảng/ứng dụng. Các giải pháp như vậy chắc chắn sẽ gặp phải một vấn đề: làm thế nào để giải quyết việc xác minh tên miền trong quá trình giao tiếp đa nền tảng/ứng dụng?
Thông thường, để cho phép người dùng sử dụng ví để kết nối với DApp hoặc xác nhận xem nguồn yêu cầu chữ ký có đáng tin cậy hay không, ví sẽ nhắc tên miền của nguồn trên trang phê duyệt yêu cầu để người dùng có thể xác minh tốt hơn và xác nhận xem nguồn yêu cầu có phù hợp với nguồn hoạt động của họ hay không. Điều này tránh bị lừa gạt bởi các yêu cầu chữ ký từ các nguồn độc hại.
Nhóm bảo mật SlowMist trước đây đã phát hiện ra các vấn đề bảo mật khi xác minh tên miền trong giao tiếp đa nền tảng/ứng dụng giữa loại ví này và DApp. Chúng tôi đã liên lạc và trao đổi với các nhóm dự án của MetaMask SDK và WalletConnect Web3Modal và nhận thấy rằng vấn đề này rất khó giải quyết. với. Do đó, MetaMask và WalletConnect vẫn chưa giải quyết triệt để vấn đề này.
Gần đây, chúng tôi phát hiện TonConnect SDK trong hệ sinh thái TON cũng gặp vấn đề tương tự nên chúng tôi tiết lộ tại đây với mong muốn giúp người dùng xác định và ngăn chặn những rủi ro đó.
phân tích
Thông thường, khi ví tiện ích mở rộng trình duyệt tương tác với DApp, tập lệnh JS (tập lệnh nội dung) sẽ được đưa vào trang web để chuyển tiếp tin nhắn giữa trang web và tiện ích mở rộng trình duyệt. Khi trang web giao tiếp với tập lệnh nội dung, window.postmessage và window.addEventListener sẽ được sử dụng và window.addEventListener có thể xử lý thêm thông báo bằng cách lấy nguồn gốc của thông báo. Thao tác cụ thể bao gồm hiển thị nguồn gốc của thông báo trong trình duyệt. ví mở rộng và xác định nguồn gốc của tin nhắn. Liệu nó có nằm trong danh sách đen hay không, thực hiện xác thực và các hoạt động khác đối với nguồn gốc của tin nhắn. Vì nguồn gốc dựa vào các chức năng do trình duyệt cung cấp để lấy nó nên nó không thể bị giả mạo.
Tuy nhiên, khi giao tiếp giữa các nền tảng/ứng dụng, tin nhắn thường được chuyển tiếp qua máy chủ chuyển tiếp tin nhắn và máy chủ chuyển tiếp tin nhắn khó kiểm tra tên miền mà tin nhắn được bắt đầu (vì dữ liệu khách hàng có thể bị giả mạo), vì vậy có vấn đề về nguồn tin nhắn bị giả mạo, sau đây là 2 trường hợp liên lạc tin nhắn đa nền tảng/ứng dụng:
Trang web trình duyệt <=> Máy chủ chuyển tiếp tin nhắn <=> ỨNG DỤNG Wallet
APP khác <=> Máy chủ chuyển tiếp tin nhắn <=> APP Wallet
Lấy TonConnect SDK làm ví dụ. DApp sử dụng TonConnect SDK làm công cụ liên lạc bằng tin nhắn giữa ví và DApp. Nó cần định cấu hình dappMetadata khi truy cập TonConnect SDK. Tuy nhiên, dữ liệu của dappMetadata rất khó xác minh. hợp lệ bằng cách sửa đổi các trang web dappMetadata đáng tin cậy, từ đó lừa gạt người dùng.
Bạn có thể giả mạo nguồn gốc của ton.org bằng cách đặt tệp kê khai.json thành nội dung sau:
Sau đây là PoC sau khi triển khai đoạn mã trên. Tiếp theo, chúng ta quét và phân tích mã QR.
TonConnect SDK chuyển dữ liệu tệp kê khai đến ứng dụng ví thông qua mã QR, không giống như các SDK khác chuyển tiếp dữ liệu đó qua máy chủ chuyển tiếp tin nhắn. Ứng dụng ví sẽ phân tích dữ liệu tệp kê khai thu được bằng cách quét. Có thể thấy rằng chúng ta có thể dễ dàng giả mạo nguồn gốc của bất kỳ DApp nào để giao tiếp với ví. Nói cách khác, những kẻ tấn công có thể sử dụng lỗ hổng này để giả mạo các DApp nổi tiếng để thực hiện các cuộc tấn công lừa đảo và lừa đảo.
https://app.tonkeeper.com/ton-connect?v=2&id=24e3f2fdbea19fcd4fe03da3bc3d534d8b988edd01736f0b127a70cf2c531661&r={"manifestUrl":"https://tonconnect.pages.dev/tonconnect-manifest.json","items":[{" tên://ton_addr"}]}
Sau khi kết nối thành công, DApp giả mạo sẽ khởi tạo một ứng dụng chữ ký thông qua TonConnect. Sau khi người dùng xác nhận, ví sẽ phát dữ liệu đã ký lên blockchain. Vì giả mạo nguồn gốc có tính chất lừa đảo cực kỳ cao nên người dùng khó xác định được nguồn gốc của các kết nối và yêu cầu chữ ký.
Trong MetaMask SDK, bằng cách sửa đổi dappMetadata, bạn có thể giả mạo nó thành một DApp nổi tiếng để thực hiện các cuộc tấn công lừa đảo và lừa đảo:
Tương tự, trong WalletConnectModalSign, chỉ cần sửa đổi siêu dữ liệu:
Tóm tắt
Vì hiện tại không có giải pháp tốt cho vấn đề xác minh tên miền trong giao tiếp đa nền tảng/ứng dụng giữa ví chính thống và DApp, nên các dự án SDK thường thêm một số phương thức xác minh bổ sung, chẳng hạn như: Cơ chế xác minh của WalletConnect (https://docs.walletconnect. com/cloud/verify), sau khi DApp vượt qua quá trình xác minh tên miền, ví có thể sử dụng API xác minh để xác định xem tên miền có đáng tin cậy hay không.
Tuy nhiên, nhiều DApp chính thống không xác minh tên miền nên giải pháp này khó giải quyết các cuộc tấn công lừa đảo giả mạo nguồn gốc. Nếu đại đa số DApp sử dụng Xác minh để xác thực tên miền, người dùng sẽ được bảo vệ phần lớn khỏi các cuộc tấn công lừa đảo giả mạo nguồn gốc ngày càng tràn lan. Nhóm bảo mật SlowMist cũng khuyến cáo người dùng chú ý xác định xem trang web mở có trùng khớp với tên miền được yêu cầu phê duyệt hay không để tránh những cuộc tấn công như vậy.