เมื่อวันที่ 2 พฤศจิกายน Axion Network ได้เปิดตัวโทเค็นใหม่ที่เรียกว่า AXN โครงการได้โน้มน้าวให้สินทรัพย์เป็นเครื่องมือการลงทุนใหม่โดยอ้างว่ามันจะเป็นบล็อกเชนที่ทำกำไรได้มากที่สุดในปัจจุบัน ในระหว่างช่วงเวลานำไปสู่การออกอากาศของ AXN ทีมงานห้าทีมที่ถูกกล่าวหาว่าแยกกันตรวจสอบรหัสของโทเค็น ผู้ที่ชื่นชอบในอุตสาหกรรมเช่น CertiK และ Hacken เป็นหนึ่งในผู้ที่ดำเนินการตรวจสอบ.
ไม่กี่ชั่วโมงหลังจากเหตุการณ์การเรียกร้องอิสระของโปรโตคอลก็เห็นได้ชัดว่ามีบางอย่างผิดปกติ นักแสดงที่ไม่ได้รับอนุญาตสร้างรายได้ 79 พันล้าน AXN โดยไม่คาดคิดและปลดพวกเขาออกสู่ตลาด ราคาถล่มทลายเกิน 99% ทำให้ผู้โจมตีลดลง 1300 ETH ซึ่งมีมูลค่าประมาณ 500,000 เหรียญสหรัฐในขณะที่ตีพิมพ์.
ในอีกไม่กี่ชั่วโมงต่อมาทีมที่อยู่เบื้องหลังโครงการ Axion สนับสนุนให้ผู้เข้าร่วมอยู่ห่างจากการซื้อขายหรือโต้ตอบกับสินทรัพย์โดยระบุผ่านช่องทาง Telegram อย่างเป็นทางการของแพลตฟอร์ม:
“ อย่าซื้อ AXN ตอนนี้อย่าโต้ตอบกับแดชบอร์ด”
บัญชี Twitter ของ Axion Network ยังคงโพสต์การอัปเดตอย่างต่อเนื่องรวมถึง:
เรายังคงอยู่ที่นี่.
ผู้ใช้ AXN / HEX2T ทั้งหมดที่ถือครองในช่วงเวลาของการใช้ประโยชน์จะได้รับเครดิต.
เราจะเปิดตัวพอร์ทัลการให้รางวัลสภาพคล่องเพื่อสร้างสภาพคล่องสำรองเช่นกัน.
เรากำลังดำเนินการอย่างเต็มที่เพื่อเปิดใช้งาน AXN อีกครั้งโดยเร็วที่สุด.
– Axion (@axion_network) 2 พฤศจิกายน 2020
แม้จะมีความมั่นใจเหล่านี้ CertiK กำลังก้าวไปข้างหน้าเพื่อให้ชุมชนได้รับคำอธิบายที่ชัดเจนยิ่งขึ้นเกี่ยวกับสิ่งที่พวกเขาเห็นว่าผิดพลาดและข้อมูลเชิงลึกว่าจะป้องกันการโจมตีที่คล้ายกันได้อย่างไรในอนาคต Cointelegraph ติดต่อทางอีเมลถึง“ Jack Durden” ซึ่งได้รับการอธิบายให้เราทราบว่าเป็น CEO ของ Axion Network แต่ไม่ได้รับการตอบกลับในทันที ไม่มีรายชื่อสมาชิกในทีมอยู่ในสมุดปกขาวของโครงการหรือบนเว็บไซต์และมีการแชร์ชื่อ“ Jack Durden” กับผู้บรรยายที่มองไม่เห็นจากภาพยนตร์เรื่อง Fight Club.
โปรดทราบว่าส่วนที่เหลือของบทความนี้ทำซ้ำแบบคำต่อคำโดยได้รับความอนุเคราะห์จาก CertiK ในฐานะบริการสาธารณะเพื่อให้ความรู้แก่ผู้อ่านเกี่ยวกับความเข้าใจของทีมตรวจสอบเกี่ยวกับสิ่งที่เกิดขึ้น Cointelegraph ไม่ได้ตรวจสอบโค้ดและมุมมองที่ระบุไว้ต่อจากนี้จึงเป็นของ CertiK เท่านั้น.
เจ้าหน้าที่ของ CertiK รายงานเกี่ยวกับความผิดพลาดของราคา Axion
วันที่ 2 พฤศจิกายน 2563 เวลา ประมาณ 11.00 น. + UTC แฮ็กเกอร์สามารถสร้างโทเค็น AXN ได้ประมาณ 80 พันล้านโทเค็นโดยใช้ฟังก์ชัน unstake ของสัญญา Axion Staking.
แฮ็กเกอร์ดำเนินการถ่ายโอนโทเค็นในการแลกเปลี่ยน AXN Uniswap สำหรับ Ether โดยทำซ้ำขั้นตอนนี้จนกว่าการแลกเปลี่ยน Uniswap จะหมดลงและราคาโทเค็นถูกขับเคลื่อนไปที่ 0.
เราได้รับแจ้งเหตุการณ์ภายในไม่กี่นาทีของการโจมตีที่เกิดขึ้นและนักวิเคราะห์ด้านความปลอดภัยของเราก็เริ่มประเมินสถานการณ์ทันที.
เราได้ข้อสรุปว่าการโจมตีน่าจะมีการวางแผนจากภายในซึ่งเกี่ยวข้องกับการแทรกโค้ดที่เป็นอันตรายในเวลาที่โค้ดถูกปรับใช้โดยการแก้ไขโค้ดจากการอ้างอิง OpenZeppelin.
ฟังก์ชั่นที่ใช้ประโยชน์ไม่ได้เป็นส่วนหนึ่งของการตรวจสอบที่เราดำเนินการเนื่องจากถูกเพิ่มเข้าด้วยกันหลังจากรวมโค้ดของ Axion เข้ากับโค้ดของ OpenZeppelin ผ่านทาง“ การทำให้แบน” และฉีดเข้าไปภายในโค้ดของ OpenZeppelin ก่อนที่จะนำไปใช้งาน.
การวางแผน
แฮ็กเกอร์ใช้เงินที่ไม่ระบุตัวตนซึ่งจัดหามาจาก ทอร์นาโด วันก่อนเกิดการแฮ็ก, บอกใบ้ถึงการโจมตีที่มีสมาธิล่วงหน้า สันนิษฐานว่าเพื่อประหยัดเงินบางส่วนในกรณีที่การโจมตีล้มเหลว 2.1 อีเธอร์ถูกหมุนเวียนอีกครั้งในทอร์นาโดเงินสดทันทีหลังจากที่บัญชีได้รับเงิน.
เพื่อให้การตั้งค่าการโจมตีเสร็จสิ้นแฮ็กเกอร์ซื้อมา ~ 700k HEX2T โทเค็น จากการแลกเปลี่ยน Uniswap อย่างไรก็ตามในท้ายที่สุดเงินเหล่านี้ไม่ได้เป็นส่วนหนึ่งของการโจมตีและทำหน้าที่เป็นหน้าจอสโมคเกอร์เกี่ยวกับการโจมตีที่เกิดขึ้น.
ติดตั้ง
แฮ็กเกอร์เริ่มต้นในการโจมตีด้วยการสร้างสัดส่วนการถือหุ้นที่“ ว่างเปล่า” ในสัญญา Staking ของ Axion Network โดยเรียกใช้ฟังก์ชันเงินเดิมพันด้วยจำนวนเงิน 0 และระยะเวลาเดิมพัน 1 วันที่ ประมาณ 09:00 น. + UTC. สิ่งนี้สร้างรายการเซสชันสำหรับผู้โจมตีด้วยจำนวนเงิน 0 และมูลค่าหุ้น 0 ที่รหัสเซสชัน 6.
หลังจากนั้นผู้โจมตีได้อนุมัติ AXN ไม่ จำกัด จำนวนให้กับการแลกเปลี่ยน Uniswap ล่วงหน้าเพื่อคาดว่าการโจมตีจะประสบความสำเร็จ ดังนั้นพวกเขาจึงอนุมัติสัญญา NativeSwap ของ Axion สำหรับจำนวนเงินที่พวกเขาตั้งใจจะแปลงเป็นโทเค็น AXN.
พวกเขาเรียกใช้ฟังก์ชันการฝากของสัญญา NativeSwap ที่ ประมาณ 10.00 น. + UTC, อย่างไรก็ตามแฮ็กเกอร์ไม่เคยเรียกฟังก์ชันการถอนของสัญญาเพื่ออ้างสิทธิ์ AXN ที่ได้รับการแลกเปลี่ยนของเขาตามที่เห็นได้ชัดในฟังก์ชัน swapTokenBalanceOf ของสัญญา NativeSwap หลังจากนั้นพวกเขาได้ทำการเรียกใช้ฟังก์ชันการฝากที่ล้มเหลวอีกหนึ่งครั้งก่อนที่จะดำเนินการโจมตี.
การดำเนินการ
การทำธุรกรรมเหล่านี้เป็นเพียงการสูบบุหรี่สำหรับวิธีการโจมตีที่ไม่ได้มีส่วนได้ส่วนเสีย เนื่องจากธุรกรรมที่ผู้โจมตีดำเนินการส่งผลให้ไม่มีการเปลี่ยนแปลงการแมป sessionDataOf เราจึงสรุปได้ว่านี่เป็นการโจมตีหลายที่อยู่.
เราตรวจสอบซอร์สโค้ดของสัญญาที่ที่เก็บ GitHub ที่แชร์กับเราเพื่อระบุข้อบกพร่องที่จะทำให้การแมป sessionDataOf ได้รับผลกระทบ.
เราไม่สามารถตรวจพบการมอบหมายงานใด ๆ ให้กับมันหรือสมาชิกของงานนั้นนอกหน้าที่ของสเตคซึ่งทำให้เราตั้งคำถามว่าการปรับใช้สัญญานั้นดำเนินไปอย่างถูกต้องหรือไม่.
โจมตีเวกเตอร์
หลังจากวิเคราะห์ซอร์สโค้ดของสัญญา Staking ที่ปรับใช้แล้วเราได้ระบุการแทรกโค้ดในไลบรารี AccessControl OpenZeppelin ระหว่าง L665-L671 ของ ใช้ซอร์สโค้ด ของสัญญาการวางเดิมพัน ฟังก์ชัน checkRole ที่เชื่อมโยงไม่ได้เป็นส่วนหนึ่งของ การใช้งาน OpenZeppelin v3.0.1, ซึ่งระบุว่าเป็นการอ้างอิงในที่เก็บ GitHub ของโปรเจ็กต์.
ภายในฟังก์ชัน checkRole จะมีชุดประกอบต่อไปนี้:
ฟังก์ชันเฉพาะนี้ช่วยให้ที่อยู่เฉพาะดำเนินการเขียนสัญญาโดยพลการตามตัวแปรอินพุตที่เสริมผ่านการโทรระดับต่ำ หมายเหตุประกอบบล็อกจะมีลักษณะดังนี้:
ฟังก์ชั่นนี้ ถูกฉีดที่การปรับใช้ เนื่องจากไม่มีอยู่ในการใช้งาน OpenZeppelin AccessControl ซึ่งหมายความว่าสมาชิกของ Axion Network ที่เกี่ยวข้องกับการปรับใช้โทเค็นกระทำการที่มุ่งร้าย.
สรุป
การโจมตีใช้รหัสที่จงใจแทรกก่อนการปรับใช้โปรโตคอล เหตุการณ์นี้ ไม่มีความเกี่ยวข้องกับการตรวจสอบที่ดำเนินการโดย CertiK และฝ่ายที่รับผิดชอบการโจมตีคือบุคคลที่ดูเหมือนจะเกี่ยวข้องกับการปรับใช้สัญญา Axion Network.
ในระดับความปลอดภัยเพิ่มเติมรายงานการตรวจสอบควรสร้างมาตรฐานเพื่อรวมที่อยู่สัญญาอัจฉริยะที่ปรับใช้ซึ่งซอร์สโค้ดได้รับการตรวจสอบแล้วว่าเหมือนกับที่ได้รับการตรวจสอบ.
ความปลอดภัย Oracle ทำหน้าที่เป็นผู้ถ่ายทอดข้อมูลด้านความปลอดภัยแบบออนไลน์โดยดำเนินการตรวจสอบความปลอดภัยซึ่งรวมถึงการตรวจสอบสัญญาสมาร์ทที่ปรับใช้เพื่อให้ตรงกับเวอร์ชันที่ตรวจสอบแล้ว.