Insights

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด

เหตุการณ์การโจมตีคริปโตจากแฮกเกอร์สายมืด — บริดจ์, คีย์, วิศวกรรมสังคม และช่องโหว่ด้านการกำกับดูแล — พร้อมทั้งแนวทางป้องกันที่ต้องใช้เวลาและต้นทุนสูงซึ่งทีมพัฒนาชั้นนำเลือกใช้

เผยแพร่ ทีม Netts อ่าน 18 นาที

ภาษาอื่น: EnglishРусскийEspañol中文FrançaisУкраїнськаTürkçeहिंदीفارسیالعربيةHausaPortuguêsTiếng Việt한국어日本語Bahasa IndonesiaDeutschTagalog

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด
สารบัญ
  1. จุดเริ่มต้นของช่องโหว่ในสมาร์ตคอนแทรกต์
  2. ผลกระทบที่ตามมาและฮาร์ดฟอร์ก
  3. ยุคของ Logic ที่ไม่ได้เตรียมค่าเริ่มต้นและ Delegate Calls
  4. การถูกระงับของกระเป๋าเงิน Multi-Sig
  5. ภาพลวงตาทางวิทยาการเข้ารหัสลับของ Cross-Chain Bridges
  6. การโจมตี Nomad Bridge
  7. บั๊กของคอมไพเลอร์และการปั่นป่วนกลไกตลาด
  8. การต่อสู้ที่ไม่มีวันสิ้นสุดระหว่างโค้ดและผลลัพธ์

คริปโตมักถูกมองว่าเป็นปราการอันแข็งแกร่งของการเข้ารหัสลับ การมีฉันทามติแบบกระจายศูนย์ และบัญชีแยกประเภทที่ไม่อาจเปลี่ยนแปลงได้ แต่ความเป็นจริงของดินแดนดิจิทัลในฝันแห่งนี้กลับซับซ้อนและอันตรายกว่านั้นมาก สื่อกระแสหลักมักพูดถึงการแฮกในแวดวงคริปโตผ่านวิศวกรรมสังคม (social engineering) หรือแคมเปญฟิชชิง หรือเพียงแค่กลโกงหลอกลวงที่ทำให้ผู้ใช้ที่ไม่ทันระวังพิมพ์ที่อยู่กระดานเทรดหรือคีย์ส่วนตัวลงบนเว็บไซต์อันตราย

แต่บทความนี้จะมองข้ามความล้มเหลวที่เกิดจากมนุษย์เหล่านั้นไปโดยสิ้นเชิง ในบทความนี้ เราจะพูดถึงการแฮกอย่างแท้จริง นี่คือดินแดนที่ความปลอดภัยทางไซเบอร์ถูกทำลายและโค้ดมีข้อบกพร่องร้ายแรงจนนำไปสู่การรั่วไหลครั้งใหญ่ สิ่งเหล่านี้คือความฝันของแฮกเกอร์สายมืด (black hat) ที่โค้ดถูกนำมาใช้เป็นอาวุธย้อนกลับมาทำร้ายผู้สร้าง สูบเงินหลายร้อยล้านดอลลาร์ออกไปในเวลาเพียงไม่กี่นาทีโดยไม่ต้องลงแรงแม้แต่น้อย บีบให้เราต้องเผชิญกับขีดสุดของความผิดพลาดทางตรรกะ บั๊กของคอมไพเลอร์ และการกำกับดูแลทางสถาปัตยกรรมที่หละหลวม

จุดเริ่มต้นของช่องโหว่ในสมาร์ตคอนแทรกต์

การจะเข้าใจการแฮกสมาร์ตคอนแทรกต์อย่างแท้จริงได้นั้น ต้องเริ่มอธิบายจากหนึ่งในคดีที่อื้อฉาวที่สุดในประวัติศาสตร์ของ DeFi ในเวลานั้น ซึ่งเปลี่ยนทิศทางของ Ethereum ไปตลอดกาล ย้อนกลับไปในยุคแรกเริ่มของบล็อกเชนที่สามารถเขียนโปรแกรมได้ มีโปรเจกต์หนึ่งชื่อว่า The DAO กองทุนนี้ตั้งใจที่จะเป็นกองทุนร่วมลงทุนแบบกระจายศูนย์ที่บริหารจัดการด้วยสมาร์ตคอนแทรกต์ทั้งหมด — โดยไม่มีมนุษย์เข้ามาเกี่ยวข้อง

คอนแทรกต์ดังกล่าวสามารถดึงดูดเงินทุนมูลค่าหลายล้านดอลลาร์ในรูป Ether จากนักลงทุนที่หวังจะลงคะแนนเสียงให้กับข้อเสนอต่างๆ และรับผลตอบแทน อย่างไรก็ตาม เหล่านักพัฒนาไม่ได้ใช้วิธีการถอนเงินที่ปลอดภัย ซึ่งก่อให้เกิดบั๊กที่เรียกว่า reentrancy

