โดนขโมยลายเซ็น? ระวังฟิชชิงลายเซ็น Uniswap Permit2
*บทความนี้ได้รับการสนับสนุนโดย Spinach Spinach นักวิจัยอิสระรับเชิญของ Beosin! (twitter@wzxznl) ร่วมเขียนโพสต์กับ Sivan นักวิจัยด้านความปลอดภัยของ Beosin
แฮ็กเกอร์ นี่คือการดำรงอยู่ที่ทำให้ทุกคนในระบบนิเวศ Web3 กลัว สำหรับฝั่งโปรเจ็กต์เมื่อแฮ็กเกอร์ทั่วโลกอาจจ้องมาที่คุณ ลักษณะโอเพ่นซอร์สของโค้ดทำให้ฝั่งโปรเจ็กต์กลัวที่จะเขียนโค้ดผิดบรรทัดเมื่อ พัฒนา ออกจากช่องโหว่ เมื่อเหตุการณ์ด้านความปลอดภัยเกิดขึ้น ผลที่ตามมาจะยากที่จะแบกรับ
โดยส่วนตัวแล้ว ทุกการโต้ตอบหรือลายเซ็นบนเครือข่ายที่คุณทำมีโอกาสที่จะถูกขโมยทรัพย์สินของคุณหากคุณไม่เข้าใจว่าคุณกำลังทำอะไรอยู่ดังนั้นปัญหาด้านความปลอดภัยจึงเป็นหนึ่งในปัญหาที่ยุ่งยากที่สุดในโลกของการเข้ารหัส และเนื่องจากลักษณะของบล็อกเชน เมื่อสินทรัพย์ถูกขโมยไป แทบจะไม่มีทางกู้คืนได้ ดังนั้นจึงเป็นสิ่งสำคัญอย่างยิ่งที่จะต้องมีความรู้ด้านความปลอดภัย ในโลกของการเข้ารหัส
เมื่อไม่นานมานี้Spinach เพื่อนที่ดีของ Beosin ค้นพบวิธีการตกปลาแบบใหม่ที่ใช้งานมาเกือบสองเดือนแล้วตราบใดที่ลายเซ็นถูกขโมย วิธีการนี้ซ่อนเร้นและป้องกันได้ยากนอกจากนี้ ที่อยู่ที่มีการโต้ตอบกับ Uniswap อาจมีความเสี่ยง ในบทความนี้ Beosin และนักวิจัยอิสระ Pincai จะทำให้เทคนิคการฟิชชิงลายเซ็นนี้เป็นที่นิยมเพื่อหลีกเลี่ยงการสูญเสียทรัพย์สินสำหรับทุกคน
ชื่อระดับแรก
กระบวนการ
เมื่อเร็ว ๆ นี้ เพื่อนคนหนึ่ง (ชื่ออย่างไม่เป็นทางการว่า Little A) พบ Spinach หลังจากที่ทรัพย์สินในกระเป๋าเงินของเขาถูกขโมย Little A ไม่เปิดเผยรหัสส่วนตัวและไม่โต้ตอบกับสัญญาของเว็บไซต์ฟิชชิ่ง ซึ่งแตกต่างจากวิธีการขโมยทั่วไป ดังนั้น Spinach เริ่มมีการสืบสวนการโจรกรรมทรัพย์สิน
ในเบราว์เซอร์บล็อกเชน จะเห็นได้ว่า USDT ที่ถูกขโมยจากกระเป๋าเงิน A ขนาดเล็กถูกโอนผ่านฟังก์ชันโอนจากมาทำให้วิทยาศาสตร์เป็นที่นิยมกันเถอะ เมื่อเราโอน Token บน Ethereum เราเรียกฟังก์ชัน Transfer ของ Token smart contract จริง ๆ ความแตกต่างระหว่างสองอย่างนี้คือ Transfer เป็นการดำเนินการของเจ้าของสินทรัพย์เองในการโอน Token ไปยังที่อยู่อื่น ๆ และ Transfer From คือบุคคลที่สามโอนโทเค็นในที่อยู่ไปยังที่อยู่อื่นนอกจากนี้ยังหมายความว่าทรัพย์สินที่ถูกขโมยนั้นถูกโอนมาจากที่อยู่อื่น แทนที่จะรั่วไหลของรหัสส่วนตัวของกระเป๋าเงิน
จากการสอบถามรายละเอียดธุรกรรม เราสามารถพบเบาะแสสำคัญบางประการ:
ที่อยู่ที่ลงท้ายด้วย f d5 1 โอนทรัพย์สินของ Little A ไปยังที่อยู่ที่ลงท้ายด้วย 0 c 8
การดำเนินการนี้โต้ตอบกับสัญญาอนุญาต 2 ของ Uniswap
มาถึงข้อสงสัยที่ว่า ที่อยู่ที่ลงท้ายด้วย f d5 1 ได้รับอนุญาตจากเนื้อหานี้ได้อย่างไร เหตุใดจึงเกี่ยวข้องกับ Uniswap
ก่อนอื่น เราต้องรู้ว่าข้อกำหนดเบื้องต้นสำหรับการเรียกฟังก์ชัน Transfer From ให้สำเร็จคือผู้โทรต้องมีโควต้าของโทเค็นนี้ นั่นคือ อนุมัติ ผมเชื่อว่าทุกคนที่ดำเนินการบนเครือข่ายจะต้องคุ้นเคยกับ เมื่อเราใช้ Dapp ในบางครั้ง เมื่อเกี่ยวข้องกับการโอนสินทรัพย์ เราจำเป็นต้องดำเนินการอนุญาต (อนุมัติ) ก่อน เพื่อให้สัญญา Dapp มีสิทธิ์ในการโอนสินทรัพย์ของเรา
เพื่อไขปริศนานี้ เราต้องขุดต่อไปและคำตอบอยู่ในบันทึกการโต้ตอบของที่อยู่ที่ลงท้ายด้วย f d5 1ก่อนการโอนจากที่อยู่เพื่อโอนทรัพย์สินของ Little A จะเห็นได้ว่าที่อยู่นั้นได้ดำเนินการอนุญาตด้วย และวัตถุการโต้ตอบของการดำเนินการทั้งสองนี้คือสัญญาอนุญาตของ Uniswap 2 จากนั้นฟังก์ชันใบอนุญาตนี้และใบอนุญาต Uniswap 2 คืออะไร สถานการณ์?
สัญญา Uniswap Permit 2 เป็นสัญญาอัจฉริยะใหม่ที่เปิดตัวโดย Uniswap เมื่อปลายปี 2022 ตามคำแถลงอย่างเป็นทางการ นี่คือสัญญาการอนุมัติโทเค็นที่อนุญาตให้แชร์และจัดการการอนุญาตโทเค็นในแอปพลิเคชันต่างๆ ทำให้เป็นหนึ่งเดียวกันมากขึ้นและอีกมากมาย ประหยัดค่าใช้จ่าย ประสบการณ์การใช้งานที่ปลอดภัยยิ่งขึ้น
และในอนาคต เมื่อมีโครงการจำนวนมากขึ้นเรื่อยๆ ที่รวมกับใบอนุญาต 2 ใบอนุญาต 2 สามารถได้รับการอนุมัติโทเค็นมาตรฐานในทุกแอปพลิเคชัน ใบอนุญาต 2 จะปรับปรุงประสบการณ์ของผู้ใช้โดยลดต้นทุนการทำธุรกรรมในขณะที่เพิ่มความปลอดภัยของสัญญาอัจฉริยะ

