ภาพรวม
ชื่อระดับแรก
โทเค็นที่มีกลไกเงินฝืดบนบล็อกเชนถูกโจมตีบ่อยครั้งเมื่อไม่นานมานี้ บทความนี้จะหารือและวิเคราะห์สาเหตุที่โทเค็นกลไกเงินฝืดถูกโจมตี และให้แนวทางป้องกันที่เกี่ยวข้อง
โดยทั่วไปมีสองวิธีในการปรับใช้กลไกการยุบตัวในโทเค็น วิธีหนึ่งคือกลไกการเผาไหม้ และอีกวิธีหนึ่งคือกลไกการสะท้อนกลับ ด้านล่างเราจะวิเคราะห์การใช้งานทั้งสองนี้และปัญหาที่เป็นไปได้
ชื่อระดับแรก
กลไกการเผาไหม้
โดยทั่วไป โทเค็นที่มีกลไกการเบิร์นจะใช้ตรรกะการเบิร์นในฟังก์ชัน _transfer บางครั้งมีบางกรณีที่ผู้ส่งต้องรับผิดชอบค่าธรรมเนียมการจัดการ ในกรณีนี้ จำนวนโทเค็นที่ผู้รับได้รับจะไม่เปลี่ยนแปลง แต่ผู้ส่งต้องจ่ายโทเค็นเพิ่มเติมเนื่องจากต้องแบกรับค่าธรรมเนียมการทำธุรกรรม นี่คือตัวอย่างง่ายๆ:
จากนั้นเราจะหารือถึงความเสี่ยงที่อาจเกิดขึ้นในสถานการณ์นี้
หากเราดูเฉพาะสัญญาโทเค็น เราจะพบว่าจริง ๆ แล้วไม่มีปัญหากับวิธีการเขียนแบบนี้ แต่มีสถานการณ์ที่ซับซ้อนมากมายในบล็อกเชนซึ่งทำให้เราต้องพิจารณาหลายด้าน
โดยปกติแล้ว เพื่อให้โทเค็นมีราคา ฝ่ายโครงการจะเพิ่มสภาพคล่องให้กับโทเค็นในการแลกเปลี่ยนแบบกระจายศูนย์ เช่น Uniswap และ Pancakeswap
ในหมู่พวกเขา ใน Uniswap มีฟังก์ชัน skim ซึ่งจะโอนส่วนต่างระหว่างยอดคงเหลือและสำรองของโทเค็นทั้งสองในสระสภาพคล่องไปยังผู้เรียกเพื่อปรับสมดุลและสำรอง:
ขณะนี้ผู้ส่งกลายเป็นกลุ่มสภาพคล่อง เมื่อ _transfer ถูกเรียกใช้ โทเค็นในกลุ่มสภาพคล่องจะถูกทำลายบางส่วนทำให้ราคาโทเค็นเพิ่มขึ้นบางส่วนWDOGE) :
คดีโจมตีที่แท้จริง ผู้ชนะ doge(
ในฟังก์ชัน _transfer ของสัญญา WDOGE เมื่อ block.timestamp > closedTime ให้ป้อนการวนรอบ else ในโค้ดบรรทัดที่ 21 จำนวนเงินที่โอนจะถูกหักออกจากยอดคงเหลือของผู้ส่ง และในโค้ดบรรทัดที่ 31 ผู้ส่งจะถูกเบิร์นโทเค็นจำนวน ToBurn ของโทเค็น ผู้โจมตีใช้กลไกค่าธรรมเนียมนี้เพื่อขโมยโทเค็นมูลค่าทั้งหมด (WBNB) ในกลุ่มสภาพคล่องด้วยวิธีการโจมตีที่กล่าวถึงข้างต้น
ชื่อระดับแรก
กลไกการสะท้อน
ในกลไกการสะท้อนกลับ ผู้ใช้จะเรียกเก็บค่าธรรมเนียมการจัดการสำหรับธุรกรรมแต่ละรายการ ซึ่งจะใช้เป็นรางวัลแก่ผู้ใช้ที่ถือโทเค็น แต่จะไม่กระตุ้นการโอน แต่เพียงแก้ไขค่าสัมประสิทธิ์
ในกลไกนี้ ผู้ใช้มีจำนวนโทเค็นสองประเภท ได้แก่ tAmount และ rAmount tAmount คือจำนวนจริงของโทเค็น rAmount คือจำนวนโทเค็นที่สะท้อนออกมา และอัตราส่วนคือ tTotal / rTotal การใช้งานโค้ดทั่วไปมีดังนี้:
โดยทั่วไปจะมีฟังก์ชันที่เรียกว่า ส่งมอบ ในโทเค็นของกลไกการสะท้อน ซึ่งจะทำลายโทเค็นของผู้โทรและลดค่าของ rTotal ดังนั้นอัตราส่วนจะเพิ่มขึ้น และจำนวนของโทเค็นที่สะท้อนโดยผู้ใช้รายอื่นก็จะเพิ่มขึ้นด้วย:
ผู้โจมตีสังเกตเห็นฟังก์ชันนี้และใช้เพื่อโจมตี Uniswap liquidity pool ที่เกี่ยวข้อง
แล้วเขาควรใช้มันอย่างไร? เริ่มด้วยฟังก์ชั่น skim ของ Uniswap ด้วย:
เงินสำรองใน Uniswap เป็นทุนสำรอง ซึ่งแตกต่างจาก token.balanceOf(ที่อยู่(นี้))
ผู้โจมตีเรียกฟังก์ชันการส่งมอบเป็นอันดับแรกเพื่อทำลายโทเค็นของตนเอง ซึ่งทำให้ค่าของ rTotal ลดลง และอัตราส่วนจะเพิ่มขึ้นตามลำดับ ดังนั้นค่าของโทเค็นที่สะท้อนก็จะเพิ่มขึ้นเช่นกัน และ token.balanceOf(ที่อยู่(นี้)) จะ ก็เพิ่มขึ้นตามไปด้วย มี gap กับมูลค่าทุนสำรองBEVO):
ดังนั้นผู้โจมตีสามารถทำกำไรได้โดยการเรียกใช้ฟังก์ชัน skim เพื่อโอนโทเค็นจำนวนเท่ากับส่วนต่างระหว่างสองโทเค็น
กรณีการโจมตีจริง BEVO NFT Art Token(
เมื่อมีฟังก์ชั่นการเผาไหม้ในสัญญาโทเค็น จะมีวิธีโจมตีอื่นที่คล้ายกัน:
ผู้โจมตีใช้คุณลักษณะนี้เพื่อลดค่าของ tTotal โดยเรียกฟังก์ชันเบิร์นหลายครั้ง จากนั้นเรียกฟังก์ชันซิงค์ของพูลสภาพคล่องเพื่อซิงโครไนซ์เงินสำรองและยอดคงเหลือ ในท้ายที่สุดโทเค็นในกลุ่มสภาพคล่องก็ลดลงอย่างมากและราคาก็พุ่งสูงขึ้น จากนั้นผู้โจมตีจะขายโทเค็นเพื่อทำกำไรSHEEP):
กรณีการโจมตีจริง Sheep Token(
ด้วยการตีความวิธีการโจมตีกับโทเค็นของกลไกการเผาไหม้และกลไกการสะท้อนกลับทำให้ไม่ยากที่จะพบว่าจุดหลักของการโจมตีของผู้โจมตีคือการจัดการราคาของแหล่งสภาพคล่อง ดังนั้น การเพิ่มที่อยู่ของแหล่งสภาพคล่อง การอยู่ในรายการที่อนุญาตไม่เกี่ยวข้องกับการทำลายโทเค็น และไม่สามารถหลีกเลี่ยงการโจมตีดังกล่าวได้โดยการเข้าร่วมในกลไกการสะท้อนกลับของโทเค็น
สรุป
สรุป
ชื่อระดับแรก
At Eocene Research, we provide the insights of intentions and security behind everything you know or don’t know of blockchain, and empower every individual and organization to answer complex questions we hadn’t even dreamed of back then.
