หมอกช้า: ว่างเปล่า ตรวจสอบ eth_sign การวิเคราะห์ฟิชชิ่ง
ผู้เขียนต้นฉบับ: Lisa & Kong
เมื่อเร็ว ๆ นี้ เราพบเหตุการณ์ฟิชชิงมากมายเกี่ยวกับลายเซ็น eth_sign
เว็บไซต์ฟิชชิ่ง 1: https://moonbirds-exclusive.com/

เมื่อเราเชื่อมต่อกระเป๋าเงินและคลิกอ้างสิทธิ์ กล่องแอปพลิเคชันลายเซ็นก็โผล่ขึ้นมา และ MetaMask แสดงคำเตือนสีแดงพร้อมกัน และเป็นไปไม่ได้ที่จะบอกได้จากหน้าต่างป๊อปอัปนี้ว่าลายเซ็นนั้นจำเป็นสำหรับอะไร
อันที่จริง นี่เป็นลายเซ็นประเภทที่อันตรายมาก โดยพื้นฐานแล้วก็คือ "เช็คว่าง" ของ Ethereum ด้วยฟิชชิงนี้ สแกมเมอร์สามารถใช้รหัสส่วนตัวของคุณเพื่อลงนามธุรกรรมใดๆ
นอกจากนี้ ยังมีฟิชชิ่งอีกประเภทหนึ่ง: หลังจากที่คุณปฏิเสธเครื่องหมายด้านบน มันจะแสดงกล่องลายเซ็นอื่นโดยอัตโนมัติใน MetaMask ของคุณ และโกงลายเซ็นของคุณในขณะที่คุณไม่ได้สนใจ และดูที่เนื้อหาลายเซ็น มีการใช้เมธอด SetApprovalForAll และเป้าหมายของสินทรัพย์ที่อนุมัติจะแสดงเป็น NFT ทั้งหมดของคุณ กล่าวคือ เมื่อคุณเซ็นชื่อ นักต้มตุ๋นสามารถขโมย NFT ทั้งหมดของคุณโดยไม่มีการยับยั้ง ดังนี้
เว็บไซต์ฟิชชิ่ง 2: https://doooooodles.org/

เราใช้ MistTrack เพื่อวิเคราะห์ที่อยู่หลอกลวง:
0xa594f48e80ffc8240f2f28d375fe4ca5379babc7


จากการวิเคราะห์ สแกมเมอร์ได้เรียก SetApprovalForAll หลายครั้งเพื่อขโมยทรัพย์สินของผู้ใช้ ที่อยู่ของสแกมเมอร์ได้รับ NFT 33 รายการ และหลังจากขายไปบางส่วน เขาก็ได้รับ ETH มากกว่า 4 รายการ
กลับมาที่หัวข้อเรามาศึกษาวิธีการตกปลานี้กัน ก่อนอื่น มาดูกันว่า MetaMask อธิบายอย่างเป็นทางการอย่างไร:

กล่าวอีกนัยหนึ่ง ปัจจุบัน MetaMask มีวิธีลายเซ็นหกวิธี (เช่น personal_sign) และมีเพียงวิธีเดียวที่จะทำให้เกิดคำเตือนของ MetaMask ซึ่งเกิดขึ้นในกรณีของลายเซ็น eth_sign เนื่องจากวิธี eth_sign เป็นวิธีลายเซ็นแบบเปิด ซึ่งอนุญาตให้มีการลงนามแบบแฮชใดๆ หมายความว่าสามารถใช้เพื่อลงนามธุรกรรมหรือข้อมูลอื่น ๆ ซึ่งก่อให้เกิดความเสี่ยงในการฟิชชิงที่เป็นอันตราย
ตามเอกสารอย่างเป็นทางการของ MetaMask เมธอด eth_sign สามารถลงนามแฮชใดๆ ก็ได้ และเมื่อเราเซ็นทรานแซกชัน เราจะเซ็นแฮชเป็นชุดๆ แต่กระบวนการเข้ารหัสตรงกลางนั้นจัดการโดย MetaMask แทนเรา เราสามารถตรวจสอบกระบวนการโดยสังเขปตั้งแต่การเข้ารหัสไปจนถึงการออกอากาศธุรกรรม:

ก่อนที่จะเผยแพร่ธุรกรรม MetaMask จะได้รับวัตถุของการโอนของเรา (ถึง) จำนวนการโอน (มูลค่า) ข้อมูลประกอบ (ข้อมูล) และพารามิเตอร์ nonce, gasPrice และ gasLimit ที่ MetaMask ได้รับและคำนวณให้เราโดยอัตโนมัติ และดำเนินการเข้ารหัส RLP เพื่อรับเนื้อหาธุรกรรมดิบ (rawTransaction) หากเป็นการโทรตามสัญญา ที่อยู่ของสัญญาคือ to และข้อมูลคือข้อมูลการโทร
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]);
จากนั้นทำการแฮช keccak256 กับเนื้อหานี้เพื่อรับสตริงข้อมูล bytes32 ซึ่งเป็นข้อมูลที่เราต้องการลงนาม
// keccak256 encode
const msgHex = rawTransaction.toString('hex');
const msgHash = Web3.utils.keccak256('0x'+ msgHex);
หลังจากที่เราใช้ MetaMask เพื่อลงนามสตริงข้อมูลนี้ เราจะได้ค่า r, s, v จากนั้นใช้ค่าทั้งสามนี้เพื่อดำเนินการเข้ารหัส RLP ด้วย nonce/gasPrice/gasLimit/to/value/data เพื่อรับต้นฉบับที่ลงนามแล้ว เนื้อหาการทำธุรกรรม ตอนนี้การทำธุรกรรมสามารถออกอากาศได้ในขณะนี้
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]);
ดังที่กล่าวไว้ข้างต้น เมธอด eth_sign สามารถลงนามแฮชใดๆ ได้ ดังนั้นจึงเป็นเรื่องปกติที่จะลงนามในข้อมูล bytes32 ของเรา ดังนั้น ผู้โจมตีต้องการเพียงแค่ได้รับที่อยู่ของเราเพื่อวิเคราะห์และสอบถามบัญชีของเราหลังจากที่เราเชื่อมต่อกับ DApp แล้ว จากนั้นจึงสร้างข้อมูลใดๆ (เช่น: การถ่ายโอนโทเค็นดั้งเดิม การเรียกสัญญา) เพื่อให้เราลงชื่อเข้าใช้ผ่าน eth_sign
วิธีการฟิชชิ่งนี้จะทำให้ผู้ใช้สับสนอย่างมาก MetaMask จะแสดงข้อมูลที่ผู้โจมตีต้องการให้เราเซ็นชื่อสำหรับฟิชชิงที่ได้รับอนุญาตที่เราพบในอดีตโดยสัญชาตญาณ ดังที่แสดงด้านล่าง MetaMask แสดงให้เห็นว่าเว็บไซต์ฟิชชิ่งนี้ชักจูงให้ผู้ใช้อนุญาต NFT ไปยังที่อยู่ที่เป็นอันตราย

สรุป

สรุป
ลิงค์ต้นฉบับ
ลิงค์ต้นฉบับ


