ขโมยเงิน 610 ล้านดอลลาร์สหรัฐ เหตุแฮ็กเกอร์โจมตี Poly Network และ O3 Swap
O3 โปรเจ็กต์ดารายอดนิยมก่อนหน้านี้ทุกคนต้องจดจำ แต่มันพังทลายลงเมื่อวันก่อน และพูล O3Swap ถูกขโมย เนื่องจากเงินของ O3 ถูกใส่ไว้ในโพลี โพลีจึงถูกแฮ็กและ O3 ถูกทำลาย ในตอนเย็นของเดือนสิงหาคม เมื่อวันที่ 10 ตุลาคม โปรโตคอล Poly Network ถูกโจมตี และเกือบ 600 ล้านเหรียญสหรัฐถูกขโมยไปจากเครือข่ายทั้งสามของ Ethereum, BinanceChain และ Polygon เนื่องจากแพลตฟอร์มที่ถูกโจมตีทั้งสองได้รับการสนับสนุนโดยทีมเทคนิคเดียวกันกับการรับรอง NEO สาเหตุของการโจรกรรมคือฝ่ายโครงการได้สงวนอำนาจขั้นสูงสำหรับตัวมันเองในสัญญา และแฮ็กเกอร์ใช้แบ็คดอร์ผู้มีอำนาจระดับสูงนี้เพื่อโอนเหรียญทั้งหมดใน สระว่ายน้ำเพื่อเดิน
LBank Blue Shell Academy อยู่ที่นี่เพื่อทำให้วิทยาศาสตร์เป็นที่นิยม PolyNetwork เคยถูกพิจารณาว่าเป็นโปรโตคอลการทำงานร่วมกันข้ามสายโซ่ที่ดีที่สุดในตลาดปัจจุบัน ปัจจุบัน โปรโตคอลข้ามเชนที่แตกต่างกันที่รองรับ ได้แก่: Bitcoin, Ethereum, NEO, Ontology, Elornd, Ziliqa, Binance Smart Chain, Switcheo, Huobi Ecological Chain เป็นต้น
ตรวจสอบเหตุการณ์:
การโจมตีครั้งแรกเกิดขึ้นเมื่อเวลา 17:55 น. ของวันที่ 10 สิงหาคม แฮ็กเกอร์ได้โอน 96.38 ล้าน USDC, 1,032 WBTC และทรัพย์สินอื่น ๆ อย่างต่อเนื่องจากสัญญาอัจฉริยะ Poly Network ใน Ethereum โดยมีมูลค่ารวมมากกว่า 260 ล้านดอลลาร์สหรัฐ โดย 85.08 ล้าน USDC เป็น ถ่ายโอนจากสัญญาอัจฉริยะของโครงการ ตั้งแต่เวลา 18:08 น. แฮ็กเกอร์ได้โอน 87.6 ล้าน USDC, 26629 ETH และทรัพย์สินอื่น ๆ จากสัญญาอัจฉริยะของโครงการใน BSC