Reentrancy — คือภาวะที่สมาร์ตคอนแทรกต์เรียกไปยังคอนแทรกต์ภายนอกแต่ไม่ได้อัปเดตสถานะภายในของตนเอง ตัวอย่างเช่น ใน The DAO ฟังก์ชันการถอนเงินได้โอนเงินที่ขอไปยังผู้ใช้ก่อน แล้วจึงค่อยอัปเดตสถานะของผู้ใช้ด้วยจำนวนเงินที่ถอนออกไป แฮกเกอร์สายมืดตระหนักได้ว่าพวกเขาสามารถดีพลอยสมาร์ตคอนแทรกต์ที่เป็นอันตรายซึ่งมีฟังก์ชัน fallback ได้เช่นกัน

ฟังก์ชัน fallback จะถูกเรียกใช้งานทุกครั้งที่ The DAO ส่งเงินมายังคอนแทรกต์อันตรายนี้ ซึ่งฟังก์ชัน fallback ไม่เพียงแต่ยอมรับเงินเท่านั้น แต่ยังเรียกฟังก์ชันการถอนเงินของ The DAO ซ้ำอีกครั้งในทันที สิ่งนี้ทำให้ฟังก์ชัน fallback ถูกกระตุ้นอีกครั้ง ซึ่ง The DAO ก็ประมวลผลคำสั่ง เนื่องจากยอดคงเหลือของแฮกเกอร์ยังไม่ได้ถูกอัปเดตตั้งแต่การถอนเงินครั้งแรก

กระบวนการนี้เกิดขึ้นซ้ำแล้วซ้ำเล่า สูบเงินหลายล้านดอลลาร์ออกจาก The DAO ก่อนที่เครือข่ายจะสามารถตอบสนองได้ทัน

ผลกระทบที่ตามมาและฮาร์ดฟอร์ก

ผลกระทบที่ตามมาจากการแฮกครั้งนี้ไม่เหมือนสิ่งใดที่เราเคยพบเห็นมาก่อน เครือข่ายตกอยู่ในความเสี่ยงที่จะล่มสลาย และเหรียญ Ether จำนวนมหาศาลที่มีอยู่ทั้งหมดถูกขโมยไป เหตุการณ์นี้สร้างวิกฤตทั้งในแง่การดำรงอยู่และทางเทคนิคให้กับชุมชน ซึ่งท้ายที่สุดส่งผลให้ชุมชนตัดสินใจทำฮาร์ดฟอร์ก (hard fork) เพื่อย้อนประวัติศาสตร์ของบล็อกเชนและคืนเงินดังกล่าว

การตัดสินใจที่ก่อให้เกิดข้อถกเถียงอย่างมากนี้นำไปสู่การแตกแยกอย่างถาวร กลายเป็น Ethereum และ Ethereum Classic ในปัจจุบัน ช่องโหว่รูปแบบนี้เป็นที่รู้จักกันดีและส่วนใหญ่ได้รับการป้องกันด้วยการใช้แพทเทิร์น Checks-Effects-Interactions โดยแพทเทิร์นนี้กำหนดว่าคอนแทรกต์จะต้องตรวจสอบเงื่อนไขทั้งหมดก่อนเป็นอันดับแรก จากนั้นจึงจะสามารถอัปเดตสถานะภายในได้ และจะต้องเรียกคอนแทรกต์ภายนอกในขั้นตอนสุดท้ายเท่านั้น

อย่างไรก็ดี แม้ว่า reentrancy พื้นฐานจะสามารถตรวจพบได้ง่ายมากด้วยเครื่องมือตรวจสอบอัตโนมัติในปัจจุบัน แต่การโจมตีแบบ reentrancy ข้ามคอนแทรกต์ที่มีความซับซ้อนก็ยังสามารถเกิดขึ้นได้ในโอกาสเฉพาะเจาะจงบางกรณี ซึ่งแสดงให้เห็นว่าแม้แต่แนวคิดที่ได้รับการป้องกันอย่างดีแล้วก็ยังสามารถแปรสภาพไปสู่รูปแบบการโจมตีใหม่ๆ ได้

ยุคของ Logic ที่ไม่ได้เตรียมค่าเริ่มต้นและ Delegate Calls

บทเรียนที่ได้รับจาก The DAO ถูกซึมซับอย่างรวดเร็วโดยชุมชนนักพัฒนา ซึ่งนับแต่นั้นมาได้พัฒนาระบบที่มีความซับซ้อนยิ่งขึ้นไปอีก และผูกตัวเองเข้ากับแนวคิดต่างๆ เช่น คอนแทรกต์ไลบรารีและพร็อกซีแพทเทิร์น เพื่อประหยัดค่า gas และเพิ่มความสะดวกในการอัปเกรด ทว่าท่ามกลางความซับซ้อนนี้ ก็เกิดช่องทางการแฮกรูปแบบใหม่ขึ้นมา โดยตัวอย่างที่อื้อฉาวที่สุดคือช่องโหว่ของกระเป๋าเงิน Parity Multi-Sig

