ในช่วงเช้าของวันที่ 19 มีนาคม ผู้ใช้ชุมชนบางรายรายงานว่ามีความเสี่ยงที่จะเกิดการใช้จ่ายซ้ำซ้อนบน Filecoin mainnet การแลกเปลี่ยนเช่น Binance และ OKex ได้ปิดฟังก์ชันการเติมเงินของโทเค็น Filecoin mainnet FIL Cobo Custody ยังระงับการเติมเงินทันที และถอนเหรียญ
ชื่อเรื่องรอง
เรื่องราวของ Filecoin "ใช้จ่ายสองเท่า"
ตามข้อเสนอแนะจากผู้ขุด Filecoin ของ Filfox และ FileStar เมื่อวันพุธที่ผ่านมา Binance พบการโจมตี FIL double-spend recharge มูลค่าหลายล้านดอลลาร์
เหตุผลก็คือการทำธุรกรรม 61,000 FIL (ประมาณ 4.6 ล้านดอลลาร์สหรัฐ) ใช้เวลานานเกินไปในการบันทึก ดังนั้นคนงานเหมือง Filfox และ FileStar จึงเริ่มการทำธุรกรรม RBF เพื่อเร่งความเร็ว ธุรกรรม RBF ส่งผลให้มีการฝากเงินสองครั้งในบัญชี Binance และในที่สุดก็ได้รับเครดิต 120,000 FIL หลังจากนั้น ผู้พัฒนา Filfox และ FileStar ตอบว่ามี "ช่องโหว่ร้ายแรง" ในรหัส RPC ของ Filecoin ช่องโหว่ดังกล่าวทำให้ Binance เลือกที่จะฝากเงินพร้อมกันหลังจากเห็นธุรกรรมสองรายการที่ขัดแย้งกัน
นักพัฒนา FilFox และ FileStar ได้ติดต่อ Binance โดยเร็วที่สุด และแจ้งให้เจ้าหน้าที่ Filecoin ทราบโดยเร็วที่สุด
ชื่อเรื่องรอง
ทบทวนรายละเอียดทางเทคนิค
สถาบันผู้ดูแลส่วนกลาง เช่น การแลกเปลี่ยนและกระเป๋าเงินส่วนกลางจะให้เครดิตผู้ใช้ตามพฤติกรรมการโอนบนเชน ดังนั้น วิธีการวิเคราะห์พฤติกรรมการโอนบนเชนอย่างมีประสิทธิภาพ แม่นยำ และทันท่วงทีจึงมีความสำคัญมาก ID ธุรกรรมทั้งหมดในบล็อก แล้วรับ เนื้อหาธุรกรรมที่เกี่ยวข้องและผลการดำเนินการธุรกรรมตาม ID ธุรกรรม
โหนด Lotus ของ Filecoin จัดเตรียม API หลายตัวสำหรับรับธุรกรรมบนเชน ตัวอย่างเช่น ChainGetBlockMessages สามารถรับเนื้อหาธุรกรรมทั้งหมดในบล็อกที่ระบุ และ StateGetReceipt สามารถรับผลการดำเนินการที่สอดคล้องกับ ID ธุรกรรมที่ระบุ การแลกเปลี่ยนที่ถูกโจมตีในครั้งนี้ใช้วิธีการนี้ มีการใช้ API สองรายการในการวิเคราะห์พฤติกรรมการถ่ายโอนบนเชน และป้อนบัญชีสำหรับผู้ใช้ตามข้อมูลนี้
อย่างไรก็ตาม พวกเขาไม่ได้สังเกตว่าอินเทอร์เฟซ StateGetReceipt มีการออกแบบที่ไม่เป็นไปตามการคิดเชิงตรรกะทั่วไป กล่าวคือ เมื่อได้รับผลการดำเนินการของ ID ธุรกรรมที่ระบุ หากธุรกรรมถูกแทนที่ด้วย RBF (แทนที่ด้วยค่าธรรมเนียม) มันจะส่งคืนผลการดำเนินการ RBF สำเร็จขั้นสุดท้ายของธุรกรรมนั้น และไม่มีการระบุในมูลค่าที่ส่งคืนว่านี่คือผลการดำเนินการของธุรกรรมหลังจาก RBF
สมมติว่าผู้โจมตีส่ง TX1 ก่อน รหัสธุรกรรมที่เกี่ยวข้องคือ TXID1 จากนั้นผู้โจมตีดำเนินการ RBF บน TX1 เพื่อสร้าง TX2 รหัสธุรกรรมที่เกี่ยวข้องคือ TXID2 และในที่สุด TX2 ก็อัปโหลดไปยังเชนได้สำเร็จ ในขณะนี้ ให้ค้นหา TXID1 และ TXID2 ตามลำดับผ่าน StateGetReceipt และทั้งคู่จะได้รับผลลัพธ์การดำเนินการที่ถูกต้อง
หลังจากการโจมตีเกิดขึ้น ผู้พัฒนา Filecoin อย่างเป็นทางการได้อธิบายเพิ่มเติมเกี่ยวกับ API ชี้แจงตรรกะการส่งคืนของ StateGetReceipt และจะละทิ้ง API นี้หลังจากเวอร์ชัน v1
https://github.com/filecoin-project/lotus/pull/5838/files
ทีมเทคนิคของ Cobo Custody ได้ค้นพบปัญหาข้างต้นในกระบวนการเชื่อมต่อกับ Filecoin ดังนั้นแทนที่จะใช้ ChainGetBlockMessages และ StateGetReceipt เพื่อรับพฤติกรรมการถ่ายโอนบนเชน จะใช้ ChainGetParentMessages และ ChainGetParentReceipts เพื่อรับธุรกรรมที่อัปโหลดไปยังเชนได้สำเร็จ ดังนั้นจึงหลีกเลี่ยงความเสี่ยงของการเติมเงินซ้ำซ้อนได้ ดังนั้นจึงไม่ได้รับผลกระทบจากการโจมตีการชาร์จซ้ำสองครั้งนี้
ในกระบวนการใช้ ChainGetParentMessages และ ChainGetParentReceipts ทีมเทคนิคของ Cobo Custody พบว่าค่าส่งคืนบางส่วนของโหนดดอกบัวไม่สอดคล้องกับการคิดเชิงตรรกะทั่วไป ตัวอย่างเช่น มีปัญหาบางอย่างเกี่ยวกับการประมวลผลบล็อกว่าง ทีมเทคนิคของ Cobo Custody ได้จัดการเรื่องนี้อย่างเหมาะสมแล้ว และขอเตือนสถาบันควบคุมส่วนกลางอื่นๆ ให้ตรวจสอบรหัสเชื่อมต่อที่เกี่ยวข้องอย่างรอบคอบเพื่อหลีกเลี่ยงการโจมตีซ้ำซ้อนอื่นๆ
การใช้จ่ายซ้ำซ้อนคือการใช้โทเค็นของธุรกรรมก่อนหน้าเพื่อทำธุรกรรมอีกครั้ง ทำให้เกิดธุรกรรมที่ผิดพลาด
ในปี 2018 Bitcoin Gold (BTG) ถูกโจมตีอย่างมุ่งร้ายโดยนักขุด นักขุดควบคุม BTG blockchain ชั่วคราว ถอนเหรียญออกอย่างรวดเร็วหลังจากเติมพลังให้กับการแลกเปลี่ยน จากนั้นกลับบล็อก ดำเนินการโจมตีแบบ double-spend ได้สำเร็จ ผู้โจมตีขโมย BTG ไปมากกว่า 388,200 BTG มูลค่าสูงถึง 18.6 ล้านดอลลาร์ และยังเป็นหนึ่งในการโจมตีสองครั้งที่มีชื่อเสียงที่สุดในประวัติศาสตร์ของบล็อกเชน