คำอธิบายภาพ
แหล่งที่มาของรูปภาพ: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2
การเปิดตัว Permit 2 อาจเปลี่ยนกฎของเกมของระบบนิเวศ Dapp ทั้งหมด พูดง่ายๆ ก็คือ วิธีการดั้งเดิมคือคุณต้องอนุญาตทุกครั้งที่คุณโต้ตอบกับ Dapp เพื่อโอนสินทรัพย์ และ Permit 2 สามารถบันทึกขั้นตอนนี้ไปได้เลย สามารถลดต้นทุนการโต้ตอบของผู้ใช้ได้อย่างมีประสิทธิภาพและนำประสบการณ์ผู้ใช้ที่ดีขึ้น
วิธีแก้ไขคือให้ Permit 2 ทำหน้าที่เป็นคนกลางระหว่างผู้ใช้กับ Dapp ผู้ใช้เพียงแค่มอบสิทธิ์อนุญาตของ Token ให้กับสัญญา Permit 2 เท่านั้น Dapps ทั้งหมดที่ผสานรวมสัญญา Permit 2 สามารถแบ่งปันจำนวนการอนุญาตนี้ให้กับผู้ใช้ ค่าใช้จ่ายในการโต้ตอบจะลดลง และประสบการณ์ผู้ใช้ที่ดีขึ้น สำหรับ Dapp การปรับปรุงประสบการณ์ผู้ใช้ทำให้ผู้ใช้และเงินทุนมากขึ้น นี่เป็นสถานการณ์แบบ win-win แต่ในขณะเดียวกันก็สามารถเป็นดาบสองคมได้ และ ปัญหาอยู่ใน 2 โต้ตอบ
คำอธิบายภาพ
แหล่งที่มาของรูปภาพ: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2
แม้ว่าการเกิดขึ้นของ Permit 2 อาจเปลี่ยนกฎของเกม Dapp ในอนาคต แต่ก็เห็นได้ว่านี่เป็นดาบสองคมที่แข็งแกร่ง สำหรับผู้ใช้ ลายเซ็นแบบออฟไลน์คือลิงค์ที่ง่ายที่สุดในการป้องกัน สำหรับ ตัวอย่างเช่น เมื่อเราลงชื่อเข้าใช้ Dapps ด้วยกระเป๋าเงิน จำเป็นต้องมีลายเซ็นในการเชื่อมต่อ และคนส่วนใหญ่ไม่ได้ตรวจสอบเนื้อหาของลายเซ็นอย่างระมัดระวังและไม่เข้าใจเนื้อหาของลายเซ็น และนี่คือส่วนที่น่ากลัวที่สุด
หลังจากทำความเข้าใจสัญญา Permit 2 แล้ว เราสามารถเข้าใจได้ว่าทำไมทรัพย์สินที่ถูกขโมยจึงมีปฏิสัมพันธ์กับสัญญา Permit 2 เมื่อเราย้อนกลับไปที่เหตุการณ์ A เล็กน้อย ดังนั้นให้ Spinach ทำซ้ำวิธีการฟิชชิ่งลายเซ็นของ Permit 2 วิธีแรกมีความสำคัญมาก ข้อกำหนดเบื้องต้นคือ ว่ากระเป๋าเงินฟิชชิ่งจำเป็นต้องมีโทเค็นที่ได้รับอนุญาตจากสัญญา Permit 2 ของ Uniswap Spinach พบว่าตราบใดที่ Swap ดำเนินการบน Dapp หรือ Uniswap ที่รวมเข้ากับ Permit 2 จะต้องได้รับอนุญาตจากสัญญา Permit 2 (ภาพด้านล่างความปลอดภัยของ Spinach A ใช้ปลั๊กอิน)
อีกประเด็นที่น่ากลัวคือไม่ว่าคุณต้องการ Swap มากน้อยเพียงใด สัญญา Permit 2 ของ Uniswap จะอนุญาตให้คุณอนุญาตยอดคงเหลือทั้งหมดของโทเค็นตามค่าเริ่มต้น แม้ว่า MetaMask จะอนุญาตให้คุณกำหนดจำนวนอินพุตเองฉันเชื่อว่าคนส่วนใหญ่จะคลิกโดยตรง บนค่าสูงสุดหรือค่าเริ่มต้น และค่าเริ่มต้นของใบอนุญาตที่ 2 คือ โควต้าไม่จำกัด....