Parity เป็นไคลเอนต์ Ethereum ที่มีการใช้งานอย่างแพร่หลาย และให้บริการสมาร์ตคอนแทรกต์สำหรับกระเป๋าเงินแบบหลายลายเซ็น (multi-signature wallet) ซึ่งเก็บลอจิกหลักไว้ในคอนแทรกต์ไลบรารีส่วนกลาง ทั้งนี้ก็เพื่อการใช้ทรัพยากรอย่างมีประสิทธิภาพ เนื่องจากกระเป๋าเงินหลายใบสามารถชี้ไปยังไลบรารีเดียวกันได้ แทนที่จะต้องดีพลอยโค้ดเดิมซ้ำๆ หลายครั้ง

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด

ช่องโหว่ประเภทนี้เกิดจากความเข้าใจผิดเกี่ยวกับฟังก์ชัน delegatecall และตัวแปรสถานะที่ไม่ได้ถูกกำหนดค่าเริ่มต้น (uninitialized state variables) ฟังก์ชัน delegatecall ช่วยให้คอนแทรกต์สามารถประมวลผลฟังก์ชันจากอีกคอนแทรกต์หนึ่งได้ แต่ให้สิทธิ์ฟังก์ชันนั้นเข้าถึงพื้นที่จัดเก็บข้อมูล (storage) ของคอนแทรกต์ต้นทางที่เรียกใช้ ภายในคอนแทรกต์ไลบรารีของ Parity มีฟังก์ชันสำหรับกำหนดค่าเริ่มต้นเจ้าของกระเป๋าเงิน

ทว่าตัวคอนแทรกต์ไลบรารีเองกลับไม่เคยได้รับการกำหนดค่าเริ่มต้นจริงๆ แฮกเกอร์พบว่าพวกเขาสามารถเรียกใช้ฟังก์ชันกำหนดค่าเริ่มต้นได้โดยตรงบนคอนแทรกต์ไลบรารี และอ้างสิทธิ์การเป็นเจ้าของไลบรารีนั้นได้ เมื่อได้สิทธิ์ความเป็นเจ้าของไลบรารีแล้ว พวกเขาก็เรียกใช้ฟังก์ชันทำลายตัวเอง (self-destruct)

การถูกระงับของกระเป๋าเงิน Multi-Sig

กระเป๋าเงิน multi-sig ที่ต้องพึ่งพาไลบรารีดังกล่าวกลายเป็นใช้งานไม่ได้ทันทีเมื่อไลบรารีถูกทำลาย ลอจิกทั้งหมดที่จำเป็นในการจัดการธุรกรรม หรืออนุญาตให้ถอนเงิน หรือแม้แต่การตรวจสอบยอดเงินคงเหลือก็สูญหายไปทั้งหมด ตลอดกระบวนการนี้ อันเนื่องมาจากความผิดพลาดทางสถาปัตยกรรมอย่างแท้จริง เงิน Ether มูลค่าหลายร้อยล้านดอลลาร์ไม่ได้ถูกขโมยไป แต่กลับถูกแช่แข็งไว้อย่างถาวร

เหตุการณ์นี้ได้เผยให้เห็นถึงอันตรายอย่างยิ่งยวดของคอนแทรกต์ลอจิกที่ไม่ได้กำหนดค่าเริ่มต้น และความเสี่ยงแฝงที่เกี่ยวข้องกับฟังก์ชัน delegatecall — ซึ่งชุดความเสี่ยงเหล่านี้อาจดูเป็นความรู้ทั่วไปในปัจจุบัน แต่ในเวลานั้นยังไม่เป็นที่เข้าใจดีนัก เพื่อแก้ไขปัญหานี้ ปัจจุบันนักพัฒนาจึงพึ่งพาโมดิฟายเออร์พิเศษสำหรับการกำหนดค่าเริ่มต้นที่บังคับให้คอนแทรกต์สามารถกำหนดค่าได้เพียงครั้งเดียวเท่านั้น และมักจะใส่ค่าจำลองไว้ในสถานะของคอนแทรกต์ลอจิกของผู้ดีพลอยเพื่อไม่ให้ใครสามารถอ้างสิทธิ์ได้