นี่เป็นเหตุการณ์การแฮ็กครั้งใหญ่ที่สุดในประวัติศาสตร์ของการเข้ารหัส ซึ่งแซงหน้าเหตุการณ์ Mt.Gox ที่มีชื่อเสียง (744,408 BTC ซึ่งมีมูลค่ารวมประมาณ 400 ล้านดอลลาร์สหรัฐในขณะนั้น) และคดี Coincheck ในปี 2018 (523 ล้าน XEM ที่ รวมมูลค่าประมาณ 534 ล้านเหรียญสหรัฐ) สำหรับสาเหตุเฉพาะของเหตุการณ์นี้ ทีมเทคนิคขององค์กรด้านความปลอดภัยในอุตสาหกรรมได้ทำการตรวจสอบตามเวลาจริงเพื่อติดตามหลักการและรายละเอียดทางเทคนิคของช่องโหว่
หลังจากการวิเคราะห์ ผู้โจมตีใช้ประโยชน์จากข้อบกพร่องทางลอจิกในสัญญา EthCrossChainManager ที่เรียกว่าฟังก์ชัน putCurEpochConPubKeyBytes ในสัญญา EthCrossChainData ผ่านสัญญาเพื่อเปลี่ยน Keeper เป็นที่อยู่ของตนเอง จากนั้นจึงใช้ที่อยู่เพื่อลงนามในธุรกรรมสำหรับการถอนโทเค็น ด้วยเหตุนี้ การโอนชุดโทเค็นจำนวนมากจะถูกถอนออก
แฮกเกอร์ทำสำเร็จได้อย่างไร?
ที่อยู่ผู้โจมตี:
BSC:
0x0D6e286A7cfD25E0c01fEe9756765D8033B32C71
ETH:
0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963
Polygon:
สัญญาที่ถูกโจมตี:
BSC:
A:
0x7ceA671DABFBa880aF6723bDdd6B9f4caA15C87B(EthCrossChainManager)
B:
0x2f7ac9436ba4B548f9582af91CA1Ef02cd2F1f03(LockProxy)
ETH:
C:
0x838bf9E95CB12Dd76a54C9f9D2E3082EAF928270(EthCrossChainManager)
D:
0x250e76987d838a75310c34bf422ea9f1AC4Cc906(LockProxy)
Polygon:
E:
0xABD7f7B89c5fD5D0AEf06165f8173b1b83d7D5c9(EthCrossChainManager)
F:
ธุรกรรมการโจมตี:
BSC:
0x3eba3f1fb50c4cbe76e7cc4dcc14ac7544762a0e785cf22034f175f67c8d3be9
0x50105b6d07b4d738cd11b4b8ae16943bed09c7ce724dc8b171c74155dd496c25
0xd65025a2dd953f529815bd3c669ada635c6001b3cc50e042f9477c7db077b4c9
0xea37b320843f75a8a849fdf13cd357cb64761a848d48a516c3cac5bbd6caaad5
ETH:
0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581
Polygon:
0x1d260d040f67eb2f3e474418bf85cc50b70101ca2473109fa1bf1e54525a3e01
0xfbe66beaadf82cc51a8739f387415da1f638d0654a28a1532c6333feb2857790
บน BSC ผู้โจมตีจะเรียกใช้ฟังก์ชัน VerifyHeaderAndExecuteTx (0xd450e04c) ในสัญญา EthCrossChainManager ก่อน โดยส่งข้อมูลที่สร้างขึ้นอย่างระมัดระวัง เนื่องจากฟังก์ชัน VerifyHeaderAndExecuteTx เรียกใช้ฟังก์ชันภายใน _executeCrossChainTx และเรียกใช้ในฟังก์ชันภายใน ผู้โจมตีจึงควบคุมพารามิเตอร์ _method ของการเรียกผ่านข้อมูลที่สร้างขึ้นอย่างรอบคอบ (ได้รับข้อมูลที่ลงนามโดย Keeper ดั้งเดิมผ่านช่องโหว่อื่นๆ) เรียกได้สำเร็จ ฟังก์ชัน putCurEpochConPubKeyBytes ในสัญญา EthCrossChainData เป็นสัญญา EthCrossChainManager เพื่อเปลี่ยน Keeper เป็นที่อยู่ของตัวเอง (0xa87fb85a93ca072cd4e5f0d4f178bc831df8a00b) ขั้นตอนนี้คือการขอรับธุรกรรมที่ลงนามโดย Keeper ที่ถูกต้องในอนาคต จากนั้นถอนโทเค็นในสัญญา