นอกจากนี้ยังหมายความว่าตราบเท่าที่คุณมีปฏิสัมพันธ์กับ Uniswap และอนุมัติจำนวนเงินในสัญญาอนุญาต 2 หลังปี 2023 คุณจะมีความเสี่ยงจากการหลอกลวงแบบฟิชชิงนี้
ชื่อระดับแรก
ชื่อเรื่องรอง
ฟังก์ชั่นใบอนุญาต:
คุณสามารถนึกถึงฟังก์ชันใบอนุญาตเป็นวิธีการเซ็นสัญญาออนไลน์ ฟังก์ชันนี้ช่วยให้คุณ (PermitSingle) ลงนามล่วงหน้าได้"สัญญา"อนุญาตให้ผู้อื่น (ผู้ใช้จ่าย) ใช้โทเค็นบางส่วนของคุณในอนาคต
ในเวลาเดียวกัน คุณต้องให้ลายเซ็น (ลายเซ็น) เช่นเดียวกับการเซ็นสัญญากระดาษ เพื่อพิสูจน์สิ่งนี้"สัญญา"เป็นคุณจริงๆที่ลงนาม
แล้วฟังก์ชันนี้ทำงานอย่างไร?
ขั้นแรก จะตรวจสอบว่าเวลาปัจจุบันเกินวันหมดอายุของลายเซ็นของคุณหรือไม่ (sigDeadline) เช่นเดียวกับสัญญาที่คุณลงนามมีวันหมดอายุ หากเวลาปัจจุบันเกินวันที่หมดอายุ ก็จะเป็นแบบนี้"สัญญา"ไม่สามารถใช้งานได้อีกต่อไป และโปรแกรมจะหยุดทำงานทันที
จากนั้นจะตรวจสอบว่าลายเซ็นของคุณเป็นของคุณจริงๆ โปรแกรมจะใช้วิธีพิเศษ (signature.verify) เพื่อตรวจสอบลายเซ็นเพื่อให้แน่ใจว่าลายเซ็นนั้นเป็นลายเซ็นของคุณจริง ๆ และไม่ได้ถูกปลอมแปลงโดยผู้อื่น
สุดท้าย หากการตรวจสอบผ่าน โปรแกรมจะอัปเดตบันทึกเพื่อแจ้งให้ทราบว่าคุณได้อนุญาตให้ผู้อื่นใช้โทเค็นบางส่วนของคุณ
ชื่อเรื่องรอง
ตรวจสอบฟังก์ชั่น:
ชื่อเรื่องรอง
ฟังก์ชัน _updateApproval:
เมื่อผ่านการตรวจสอบลายเซ็น ฟังก์ชัน _updateApproval จะถูกเรียกใช้เพื่ออัปเดตค่าการให้สิทธิ์ ซึ่งหมายความว่าสิทธิ์ของคุณได้รับการโอนแล้ว ขณะนี้ สะดวกที่จะเรียกใช้ฟังก์ชันโอนจากเพื่อโอนโทเค็นไปยังที่อยู่ที่ระบุหลังจากได้รับอนุญาต ดังที่แสดงในโค้ดด้านล่าง
หลังจากอธิบายฟังก์ชันการอนุญาตแล้ว มาดูธุรกรรมจริงบนเชนกัน เราสามารถดูรายละเอียดของการโต้ตอบนี้:
เจ้าของคือที่อยู่กระเป๋าสตางค์ของน้องเอ (เลขท้าย 308ก)
ในรายละเอียด คุณสามารถดูที่อยู่สัญญาโทเค็นที่ได้รับอนุญาต (USDT) และจำนวนเงิน และข้อมูลอื่นๆ
อะไรต่อมิอะไรคือที่อยู่ของแฮ็กเกอร์ที่มีเลขท้าย f d5 1
sigDeadline คือเวลาที่ลายเซ็นมีผลบังคับใช้ และลายเซ็นคือข้อมูลลายเซ็นของ Little A
และเมื่อมองย้อนกลับไปที่บันทึกปฏิสัมพันธ์ของ Little A เราจะพบว่าเมื่อ A ตัวน้อยใช้ Uniswap มาก่อน เขาคลิกที่ขีดจำกัดการอนุญาตเริ่มต้น ซึ่งเกือบจะไม่จำกัด
เพียงแค่เล่นซ้ำLittle A ที่ได้รับอนุญาต Uniswap อนุญาต 2 โควต้า USDT ไม่จำกัดในกระบวนการใช้ Uniswap ก่อนหน้านี้ และ Little A เผลอไปติดกับดักฟิชชิ่งลายเซ็น Permit 2 ที่ออกแบบโดยแฮ็กเกอร์เมื่อดำเนินการกระเป๋าเงิน และแฮ็กเกอร์ได้ลายเซ็นของ Little A หลังจากนั้น การดำเนินการทั้งสองของ การอนุญาตและการโอนจากดำเนินการในสัญญาอนุญาต 2 โดยใช้ลายเซ็นของ Little A เพื่อโอนทรัพย์สินของ Little A ออกไปคำอธิบายภาพ
ที่มา: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3
คำอธิบายภาพ
ชื่อระดับแรก
ข้อความ
เมื่อพิจารณาว่าสัญญา Uniswap Permit 2 อาจได้รับความนิยมมากขึ้นในอนาคต และโครงการอื่นๆ จะรวมสัญญา Permit 2 สำหรับการแบ่งปันการอนุญาต เราสามารถนึกถึงวิธีการป้องกันที่มีประสิทธิภาพดังนี้:
1 ทำความเข้าใจและระบุเนื้อหาลายเซ็น:
รูปแบบลายเซ็นของใบอนุญาตมักจะรวมถึงรูปแบบที่สำคัญของ Owner, Spender, value, nonce และ Deadline หากคุณต้องการเพลิดเพลินไปกับความสะดวกสบายและต้นทุนต่ำของใบอนุญาต 2 คุณต้องเรียนรู้ที่จะรู้จักรูปแบบลายเซ็นนี้ (การดาวน์โหลดปลั๊กอินความปลอดภัยเป็นตัวเลือกที่ดี)