แม้ว่าสถานการณ์เดิมเป๊ะๆ เช่นนี้แทบจะไม่เกิดขึ้นแล้วในปัจจุบัน แต่ความเสี่ยงโดยทั่วไปของการจัดการพร็อกซีแพทเทิร์นผิดพลาดก็ยังเป็นสิ่งที่ต้องพิจารณาอย่างรอบคอบในสถาปัตยกรรมการเงินแบบกระจายศูนย์ที่ดี

ภาพลวงตาทางวิทยาการเข้ารหัสลับของ Cross-Chain Bridges

เมื่อระบบนิเวศคริปโตขยายตัวออกไปมากกว่าหนึ่งบล็อกเชน ความต้องการด้านความสามารถในการทำงานร่วมกัน (interoperability) ก็เกิดขึ้น ซึ่งสะท้อนออกมาในรูปแบบของ cross-chain bridges หลากหลายประเภท โปรโตคอลเหล่านี้ช่วยให้สามารถล็อกสินทรัพย์ไว้บนเชนหนึ่งและสร้างตัวแทนของสินทรัพย์นั้นบนอีกเชนหนึ่งได้ และเนื่องจากปริมาณสินทรัพย์มหาศาลที่สะสมไว้ บริดจ์เหล่านี้จึงกลายเป็นขุมทรัพย์ในฝันของเหล่าแฮกเกอร์สายมืด

การเจาะช่องโหว่ของบริดจ์ Wormhole เป็นเครื่องเตือนใจที่น่าสะพรึงกลัวอย่างแท้จริงว่า รายละเอียดเล็กๆ น้อยๆ เพียงข้อเดียวที่ถูกละเลยในการปรับใช้ อาจทำให้การตรวจสอบทางวิทยาการเข้ารหัสลับที่ซับซ้อนล้มเหลวลงอย่างสิ้นเชิง Wormhole อนุญาตให้โอนสินทรัพย์ระหว่าง Solana และ Ethereum ได้ ซึ่งกระบวนการนี้ต้องอาศัยกลุ่มผู้พิทักษ์ (guardians) คอยเฝ้าดูเหตุการณ์บนเชนหนึ่งและลงนามในข้อความเพื่อเป็นหลักฐาน จากนั้นลายเซ็นเหล่านี้จะได้รับการตรวจสอบโดยเชนปลายทางก่อนที่จะสร้างโทเค็นดังกล่าวขึ้นมาใหม่

จุดอ่อนอยู่ที่การตรวจสอบลายเซ็นในสมาร์ตคอนแทรกต์ของ Solana การตรวจสอบทางวิทยาการเข้ารหัสลับดำเนินการโดยโปรแกรมในตัวของ Solana ที่ถูกเรียกโดยคอนแทรกต์ แต่นักพัฒนาของ Wormhole ไม่ได้ตรวจสอบว่าโปรแกรมที่ถูกเรียกใช้นั้นเป็นโปรแกรมระบบของจริงหรือไม่ แฮกเกอร์จึงสร้างโปรแกรมขึ้นมาตัวหนึ่งที่ส่งคืนข้อความว่าสำเร็จเสมอ ไม่ว่าจะได้รับข้อมูลนำเข้าเป็นอะไรก็ตาม

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด

ถัดมา คอนแทรกต์ Wormhole ก็ถูกสั่งให้ใช้แอปพลิเคชันปลอมนี้ในการตรวจสอบ ภายใต้สมมติฐานที่ผิดพลาดว่าลายเซ็นนั้นถูกต้องจริง คอนแทรกต์จึงดำเนินการสร้าง wrapped Ethereum มูลค่าหลายร้อยล้านดอลลาร์บน Solana โดยที่ไม่มี Ethereum ถูกล็อกไว้อีกฝั่งหนึ่งเลยแม้แต่น้อย จากนั้นแฮกเกอร์ก็แลกโทเค็นที่เพิ่งสร้างขึ้นมาใหม่โดยไม่มีอะไรรองรับนี้กลับไปยัง Ethereum ส่งผลให้สินทรัพย์จริงถูกสูบออกจากโปรโตคอลจนหมด

นับเป็นการลงมือโจมตีรูปแบบการตรวจสอบบัญชีของ Solana ที่เฉียบคมและใช้เทคนิคขั้นสูง ปัญหานี้ได้รับการแก้ไขด้วยการตรวจสอบที่เข้มงวดยิ่งขึ้นเพื่อให้แน่ใจว่าเชลล์การตรวจสอบเป็นแอดเดรสของระบบอย่างเป็นทางการที่ถูกฮาร์ดโค้ดไว้จริงๆ ผลกระทบที่ตามมานั้นใหญ่หลวงมาก จนต้องได้รับการอุ้มชูทางการเงินจากผู้สนับสนุนโปรเจกต์เพื่อป้องกันการล่มสลายเชิงระบบของระบบนิเวศ DeFi บน Solana

