Sương mù chậm: Kiểm tra trống Phân tích lừa đảo eth_sign
慢雾科技
2022-10-11 03:30
本文约2468字,阅读全文需要约10分钟
Nhấp chuột của "bạn", NFT của "tôi".

Tác giả gốc: Lisa & Kong

Gần đây, chúng tôi đã tìm thấy nhiều sự cố lừa đảo về chữ ký eth_sign.

Trang web lừa đảo 1: https://moonbirds-exclusive.com/

Khi chúng tôi kết nối ví và nhấp vào Yêu cầu, một hộp ứng dụng chữ ký bật lên và MetaMask đồng thời hiển thị cảnh báo màu đỏ và không thể biết từ cửa sổ bật lên này chữ ký được yêu cầu để làm gì.

Trên thực tế, đây là một loại chữ ký rất nguy hiểm, về cơ bản là "séc trắng" của Ethereum. Với hình thức lừa đảo này, những kẻ lừa đảo có thể sử dụng khóa cá nhân của bạn để ký bất kỳ giao dịch nào.

Ngoài ra, còn một hình thức lừa đảo khác là sau khi bạn từ chối dấu hiệu trên, nó sẽ tự động hiển thị một ô chữ ký khác trong MetaMask của bạn và lừa chữ ký của bạn trong lúc bạn không để ý. Và xem nội dung chữ ký, phương thức SetApprovalForAll được sử dụng và mục tiêu của Nội dung được phê duyệt được hiển thị dưới dạng Tất cả NFT của bạn, nghĩa là sau khi bạn ký, những kẻ lừa đảo có thể đánh cắp tất cả NFT của bạn mà không bị hạn chế. như sau:

Trang lừa đảo 2: https://dooooodles.org/

Chúng tôi sử dụng MistTrack để phân tích địa chỉ lừa đảo:

0xa594f48e80ffc8240f2f28d375fe4ca5379babc7

Qua phân tích, kẻ lừa đảo đã gọi SetApprovalForAll nhiều lần để đánh cắp tài sản của người dùng.Địa chỉ của kẻ lừa đảo đã nhận được 33 NFT và sau khi bán một số trong số chúng, hắn đã thu được hơn 4 ETH.

Quay lại chủ đề, chúng ta hãy nghiên cứu phương pháp câu cá này. Trước tiên, hãy xem MetaMask chính thức giải thích như thế nào:

Nói cách khác, MetaMask hiện có sáu phương thức chữ ký (chẳng hạn như personal_sign) và chỉ một phương thức sẽ gây ra cảnh báo MetaMask, xảy ra trong trường hợp chữ ký eth_sign, vì phương thức eth_sign là một phương thức chữ ký mở, cho phép mọi Chữ ký băm có nghĩa là nó có thể được sử dụng để ký các giao dịch hoặc bất kỳ dữ liệu nào khác, gây ra rủi ro lừa đảo nguy hiểm.

Theo tài liệu chính thức của MetaMask, phương thức eth_sign có thể ký bất kỳ hàm băm nào và khi chúng tôi ký một giao dịch, về cơ bản, chúng tôi đang ký một chuỗi hàm băm, nhưng quá trình mã hóa ở giữa do MetaMask xử lý cho chúng tôi. Chúng ta có thể xem xét ngắn gọn quá trình từ mã hóa đến phát sóng giao dịch:

Trước khi phát giao dịch, MetaMask sẽ lấy đối tượng chuyển của chúng tôi (tới), số lượng chuyển (giá trị), dữ liệu đi kèm (dữ liệu) và các tham số nonce, gasPrice và gasLimit mà MetaMask tự động lấy và tính toán cho chúng tôi, và thực hiện mã hóa RLP để có được nội dung giao dịch thô (rawTransaction). Nếu đó là một cuộc gọi hợp đồng, thì to là địa chỉ hợp đồng và dữ liệu là dữ liệu cuộc gọi.

rlp = require('rlp');

// Use non-EIP115 standard

const transaction = {

nonce: '',

gasPrice: '',

gasLimit: '',

to: '0x',

value: '',

data: '0x'

};

// RLP encode

const rawTransaction = rlp.encode([transaction.nonce, transaction.gasPrice, transaction.gasLimit, transaction.to, transaction.value, transaction.data]);

Sau đó thực hiện băm keccak256 trên nội dung này để nhận được một chuỗi dữ liệu byte32, đây là dữ liệu chúng ta cần ký.

// keccak256 encode

const msgHex = rawTransaction.toString('hex');

const msgHash = Web3.utils.keccak256('0x'+ msgHex);

Sau khi chúng tôi sử dụng MetaMask để ký chuỗi dữ liệu này, chúng tôi sẽ nhận được các giá trị r, s, v, sau đó sử dụng ba giá trị này để thực hiện mã hóa RLP với nonce/gasPrice/gasLimit/to/value/data để lấy bản gốc đã ký nội dung giao dịch Bây giờ, giao dịch có thể được phát vào thời điểm này.

rlp = require('rlp');

const transaction = {

nonce: '',

gasPrice: '',

gasLimit: '',

to: '',

value: '',

data: '',

v: '',

r: '',

s: ''

};

// RLP encode

const signedRawTransaction = rlp.encode([transaction.nonce, transaction.gasPrice, transaction.gasLimit, transaction.to, transaction.value, transaction.data, transaction.v, transaction.r, transaction.s]);

Như đã đề cập ở trên, phương thức eth_sign có thể ký bất kỳ hàm băm nào, do đó, việc ký dữ liệu byte32 đã ký của chúng tôi là điều đương nhiên. Do đó, kẻ tấn công chỉ cần lấy địa chỉ của chúng tôi để phân tích và truy vấn tài khoản của chúng tôi sau khi chúng tôi kết nối với DApp, sau đó xây dựng bất kỳ dữ liệu nào (chẳng hạn như: chuyển mã thông báo gốc, lệnh gọi hợp đồng) để chúng tôi đăng nhập thông qua eth_sign.

Phương pháp lừa đảo này sẽ rất khó hiểu đối với người dùng. Phương pháp lừa đảo được ủy quyền mà chúng tôi gặp phải trước đây sẽ cho tôi thấy trực quan dữ liệu mà kẻ tấn công muốn chúng tôi đăng nhập vào MetaMask. Như được hiển thị bên dưới, MetaMask cho thấy rằng trang web lừa đảo này khiến người dùng ủy quyền NFT cho các địa chỉ độc hại.

tóm tắt

tóm tắt

liên kết gốc

liên kết gốc

慢雾科技
作者文库