Guo Yu ผู้ก่อตั้ง Ambi Labs: ความรุนแรงของการรักษาความปลอดภัยสัญญาอัจฉริยะนั้นไกลเกินจินตนาการของ

เมื่อวันที่ 5 กันยายน การประชุม POD ซึ่งจัดโดย Odaily และจัดร่วมกันอย่างมีกลยุทธ์โดย 36Kr Group จัดขึ้นที่กรุงปักกิ่ง ที่ฟอรัมความปลอดภัยของการประชุม Guo Yu ผู้ก่อตั้ง SECBIT Lab ได้หารือเกี่ยวกับปัญหาความปลอดภัยของ blockchain กับแขก Guo Yu เปิดตัวรายงานเกี่ยวกับประเด็นร้อนด้านความปลอดภัยล่าสุด Last winner โดยอธิบายเรื่องราวภายในโดยละเอียด
เมื่อพูดถึงผู้ชนะคนสุดท้ายที่โจมตีสัญญาหลักและเหตุใดจึงจำเป็นต้องส่งที่อยู่ของสัญญาผู้ชนะคนสุดท้าย Guo Yu กล่าวว่าผู้ชนะคนสุดท้ายที่โจมตีสัญญาหลักนั้นเป็นอาวุธทั่วไปที่สามารถโจมตีเกม Fomo3D ได้หลายประเภท . สัญญานี้ถูกสร้างขึ้นอย่างชาญฉลาดมาก
ชื่อเรื่องรอง
ต่อไปนี้คือสำเนาสุนทรพจน์ของ Guo Yu ผู้ก่อตั้ง SECBIT Lab:
ฉันชื่อ Guo Yu จาก Amby Lab และวันนี้ฉันอยากจะแบ่งปันสิ่งที่น่าสนใจ

เมื่อวันที่ 10 สิงหาคม จู่ๆ พาร์ทเนอร์คนหนึ่งบอกฉันว่าดูเหมือนจะมีสิ่งแปลกๆ ใน Ethereum และถามเราว่าสามารถวิเคราะห์ได้หรือไม่ หลังจากที่เรารับไปเราก็รู้สึกว่ามีอะไรแปลกๆ มีการทำธุรกรรมที่ล้มเหลวติดต่อกันจำนวนมากและจุดสีแดงทั้งหมดคือ 0.1 ETH สิ่งเหล่านี้ซ้ำ ๆ ดูเหมือนจะโจมตีบางสิ่ง และธุรกรรมทั้งหมดนี้มาจากสัญญาอัจฉริยะแปลกๆ ที่มีตัวอักษรสี่ตัวแรกคือ 0x5483 ปริมาณการทำธุรกรรมของสัญญาอัจฉริยะนี้ยังคงมีขนาดใหญ่มาก มีธุรกรรมหลายสิบรายการต่อนาที ซึ่งอาจทำให้เกิดความแออัดอย่างมากใน Ethereum ซึ่งเป็นคุณสมบัติเบื้องต้นที่เราพบ ก็รู้สึกแปลกๆ ระแวง เราก็สงสัยเหมือนกันว่ามันไปทำอะไรมา

ภายหลังเราพบว่านอกจากธุรกรรมที่ล้มเหลวจำนวนมากแล้ว ยังมีธุรกรรมที่สำเร็จจำนวนมากขึ้นอีกด้วย ไม่มีลักษณะสำคัญของการทำธุรกรรมที่ประสบความสำเร็จ แปลกมากที่มี 0.1 ในนั้นลงทุนและ 0.19 ในนั้นออกมา ในเวลาเดียวกัน คุณสมบัติพิเศษของธุรกรรมที่ล้มเหลวคือการใช้ก๊าซต่ำมาก ซึ่งดูเหมือนจะเป็นเครื่องขุดที่มีประสิทธิภาพมากพร้อมอัตราผลตอบแทนสูง