ช่องโหว่เช่นนี้อาจเกิดขึ้นซ้ำได้อีกในอนาคตอันเนื่องมาจากลักษณะเฉพาะของกระบวนทัศน์การพัฒนาสมาร์ตคอนแทรกต์ โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมที่พึ่งพา account-model สูงอย่าง Solana หากนักพัฒนาไม่ดำเนินการตรวจสอบและพิสูจน์ยืนยันบัญชีรวมถึงโปรแกรมอย่างเข้มงวดสำหรับเอนทิตีภายนอกทุกตัวที่ถูกเรียกใช้ภายในสมาร์ตคอนแทรกต์ของตน

การโจมตี Nomad Bridge

ในขณะที่ Wormhole เป็นการโจมตีที่มีการประสานงานอย่างมีทิศทางเฉพาะเจาะจง การโจมตี Nomad bridge กลับพิสูจน์ให้เห็นว่าข้อบกพร่องทางตรรกะง่ายๆ เพียงข้อเดียวสามารถทำให้โปรโตคอลตกอยู่ในความโกลาหลจนกลายเป็นสนามเปิดให้ใครก็ได้เข้ามากอบโกยได้อย่างไร ในการรับส่งข้อความข้ามเชนนี้ Nomad ใช้โมเดล optimistic rollup ที่พึ่งพา Merkle tree เพื่อแสดงว่าข้อความนั้นถูกต้อง ทว่านักพัฒนาได้ทำความผิดพลาดครั้งสำคัญในการกำหนดค่าเริ่มต้นของ trusted root เมื่อทำการดีพลอยอัปเดตให้กับโปรโตคอล

สิ่งนี้เกิดขึ้นเนื่องจากพวกเขาตั้งค่า trusted root เป็น zero hash ซึ่งเป็นค่าเริ่มต้นสำหรับตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นใน solidity นั่นส่งผลให้ข้อความใดๆ ที่ไม่ได้รับการตรวจสอบอย่างชัดเจนจะย้อนกลับไปใช้ zero hash ซึ่งในตอนนี้คอนแทรกต์ถือว่าเป็น trusted root ที่ถูกต้อง โดยพื้นฐานแล้ว แฮกเกอร์พบว่าเขาสามารถสร้างธุรกรรมที่สั่งให้คอนแทรกต์ถอนเงินได้ และเนื่องจากการแฮชหลักฐานได้ผลลัพธ์เป็น zero hash คอนแทรกต์จึงยอมรับมันเสมอ

การแฮกครั้งนี้มีความพิเศษเนื่องจากความเรียบง่ายและความโกลาหลบ้าคลั่งที่ตามมา หลังจากการแฮกเกอร์คนแรกใช้ช่องโหว่ได้สำเร็จ ผู้ใช้คนอื่นๆ ก็เริ่มเข้ามาร่วมวงด้วย โดยไม่ต้องใช้ความสามารถทางเทคนิคในการแฮกใดๆ เพียงแค่คัดลอกและวางข้อมูลธุรกรรมของแฮกเกอร์ เปลี่ยนแอดเดรสปลายทางเป็นของตนเอง และส่งขึ้นเครือข่าย ผู้คนหลายร้อยคนได้สูบเงินเกือบสองร้อยล้านดอลลาร์ออกจาก Nomad bridge ภายในเวลาไม่กี่ชั่วโมง

นี่คือความล้มเหลวด้านความปลอดภัยทางไซเบอร์ระดับตำราเรียน โค้ดกำหนดค่าเริ่มต้นที่ผิดพลาดเพียงบรรทัดเดียวได้ข้ามผ่านระบบความปลอดภัยทางวิทยาการเข้ารหัสลับทั้งหมด ปัญหานี้ได้รับการแก้ไขโดยการแพตช์ลอจิกการกำหนดค่าเริ่มต้นของ zero root และปฏิเสธอย่างชัดเจนไม่ให้ถือเป็น root ที่ถูกต้อง ผู้ใช้บริดจ์ต้องจ่ายค่าความเสียหาย และนี่ก็เป็นเครื่องเตือนใจอันโหดร้ายว่าในการพัฒนาสมาร์ตคอนแทรกต์ ตัวอักษรที่ขาดหายไปเพียงตัวเดียวหรือค่าเริ่มต้นที่ผิดพลาดสามารถเป็นภัยต่อทั้งโปรโตคอลได้อย่างแท้จริง

บั๊กเฉพาะกรณีนี้เป็นสิ่งที่หลีกเลี่ยงได้ง่ายดายมากด้วยการทดสอบอย่างละเอียดถี่ถ้วน กระนั้น ข้อผิดพลาดในการกำหนดค่าเริ่มต้นในวงกว้างก็ยังคงตามหลอกหลอนระบบต่างๆ อยู่เสมอ

บั๊กของคอมไพเลอร์และการปั่นป่วนกลไกตลาด

