การเงินแบบกระจายอำนาจ (DeFi) เป็นรูปแบบโครงการที่ได้รับความนิยมในระบบนิเวศของบล็อกเชน การรักษาความปลอดภัยเป็นสิ่งสำคัญอย่างยิ่ง ตั้งแต่ปีที่แล้ว มีเหตุการณ์ด้านความปลอดภัยเกิดขึ้นหลายสิบครั้ง
ในฐานะทีมวิจัยระยะยาว (https://blocksecteam.com) ที่เกี่ยวข้องกับความปลอดภัยของ DeFi BlockSec ได้ค้นพบเหตุการณ์ด้านความปลอดภัยของ DeFi จำนวนมากโดยอิสระ และผลการวิจัยได้รับการเผยแพร่ในการประชุมด้านความปลอดภัยชั้นนำ (รวมถึง USENIX Security, CCS และ หมวกสีดำ). ในช่วงเวลาต่อไป เราจะวิเคราะห์เหตุการณ์ด้านความปลอดภัยของ DeFi อย่างเป็นระบบและวิเคราะห์สาเหตุที่แท้จริงเบื้องหลังเหตุการณ์ด้านความปลอดภัย
รีวิวที่ผ่านมา:
(1) [หนึ่งในซีรี่ส์การวิเคราะห์การโจมตีของ BlockSec DeFi] ฉันพูดด้วยตัวเอง: การวิเคราะห์เหตุการณ์การโจมตี ChainSwap
(2) [BlockSec DeFi Attack Analysis Series 2] แจกทุกอย่าง: ค่าธรรมเนียม Sushiswap ถูกขโมย
0xffffffff. คำนำ
การเงินแบบกระจายอำนาจ (DeFi) เป็นรูปแบบโครงการที่ได้รับความนิยมในระบบนิเวศของบล็อกเชน การรักษาความปลอดภัยเป็นสิ่งสำคัญอย่างยิ่ง ตั้งแต่ปีที่แล้ว มีเหตุการณ์ด้านความปลอดภัยเกิดขึ้นหลายสิบครั้งในฐานะทีมวิจัยระยะยาว (https://blocksecteam.com) ที่เกี่ยวข้องกับความปลอดภัยของ DeFi BlockSec ได้ค้นพบเหตุการณ์ด้านความปลอดภัยของ DeFi จำนวนมากโดยอิสระ และผลการวิจัยได้รับการเผยแพร่ในการประชุมด้านความปลอดภัยชั้นนำ (รวมถึง USENIX Security, CCS และ หมวกสีดำ). ในช่วงเวลาต่อไป เราจะวิเคราะห์เหตุการณ์ด้านความปลอดภัยของ DeFi อย่างเป็นระบบและวิเคราะห์สาเหตุที่แท้จริงเบื้องหลังเหตุการณ์ด้านความปลอดภัยรีวิวที่ผ่านมา:[หนึ่งในซีรี่ส์การวิเคราะห์การโจมตีของ BlockSec DeFi] ฉันพูดด้วยตัวเอง: การวิเคราะห์เหตุการณ์การโจมตี ChainSwap[BlockSec DeFi Attack Analysis Series 2] แจกทุกอย่าง: ค่าธรรมเนียม Sushiswap ถูกขโมย
ข้อตกลงการโจมตี
คำแนะนำในการอ่าน:
หากคุณยังใหม่กับ DeFi (Ethereum) คุณสามารถอ่านได้ตั้งแต่เริ่มต้น แต่บทความค่อนข้างยาว ดังนั้นหากคุณอ่านไม่ออก อย่าลืมให้ความสนใจก่อนที่จะออกไป
หากคุณมีความเข้าใจที่ดีขึ้นเกี่ยวกับโครงการรวบรวม DeFi เช่น Akropolis คุณสามารถเริ่มต้นได้โดยตรงจาก "การวิเคราะห์การโจมตี 0x2"
0x0 บทนำเบื้องต้น
ใช้ตัวอย่างนี้เป็นการตีความเชิงลึกของหลักการของการโจมตีนี้
เวลา: 12 พ.ย.-2563 12:04:02 น. +UTC #11242695
คำแนะนำในการอ่าน:
หากคุณยังใหม่กับ DeFi (Ethereum) คุณสามารถอ่านได้ตั้งแต่เริ่มต้น แต่บทความค่อนข้างยาว ดังนั้นหากคุณอ่านไม่ออก อย่าลืมให้ความสนใจก่อนที่จะออกไป
Protocol:
หากคุณมีความเข้าใจที่ดีขึ้นเกี่ยวกับโครงการรวบรวม DeFi เช่น Akropolis คุณสามารถเริ่มต้นได้โดยตรงจาก "การวิเคราะห์การโจมตี 0x2"
Akropolis:
0x0 บทนำเบื้องต้น
ปี 2020 สามารถอธิบายได้ว่าเป็นปีแรกของการเงินแบบกระจายอำนาจ (ต่อไปนี้จะเรียกว่า DeFi) ด้วยการพัฒนาอย่างต่อเนื่องของระบบนิเวศ DeFi โครงการ DeFi จำนวนมากขึ้นเรื่อยๆ จึงมีรายชื่ออยู่ใน Ethereum ผู้ใช้ทั่วไปสามารถเลือกโครงการ DeFi ที่พวกเขาชื่นชอบเพื่อลงทุนเพื่อรับรายได้ อย่างไรก็ตาม ด้วยการขยายตัวอย่างรวดเร็วของตลาด DeFi ปัญหาที่ผู้ใช้ทั่วไปประสบคือวิธีการเลือกเป้าหมายการลงทุนในโครงการ DeFi จำนวนมาก พวกเขาต้องการคนช่วยลงทุน ในกรณีนี้ ชุดของแพลตฟอร์มการดูแลสินทรัพย์และแพลตฟอร์มพอร์ตการลงทุนได้เกิดขึ้นตามความจำเป็น Akropolis เป็นหนึ่งในหลาย ๆ แพลตฟอร์มการดูแลทรัพย์สิน:
ผู้ใช้ทั่วไปลงทุนสินทรัพย์ดิจิทัลส่วนบุคคลใน Akropolis และ Akropolis จะกำหนดทิศทางการลงทุนและปรับกลยุทธ์การลงทุนให้เหมาะสม หลังจากที่ Akropolis ได้รับรายได้จากการลงทุน มันจะกระจายรายได้ตามสัดส่วนให้กับผู้ใช้ทั่วไปที่ลงทุนใน Akropolis ยกตัวอย่างกิจกรรมทางการเงินในโลกแห่งความเป็นจริง Akropolis เป็นเหมือนกองทุน โครงการ DeFi ที่ลงทุนในหุ้นคือประชาชนที่มีปัจจัยพื้นฐานซื้อกองทุนและกองทุนถือหุ้นและแจกจ่ายรายได้ให้กับประชาชนขั้นพื้นฐานหลังจากได้รับรายได้
Akropolis.deposit fucntion:
0x1 กลไกอโครโพลิส
เพื่อความสะดวกในการทำความเข้าใจ ก่อนอื่นเราจะแนะนำสัญญาทางกายภาพสองรายการที่เกี่ยวข้องกับการโจมตีนี้: สัญญาโปรโตคอลและสัญญา Akropolis
โปรโตคอลสามารถเข้าใจได้ง่ายๆ ว่า: ผู้ใช้ลงทุนโทเค็นของตนในโปรโตคอลเพื่อรับส่วนแบ่ง (ส่วนแบ่ง) ของโปรโตคอล และเมื่อทรัพย์สินในโปรโตคอลมีมูลค่าเพิ่มขึ้นในอนาคต ผู้ใช้สามารถรับรายได้จำนวนหนึ่งจากโปรโตคอล
ดังที่เราได้กล่าวไว้ก่อนหน้านี้ เนื่องจากมีโครงการ DeFi บน ETH มากเกินไป หากผู้ใช้ต้องการลงทุนในหลายโครงการ พวกเขาไม่รู้ว่าจะเลือกอย่างไร หรือการดำเนินการค่อนข้างยาก ดังนั้น Akropolis จึงมีบทบาทเป็นผู้รวบรวมการลงทุน : Akropolis ผูกโครงการการลงทุน A DeFi หลายโครงการ ผู้ใช้สามารถใช้โทเค็นในมือเพื่อลงทุนผ่าน Akropolis ได้อย่างง่ายดาย: ผู้ใช้เพียงแค่เรียกใช้ฟังก์ชัน Akropolis ระบุโปรโตคอลที่ต้องการลงทุน และ Akropolis จะช่วยให้คุณดำเนินการให้เสร็จสิ้น โปรโตคอลการลงทุนที่แตกต่างกัน
ตรรกะการโต้ตอบโดยรวมจะแสดงในรูป:
Akropolis มีอินเทอร์เฟซภายนอกสองอินเทอร์เฟซ: ฟังก์ชัน ฝาก (address_protocol, ที่อยู่ [] memory_tokens, uint256 [] memory_dnAmounts) และการถอนฟังก์ชัน (address_protocol, โทเค็นที่อยู่, uint256 dnAmount, uint256 maxNAmount)
ฟังก์ชันของฟังก์ชันฝากคือ:
ผู้ใช้เรียกเงินฝาก
ขั้นแรก Akropolis จะคำนวณจำนวนโทเค็นที่อยู่ในโปรโตคอล: nBalanceBefore
Akropolis โอนโทเค็นของผู้ใช้ไปยังโปรโตคอล
จากนั้น Akropolis จะคำนวณจำนวนโทเค็นในโปรโตคอล: nBalanceAfter
รับจำนวนเงินลงทุนของผู้ใช้: nDeposit = nBalanceAfter - nBalanceBefore
withdraw fucntion:
ส่วนแบ่งการลงทุนของผู้ใช้คำนวณจากจำนวนเงินลงทุนของผู้ใช้
ฟังก์ชัน Akropolis.depositToProtocol:
ฟังก์ชัน Akropolis.distributeYieldInternal และฟังก์ชัน Akropolis.updateProtocolBalance:
STEP 1:
โปรโตคอลฟังก์ชั่น normalizedBalance:
STEP 2:
โปรดทราบว่า _registeredTokens = [DAI, USDC, USDT, TUSD] ใน Protocol.normalizedBalance ฟังก์ชันของฟังก์ชัน distributionYieldInternal และฟังก์ชัน updateprotocolBalance ที่ใช้ในฟังก์ชันการฝากเงินคือการสอบถามยอดคงเหลือของโทเค็นทั้งหมด (อันที่จริงคือ DAI, USDC, USDT, TUSD) ในฟังก์ชันโปรโตคอลปัจจุบัน โปรดทราบว่า normalizedBalance ในที่นี้หมายถึงการปรับความสมดุลของการประมวลผลให้เป็นมาตรฐาน (เนื่องจาก ทศนิยมของโทเค็นประเภทต่างๆ ไม่สอดคล้องกัน)
STEP 3:
ผู้ใช้สามารถเรียกใช้ฟังก์ชันการฝากเพื่อฝากโทเค็นจำนวนหนึ่งไปยัง Akropolis โดยระบุโปรโตคอล โทเค็น และจำนวนโทเค็น และ Akropolis จะคืน Akropolis LP Token ให้กับผู้ใช้ตามจำนวนโทเค็นที่ฝากโดยผู้ใช้ จากนั้นใช้โทเค็นที่ผู้ใช้ลงทุนเพื่อลงทุนในโปรโตคอล
โดยการเรียกใช้ฟังก์ชันการถอน ผู้ใช้จะถอนโทเค็นที่ฝากผ่านฟังก์ชันการฝากเพื่อรับดอกเบี้ย
Others
0x2. หลักการโจมตี
เราสังเกตเห็นว่าในฟังก์ชัน Akropolis.deposit จำเป็นต้องคำนวณ beforeBalance ก่อน จากนั้นจึงเรียกใช้ฟังก์ชัน TransferFrom ของโทเค็น โอนโทเค็นไปยังโปรโตคอล และสุดท้าย คำนวณอาฟเตอร์บาลานซ์ วิธีการคำนวณนี้ถูกต้องภายใต้ตรรกะปกติ แต่ถ้าผู้โจมตีให้ที่อยู่โทเค็นเป็นที่อยู่ที่เป็นอันตราย (นั่นคือสัญญาโทเค็นปลอม Akropolis ยังไม่ได้ตรวจสอบที่อยู่โทเค็น) ในกรณีนี้ โทเค็นที่ถูกต้องจริงจะไม่ถูกโอนไปยังบัญชีโปรโตคอล และ Akropolis . กลไกการเข้า. ซึ่งช่วยให้ผู้โจมตีสามารถโจมตี Akropolis ได้โดยใช้ 1. ที่อยู่โทเค็นยังไม่ได้รับการยืนยัน และ 2. ฟังก์ชันการฝากไม่มีกลไกการย้อนกลับ ผังการโจมตีมีดังนี้:
ผู้โจมตีเรียกฟังก์ชัน Akropolis.deposit ก่อน และพารามิเตอร์ที่อยู่โทเค็นที่ส่งผ่านคือที่อยู่สัญญาที่เป็นอันตราย ภายในฟังก์ชัน จะมีการคำนวณ balanceBefore1 ก่อน จากนั้นเนื่องจากที่อยู่สัญญาโทเค็นที่ผู้โจมตีส่งผ่านเป็นโทเค็นปลอมที่ผู้โจมตีปลอมแปลงขึ้นมา Akropolis จึงเรียกฟังก์ชัน fakeToken.transferFrom
ในฟังก์ชัน fakeToken.transferFrom สัญญาจะเรียก Akropolis.deposit อีกครั้ง และที่อยู่โทเค็นที่ส่งผ่านคือที่อยู่ DAI จริง ดังนั้นตรรกะของการเรียกเงินมัดจำเป็นครั้งที่สองจึงเป็นตรรกะปกติ: ผู้โจมตีจะฝาก DAI จำนวนหนึ่ง และ จากนั้น Akropolis ตาม balanceAfter2-balanceBefore2 จะมีการออกโทเค็น LP ที่สอดคล้องกันสำหรับเหรียญกษาปณ์ของผู้โจมตี หมายเหตุ: ที่นี่ ยอดคงเหลือก่อน 2 = ยอดคงเหลือก่อน 1
แม้ว่าผู้โจมตีจะส่ง DAI จำนวนประมาณ 25,000 ดอลลาร์ไปยังโปรโตคอลในการทำธุรกรรมทั้งหมด แต่เนื่องจากกลไกการกลับเข้าใหม่ BalanceBefore1 จึงไม่ได้รับการอัปเดตทันเวลาหลังจากการฝากครั้งที่สอง ทำให้ Akropolis กลับมาที่โฟลว์การควบคุมฟังก์ชันเป็นครั้งแรก ในฟังก์ชันการฝากเงิน สันนิษฐานว่าผู้โจมตีโอน DAI มูลค่า 25,000 ดอลลาร์ไปยังโปรโตคอล ดังนั้นจึงสร้างโทเค็น LP ที่สอดคล้องให้กับผู้ใช้อีกครั้ง
ขับเคลื่อนด้วยเทคโนโลยีความปลอดภัยหลัก ทีมงานของ BlockSec ให้ความสำคัญกับความปลอดภัยของ DeFi การต่อต้านการฟอกเงินสกุลเงินดิจิทัล และการดูแลทรัพย์สินดิจิทัลบนพื้นฐานของการประมวลผลความเป็นส่วนตัว การให้บริการรักษาความปลอดภัยตามสัญญาและบริการรักษาความปลอดภัยสินทรัพย์ดิจิทัลสำหรับฝ่ายโครงการ DApp ทีมงานได้เผยแพร่เอกสารทางวิชาการด้านความปลอดภัยชั้นนำมากกว่า 20 ฉบับ (CCS, USENIX Security, S&P) และพันธมิตรของบริษัทได้รับรางวัลนักวิชาการด้านความปลอดภัยและความเป็นส่วนตัวที่มีอิทธิพลมากที่สุดในโลกของ AMiner (อันดับที่หกของโลกในปี 2554-2563) ผลการวิจัยได้รับรางวัลจาก CCTV, สำนักข่าว Xinhua News และรายงานของสื่อต่างประเทศ ค้นพบช่องโหว่ด้านความปลอดภัยและภัยคุกคาม DeFi จำนวนมากโดยอิสระ และได้รับรางวัลที่หนึ่งในโลกในการแข่งขันคอมพิวเตอร์เพื่อความเป็นส่วนตัวของสถาบันสุขภาพแห่งชาติ (SGX Track) ประจำปี 2562 ขับเคลื่อนด้วยเทคโนโลยี ทีมงานยึดมั่นในแนวคิดของการเปิดกว้างและ win-win และทำงานร่วมกับพันธมิตรในชุมชนเพื่อสร้างระบบนิเวศ DeFi ที่ปลอดภัย
https://www.blocksecteam.com/
contact@blocksecteam.com
