Forward the Original Title’技术详解 | การทบทวนเทคนิคของ 'การถอดดวงในห้างร้านอัดลม ในการสร้างเกมบนโซเชียลมีเดียใหญ่'
เมื่อเร็ว ๆ นี้ผู้เชี่ยวชาญด้านความปลอดภัยของ CertiK ได้ตรวจพบหลายกรณีของวิธีการหลอกลวงทางออกเดียวกันซึ่งเรียกกันทั่วไปว่า Rug Pull เมื่อตรวจสอบเพิ่มเติมเราพบว่าหลายกรณีของวิธีการเดียวกันชี้ไปที่กลุ่มเดียวกันซึ่งในที่สุดก็เชื่อมโยงกับการหลอกลวงการออกจากโทเค็นมากกว่า 200 รายการ สิ่งนี้ชี้ให้เห็นว่าเราอาจค้นพบกลุ่มแฮ็กเกอร์อัตโนมัติขนาดใหญ่ที่เก็บเกี่ยวทรัพย์สินผ่านการหลอกลวงทางออก ในการหลอกลวงทางออกเหล่านี้ผู้โจมตีจะสร้างโทเค็น ERC20 ใหม่และใช้โทเค็นที่ขุดไว้ล่วงหน้าพร้อมกับ WETH จํานวนหนึ่งเพื่อสร้างกลุ่มสภาพคล่อง Uniswap V2 หลังจากบอทหรือผู้ใช้ในห่วงโซ่ทําการซื้อโทเค็นใหม่จํานวนหนึ่งจากกลุ่มสภาพคล่องผู้โจมตีจะหมด WETH ทั้งหมดในพูลด้วยโทเค็นที่สร้างขึ้นจากอากาศบาง ๆ เนื่องจากโทเค็นที่ได้รับจากผู้โจมตีจากอากาศบาง ๆ จะไม่สะท้อนให้เห็นในอุปทานทั้งหมดและไม่ทริกเกอร์เหตุการณ์การถ่ายโอนจึงไม่สามารถมองเห็นได้บน etherscan ทําให้บุคคลภายนอกตรวจจับได้ยาก ผู้โจมตีไม่เพียง แต่พิจารณาการปกปิด แต่ยังออกแบบ subterfuge เพื่อหลอกลวงผู้ใช้ที่มีทักษะทางเทคนิคขั้นพื้นฐานที่ตรวจสอบ etherscan โดยใช้ปัญหาเล็กน้อยเพื่อปกปิดเจตนาที่แท้จริงของพวกเขา
การหลอกลวงเชิงลึก
ใช้กรณีใดกรณีหนึ่งเป็นตัวอย่างมาเจาะลึกรายละเอียดของการหลอกลวงทางออกนี้ สิ่งที่เราตรวจพบคือธุรกรรมที่ผู้โจมตีใช้โทเค็นจํานวนมาก (สร้างอย่างเงียบ ๆ ) เพื่อลดกลุ่มสภาพคล่องและผลกําไร ในการทําธุรกรรมนี้ทีมโครงการได้แลกเปลี่ยนโทเค็น MUMI ประมาณ 416,483,104,164,831 (ประมาณ 416 ล้านล้านล้าน) เป็นเวลาประมาณ 9.736 WETH ทําให้สภาพคล่องของพูลลดลง อย่างไรก็ตามธุรกรรมนี้เป็นเพียงส่วนสุดท้ายของการหลอกลวงทั้งหมด เพื่อให้เข้าใจถึงการหลอกลวงทั้งหมดเราจําเป็นต้องติดตามย้อนกลับต่อไป
ในวันที่ 6 มีนาคม เวลา 7:52 น. (เวลา UTC เดียวกับต่อไป), ที่อยู่ผู้โจมตี (0x8AF8) ได้นำเสนอเหรียญ ERC20 ชื่อ MUMI (ชื่อเต็ม MultiMixer AI) ที่ที่อยู่ 0x4894 และทำการขุดเหรียญล่วงหน้าจำนวน 420,690,000 (ประมาณ 420 ล้าน) เหรียญทั้งหมดไปยังผู้ใช้สัญญา
จำนวนโทเค็นที่ขุดไว้ล่วงหน้าสอดคล้องกับโค้ดของสัญญา
เมื่อ 8 โมงแล้ว (8 นาทีหลังจากที่โทเค็นถูกสร้าง), ที่อยู่ของผู้โจมตี (0x8AF8) เริ่มเพิ่ม Likuidity แล้ว ที่อยู่ของผู้โจมตี (0x8AF8) เรียกใช้ฟังก์ชัน openTrading ในสัญญาโทเค็น สร้างพูล Likuidity MUMI-WETH ผ่านโรงงาน uniswap v2 เพิ่มโทเค็นที่ถูกขุดไว้ทั้งหมดและ 3 ETH เข้าสู่พูล Likuidity และสุดท้ายได้รับ LP token ประมาณ 1.036 โทเคน
สามารถเห็นได้จากรายละเอียดการทําธุรกรรมว่าโทเค็น 420,690,000 (ประมาณ 420 ล้าน) เดิมใช้เพื่อเพิ่มสภาพคล่องประมาณ 63,103,500 (ประมาณ 63 ล้าน) โทเค็นถูกส่งกลับไปยังสัญญาโทเค็น (ที่อยู่ 0x4894) เมื่อดูซอร์สโค้ดของสัญญาพบว่าสัญญาโทเค็นจะเรียกเก็บค่าธรรมเนียมการจัดการบางอย่างสําหรับการโอนแต่ละครั้ง และที่อยู่สําหรับเก็บค่าธรรมเนียมการจัดการคือสัญญาโทเค็นเอง (ดําเนินการเฉพาะใน "ฟังก์ชัน _transfer")
สิ่งที่แปลกคือที่อยู่ภาษี 0x7ffb (ที่อยู่สำหรับการเก็บค่าธรรมเนียมการโอน) ถูกตั้งไว้ในสัญญา แต่ค่าธรรมเนียมสุดท้ายถูกส่งไปยังสัญญาโทเค็นเอง
ดังนั้น จำนวน MUMI ทั้งหมดที่เพิ่มเข้าสู่สระเหรียญ คือ 357,586,500 (ประมาณ 350 ล้าน) หลังหักภาษี ไม่ใช่ 420,690,000 (ประมาณ 430 ล้าน)
เมื่อ 8:01 (1 นาทีหลังจากที่พูล Likwid ถูกสร้าง), ที่อยู่ของผู้โจมตี (0x8AF8) ล็อคทุกอย่าง 1.036 โทเค็น LP ที่ได้รับจากการเพิ่ม Likwid
หลังจาก LP ถูกล็อค ในทางทฤษฎีโทเค็น MUMI ทั้งหมดที่เป็นเจ้าของโดยที่อยู่ของผู้โจมตี (0x8AF8) จะถูกล็อคในกลุ่มสภาพคล่อง (ยกเว้นส่วนที่ใช้เป็นค่าธรรมเนียมการจัดการ) ดังนั้นที่อยู่ของผู้โจมตี (0x8AF8) จึงไม่สามารถลบออกได้ผ่านความสามารถด้านสภาพคล่องในการดําเนินการ Rug Pull เพื่อให้ผู้ใช้สามารถซื้อโทเค็นที่เพิ่งเปิดตัวใหม่ได้อย่างมั่นใจหลายฝ่ายในโครงการล็อค LP ซึ่งหมายความว่าฝ่ายโครงการกําลังพูดว่า: "ฉันจะไม่หนีไปทุกคนสามารถซื้อได้อย่างมั่นใจ!" แต่นี่เป็นกรณีจริงหรือ? ? เห็นได้ชัดว่าไม่เป็นกรณีนี้ให้เราดําเนินการวิเคราะห์ต่อไป
เมื่อ 8:10 นาฬิกา ที่อยู่ของผู้โจมตีใหม่ ② (0x9DF4) ปรากฏขึ้น และเขาได้ติดตั้งที่อยู่ภาษี 0x7ffb ที่ได้ประกาศไว้ในสัญญาของโทเค็น
มีสามประเด็นที่ควรค่าแก่การกล่าวถึงที่นี่: 1. ที่อยู่ที่มีการปรับใช้ที่อยู่ภาษีและที่อยู่ที่มีการปรับใช้โทเค็นไม่เหมือนกัน สิ่งนี้อาจบ่งชี้ว่าฝ่ายโครงการตั้งใจลดความสัมพันธ์ระหว่างการดําเนินการแต่ละครั้งและที่อยู่ทําให้ยากต่อการติดตามพฤติกรรม 2. สัญญาของที่อยู่ภาษีไม่ใช่โอเพ่นซอร์สซึ่งหมายความว่าอาจมีการดําเนินการที่ซ่อนอยู่ในที่อยู่ภาษีที่ไม่ต้องการเปิดเผย 3. สัญญาภาษีถูกนําไปใช้ช้ากว่าสัญญาโทเค็นและที่อยู่ภาษีในสัญญาโทเค็นได้รับการเข้ารหัสแบบยากซึ่งหมายความว่าที่อยู่ของสัญญาภาษีสามารถคาดการณ์ได้โดยทีมงานโครงการล่วงหน้า เนื่องจากคําสั่ง CREATE กําหนดที่อยู่ผู้สร้างและ nonce ที่อยู่สัญญาการปรับใช้จะถูกกําหนด ดังนั้นทีมงานโครงการจึงใช้ที่อยู่ผู้สร้างเพื่อจําลองและคํานวณที่อยู่สัญญาล่วงหน้า ในความเป็นจริงการหลอกลวงทางออกจํานวนมากดําเนินการผ่านที่อยู่ภาษีและลักษณะโหมดการปรับใช้ของที่อยู่ภาษีสอดคล้องกับประเด็นที่ 1 และ 2 ข้างต้น เวลา 11.00 น. (3 ชั่วโมงหลังจากสร้างโทเค็น) ที่อยู่ของผู้โจมตี (2) (0x9DF4) ดําเนินการดึงพรม โดยเรียกวิธีการ "swapExactETHForTokens" ของสัญญาภาษี (0x77fb) เขาแลกเปลี่ยนโทเค็น MUMI 416,483,104,164,831 (ประมาณ 416 ล้านล้าน) ในที่อยู่ภาษีประมาณ 9.736 ETH และทําให้สภาพคล่องในพูลหมดลง
เนื่องจากสัญญาภาษี (0x77fb) ไม่ได้เปิดเผยต้นฉบับโค้ดที่เขียนขึ้น เราได้ถอดรหัสไบต์โค้ดของมันและผลลัพธ์ของการถอดรหัสคือดังนี้:
https://app.dedaub.com/decompile?md5=01e2888c7691219bb7ea8c6b6befe11c
หลังจากที่ทำการถอดรหัสวิธีการ “swapExactETHForTokens” ของสัญญาการเรียกระดมภาษี (0x77fb) เราได้ค้นพบว่าฟังก์ชันหลักที่นำมาใช้โดยฟังก์ชันนี้คือการแลกเปลี่ยนจำนวนที่ระบุ “xt” (ที่ระบุโดยผู้เรียก) ของ MUMI tokens ที่เป็นเจ้าของโดยสัญญาการเรียกระดมภาษี (0x77fb) เป็น ETH โดยใช้ UniswapV2 router แล้วส่งไปยังที่อยู่ที่ระบุเป็น “_manualSwap” ในที่อยู่ภาษี
ที่อยู่เก็บของที่อยู่ _manualSwap คือ 0x0 หลังจากการค้นหาด้วยคำสั่ง getStorageAt ของ json-rpc เราพบว่าที่อยู่ที่สอดคล้องกับ _manualSwap คือเจ้าของที่ติดตั้งสัญญาภาษี (0x77fb) : ผู้โจมตี ② (0x9DF4)
พารามิเตอร์นำเข้า xt ของธุรกรรม Rug Pull นี้คือ 420,690,000,000,000,000,000,000 ที่เกี่ยวข้องกับ 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) โทเคน MUMI (ทศนิยมของโทเคน MUMI คือ 9)
กล่าวอีกนัยหนึ่งในท้ายที่สุดโครงการใช้ MUMI 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) เพื่อระบาย WETH ในกลุ่มสภาพคล่องและดําเนินการหลอกลวงทางออกทั้งหมด อย่างไรก็ตามมีคําถามสําคัญที่นี่: สัญญาการจัดเก็บภาษี (0x77fb) ได้รับโทเค็น MUMI จํานวนมากที่ไหน? จากเนื้อหาก่อนหน้านี้เราได้เรียนรู้ว่าอุปทานโทเค็นทั้งหมดของโทเค็น MUMI ณ เวลาที่ปรับใช้คือ 420,690,000 (ประมาณ 420 ล้าน) อย่างไรก็ตามหลังจากสิ้นสุดโครงการดึงพรมเมื่อเราสอบถามอุปทานโทเค็นทั้งหมดในสัญญาโทเค็น MUMI มันยังคงอยู่ที่ 420,690,000 (ดังแสดงในรูปด้านล่างแสดงเป็น 420,690,000,000,000,000,000 ซึ่งจําเป็นต้องลบศูนย์ต่อท้ายที่สอดคล้องกับทศนิยมโดยที่ทศนิยมคือ 9) โทเค็นในสัญญาการจัดเก็บภาษี (0x77fb) ซึ่งเกินอุปทานทั้งหมด (420,690,000,000,000 ประมาณ 420 ล้านล้าน) ดูเหมือนจะปรากฏขึ้นจากอากาศบาง ๆ เป็นที่น่าสังเกตว่าดังที่ได้กล่าวไว้ก่อนหน้านี้ 0x77fb ที่อยู่ซึ่งทําหน้าที่เป็นที่อยู่ภาษีไม่ได้ใช้เพื่อรับค่าธรรมเนียมการทําธุรกรรมที่สร้างขึ้นในระหว่างกระบวนการถ่ายโอนโทเค็น MUMI ภาษีได้รับจากสัญญาโทเค็นเอง
เพื่อสำรวจแหล่งกำเนิดโทเค็นของสัญญาภาษี (0x7ffb) เราได้สำรวจประวัติเหตุการณ์การโอน ERC20 ของมัน
ผลการวิจัยพบว่าจากเหตุการณ์การโอนทั้งหมด 6 เหตุการณ์ที่เกี่ยวข้องกับ 0x77fb เหตุการณ์เท่านั้นที่พบว่ามีการโอนโทเค็นออกจากสัญญาการจัดเก็บภาษี (0x7ffb) โดยไม่มีเหตุการณ์ของโทเค็น MUMI ถูกโอนเข้ามา เมื่อมองแวบแรกปรากฏว่าโทเค็นในสัญญาการจัดเก็บภาษี (0x7ffb) ปรากฏขึ้นจากอากาศบาง ๆ ดังนั้นโทเค็น MUMI จํานวนมากที่ดูเหมือนจะปรากฏขึ้นจากอากาศบาง ๆ ในสัญญาการจัดเก็บภาษี (0x7ffb) จึงมีลักษณะสองประการ: 1. 2. การเพิ่มขึ้นของโทเค็นไม่ได้ทําให้เกิดเหตุการณ์การโอน เมื่อคํานึงถึงสิ่งนี้ จึงเห็นได้ชัดว่าต้องมีประตูหลังในสัญญาโทเค็น MUMI โดยแก้ไขตัวแปรยอดคงเหลือโดยตรงโดยไม่มีการเปลี่ยนแปลงที่สอดคล้องกับ totalSupply หรือทริกเกอร์เหตุการณ์การถ่ายโอน กล่าวอีกนัยหนึ่งนี่คือการใช้งานโทเค็น ERC20 ที่ไม่ได้มาตรฐานหรือเป็นอันตรายซึ่งผู้ใช้ไม่สามารถรับรู้การสร้างโทเค็นที่ซ่อนเร้นของทีมโครงการจากการเปลี่ยนแปลงในอุปทานหรือเหตุการณ์ทั้งหมด ขั้นตอนต่อไปคือการตรวจสอบแนวคิดนี้โดยค้นหาคําหลัก "ยอดคงเหลือ" โดยตรงในซอร์สโค้ดของสัญญาโทเค็น MUMI
เราพบว่ามีฟังก์ชันประเภทเอกชน 'swapTokensForEth' ในสัญญา และพารามิเตอร์ของอินพุตคือ tokenAmount ประเภท uint256 ในบรรทัดที่ 5 ของฟังก์ชัน ฝ่ายโครงการแก้ไข _taxWallet โดยตรง ซึ่งเป็นมูลค่า MUMI ของสัญญาภาษี (0x7ffb) สำหรับ tokenAmount10*_ตำแหน่งทศนิยม, ซึ่งเท่ากับ 1,000,000,000 (ประมาณ 1 พันล้าน) เท่าของจำนวนโทเค็นและจากนั้นแปลงจำนวนเงิน MUMI เป็น ETH จากกองสุราและเก็บไว้ในสัญญาโทเค็น (0x4894) จากนั้นค้นหาคำสำคัญ "swapTokenForEth"
ฟังก์ชัน "swapTokenForEth" ถูกเรียกภายในฟังก์ชัน "_transfer" โดยในการตรวจสอบเงื่อนไขการเรียกใช้พบว่า: 1. เมื่อที่อยู่ผู้รับ (ที่อยู่ปลายทาง) ของการโอนเป็นพูล Likuiditas MUMI-WETH 2. ฟังก์ชัน "swapTokenForEth" ถูกเรียกเมื่อปริมาณ MUMI ที่ถูกซื้อโดยที่อยู่อื่นในพูล Likuiditas เกิน "_preventSwapBefore" (5 ครั้ง) 3. พารามิเตอร์ "tokenAmount" ที่ถูกส่งผ่านไปยังฟังก์ชันคือค่าขั้นต่ำระหว่างยอดคงเหลือ MUMI ที่เป็นเจ้าของโดยที่อยู่ที่อยู่โทเค็นและ "_maxTaxSwap"
กล่าวคือเมื่อสัญญาตรวจพบว่าผู้ใช้ได้แลกเปลี่ยน WETH เป็นโทเค็น MUMI ในกลุ่มมากกว่า 5 ครั้งมันจะแอบสร้างโทเค็นจํานวนมากสําหรับที่อยู่ภาษีและแปลงส่วนหนึ่งของโทเค็นเป็น ETH และเก็บไว้ในสัญญาโทเค็น ในอีกด้านหนึ่งฝ่ายโครงการจะเก็บภาษีอย่างเห็นได้ชัดและแลกเปลี่ยนโดยอัตโนมัติเป็นเวลา ETH จํานวนเล็กน้อยเป็นประจําและใส่ไว้ในสัญญาโทเค็น สิ่งนี้แสดงให้ผู้ใช้เห็นและทําให้ทุกคนคิดว่านี่เป็นแหล่งที่มาของผลกําไรของพรรคโครงการ ในทางกลับกันสิ่งที่ทีมโครงการกําลังทําอยู่คือการแก้ไขยอดคงเหลือในบัญชีโดยตรงและระบายกลุ่มสภาพคล่องทั้งหมดหลังจากจํานวนธุรกรรมของผู้ใช้ถึง 5 เท่า
หลังจากการดำเนินการฟังก์ชัน "swapTokenForEth" ฟังก์ชัน "_transfer" ยังจะดำเนินการส่งETHToFee เพื่อส่ง ETH ที่ได้จากการเก็บภาษีในที่อยู่โทเค็นไปยังสัญญาภาษี (0x77fb)
ETH ในสัญญาภาษี (0x77fb) สามารถถอดได้โดยฟังก์ชัน "ช่วยเหลือ" ที่นำเข้าในสัญญาของมัน
ตอนนี้มองกลับไปที่บันทึกการแลกคืนของธุรกรรมกำไรสุดท้ายในฉวีมหายไปทั้งหมด
มีการแลกเปลี่ยนรวม 2 ครั้งในธุรกรรมที่มีกำไร ครั้งแรกคือ 4,164,831 (ประมาณ 4.16 ล้าน) โทเค็น MUMI ในราคา 0.349 ETH และครั้งที่สองคือ 416,483,100,000,000 (ประมาณ 416 ล้านล้าน) โทเค็น MUMI ในราคา 9.368 ETH การแลกเปลี่ยนครั้งที่สองคือการแลกเปลี่ยนที่เริ่มต้นภายในฟังก์ชัน "swapExactETHForTokens" ในสัญญาภาษี (0x7ffb) เหตุผลที่จำนวนไม่ตรงกับ 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) โทเค็นที่แสดงโดยพารามิเตอร์นำเข้านั้นเป็นเพราะบางส่วนของโทเค็นถูกใช้เป็นภาษีที่ส่งให้กับสัญญาภาษี (0x4894) ดังแสดงในรูปด้านล่าง:
การแลกเปลี่ยนครั้งแรกสอดคล้องกับกระบวนการแลกเปลี่ยนครั้งที่สอง เมื่อโทเค็นถูกส่งจากสัญญาภาษี (0x7ffb) ไปยังสัญญาเราเตอร์ จะเป็นไปตามเงื่อนไขทริกเกอร์ฟังก์ชันลับๆ ในสัญญาโทเค็น ทําให้ "swapTokensForEth" ถูกทริกเกอร์ การแลกเปลี่ยนที่เริ่มต้นโดยฟังก์ชันไม่ใช่การดําเนินการที่สําคัญ
เห็นจากเนื้อหาก่อนหน้านี้ว่ารอบการทำงานของโทเค็น MUMI ทั้งหมด ตั้งแต่การใช้งานถึงการสร้างกองสรรพสินค้า และจากนั้นไปสู่ Rug Pull เพียงเพียงประมาณ 3 ชั่วโมง อย่างไรก็ตาม มันสามารถทำกำไรมากกว่า 50% ด้วยค่าใช้จ่ายน้อยกว่าประมาณ 6.5 ETH (3 ETH สำหรับการเพิ่ม Likwiditi, 3 ETH สำหรับสวพ MUMI จาก Likwiditi เป็นเบ็ด และน้อยกว่า 0.5 ETH สำหรับการใช้งานสัญญาและเริ่มการทำธุรกรรม) นำไปสู่การได้รับ 9.7 ETH ผู้โจมตีดำเนินการทำธุรกรรมห้าครั้ง การแลกเปลี่ยน ETH เป็น MUMI ซึ่งไม่ได้กล่าวถึงก่อนหน้านี้ รายละเอียดการทำธุรกรรมคือ
เมื่อวิเคราะห์ EOAs (บัญชีที่เป็นเจ้าของภายนอก) ที่ดําเนินงานภายในสภาพคล่องพบว่าส่วนสําคัญของที่อยู่เป็นของการดําเนินงาน "บอท" แบบ on-chain เมื่อพิจารณาถึงลักษณะการเข้าและออกอย่างรวดเร็วของการหลอกลวงทั้งหมดมีเหตุผลที่จะสันนิษฐานว่าเป้าหมายของการหลอกลวงนี้คือ "บอท" และสคริปต์ที่ใช้งานอยู่ต่างๆในห่วงโซ่ ดังนั้นไม่ว่าจะเป็นการออกแบบสัญญาที่ดูเหมือนไม่จําเป็น แต่ซับซ้อนการปรับใช้สัญญากระบวนการล็อคสภาพคล่องหรือพฤติกรรมที่น่าสงสัยของผู้โจมตีที่แลกเปลี่ยน ETH เป็นโทเค็น MUMI ตรงกลางก็สามารถเข้าใจได้ว่าเป็นความพยายามของผู้โจมตีในการหลอกลวงกลไกการต่อต้านการฉ้อโกงของบอทแบบออนเชนต่างๆ จากการติดตามกระแสเงินทุนพบว่าผลกําไรทั้งหมดที่ได้รับจากการโจมตีถูกส่งในที่สุดโดยที่อยู่โจมตี (2) (0x9dF4) ไปยังที่อยู่ 0xDF1a
ในความเป็นจริงทั้งแหล่งเงินทุนเริ่มต้นและปลายทางสุดท้ายของการหลอกลวงทางออกล่าสุดหลายแห่งได้ชี้ไปที่ที่อยู่นี้ ดังนั้นจึงมีการวิเคราะห์คร่าวๆและสถิติของธุรกรรมของที่อยู่นี้ พบว่าที่อยู่มีการใช้งานเมื่อประมาณ 2 เดือนที่แล้วและได้เริ่มทําธุรกรรมมากกว่า 7,000 รายการจนถึงปัจจุบันโดยมีปฏิสัมพันธ์กับโทเค็นมากกว่า 200 รายการ ในบรรดาบันทึกการทําธุรกรรมโทเค็นที่วิเคราะห์ประมาณ 40 รายการพบว่าโทเค็นเกือบทั้งหมดเมื่อดูในกลุ่มสภาพคล่องที่สอดคล้องกันจะมีธุรกรรมการแลกเปลี่ยนขนาดใหญ่เดียวที่ทําให้ ETH ทั้งหมดในกลุ่มสภาพคล่องหมดลงและวงจรการหลอกลวงทางออกทั้งหมดนั้นสั้น นี่คือธุรกรรมการปรับใช้ของโทเค็นบางอย่าง (เช่น บุหรี่จีน):
https://etherscan.io/tx/0x324d7c133f079a2318c892ee49a2bcf1cbe9b20a2f5a1f36948641a902a83e17
https://etherscan.io/tx/0x0ca861513dc68eaef3017e7118e7538d999f9b4a53e1b477f1f1ce07d982dc3f
ดังนั้น สามารถสรุปได้ว่าที่อยู่นี้ก็คือผู้เก็บเกี่ยว "exit scam" ขนาดใหญ่อัตโนมัติที่เน้นการดำเนินการโดยบอท on-chain ที่ยังคงมีกิจกรรมอยู่
โดยสรุปหากกระบวนการสร้างโทเค็นไม่สอดคล้องกับการแก้ไข totalSupply หรือทริกเกอร์เหตุการณ์ Transfer มันเป็นเรื่องยากสําหรับเราที่จะรับรู้ว่าทีมโครงการแอบสร้างโทเค็นหรือไม่ สิ่งนี้ทําให้สถานการณ์ปัจจุบันรุนแรงขึ้นซึ่งความปลอดภัยของโทเค็นขึ้นอยู่กับจิตสํานึกของทีมโครงการ ดังนั้นจึงอาจจําเป็นต้องพิจารณาปรับปรุงกลไกโทเค็นที่มีอยู่หรือแนะนํารูปแบบการตรวจสอบอุปทานรวมโทเค็นที่มีประสิทธิภาพเพื่อให้แน่ใจว่ามีความโปร่งใสในการเปลี่ยนแปลงปริมาณโทเค็น การพึ่งพาเหตุการณ์เพียงอย่างเดียวเพื่อจับภาพการเปลี่ยนแปลงสถานะโทเค็นนั้นไม่เพียงพอ ยิ่งไปกว่านั้นเราต้องตระหนักว่าแม้ว่าการรับรู้ของผู้คนเกี่ยวกับการป้องกันการฉ้อโกงจะเพิ่มขึ้น แต่วิธีการต่อต้านการฉ้อโกงของผู้โจมตีก็ก้าวหน้าเช่นกัน นี่เป็นเกมที่ไม่มีที่สิ้นสุดและเราจําเป็นต้องเรียนรู้และคิดต่อไปเพื่อป้องกันตัวเอง
ดูข้อมูลธุรกรรมพื้นฐาน: https://etherscan.io/
การถอดรหัสสัญญา: app.dedaub.com/decompilejson-rpc:https://www.quicknode.com/docs/ethereum/eth_getStorageAt
Mời người khác bỏ phiếu
Forward the Original Title’技术详解 | การทบทวนเทคนิคของ 'การถอดดวงในห้างร้านอัดลม ในการสร้างเกมบนโซเชียลมีเดียใหญ่'
เมื่อเร็ว ๆ นี้ผู้เชี่ยวชาญด้านความปลอดภัยของ CertiK ได้ตรวจพบหลายกรณีของวิธีการหลอกลวงทางออกเดียวกันซึ่งเรียกกันทั่วไปว่า Rug Pull เมื่อตรวจสอบเพิ่มเติมเราพบว่าหลายกรณีของวิธีการเดียวกันชี้ไปที่กลุ่มเดียวกันซึ่งในที่สุดก็เชื่อมโยงกับการหลอกลวงการออกจากโทเค็นมากกว่า 200 รายการ สิ่งนี้ชี้ให้เห็นว่าเราอาจค้นพบกลุ่มแฮ็กเกอร์อัตโนมัติขนาดใหญ่ที่เก็บเกี่ยวทรัพย์สินผ่านการหลอกลวงทางออก ในการหลอกลวงทางออกเหล่านี้ผู้โจมตีจะสร้างโทเค็น ERC20 ใหม่และใช้โทเค็นที่ขุดไว้ล่วงหน้าพร้อมกับ WETH จํานวนหนึ่งเพื่อสร้างกลุ่มสภาพคล่อง Uniswap V2 หลังจากบอทหรือผู้ใช้ในห่วงโซ่ทําการซื้อโทเค็นใหม่จํานวนหนึ่งจากกลุ่มสภาพคล่องผู้โจมตีจะหมด WETH ทั้งหมดในพูลด้วยโทเค็นที่สร้างขึ้นจากอากาศบาง ๆ เนื่องจากโทเค็นที่ได้รับจากผู้โจมตีจากอากาศบาง ๆ จะไม่สะท้อนให้เห็นในอุปทานทั้งหมดและไม่ทริกเกอร์เหตุการณ์การถ่ายโอนจึงไม่สามารถมองเห็นได้บน etherscan ทําให้บุคคลภายนอกตรวจจับได้ยาก ผู้โจมตีไม่เพียง แต่พิจารณาการปกปิด แต่ยังออกแบบ subterfuge เพื่อหลอกลวงผู้ใช้ที่มีทักษะทางเทคนิคขั้นพื้นฐานที่ตรวจสอบ etherscan โดยใช้ปัญหาเล็กน้อยเพื่อปกปิดเจตนาที่แท้จริงของพวกเขา
การหลอกลวงเชิงลึก
ใช้กรณีใดกรณีหนึ่งเป็นตัวอย่างมาเจาะลึกรายละเอียดของการหลอกลวงทางออกนี้ สิ่งที่เราตรวจพบคือธุรกรรมที่ผู้โจมตีใช้โทเค็นจํานวนมาก (สร้างอย่างเงียบ ๆ ) เพื่อลดกลุ่มสภาพคล่องและผลกําไร ในการทําธุรกรรมนี้ทีมโครงการได้แลกเปลี่ยนโทเค็น MUMI ประมาณ 416,483,104,164,831 (ประมาณ 416 ล้านล้านล้าน) เป็นเวลาประมาณ 9.736 WETH ทําให้สภาพคล่องของพูลลดลง อย่างไรก็ตามธุรกรรมนี้เป็นเพียงส่วนสุดท้ายของการหลอกลวงทั้งหมด เพื่อให้เข้าใจถึงการหลอกลวงทั้งหมดเราจําเป็นต้องติดตามย้อนกลับต่อไป
ในวันที่ 6 มีนาคม เวลา 7:52 น. (เวลา UTC เดียวกับต่อไป), ที่อยู่ผู้โจมตี (0x8AF8) ได้นำเสนอเหรียญ ERC20 ชื่อ MUMI (ชื่อเต็ม MultiMixer AI) ที่ที่อยู่ 0x4894 และทำการขุดเหรียญล่วงหน้าจำนวน 420,690,000 (ประมาณ 420 ล้าน) เหรียญทั้งหมดไปยังผู้ใช้สัญญา
จำนวนโทเค็นที่ขุดไว้ล่วงหน้าสอดคล้องกับโค้ดของสัญญา
เมื่อ 8 โมงแล้ว (8 นาทีหลังจากที่โทเค็นถูกสร้าง), ที่อยู่ของผู้โจมตี (0x8AF8) เริ่มเพิ่ม Likuidity แล้ว ที่อยู่ของผู้โจมตี (0x8AF8) เรียกใช้ฟังก์ชัน openTrading ในสัญญาโทเค็น สร้างพูล Likuidity MUMI-WETH ผ่านโรงงาน uniswap v2 เพิ่มโทเค็นที่ถูกขุดไว้ทั้งหมดและ 3 ETH เข้าสู่พูล Likuidity และสุดท้ายได้รับ LP token ประมาณ 1.036 โทเคน
สามารถเห็นได้จากรายละเอียดการทําธุรกรรมว่าโทเค็น 420,690,000 (ประมาณ 420 ล้าน) เดิมใช้เพื่อเพิ่มสภาพคล่องประมาณ 63,103,500 (ประมาณ 63 ล้าน) โทเค็นถูกส่งกลับไปยังสัญญาโทเค็น (ที่อยู่ 0x4894) เมื่อดูซอร์สโค้ดของสัญญาพบว่าสัญญาโทเค็นจะเรียกเก็บค่าธรรมเนียมการจัดการบางอย่างสําหรับการโอนแต่ละครั้ง และที่อยู่สําหรับเก็บค่าธรรมเนียมการจัดการคือสัญญาโทเค็นเอง (ดําเนินการเฉพาะใน "ฟังก์ชัน _transfer")
สิ่งที่แปลกคือที่อยู่ภาษี 0x7ffb (ที่อยู่สำหรับการเก็บค่าธรรมเนียมการโอน) ถูกตั้งไว้ในสัญญา แต่ค่าธรรมเนียมสุดท้ายถูกส่งไปยังสัญญาโทเค็นเอง
ดังนั้น จำนวน MUMI ทั้งหมดที่เพิ่มเข้าสู่สระเหรียญ คือ 357,586,500 (ประมาณ 350 ล้าน) หลังหักภาษี ไม่ใช่ 420,690,000 (ประมาณ 430 ล้าน)
เมื่อ 8:01 (1 นาทีหลังจากที่พูล Likwid ถูกสร้าง), ที่อยู่ของผู้โจมตี (0x8AF8) ล็อคทุกอย่าง 1.036 โทเค็น LP ที่ได้รับจากการเพิ่ม Likwid
หลังจาก LP ถูกล็อค ในทางทฤษฎีโทเค็น MUMI ทั้งหมดที่เป็นเจ้าของโดยที่อยู่ของผู้โจมตี (0x8AF8) จะถูกล็อคในกลุ่มสภาพคล่อง (ยกเว้นส่วนที่ใช้เป็นค่าธรรมเนียมการจัดการ) ดังนั้นที่อยู่ของผู้โจมตี (0x8AF8) จึงไม่สามารถลบออกได้ผ่านความสามารถด้านสภาพคล่องในการดําเนินการ Rug Pull เพื่อให้ผู้ใช้สามารถซื้อโทเค็นที่เพิ่งเปิดตัวใหม่ได้อย่างมั่นใจหลายฝ่ายในโครงการล็อค LP ซึ่งหมายความว่าฝ่ายโครงการกําลังพูดว่า: "ฉันจะไม่หนีไปทุกคนสามารถซื้อได้อย่างมั่นใจ!" แต่นี่เป็นกรณีจริงหรือ? ? เห็นได้ชัดว่าไม่เป็นกรณีนี้ให้เราดําเนินการวิเคราะห์ต่อไป
เมื่อ 8:10 นาฬิกา ที่อยู่ของผู้โจมตีใหม่ ② (0x9DF4) ปรากฏขึ้น และเขาได้ติดตั้งที่อยู่ภาษี 0x7ffb ที่ได้ประกาศไว้ในสัญญาของโทเค็น
มีสามประเด็นที่ควรค่าแก่การกล่าวถึงที่นี่: 1. ที่อยู่ที่มีการปรับใช้ที่อยู่ภาษีและที่อยู่ที่มีการปรับใช้โทเค็นไม่เหมือนกัน สิ่งนี้อาจบ่งชี้ว่าฝ่ายโครงการตั้งใจลดความสัมพันธ์ระหว่างการดําเนินการแต่ละครั้งและที่อยู่ทําให้ยากต่อการติดตามพฤติกรรม 2. สัญญาของที่อยู่ภาษีไม่ใช่โอเพ่นซอร์สซึ่งหมายความว่าอาจมีการดําเนินการที่ซ่อนอยู่ในที่อยู่ภาษีที่ไม่ต้องการเปิดเผย 3. สัญญาภาษีถูกนําไปใช้ช้ากว่าสัญญาโทเค็นและที่อยู่ภาษีในสัญญาโทเค็นได้รับการเข้ารหัสแบบยากซึ่งหมายความว่าที่อยู่ของสัญญาภาษีสามารถคาดการณ์ได้โดยทีมงานโครงการล่วงหน้า เนื่องจากคําสั่ง CREATE กําหนดที่อยู่ผู้สร้างและ nonce ที่อยู่สัญญาการปรับใช้จะถูกกําหนด ดังนั้นทีมงานโครงการจึงใช้ที่อยู่ผู้สร้างเพื่อจําลองและคํานวณที่อยู่สัญญาล่วงหน้า ในความเป็นจริงการหลอกลวงทางออกจํานวนมากดําเนินการผ่านที่อยู่ภาษีและลักษณะโหมดการปรับใช้ของที่อยู่ภาษีสอดคล้องกับประเด็นที่ 1 และ 2 ข้างต้น เวลา 11.00 น. (3 ชั่วโมงหลังจากสร้างโทเค็น) ที่อยู่ของผู้โจมตี (2) (0x9DF4) ดําเนินการดึงพรม โดยเรียกวิธีการ "swapExactETHForTokens" ของสัญญาภาษี (0x77fb) เขาแลกเปลี่ยนโทเค็น MUMI 416,483,104,164,831 (ประมาณ 416 ล้านล้าน) ในที่อยู่ภาษีประมาณ 9.736 ETH และทําให้สภาพคล่องในพูลหมดลง
เนื่องจากสัญญาภาษี (0x77fb) ไม่ได้เปิดเผยต้นฉบับโค้ดที่เขียนขึ้น เราได้ถอดรหัสไบต์โค้ดของมันและผลลัพธ์ของการถอดรหัสคือดังนี้:
https://app.dedaub.com/decompile?md5=01e2888c7691219bb7ea8c6b6befe11c
หลังจากที่ทำการถอดรหัสวิธีการ “swapExactETHForTokens” ของสัญญาการเรียกระดมภาษี (0x77fb) เราได้ค้นพบว่าฟังก์ชันหลักที่นำมาใช้โดยฟังก์ชันนี้คือการแลกเปลี่ยนจำนวนที่ระบุ “xt” (ที่ระบุโดยผู้เรียก) ของ MUMI tokens ที่เป็นเจ้าของโดยสัญญาการเรียกระดมภาษี (0x77fb) เป็น ETH โดยใช้ UniswapV2 router แล้วส่งไปยังที่อยู่ที่ระบุเป็น “_manualSwap” ในที่อยู่ภาษี
ที่อยู่เก็บของที่อยู่ _manualSwap คือ 0x0 หลังจากการค้นหาด้วยคำสั่ง getStorageAt ของ json-rpc เราพบว่าที่อยู่ที่สอดคล้องกับ _manualSwap คือเจ้าของที่ติดตั้งสัญญาภาษี (0x77fb) : ผู้โจมตี ② (0x9DF4)
พารามิเตอร์นำเข้า xt ของธุรกรรม Rug Pull นี้คือ 420,690,000,000,000,000,000,000 ที่เกี่ยวข้องกับ 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) โทเคน MUMI (ทศนิยมของโทเคน MUMI คือ 9)
กล่าวอีกนัยหนึ่งในท้ายที่สุดโครงการใช้ MUMI 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) เพื่อระบาย WETH ในกลุ่มสภาพคล่องและดําเนินการหลอกลวงทางออกทั้งหมด อย่างไรก็ตามมีคําถามสําคัญที่นี่: สัญญาการจัดเก็บภาษี (0x77fb) ได้รับโทเค็น MUMI จํานวนมากที่ไหน? จากเนื้อหาก่อนหน้านี้เราได้เรียนรู้ว่าอุปทานโทเค็นทั้งหมดของโทเค็น MUMI ณ เวลาที่ปรับใช้คือ 420,690,000 (ประมาณ 420 ล้าน) อย่างไรก็ตามหลังจากสิ้นสุดโครงการดึงพรมเมื่อเราสอบถามอุปทานโทเค็นทั้งหมดในสัญญาโทเค็น MUMI มันยังคงอยู่ที่ 420,690,000 (ดังแสดงในรูปด้านล่างแสดงเป็น 420,690,000,000,000,000,000 ซึ่งจําเป็นต้องลบศูนย์ต่อท้ายที่สอดคล้องกับทศนิยมโดยที่ทศนิยมคือ 9) โทเค็นในสัญญาการจัดเก็บภาษี (0x77fb) ซึ่งเกินอุปทานทั้งหมด (420,690,000,000,000 ประมาณ 420 ล้านล้าน) ดูเหมือนจะปรากฏขึ้นจากอากาศบาง ๆ เป็นที่น่าสังเกตว่าดังที่ได้กล่าวไว้ก่อนหน้านี้ 0x77fb ที่อยู่ซึ่งทําหน้าที่เป็นที่อยู่ภาษีไม่ได้ใช้เพื่อรับค่าธรรมเนียมการทําธุรกรรมที่สร้างขึ้นในระหว่างกระบวนการถ่ายโอนโทเค็น MUMI ภาษีได้รับจากสัญญาโทเค็นเอง
เพื่อสำรวจแหล่งกำเนิดโทเค็นของสัญญาภาษี (0x7ffb) เราได้สำรวจประวัติเหตุการณ์การโอน ERC20 ของมัน
ผลการวิจัยพบว่าจากเหตุการณ์การโอนทั้งหมด 6 เหตุการณ์ที่เกี่ยวข้องกับ 0x77fb เหตุการณ์เท่านั้นที่พบว่ามีการโอนโทเค็นออกจากสัญญาการจัดเก็บภาษี (0x7ffb) โดยไม่มีเหตุการณ์ของโทเค็น MUMI ถูกโอนเข้ามา เมื่อมองแวบแรกปรากฏว่าโทเค็นในสัญญาการจัดเก็บภาษี (0x7ffb) ปรากฏขึ้นจากอากาศบาง ๆ ดังนั้นโทเค็น MUMI จํานวนมากที่ดูเหมือนจะปรากฏขึ้นจากอากาศบาง ๆ ในสัญญาการจัดเก็บภาษี (0x7ffb) จึงมีลักษณะสองประการ: 1. 2. การเพิ่มขึ้นของโทเค็นไม่ได้ทําให้เกิดเหตุการณ์การโอน เมื่อคํานึงถึงสิ่งนี้ จึงเห็นได้ชัดว่าต้องมีประตูหลังในสัญญาโทเค็น MUMI โดยแก้ไขตัวแปรยอดคงเหลือโดยตรงโดยไม่มีการเปลี่ยนแปลงที่สอดคล้องกับ totalSupply หรือทริกเกอร์เหตุการณ์การถ่ายโอน กล่าวอีกนัยหนึ่งนี่คือการใช้งานโทเค็น ERC20 ที่ไม่ได้มาตรฐานหรือเป็นอันตรายซึ่งผู้ใช้ไม่สามารถรับรู้การสร้างโทเค็นที่ซ่อนเร้นของทีมโครงการจากการเปลี่ยนแปลงในอุปทานหรือเหตุการณ์ทั้งหมด ขั้นตอนต่อไปคือการตรวจสอบแนวคิดนี้โดยค้นหาคําหลัก "ยอดคงเหลือ" โดยตรงในซอร์สโค้ดของสัญญาโทเค็น MUMI
เราพบว่ามีฟังก์ชันประเภทเอกชน 'swapTokensForEth' ในสัญญา และพารามิเตอร์ของอินพุตคือ tokenAmount ประเภท uint256 ในบรรทัดที่ 5 ของฟังก์ชัน ฝ่ายโครงการแก้ไข _taxWallet โดยตรง ซึ่งเป็นมูลค่า MUMI ของสัญญาภาษี (0x7ffb) สำหรับ tokenAmount10*_ตำแหน่งทศนิยม, ซึ่งเท่ากับ 1,000,000,000 (ประมาณ 1 พันล้าน) เท่าของจำนวนโทเค็นและจากนั้นแปลงจำนวนเงิน MUMI เป็น ETH จากกองสุราและเก็บไว้ในสัญญาโทเค็น (0x4894) จากนั้นค้นหาคำสำคัญ "swapTokenForEth"
ฟังก์ชัน "swapTokenForEth" ถูกเรียกภายในฟังก์ชัน "_transfer" โดยในการตรวจสอบเงื่อนไขการเรียกใช้พบว่า: 1. เมื่อที่อยู่ผู้รับ (ที่อยู่ปลายทาง) ของการโอนเป็นพูล Likuiditas MUMI-WETH 2. ฟังก์ชัน "swapTokenForEth" ถูกเรียกเมื่อปริมาณ MUMI ที่ถูกซื้อโดยที่อยู่อื่นในพูล Likuiditas เกิน "_preventSwapBefore" (5 ครั้ง) 3. พารามิเตอร์ "tokenAmount" ที่ถูกส่งผ่านไปยังฟังก์ชันคือค่าขั้นต่ำระหว่างยอดคงเหลือ MUMI ที่เป็นเจ้าของโดยที่อยู่ที่อยู่โทเค็นและ "_maxTaxSwap"
กล่าวคือเมื่อสัญญาตรวจพบว่าผู้ใช้ได้แลกเปลี่ยน WETH เป็นโทเค็น MUMI ในกลุ่มมากกว่า 5 ครั้งมันจะแอบสร้างโทเค็นจํานวนมากสําหรับที่อยู่ภาษีและแปลงส่วนหนึ่งของโทเค็นเป็น ETH และเก็บไว้ในสัญญาโทเค็น ในอีกด้านหนึ่งฝ่ายโครงการจะเก็บภาษีอย่างเห็นได้ชัดและแลกเปลี่ยนโดยอัตโนมัติเป็นเวลา ETH จํานวนเล็กน้อยเป็นประจําและใส่ไว้ในสัญญาโทเค็น สิ่งนี้แสดงให้ผู้ใช้เห็นและทําให้ทุกคนคิดว่านี่เป็นแหล่งที่มาของผลกําไรของพรรคโครงการ ในทางกลับกันสิ่งที่ทีมโครงการกําลังทําอยู่คือการแก้ไขยอดคงเหลือในบัญชีโดยตรงและระบายกลุ่มสภาพคล่องทั้งหมดหลังจากจํานวนธุรกรรมของผู้ใช้ถึง 5 เท่า
หลังจากการดำเนินการฟังก์ชัน "swapTokenForEth" ฟังก์ชัน "_transfer" ยังจะดำเนินการส่งETHToFee เพื่อส่ง ETH ที่ได้จากการเก็บภาษีในที่อยู่โทเค็นไปยังสัญญาภาษี (0x77fb)
ETH ในสัญญาภาษี (0x77fb) สามารถถอดได้โดยฟังก์ชัน "ช่วยเหลือ" ที่นำเข้าในสัญญาของมัน
ตอนนี้มองกลับไปที่บันทึกการแลกคืนของธุรกรรมกำไรสุดท้ายในฉวีมหายไปทั้งหมด
มีการแลกเปลี่ยนรวม 2 ครั้งในธุรกรรมที่มีกำไร ครั้งแรกคือ 4,164,831 (ประมาณ 4.16 ล้าน) โทเค็น MUMI ในราคา 0.349 ETH และครั้งที่สองคือ 416,483,100,000,000 (ประมาณ 416 ล้านล้าน) โทเค็น MUMI ในราคา 9.368 ETH การแลกเปลี่ยนครั้งที่สองคือการแลกเปลี่ยนที่เริ่มต้นภายในฟังก์ชัน "swapExactETHForTokens" ในสัญญาภาษี (0x7ffb) เหตุผลที่จำนวนไม่ตรงกับ 420,690,000,000,000 (ประมาณ 420 ล้านล้าน) โทเค็นที่แสดงโดยพารามิเตอร์นำเข้านั้นเป็นเพราะบางส่วนของโทเค็นถูกใช้เป็นภาษีที่ส่งให้กับสัญญาภาษี (0x4894) ดังแสดงในรูปด้านล่าง:
การแลกเปลี่ยนครั้งแรกสอดคล้องกับกระบวนการแลกเปลี่ยนครั้งที่สอง เมื่อโทเค็นถูกส่งจากสัญญาภาษี (0x7ffb) ไปยังสัญญาเราเตอร์ จะเป็นไปตามเงื่อนไขทริกเกอร์ฟังก์ชันลับๆ ในสัญญาโทเค็น ทําให้ "swapTokensForEth" ถูกทริกเกอร์ การแลกเปลี่ยนที่เริ่มต้นโดยฟังก์ชันไม่ใช่การดําเนินการที่สําคัญ
เห็นจากเนื้อหาก่อนหน้านี้ว่ารอบการทำงานของโทเค็น MUMI ทั้งหมด ตั้งแต่การใช้งานถึงการสร้างกองสรรพสินค้า และจากนั้นไปสู่ Rug Pull เพียงเพียงประมาณ 3 ชั่วโมง อย่างไรก็ตาม มันสามารถทำกำไรมากกว่า 50% ด้วยค่าใช้จ่ายน้อยกว่าประมาณ 6.5 ETH (3 ETH สำหรับการเพิ่ม Likwiditi, 3 ETH สำหรับสวพ MUMI จาก Likwiditi เป็นเบ็ด และน้อยกว่า 0.5 ETH สำหรับการใช้งานสัญญาและเริ่มการทำธุรกรรม) นำไปสู่การได้รับ 9.7 ETH ผู้โจมตีดำเนินการทำธุรกรรมห้าครั้ง การแลกเปลี่ยน ETH เป็น MUMI ซึ่งไม่ได้กล่าวถึงก่อนหน้านี้ รายละเอียดการทำธุรกรรมคือ
เมื่อวิเคราะห์ EOAs (บัญชีที่เป็นเจ้าของภายนอก) ที่ดําเนินงานภายในสภาพคล่องพบว่าส่วนสําคัญของที่อยู่เป็นของการดําเนินงาน "บอท" แบบ on-chain เมื่อพิจารณาถึงลักษณะการเข้าและออกอย่างรวดเร็วของการหลอกลวงทั้งหมดมีเหตุผลที่จะสันนิษฐานว่าเป้าหมายของการหลอกลวงนี้คือ "บอท" และสคริปต์ที่ใช้งานอยู่ต่างๆในห่วงโซ่ ดังนั้นไม่ว่าจะเป็นการออกแบบสัญญาที่ดูเหมือนไม่จําเป็น แต่ซับซ้อนการปรับใช้สัญญากระบวนการล็อคสภาพคล่องหรือพฤติกรรมที่น่าสงสัยของผู้โจมตีที่แลกเปลี่ยน ETH เป็นโทเค็น MUMI ตรงกลางก็สามารถเข้าใจได้ว่าเป็นความพยายามของผู้โจมตีในการหลอกลวงกลไกการต่อต้านการฉ้อโกงของบอทแบบออนเชนต่างๆ จากการติดตามกระแสเงินทุนพบว่าผลกําไรทั้งหมดที่ได้รับจากการโจมตีถูกส่งในที่สุดโดยที่อยู่โจมตี (2) (0x9dF4) ไปยังที่อยู่ 0xDF1a
ในความเป็นจริงทั้งแหล่งเงินทุนเริ่มต้นและปลายทางสุดท้ายของการหลอกลวงทางออกล่าสุดหลายแห่งได้ชี้ไปที่ที่อยู่นี้ ดังนั้นจึงมีการวิเคราะห์คร่าวๆและสถิติของธุรกรรมของที่อยู่นี้ พบว่าที่อยู่มีการใช้งานเมื่อประมาณ 2 เดือนที่แล้วและได้เริ่มทําธุรกรรมมากกว่า 7,000 รายการจนถึงปัจจุบันโดยมีปฏิสัมพันธ์กับโทเค็นมากกว่า 200 รายการ ในบรรดาบันทึกการทําธุรกรรมโทเค็นที่วิเคราะห์ประมาณ 40 รายการพบว่าโทเค็นเกือบทั้งหมดเมื่อดูในกลุ่มสภาพคล่องที่สอดคล้องกันจะมีธุรกรรมการแลกเปลี่ยนขนาดใหญ่เดียวที่ทําให้ ETH ทั้งหมดในกลุ่มสภาพคล่องหมดลงและวงจรการหลอกลวงทางออกทั้งหมดนั้นสั้น นี่คือธุรกรรมการปรับใช้ของโทเค็นบางอย่าง (เช่น บุหรี่จีน):
https://etherscan.io/tx/0x324d7c133f079a2318c892ee49a2bcf1cbe9b20a2f5a1f36948641a902a83e17
https://etherscan.io/tx/0x0ca861513dc68eaef3017e7118e7538d999f9b4a53e1b477f1f1ce07d982dc3f
ดังนั้น สามารถสรุปได้ว่าที่อยู่นี้ก็คือผู้เก็บเกี่ยว "exit scam" ขนาดใหญ่อัตโนมัติที่เน้นการดำเนินการโดยบอท on-chain ที่ยังคงมีกิจกรรมอยู่
โดยสรุปหากกระบวนการสร้างโทเค็นไม่สอดคล้องกับการแก้ไข totalSupply หรือทริกเกอร์เหตุการณ์ Transfer มันเป็นเรื่องยากสําหรับเราที่จะรับรู้ว่าทีมโครงการแอบสร้างโทเค็นหรือไม่ สิ่งนี้ทําให้สถานการณ์ปัจจุบันรุนแรงขึ้นซึ่งความปลอดภัยของโทเค็นขึ้นอยู่กับจิตสํานึกของทีมโครงการ ดังนั้นจึงอาจจําเป็นต้องพิจารณาปรับปรุงกลไกโทเค็นที่มีอยู่หรือแนะนํารูปแบบการตรวจสอบอุปทานรวมโทเค็นที่มีประสิทธิภาพเพื่อให้แน่ใจว่ามีความโปร่งใสในการเปลี่ยนแปลงปริมาณโทเค็น การพึ่งพาเหตุการณ์เพียงอย่างเดียวเพื่อจับภาพการเปลี่ยนแปลงสถานะโทเค็นนั้นไม่เพียงพอ ยิ่งไปกว่านั้นเราต้องตระหนักว่าแม้ว่าการรับรู้ของผู้คนเกี่ยวกับการป้องกันการฉ้อโกงจะเพิ่มขึ้น แต่วิธีการต่อต้านการฉ้อโกงของผู้โจมตีก็ก้าวหน้าเช่นกัน นี่เป็นเกมที่ไม่มีที่สิ้นสุดและเราจําเป็นต้องเรียนรู้และคิดต่อไปเพื่อป้องกันตัวเอง
ดูข้อมูลธุรกรรมพื้นฐาน: https://etherscan.io/
การถอดรหัสสัญญา: app.dedaub.com/decompilejson-rpc:https://www.quicknode.com/docs/ethereum/eth_getStorageAt