หนึ่งในประเภทการแฮกที่แท้จริงที่น่าสะพรึงกลัวที่สุดคือการที่ความผิดพลาดไม่ได้อยู่ที่โค้ดของนักพัฒนา แต่อยู่ที่เครื่องมือที่ใช้ในการคอมไพล์โค้ดนั้น เราได้รับการตอกย้ำถึงเรื่องนี้ระหว่างเหตุการณ์การใช้ช่องโหว่กับ Curve Finance ซึ่งสร้างความสั่นสะเทือนไปถึงรากฐานของ DeFi ในฐานะ DEX ชั้นนำสำหรับสเตเบิลคอยน์ คอนแทรกต์หลักส่วนใหญ่ของ Curve ถูกเขียนขึ้นด้วยภาษา Vyper ซึ่งเป็นภาษาสมาร์ตคอนแทรกต์สไตล์ Python ที่เน้นความปลอดภัยและความเรียบง่าย

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด

โชคดีที่นักพัฒนาของ Curve ได้ติดตั้งตัวป้องกัน reentrancy ในสมาร์ตคอนแทรกต์ของพวกเขา เพื่อป้องกันการโจมตีรูปแบบเดียวกับที่เคยทำลาย The DAO แต่ภายในคอมไพเลอร์ Vyper เวอร์ชันเก่ารุ่นใดรุ่นหนึ่ง บั๊กดังกล่าวกลับแฝงตัวอยู่ คอมไพเลอร์สามารถแปลงโค้ด Vyper ที่มนุษย์อ่านได้ให้เป็นไบต์โค้ดที่เครื่องอ่านได้เพื่อนำไปใช้งานบน Ethereum Virtual Machine ได้อย่างสมบูรณ์ ทว่ามันกลับกระจายตัวล็อก reentrancy ข้ามหลายฟังก์ชันได้ไม่ดีพอ

โค้ดนั้นปลอดภัย นักพัฒนาเขียนมันขึ้นมาอย่างถูกต้องตามที่ควรจะเป็น แต่คอมไพเลอร์กลับหันมาแทงข้างหลังด้วยการสร้างไบต์โค้ดที่มีช่องโหว่ขึ้นมา นั่นหมายความว่าแฮกเกอร์สายมืดสังเกตเห็นและเข้าใจว่าพูลสภาพคล่องบางส่วนของ Curve มีความเสี่ยงต่อการเกิด reentrancy ข้ามฟังก์ชัน พวกเขาจึงฉวยโอกาสนี้ดึงเงินหลายสิบล้านดอลลาร์ออกจากพูล

การแฮกครั้งนี้มีความร้ายกาจเป็นพิเศษเนื่องจากไม่มีทางตรวจพบได้เลยด้วยการตรวจสอบซอร์สโค้ดแบบดั้งเดิม เพราะซอร์สโค้ดนั้นถูกต้องสมบูรณ์ ช่องโหว่ปรากฏอยู่เฉพาะในไบต์โค้ดที่คอมไพล์แล้วเท่านั้น เหตุการณ์นี้บีบให้อุตสาหกรรมทั้งหมดต้องทบทวนความเชื่อมั่นที่มีต่อคอมไพเลอร์และโครงสร้างพื้นฐานใหม่ ปัญหานี้ได้รับการแก้ไขโดยการอัปเดตคอมไพเลอร์ Vyper และย้ายพูลที่มีช่องโหว่ไปยังคอนแทรกต์ใหม่ที่คอมไพล์อย่างปลอดภัย

ผลลัพธ์ที่ตามมาคือวิกฤตความเชื่อมั่นครั้งใหญ่และการตระหนักว่าความปลอดภัยจะต้องครอบคลุมลงไปถึงทุกระดับของสแตกเทคโนโลยี แน่นอนว่าบั๊กของคอมไพเลอร์นั้นเกิดขึ้นได้ยาก แต่ก็แทบจะเป็นไปไม่ได้เลยที่จะคาดเดา ดังนั้นฝันร้ายในระดับโครงสร้างพื้นฐานเช่นนี้จึงสามารถเกิดขึ้นซ้ำได้อีกอย่างง่ายดาย

แฟลชโลน (Flash loans) — เครื่องมือทางการเงินสายพันธุ์ใหม่ที่เกิดขึ้นพร้อมกับการพัฒนาของการเงินแบบกระจายศูนย์ ได้เปลี่ยนแปลงรูปแบบการแฮกอย่างแท้จริงไปโดยสิ้นเชิง แฟลชโลนช่วยให้ผู้ใช้สามารถกู้ยืมคริปโตได้ในจำนวนแทบไม่จำกัดโดยไม่ต้องมีหลักประกัน ตราบใดที่สามารถชำระคืนเงินกู้ได้ก่อนที่ธุรกรรมเดียวกันนั้นจะเสร็จสิ้น หากเงินไม่ถูกชำระคืน ธุรกรรมทั้งหมดจะถูกย้อนกลับ — ประหนึ่งว่ามันไม่เคยเกิดขึ้นเลย