เราขอแนะนำปลั๊กอินป้องกันฟิชชิ่ง Beosin Alert ต่อไปนี้ให้กับผู้อ่านและเพื่อนๆ ซึ่งสามารถระบุเว็บไซต์ฟิชชิ่งส่วนใหญ่ในช่อง Web3 และปกป้องกระเป๋าเงินและความปลอดภัยของทรัพย์สินของคุณ
ดาวน์โหลดปลั๊กอินป้องกันฟิชชิ่ง:
https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji? hl=en
2 กระเป๋าเงินสินทรัพย์และกระเป๋าเงินโต้ตอบใช้แยกกัน:
หากคุณมีสินทรัพย์จำนวนมาก ขอแนะนำให้ใส่สินทรัพย์ทั้งหมดไว้ในกระเป๋าเงินเย็น และใส่เงินจำนวนเล็กน้อยในกระเป๋าเงินแบบโต้ตอบบนเครือข่าย ซึ่งสามารถลดการสูญเสียได้อย่างมากในกรณีของการหลอกลวงแบบฟิชชิง
3 อย่าอนุมัติจำนวนเงินมากเกินไปในสัญญาอนุญาต 2 หรือยกเลิกการอนุญาต:
เมื่อคุณทำการ Swap บน Uniswap คุณจะอนุญาตเฉพาะในจำนวนที่คุณต้องการโต้ตอบ ดังนั้นแม้ว่าการโต้ตอบแต่ละครั้งต้องมีการอนุญาตอีกครั้ง แต่ก็มีค่าใช้จ่ายในการโต้ตอบอยู่บ้าง แต่ก็สามารถหลีกเลี่ยงฟิชชิงลายเซ็นของ Permit 2 ได้ หากคุณให้สิทธิ์โควต้าแล้ว คุณจะพบปลั๊กอินความปลอดภัยที่เกี่ยวข้องเพื่อยกเลิกการให้สิทธิ์
4 ระบุลักษณะของโทเค็นและสนับสนุนฟังก์ชันใบอนุญาตหรือไม่:
ในอนาคต โทเค็น ERC 20 จำนวนมากขึ้นเรื่อยๆ อาจใช้โปรโตคอลส่วนขยายนี้เพื่อใช้งานฟังก์ชันการอนุญาต สำหรับคุณ คุณต้องให้ความสนใจว่าโทเค็นที่คุณถืออยู่นั้นรองรับฟังก์ชันนี้หรือไม่ หากรองรับ ธุรกรรมหรือการจัดการของ โทเค็นจะต้องระมัดระวังเป็นพิเศษ และตรวจสอบอย่างเคร่งครัดว่าลายเซ็นที่ไม่รู้จักแต่ละอันนั้นเป็นลายเซ็นของฟังก์ชันอนุญาตหรือไม่
5 หากมีโทเค็นที่เก็บไว้บนแพลตฟอร์มอื่นหลังจากถูกโกง แผนช่วยเหลือที่ครอบคลุมจะต้องได้รับการกำหนดขึ้น:
เมื่อคุณพบว่าคุณถูกฉ้อโกงและโทเค็นของคุณถูกแฮ็กเกอร์โอนออกไป แต่คุณยังมีโทเค็นที่เก็บไว้ในแพลตฟอร์มอื่นด้วยวิธีการต่างๆ เช่น การจำนำ ฯลฯ คุณจะต้องถอนออกและโอนไปยังที่อยู่ที่ปลอดภัย ที่ เวลานี้ คุณต้องรู้ว่าแฮ็กเกอร์อาจติดตามคุณตลอดเวลา โทเค็นคงเหลือของที่อยู่ เนื่องจากเขามีลายเซ็นของคุณ ตราบใดที่โทเค็นปรากฏในที่อยู่ของคุณที่ถูกขโมย แฮ็กเกอร์สามารถถ่ายโอนโดยตรง ในขณะนี้ จำเป็นต้องกำหนดกระบวนการช่วยเหลือโทเค็นที่สมบูรณ์ กระบวนการแยกโทเค็นและการถ่ายโอนโทเค็นสองกระบวนการจำเป็นต้องดำเนินการพร้อมกัน ธุรกรรมของแฮ็กเกอร์ไม่สามารถแทรกเข้าไปได้ สามารถใช้การถ่ายโอน MEV ซึ่งต้องใช้ความรู้ด้านบล็อกเชนและ ทักษะด้านรหัส คุณสามารถหา บริษัท รักษาความปลอดภัยมืออาชีพเช่นทีม Beosin เพื่อใช้สคริปต์ใบจองการทำธุรกรรมเพื่อให้บรรลุ
ฉันเชื่อว่าจะมีการตกปลามากขึ้นเรื่อย ๆ ตามใบอนุญาต 2 ในอนาคตชื่อเรื่องรอง
Reference:
https://t.co/G9Mnq8eUle
https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2