_method ที่สร้างขึ้นโดยผู้โจมตีการโทรข้างต้นไม่ใช่ putCurEpochConPubKeyBytes เนื่องจากมีเพียงชื่อฟังก์ชันในการเรียกเท่านั้นที่ผู้ใช้สามารถควบคุมได้ และพารามิเตอร์ถูกกำหนดเป็นตัวเลขและประเภท ผู้โจมตีตระหนักถึงการเรียกไปยังฟังก์ชัน putCurEpochConPubKeyBytes ในสัญญา EthCrossChainData โดยสร้างฟังก์ชัน f1121318093 ด้วยลายเซ็นของฟังก์ชันเดียวกันกับ putCurEpochConPubKeyBytes
หลังจากแก้ไข Keeper แล้ว ผู้โจมตีสามารถลงนามธุรกรรมโดยพลการ ผู้โจมตีถอนโทเค็น ETH, BTCB, BUSD และ USDC ทั้งหมดในสัญญา B ผ่านธุรกรรมหลายรายการที่ลงนามโดย Keeper ที่ถูกต้อง (ผู้โจมตีแก้ไขลายเซ็นไปยังที่อยู่ของเขาเอง)
เนื่องจาก ETH และ Polygon มีรหัสเดียวกันและ Keeper เป็น BSC หลังจากเสร็จสิ้นการโจมตี BSC ผู้โจมตีจะเล่นซ้ำข้อมูลที่สร้างขึ้นก่อนหน้านี้บน ETH และ Polygon และแก้ไข Keeper บน ETH และ Polygon เป็นที่อยู่ของตัวเอง


จากนั้นใช้วิธีการโจมตีแบบเดียวกัน ETH, USDC, WBTC, UNI, DAI, SHIB, WETH, FEI, USDT และ renBTC ในสัญญา D และ USDC ทั้งหมดในสัญญา F ถูกนำออกไป

ผู้โจมตีคืนเงิน 1.01 ล้าน USDC ให้กับ Polygon Ps: ตอนนี้ผู้คนจำนวนมากกำลังส่งเหรียญไปยังที่อยู่ของแฮ็กเกอร์เพื่อฝากข้อความเพื่อขอเหรียญ เพราะฉันได้ยินมาว่ามีคนจะได้รับ 13.5 eth หลังจากขอมัน
เราต้องใส่ใจในเรื่องใดบ้าง?
สาเหตุหลักของการโจมตีนี้คือมีปัญหากับตรรกะของการจัดการสิทธิ์ในสัญญา ผู้ใช้ใดๆ สามารถเรียกใช้ฟังก์ชัน VerifyHeaderAndExecuteTx ผู้ใช้ ผู้ใช้ที่เป็นอันตรายสามารถโทรโดยสร้างฟังก์ชันบางส่วนของข้อยกเว้นข้อมูลอย่างระมัดระวัง ในเวลาเดียวกัน สัญญา EthCrossChainManager มีอำนาจในการแก้ไข Keeper โดยปกติจะถูกแก้ไขผ่านฟังก์ชัน changeBookKeeper อย่างไรก็ตาม ในการโจมตีนี้ ผู้โจมตีแก้ไขที่อยู่ Keeper สำเร็จผ่านการเรียกในฟังก์ชัน และที่อยู่ Keeper สามารถลงนามในการทำธุรกรรมได้ และเหตุการณ์การโจมตีที่มีการสูญเสียมากที่สุดนับตั้งแต่กำเนิดของ Defi จึงถูกสร้างขึ้น
LBank Blue Shell Academy ขอเตือนทุกคนว่าเมื่อใช้การโทร นักพัฒนาจำเป็นต้องให้ความสนใจเป็นพิเศษกับความจริงที่ว่าผู้ใช้สามารถควบคุมพารามิเตอร์ได้ สัญญาและฟังก์ชันพิเศษบางอย่างจำเป็นต้องควบคุมการอนุญาตอย่างเข้มงวดเพื่อหลีกเลี่ยงการสูญเสียที่แก้ไขไม่ได้ที่เกิดจากการโทรที่ผิดปกติ