แฟลชโลนซึ่งเดิมทีมีไว้สำหรับการทำกำไรจากส่วนต่างราคา (arbitrage) หรือการบังคับขายสินทรัพย์ (liquidations) ได้มอบสภาพคล่องที่จำเป็นให้แก่แฮกเกอร์สายมืดในการโจมตีข้อบกพร่องทางตรรกะที่ลึกซึ้งในกลไกของตลาด หากใช้กรณีการแฮก Euler Finance เป็นกรณีศึกษา Euler เป็นโปรโตคอลการให้กู้ยืมสำหรับการฝากและสร้างผลกำไร ผู้ใช้ยังสามารถนำสินทรัพย์ที่ฝากไว้ไปบริจาคให้กับทุนสำรองของโปรโตคอลได้ผ่านฟังก์ชันที่เรียกว่า donateToReserves

แต่นักพัฒนากลับมองข้ามการตรวจสอบสถานะความพร้อม (health check) ที่สำคัญมากในฟังก์ชันนั้นไป และไม่ได้ตรวจสอบว่าบัญชีที่ผู้บริจาคถอนเงินออกมานั้นจะยังคงมียอดคงเหลือที่สมดุลหลังจากการบริจาคหรือไม่ ผู้โจมตีกู้ยืมสินทรัพย์จำนวนมหาศาลจากแฟลชโลนและฝากเข้าไปใน Euler จากนั้นพวกเขาจึงเรียกฟังก์ชัน donateToReserves เพื่อบริจาคเงินฝากบางส่วนของตน

เมื่อไม่มีการตรวจสอบ health check โปรโตคอลจึงอนุมัติการบริจาค ทำให้บัญชีของแฮกเกอร์เข้าสู่สภาวะล้มละลายที่ถูกสร้างขึ้นอย่างไม่เป็นธรรมชาติ จากนั้นแฮกเกอร์จึงทำการชำระบัญชี (liquidation) ให้กับบัญชีของตนเอง อย่างไรก็ตาม คณิตศาสตร์เบื้องหลังโบนัสการชำระบัญชีของ Euler นั้นมีความซับซ้อน และเงินกู้แฟลชโลนก็มีขนาดใหญ่มาก จนทำให้ผู้ชำระบัญชีได้รับมูลค่าจากโปรโตคอลกลับไปมากกว่าที่ตนเองฝากไว้

พวกเขาส่งคืนแฟลชโลนและหนีหายไปพร้อมกับเงินประมาณสองร้อยล้านดอลลาร์ มันไม่ใช่ความล้มเหลวทางวิทยาการเข้ารหัสลับหรือบั๊กของคอมไพเลอร์ แต่เป็นความล้มเหลวโดยสิ้นเชิงของตรรกะทางการเงินในโค้ด ในกรณีนี้ นักพัฒนาเพียงแค่ลืมใส่โค้ดบรรทัดเดียวที่คอยตรวจสอบสถานะของบัญชีหลังจากการทำธุรกรรมบางอย่าง การแก้ไขทำได้โดยการใส่การตรวจสอบ health check ที่เหมาะสมและปรับปรุงตรรกะการบริหารความเสี่ยงของโปรโตคอลใหม่ทั้งหมด

เรื่องนี้ส่งผลกระทบร้ายแรง ทำให้โปรโตคอลต้องหยุดชะงักและใช้เวลาเจรจานานหลายเดือนเพื่อดึงเงินทุนบางส่วนกลับคืนมา การเจาะช่องโหว่ทางตรรกะเช่นนี้ ที่กลไกทางการเงินอันซับซ้อนมีปฏิสัมพันธ์กันในรูปแบบที่ไม่ได้ตั้งใจ ถือเป็นรูปแบบการแฮกที่แพร่หลายและอันตรายที่สุดในปัจจุบัน ความซับซ้อนของโปรโตคอลจะยิ่งเพิ่มขึ้น และข้อผิดพลาดทางตรรกะประเภทนี้ก็แทบจะแน่นอนว่าจะเกิดขึ้นซ้ำรอยอีก

การต่อสู้ที่ไม่มีวันสิ้นสุดระหว่างโค้ดและผลลัพธ์

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

เพื่อกำจัดความเสี่ยงเหล่านี้ อุตสาหกรรมจึงมีระบบป้องกันที่ครอบคลุม ซึ่งรวมถึง:

1. การตรวจสอบโค้ดโดยมนุษย์จากบุคคลที่สามซึ่งเป็นบริษัทด้านความปลอดภัยอิสระ 2. เครื่องมือการตรวจสอบความถูกต้องอย่างเป็นทางการ (formal verification) ที่พิสูจน์ทางคณิตศาสตร์ว่าโค้ดทำงานได้ตรงตามที่วางแผนไว้ทุกประการ 3. เงินรางวัลล่าบั๊ก (bug bounty) จำนวนมหาศาลที่จ่ายให้แก่แฮกเกอร์สายขาว (white hat) เพื่อค้นหาข้อบกพร่องก่อนที่คนร้ายจะพบ 4. การใช้ตัวล็อกหน่วงเวลา (timelocks) และการควบคุมคีย์ผู้ดูแลระบบแบบหลายลายเซ็นเพื่อชะลอการดีพลอยอัปเดตที่เป็นอันตราย 5. การใช้โปรโตคอลประกันภัยแบบกระจายศูนย์เพื่อมอบความคุ้มครองในกรณีที่เกิดการละเมิดความปลอดภัย

อย่างไรก็ดี การแฮกของสายมืดยังคงมีอยู่ แม้ว่ามาตรการป้องกันเหล่านี้จะมีความซับซ้อนมากขึ้นก็ตาม จุดเริ่มต้นของการพัฒนาซอฟต์แวร์คือความซับซ้อนมักจะสร้างโอกาสให้เกิดความล้มเหลว ความซับซ้อนที่เพิ่มขึ้นของการเงินแบบกระจายศูนย์ ที่ซึ่งนักพัฒนาสร้างโปรโตคอลอันซับซ้อนที่เชื่อมโยงกับสมาร์ตคอนแทรกต์อื่นๆ อีกหลายสิบตัวและทำงานข้ามบล็อกเชนหลายระบบ ได้สร้างช่องทางการโจมตีใหม่ๆ อย่างที่ไม่เคยมีมาก่อน

เนื่องจากผู้โจมตีถูกจำกัดด้วยจินตนาการของตนเองเท่านั้น พวกเขาต้องการค้นพบช่องทางที่ได้ผลเพียงช่องทางเดียวก็สามารถประสบความสำเร็จได้ ฝ่ายป้องกันจึงทำได้เพียงแค่ตอบสนองและตามหลังอยู่เสมอ นี่จะเป็นการต่อสู้ที่ไม่สิ้นสุดตลอดไป โดยผู้สร้างอนาคตแบบกระจายศูนย์จะต้องประลองฝีมือกับผู้แสวงหาผลประโยชน์จากมัน ฝันร้ายของการแฮกเต็มรูปแบบจะยังคงกลายพันธุ์ต่อไปเพื่อเป็นเครื่องเตือนใจอยู่เสมอว่า: ในโลกที่โค้ดคือกฎหมาย การพิมพ์ผิดเพียงตัวเดียวก็สามารถพรากทุกสิ่งไปได้

เมื่อโค้ดแต่ละบรรทัดมีมูลค่ามหาศาลหลายแสนดอลลาร์ ความมีประสิทธิภาพและความแม่นยำในการดำเนินงานประจำวันจึงมีความสำคัญไม่แพ้ความปลอดภัย เพื่อรับประกันประสิทธิภาพสูงสุด ผู้ใช้มักจะต้องแบกรับภาระจากค่าธรรมเนียมเครือข่ายเมื่อต้องจัดการสินทรัพย์ดิจิทัล โดยเฉพาะสเตเบิลคอยน์ ในปัจจุบัน ทุกครั้งที่คุณส่ง USDT หากคุณทำธุรกรรมโอนเงินทุนอยู่บ่อยครั้ง คุณจะทราบดีว่าต้นทุนการทำธุรกรรม USDT นี้สามารถผันผวนได้อย่างมากจนอาจกระทบต่อเงินทุนของคุณ

คริปโตกับการแฮก — ฝันร้ายจากฝีมือแฮกเกอร์สายมืด

ในฐานะผู้มีส่วนร่วมในระบบนิเวศอย่างจริงจัง การค้นหาวิธีการโอน USDT ที่ประหยัดจึงเป็นสิ่งสำคัญยิ่ง นี่คือจุดที่เครื่องมือเฉพาะทางช่วยให้คุณได้เปรียบ บริการ netts: เครื่องคำนวณการโอน USDT ถูกสร้างขึ้นมาเพื่อช่วยสนับสนุนการใช้งานในจุดนี้โดยเฉพาะ เมื่อคุณโอน Tether บนเครือข่าย TRON ระบบจะใช้ Energy และ Bandwidth บางส่วนของคุณ หากคุณไม่มีสิ่งเหล่านี้ เครือข่ายจะเบิร์น TRX ของคุณตามอัตราค่าธรรมเนียม USDT

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

แชร์ X Telegram LinkedIn Reddit

ขั้นตอนถัดไป