ต่อมาเราพบว่า 0X5483 เป็นสัญญาโจมตีสำหรับโจมตี Last winner จริง ๆ แล้ว มันถูกสร้างอย่างระมัดระวังและมีประสิทธิภาพมากและขั้นตอนการโจมตีก็ซับซ้อนมากเช่นกัน มีการโอนจำนวนมากในสัญญา ตัวอย่างเช่น ในสัญญานี้ใน PPT มีการโยน 0.1 ETH และ 0.18 ETH หรือ 0.12 ETH ออกมาในตอนท้าย

ผู้ชนะคนสุดท้ายคืออะไร? เป็นเวอร์ชันลอกเลียนแบบของ Fomo3D ซึ่งส่วนใหญ่มีไว้สำหรับใช้ในบ้าน ใน Baidu คุณสามารถดูข้อมูลโฆษณาจำนวนมาก และยังมีกลุ่ม WeChat และกลุ่ม QQ จำนวนมาก นอกจากนี้ Last winner ยังมีไคลเอนต์ Android และ iOS ที่สามารถดาวน์โหลดได้ ในเวลานั้นมีคน 16,000 คนที่จุดสูงสุดและผู้คนที่เข้าร่วมก็คลั่งไคล้

Fomo3D คืออะไร? เกมนี้เป็นเกมสัญญาอัจฉริยะระดับปรากฏการณ์เมื่อนานมาแล้ว ซึ่งสร้างความแออัดให้กับผู้ใช้ Ethereum ในทันที ในเกมมีของรางวัลล่อใจมหาศาล และกติกาก็เป็นแบบนี้ อย่างแรกคือการแลกเปลี่ยนกุญแจและโยนมันให้กับสัญญาเกมที่เหมือน Fomo3D หลังจากได้รับกุญแจ ซึ่งรวมถึงวิธีทำกำไร 3 วิธี วิธีแรกมีอยู่ในกลุ่มรางวัลหลักและคุณสามารถมีโอกาสได้รับรางวัลสุดท้าย นั่นคือ เกมจะนับถอยหลังไปเรื่อย ๆ และผู้ที่ซื้อรหัสคนสุดท้ายจะได้รับรางวัลใหญ่สุดท้าย ; วิธีที่สองมีกลุ่มรางวัลย่อย วิธีคือลอตเตอรีความน่าจะเป็นแบบสุ่ม นั่นคือมีโอกาสออกลอตเตอรีเมื่อมีการแลกเปลี่ยนคีย์ วิธีที่สามคือรางวัลเล็กน้อย ยิ่งซื้อคีย์เร็วเท่าไหร่ ก็ยิ่งสามารถรับเงินปันผลที่เข้ามาในภายหลังได้เร็วเท่านั้น จากโมเดลที่ชนะรางวัลที่น่าสนใจทั้งสามรุ่นนี้ Fomo3D ทำให้เกิดความแออัดใน Ethereum ระยะหนึ่งหลังจากเปิดตัว
เมื่อวันที่ 24 กรกฎาคม Ambi Labs ค้นพบว่ามีช่องโหว่ใน airdrop ที่สอง ใครบางคนอาจได้รับผลการจับสลากด้วยวิธีที่ไม่ยุติธรรม เราได้รับคำเตือนในวันที่ 10 สิงหาคมเท่านั้น
โมเดลของแอร์ดร็อปลอตเตอรีที่เปิดเผยก่อนหน้านี้คือมีคนเปิดเผยแผนการที่สามารถถูกโจมตีได้ แต่วิธีการโจมตีนั้นไม่มีประสิทธิภาพมากและอาจไม่ประสบความสำเร็จด้วยซ้ำ ทุกคนรู้แต่ไม่มีใครลอง และดูเหมือนว่าพวกเขาไม่สามารถทำเงินได้เลย แต่สัญญาโจมตีนี้แตกต่างออกไป ตามสถิติ อัตราความสำเร็จของสัญญานี้เกือบ 60%
วันรุ่งขึ้น เราเริ่มวิเคราะห์สัญญาและพบข้อสงสัยสามประการ หนึ่งคือมีห้าที่อยู่เพื่อเรียกสัญญาการโจมตี อีกอันหนึ่งคือที่อยู่ของสัญญาผู้ชนะคนสุดท้ายจะถูกส่งผ่านไปยังสัญญาการโจมตีเป็นพารามิเตอร์ สามคือทุกธุรกรรมการโจมตีที่ชนะที่ประสบความสำเร็จรวมถึงการสร้างและการทำลายตัวเอง ของสัญญา ตอนนั้นไม่รู้ทำไมแต่ที่แน่ๆคือแก๊งนี้หลังจากวิเคราะห์ข้อมูลแล้วพบว่าแก๊งนี้ทำอย่างอื่นอีกหลายอย่างและร่วมกันโจมตีสัญญาเกมต่างๆ เราตั้งชื่อกลุ่มผู้โจมตีนี้ว่า "BAPT-LW20"
ในวันที่ 12 ทีมงานเริ่มพยายามย้อนกลับวิเคราะห์รหัสสัญญา เนื่องจากเครื่องมือที่มีอยู่อย่างจำกัด ฉันทำได้แค่ดูการถอดรหัสตัวเองเท่านั้น หลังจากขุดมาหนึ่งวันก็ยังไม่มีความคืบหน้า และกระบวนการวิเคราะห์ก็ถึงทางตัน วันต่อมา เพื่อนของฉันแนะนำให้คัดลอกสัญญาการโจมตีและแทนที่ที่อยู่ของผู้โจมตีในสัญญาการโจมตีด้วยที่อยู่ของเรา เราจะได้รับรางวัลเหมือนเขาไหม เราปรับใช้สัญญาการโจมตีใหม่และเริ่มการโจมตีเบื้องต้น แต่หลังจากพยายามหลายครั้ง มันก็เป็นไปไม่ได้ที่จะชนะเสมอ เราทำการเปลี่ยนใหม่อย่างสมบูรณ์และติดตามกระบวนการ ฉันไม่รู้ว่าทำไม แต่มันก็น่าหดหู่มากแม้ว่ามันจะล้มเหลวก็ตาม
เวลา 12.00 น. แผนสุดท้ายตัดสินใจปิดตายสัญญาและเริ่มวิเคราะห์สัญญาแบบย้อนกลับ การกลับสัญญาเป็นอะไรที่เหนื่อยมาก เราจะทำยังไงดี? แนวคิดของเราคือการพัฒนาเครื่องมือช่วยวิเคราะห์แบบย้อนกลับ เราไม่มีอะไรในมือ เราต้องทำบางอย่าง ประการแรก มีเครื่องมือวิเคราะห์ย้อนกลับไม่กี่ตัวสำหรับ EVM ดังนั้นเราจึงตัดสินใจพัฒนาด้วยตนเอง ยิ่งไปกว่านั้น การติดตามการซ้อนกันหลายชั้นของสัญญาทำได้ยาก ในขณะเดียวกัน การค้นหากระบวนการวนซ้ำก็ไม่ใช่เรื่องง่าย ในรหัสไบต์ EVM
เราใช้เวลาสามวันในการพัฒนาเครื่องมือและสิ่งต่างๆ ก็เริ่มเปลี่ยนไป เครื่องมือแรกคือ Awesome-tx-Tracer (การติดตามพฤติกรรมของสัญญา) ด้วยเครื่องมือนี้ สามารถสร้างตัวติดตามหลายตัวในกระบวนการทั้งหมดของ Smart Contract และตัวติดตามสามารถวิเคราะห์พฤติกรรมการทำธุรกรรมจำนวนมากเพื่อสร้างข้อมูลจำนวนมากได้ A เครื่องมือสำหรับการทำวิศวกรรมย้อนกลับ—minievm (ตัวจำลองการดำเนินการตามสัญญา) ซึ่งสามารถวิเคราะห์ตัวติดตามจำนวนมากในเชิงคุณภาพเป็นชุดได้ เครื่องมือที่สามคือ ida-evm (ตัววิเคราะห์กราฟการไหลของสัญญา) ซึ่งแก้ไขตามปลั๊กอิน evm ตัวติดตามที่สร้างขึ้นสามารถกลับไปกลับมาได้โดยอัตโนมัติ เพื่อให้ง่ายต่อการดูกระบวนการทั้งหมดซ้ำๆ
ในที่สุด เราก็ค้นพบความจริงในที่สุด สัญญาการโจมตี เป็นสัญญาหลัก และสัญญาหลักทำให้เกิดสัญญาย่อย 1,000 รายการ ซึ่งสามารถเพิ่มอัตราการชนะของตัวเลขสุ่มได้อย่างมาก ในเวลาเดียวกัน เมื่อสัญญาย่อยแต่ละรายการโจมตี มันจะสร้างสัญญาผีเพื่อเริ่มการโจมตี สัญญาผีคืออะไร? มันถูกสร้างขึ้นในขณะที่มีการโจมตี และจะทำลายตัวเองทันทีหลังการโจมตี โดยไม่ทิ้งร่องรอยไว้ในพื้นที่เก็บข้อมูลบล็อกเชน แฮ็กเกอร์สร้างสัญญาย่อย 1,000 สัญญาผ่านสัญญาหลัก และสร้างสัญญาทำลายตัวเองจำนวนนับไม่ถ้วน ในที่สุดสัญญาทำลายตัวเองก็โจมตีผู้ชนะคนสุดท้าย นี่เป็นสิ่งที่ฉลาดมาก
การตรวจสอบเริ่มต้นในเช้าวันที่ 17 และผลสุดท้ายที่เราสรุปได้คือการถอน 50% ของลอตเตอรี่พูลภายใน 6 วัน เริ่มการโทรโจมตีเกือบ 50,000 ครั้ง และสร้างสัญญาผีมากกว่า 20,000 สัญญา เป็นเรื่องที่น่าสนใจมากสำหรับผู้ชนะคนสุดท้ายที่จะเพิ่มสัดส่วนของรางวัล airdrop จาก 1% ของ Fomo3D เป็น 10% ดังนั้น หลังจากที่แฮ็กเกอร์โจมตี Last winner สำเร็จ พวกเขาจึงไม่รู้เรื่อง Fomo3D มากนัก สัญญาหลักนี้เริ่มการโจมตีภายในไม่กี่ชั่วโมงของวันแรกของการเปิดตัว Last winner โดยทำรายได้หลายแสนดอลลาร์ต่อชั่วโมงในสองสามวันแรก
บังเอิญ เวลา 10 โมงเช้า มีการมอบรางวัล Last winner ซึ่งเป็นรางวัลแรกในสามรูปแบบกำไรที่เพิ่งกล่าวถึง รางวัลใหญ่ถูกชิงไปโดยหนึ่งในผู้โจมตี 5 คน ที่อยู่ของผู้โจมตีคือ 0X5167 และจำนวนรางวัลก็สูงมากเช่นกันซึ่งมากกว่าที่พวกเขาได้รับจากเครื่องบิน
มันยังไม่จบ. ห้าวันต่อมา เวลา 15:02 น. เราได้ค้นพบสิ่งที่น่าทึ่งอีกครั้ง รอบแรกของ Fomo3D สิ้นสุดลงและรางวัลใหญ่ก็ถูกชิงไป มีคนเอาไปหรือเปล่า ไม่ พวกเขาใช้วิธีการเดียวกันเพื่อรับรางวัลใหญ่ ทำไม เมื่อเราเห็นงาน Fomo3D Awards เราพบฉากที่คุ้นเคย เมื่อจับรางวัลใหญ่ กลุ่มของบล็อกต่อเนื่องที่ผิดปกติจะปรากฏขึ้น และจำนวนข้อความในกลุ่มบล็อกต่อเนื่องที่ผิดปกตินี้จะลดลงอย่างรวดเร็ว สุดท้าย คนขุดแร่คนเดิมที่รู้จักบล็อกธุรกรรมที่ชนะ ก่อนและหลังสิ้นสุด Last winner บล็อกที่ผิดปกติคล้ายกันปรากฏขึ้นและข่าวที่ชนะก็บรรจุโดยนักขุดคนเดียวกัน ในเวลานี้ เราพบว่ามันเป็นเรื่องบังเอิญ เราเริ่มสงสัยว่า mining pool โกง Fomo3D จริงหรือ? หลังจากติดต่อผู้รับผิดชอบกลุ่มการขุดเป็นครั้งแรกและเปรียบเทียบข้อมูลทั้งหมดที่เรารู้กับอีกฝ่าย เราพบว่ากลุ่มการขุดไม่ได้มีส่วนร่วมในการโกงนี้ แต่บล็อกที่ผิดปกตินี้ซ่อนความลับอันยิ่งใหญ่ไว้ ความลับคือข้อความในบล็อกที่ผิดปกติทั้งหมดเรียกสัญญาเดียวกันซึ่งเก็บธุรกรรมแปลก ๆ บางอย่าง ค่าแก๊สของธุรกรรมทั้งหมดเทียบเท่ากับแก๊สปกติ 100 เท่า และผู้สร้างสัญญานี้เป็นบุคคลเดียวกันกับผู้ชนะ .
นักขุดไม่ได้โกง แต่ผู้โจมตีใช้กลยุทธ์บรรจุภัณฑ์ของนักขุด นั่นคือนักขุดจะให้ความสำคัญกับการบรรจุธุรกรรมที่มีค่าธรรมเนียมสูง ซึ่งเป็นประโยชน์ต่อนักขุดมากที่สุด ด้วยการสร้างค่าธรรมเนียมการจัดการที่สูงเป็นพิเศษ มันจะทำให้เกิดความแออัดของบล็อกเชนและปิดกั้นผู้เล่นรายอื่น ผู้โจมตียังฉลาดมากสัญญาโจมตีสามารถตัดสินได้อย่างชาญฉลาดว่าจะเปิดใช้ฟังก์ชันบล็อกเครือข่ายเพื่อให้เกิดประโยชน์สูงสุดและลดต้นทุนหรือไม่
ในระยะสั้น สัญญานี้ถูกสร้างขึ้นอย่างชาญฉลาดมาก หากผู้โจมตีไม่รับรางวัลก็จะยังคงอยู่ในกลุ่มแอปพลิเคชันของกลุ่มการขุดจำนวนมาก เมื่อถึงเวลา ธุรกรรมเหล่านี้จะกลายเป็นธุรกรรมที่มีค่าธรรมเนียมการทำธุรกรรมที่สูงมาก
ดังนั้นช่องโหว่ของเกมนี้ทำให้กลุ่มรางวัลหลักและกลุ่มรางวัลย่อยก่อนหน้านี้สามารถถูกโจมตีได้ง่าย มีอีกคำถาม ทุกคนยังจำได้ว่า Last winner โจมตีสัญญาแม่ ทำไมต้อง Last winner เป็นที่อยู่ของสัญญา? ในความเป็นจริงสัญญาหลักในการโจมตีนี้เป็นสัญญาหลักทั่วไปที่สามารถโจมตีเกม Fomo3D ได้หลายประเภท ในวันที่สองหลังจาก Fomo3D เปิดตัว มีคนค้นพบช่องโหว่ลอตเตอรี airdrop และโจมตีได้สำเร็จ
คุณกำลังเผชิญกับแฮ็กเกอร์ชั้นนำของโลก และคุณอาจสูญเสียได้ทุกเมื่อ ดังนั้นความรุนแรงของการรักษาความปลอดภัยสัญญาอัจฉริยะจึงอยู่ไกลเกินจินตนาการของทุกคน โลกอนาคตแบบกระจายศูนย์ที่ทุกคนจินตนาการนั้นสวยงามจริงหรือ? เมื่อได้รับประโยชน์จากโลกที่กระจายอำนาจแล้ว ก็จะมีค่าใช้จ่ายและความเสี่ยงด้านความปลอดภัยใหม่ๆ ขอบคุณทุกคน.


