จัดทำเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำด้านการลงทุน กฎหมาย หรือความปลอดภัย ความผิดพลาดในการกู้คืนหรือกำหนดค่าอาจโอนสิทธิ์ควบคุมบัญชีอัจฉริยะหรือทำให้บัญชีถูกล็อกถาวร
คำตอบโดยตรง
บัญชีอัจฉริยะถูกควบคุมด้วยตรรกะการอนุญาตที่นำไปใช้กับบัญชีนั้น ไม่จำเป็นต้องเป็นคีย์ส่วนตัวเพียงคีย์เดียว เจ้าของหรือ validator อาจอนุมัติการดำเนินงานปกติ ส่วนผู้พิทักษ์ โมดูลกู้คืน executor หรือผู้ดูแลการอัปเกรดอาจมีเส้นทางแยกเพื่อเปลี่ยนเจ้าของหรือทำธุรกรรม
การกู้คืนลดโอกาสที่คีย์หนึ่งสูญหายแล้วทำให้บัญชีใช้ไม่ได้ แต่เพิ่มพื้นผิวการยึดบัญชี ตรวจสอบทุกเส้นทางที่อนุญาตการดำเนินงาน เปลี่ยน validator หรือเจ้าของ ติดตั้งโมดูล อัปเกรดโค้ด หรือยกเลิกและปิดการกู้คืน ป้าย “เจ้าของ” และ “ผู้พิทักษ์” ในอินเทอร์เฟซไม่ใช่หลักฐานสิทธิ์จริงในสัญญา
บันทึกผลเป็นตารางสิทธิ์ ได้แก่ ที่อยู่บนเชนที่แน่นอน บทบาท การกระทำที่เรียกได้ เกณฑ์ ระยะหน่วง สิทธิ์ยกเลิก วันหมดอายุ ขอบเขตการใช้จ่าย สิทธิ์อัปเกรด และโดเมนควบคุมอิสระ ตรวจซ้ำหลังเปลี่ยนการตั้งค่าแต่ละครั้งและบนทุกเชนที่มีบัญชี
วิธีการทำงาน
- ระบุบัญชีและโค้ด ตรวจสอบ chain ID และที่อยู่บัญชี แล้วหา implementation, proxy หรือ beacon, factory และเวอร์ชัน สำหรับ proxy ERC-1967 ให้อ่านสล็อต implementation, beacon และผู้ดูแล แทนการเชื่อป้ายในอินเทอร์เฟซ
- แจกแจงเส้นทางอนุญาต อ่านเจ้าของและเกณฑ์, validator ERC-4337, validator, executor, hook และ fallback handler ERC-7579, โมดูลและ guard แบบ Safe, session key, สัญญากู้คืน และผู้ดูแลฉุกเฉินหรืออัปเกรด executor หรือโมดูล Safe อาจทำงานได้โดยไม่ผ่านเกณฑ์เจ้าของปกติ
- ถอดสถานะการกู้คืน ระบุว่าใครเสนอเจ้าของใหม่ การอนุมัติของผู้พิทักษ์นับและหมดอายุอย่างไร ระยะหน่วงเริ่มเมื่อใด ใครยกเลิก ใครปิดกระบวนการ และเกิดอะไรเมื่อแทนที่หรือเริ่มกู้คืนซ้ำ อย่าคิดว่าสัญญา “การกู้คืนทางสังคม” ทุกแบบใช้ลำดับเดียวกัน
- ทดสอบความเป็นอิสระและความพร้อมใช้ ที่อยู่ต่างกันไม่เป็นอิสระหากอุปกรณ์ บุคคล บัญชีคลาวด์ คลังรหัสผ่าน ผู้รับฝาก หรือผู้ดูแลเดียวกันควบคุมทั้งหมด ยืนยันว่าเมื่อเกิดความขัดข้องที่คาดไว้หนึ่งจุดยังถึงเกณฑ์ได้ โดยไม่ให้โดเมนเดียวมีอำนาจยึดบัญชี
- ทบทวนสิทธิ์กำหนดค่า ระบุว่าใครเพิ่มหรือลบผู้พิทักษ์ validator, executor, hook, โมดูล หรือ fallback handler เปลี่ยนเกณฑ์หรือระยะหน่วง ระงับการยกเลิก หรืออัปเกรดโค้ดบัญชีและการกู้คืน timelock มีประโยชน์เมื่อบทบาทอื่นข้ามระยะหน่วงและเส้นทางยกเลิกไม่ได้เท่านั้น
- เฝ้าติดตามและตรวจสอบ สมัครรับหรือสอบถามการเปลี่ยนแปลงการกู้คืน เจ้าของ โมดูล เกณฑ์ implementation และผู้ดูแลจากแหล่งอิสระ หลังดำเนินการ ให้ถอดรหัสธุรกรรมและตรวจ receipt, event, storage และชุดเจ้าของสุดท้ายบนเชนที่ถูกต้อง การแจ้งว่าสำเร็จในอินเทอร์เฟซยังไม่เพียงพอ
ตัวอย่าง
สมมติว่าบัญชีมีเจ้าของ O และผู้พิทักษ์สามคน G1, G2 และ G3 ผู้พิทักษ์ใด ๆ 2-of-3 คนเสนอเจ้าของใหม่ N ได้ จากนั้นเริ่มระยะหน่วง 24-hour; O ยกเลิกได้ระหว่างนั้น และเมื่อครบกำหนดใครก็ปิดกระบวนการได้ โมดูลกู้คืนเรียกฟังก์ชันเปลี่ยนเจ้าของได้โดยไม่ต้องให้ O อนุมัติธุรกรรมสุดท้าย
ป้ายดูเหมือนเป็นการกู้คืนแบบกระจาย แต่ G1 กับ G2 เป็นแอปที่สำรองในบัญชีคลาวด์เดียวกัน เมื่อข้อมูลบัญชีนั้นรั่ว ผู้โจมตีคนเดียวได้เกณฑ์จริง 2-of-3 เขาเสนอ N; หากการเฝ้าติดตามหรือยกเลิกล้มเหลวภายใน 24 hours การปิดกระบวนการจะโอนสิทธิ์ แม้คีย์ส่วนตัวของ O ไม่เคยถูกขโมย
ดังนั้นการตรวจสอบจึงระบุ G1 กับ G2 เป็นโดเมนเดียว ตรวจที่อยู่และโค้ดโมดูล ทดสอบยกเลิกจากอุปกรณ์ปลอดภัย ยืนยัน event ที่เริ่มระยะหน่วง และตรวจว่าผู้ดูแลเปลี่ยนโมดูลทันทีได้หรือไม่ ไม่ควรกู้คืนจริงบนบัญชีที่ถือสินทรัพย์ เว้นแต่มีขั้นตอนทดสอบที่บันทึกไว้และย้อนกลับได้อย่างปลอดภัย
ความเสี่ยงและการควบคุม
- ผู้พิทักษ์ที่เชื่อมโยงกัน: ใช้อุปกรณ์ ข้อมูลรับรอง บุคคล หรือผู้รับฝากที่เป็นอิสระจริง ทดสอบขั้นตอนโดยไม่รวบรวม seed phrase ไว้ด้วยกัน
- โมดูลหรือ executor มีอำนาจมากเกินไป: ตรวจโค้ดที่ติดตั้งและขอบเขตที่เรียกได้ ลบโมดูลที่ไม่ใช้ผ่านเส้นทางที่บันทึกไว้และยืนยันบนเชน
- เกณฑ์อ่อนแอ: ประเมินทั้งการต้านการยึดและความพร้อมใช้ เกณฑ์สูงในนามไม่ช่วยเมื่อผู้ลงนามใช้โดเมนเดียวกัน และเกณฑ์ที่ไปไม่ถึงจะล็อกบัญชี
- ไม่มีระยะหน่วงหรือข้ามได้: ตรวจระยะหน่วงบนเชน event ที่เริ่ม ใครลดเวลาได้ และทุกเส้นทางที่เปลี่ยนเจ้าของทันที
- การยกเลิกใช้ไม่ได้: ซ้อมการตรวจพบและยกเลิก เก็บ gas ดั้งเดิมและเส้นทางส่งอิสระเมื่อจำเป็น และตรวจว่าต้องใช้เจ้าของเดิม องค์ประชุม หรือบทบาทอื่น
- การยึดผ่านอัปเกรด: เฝ้าดู implementation, beacon และผู้ดูแล ผู้ดูแลที่อัปเกรดได้โดยไม่หน่วงถือว่าสามารถเปลี่ยนกฎกู้คืนทั้งหมด
- อินเทอร์เฟซอันตรายหรือล้าสมัย: ตรวจเชน บัญชี โมดูล เจ้าของที่เสนอ เกณฑ์ ระยะหน่วง และ calldata อย่างอิสระ ห้ามเปิดเผย seed phrase หรือคีย์ส่วนตัวแก่บริการ “กู้คืน”
- การเสร็จสิ้นปลอม: หลังยกเลิกหรือปิดกระบวนการ ให้ยืนยัน receipt และ storage สุดท้าย ตรวจว่าเจ้าของและโมดูลที่ต้องการทำงาน และข้อเสนอที่ไม่ต้องการเรียกไม่ได้
หากพบการกู้คืนที่ไม่ได้รับอนุญาต ให้หยุดลงนามคำขอที่ไม่เกี่ยวข้องและเก็บ ID ข้อเสนอ, hash ธุรกรรม, calldata, บล็อก, ที่อยู่โมดูล และสถานะปัจจุบัน จากอุปกรณ์ปลอดภัย ให้ตรวจคำเตือนผ่าน RPC อิสระ ใช้เส้นทางยกเลิกตามเอกสารถ้ายังใช้ได้ และเฝ้าดูการปิดกระบวนการ อัปเกรด เปลี่ยนโมดูล และโอนสินทรัพย์ หากอาจเสียการควบคุมแล้ว ให้ทำตามแผนเหตุการณ์ที่เขียนไว้และใช้เฉพาะผู้ติดต่อที่ยืนยันตัวตน การโอนแบบฉุกละหุกอาจถูก front-running หรือเปิดเผยปลายทาง
ความเข้าใจผิดที่พบบ่อย
- “มีเพียงเจ้าของที่ย้ายสินทรัพย์ได้” validator, executor, โมดูล, สัญญากู้คืน หรือโค้ดที่อัปเกรดอาจมีเส้นทางเพิ่มเติม
- “ผู้พิทักษ์สามคนคือสามฝ่ายอิสระ” สัญญานับการอนุมัติที่ถูกต้องจากที่อยู่ แต่ตรวจไม่พบอุปกรณ์ ข้อมูลสำรอง หรือผู้ดูแลที่ใช้ร่วมกัน
- “ระยะหน่วง
24-hourรับประกันเวลาตอบสนอง” ต้องมีการเฝ้าดู สิทธิ์ยกเลิกที่ใช้ได้ gas และการรวมธุรกรรม และเส้นทางสิทธิ์พิเศษอื่นอาจข้ามระยะหน่วง - “ลบผู้พิทักษ์แล้วสิทธิ์เข้าถึงจบลง” ยืนยันการตั้งค่าสุดท้ายบนเชน และตรวจบทบาท โมดูล session key และการกู้คืนค้างอยู่ที่เชื่อมโยงกับฝ่ายนั้น
- “ฝ่ายสนับสนุนกู้คืนบัญชีอัจฉริยะใดก็ได้” เฉพาะสิทธิ์ที่เข้ารหัสหรือกำหนดไว้ล่วงหน้าบนเชนเท่านั้นที่เปลี่ยนบัญชีแบบดูแลเองได้ หากไม่มีเจ้าของหรือเส้นทางกู้คืนที่ถูกต้อง อาจเสียการเข้าถึงถาวร
หัวข้อที่เกี่ยวข้อง
- Account abstraction
- ความเสี่ยงของโมดูล multisig
- การหมุนเวียนผู้ลงนาม multisig
- การจัดการคีย์ส่วนตัว
- การจำลองธุรกรรม