จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
การโจมตีออราเคิลอาศัยช่องโหว่ตรงขอบเขตความเชื่อถือข้อมูลของโปรโตคอล ทำให้ข้อมูลราคา อัตราแลกเปลี่ยน ดัชนี มูลค่าสินทรัพย์สุทธิ หรือสถานะ นำไปสู่การดำเนินการที่ไม่ปลอดภัยในเชิงเศรษฐกิจ ผู้โจมตีอาจบิดเบือนตลาดที่สภาพคล่องต่ำ เจาะระบบผู้รายงานหรือกุญแจ ใช้ประโยชน์จากกฎการรวมผลหรือการอัปเดต หรือใช้เงินทุนที่ยืมมาร่วมกับการที่สัญญาผู้ใช้ข้อมูลไม่ตรวจสอบความใหม่ หน่วย ช่วงที่ยอมรับได้ และแหล่งสำรอง ฟีดที่ล้าสมัยหรือกำหนดค่าผิดอาจสร้างความเสียหายแบบเดียวกันโดยไม่ต้องมีผู้ดำเนินงานออราเคิลที่ประสงค์ร้าย ดังนั้นการวิเคราะห์เหตุการณ์ต้องแยกเส้นทางการโจมตีออกจากรูปแบบความล้มเหลว
ประเด็นชี้ขาดไม่ใช่ว่าราคาที่แสดงเคลื่อนไหวรุนแรงเพียงใด แต่คือค่าใช้จ่ายและความเสี่ยงในการมีอิทธิพลต่อค่าที่สัญญาใช้จริง ต่ำกว่ามูลค่าที่ดำเนินการได้จากการกู้ยืม การสร้างโทเค็น การแลกคืน การชำระราคา หรือการชำระบัญชีหรือไม่ สภาพคล่องแบบ flash อาจให้เงินทุนแก่ลำดับธุรกรรมแบบอะตอม แต่ไม่ได้สร้างขอบเขตความเชื่อถือที่บกพร่องและไม่ใช่เงื่อนไขจำเป็นของการโจมตี
ค่าจากออราเคิลไม่จำเป็นต้องเป็นราคาตลาดที่ซื้อขายได้จริง การตรวจสอบทุกครั้งต้องผูกค่านั้นกับเชน บล็อก ที่อยู่ฟีดหรือพูล ทิศทางสินทรัพย์ฐานและสินทรัพย์อ้างอิง จำนวนทศนิยม เวลา วิธีรวมผล ขนาดตลาด และฟังก์ชันผู้ใช้ข้อมูล ลายเซ็นที่ถูกต้องพิสูจน์ว่าใครรายงานข้อมูลภายใต้รูปแบบหนึ่ง แต่ไม่พิสูจน์ด้วยตัวมันเองว่าข้อมูลยังใหม่ แหล่งข้อมูลเป็นอิสระ ตลาดมีความลึก หรือค่าถูกต้องในเชิงเศรษฐกิจ
กลไกการทำงาน
- ระบุ deployment ให้ชัดเจน ได้แก่ เชน บล็อก สัญญาและฟังก์ชันผู้ใช้ข้อมูล สัญญาสินทรัพย์ พร็อกซีฟีดหรือพูล ตัวรวมผล สินทรัพย์ฐานและสินทรัพย์อ้างอิง จำนวนทศนิยม ผู้ดูแล และสถานะการอัปเกรด
- ทำแผนผังเส้นทางความเชื่อถือทั้งหมดจากตลาด พูล หรือผู้รายงาน ผ่านการรวมผล ลายเซ็น พร็อกซีหรืออะแดปเตอร์ และแหล่งสำรอง ไปจนถึงตรรกะผู้ใช้ข้อมูล บันทึกตลาด ผู้ดำเนินงาน กุญแจ และการกำกับดูแลที่ใช้ร่วมกัน แทนการนับชื่อที่ต่างกันเป็นแหล่งอิสระ
- จำลองการอ่านข้อมูลบนเชนให้ตรงทุกประการ ได้แก่ คำตอบ ข้อมูลรอบ เวลา ค่าความเชื่อมั่นหรือสถานะเมื่อมี การปรับทศนิยม การกลับทิศคู่ราคา สถานะ sequencer และระยะผ่อนผัน อายุสูงสุด ขอบเขตความเบี่ยงเบน และการจัดการค่าศูนย์หรือค่าติดลบ
- จัดทำบัญชีแยกประเภทของความเสี่ยงผู้ใช้ข้อมูล ได้แก่ ปัจจัยหลักประกัน เกณฑ์ชำระบัญชี เพดานการกู้และการจัดหา สภาพคล่องที่มีอยู่ หนี้ เพดานการสร้างหรือแลกคืน close factor โบนัสการชำระบัญชี และทุกการดำเนินการที่ค่านั้นเปิดให้ทำได้
- สร้างแบบจำลองการบิดเบือนในขนาดที่ดำเนินการได้จริง โดยใช้เงินสำรอง สภาพคล่องที่ใช้งาน จุดสังเกต หน้าต่างและวิธีถ่วงน้ำหนัก ค่าธรรมเนียม อาร์บิทราจ ลำดับบล็อก เงินทุนแบบ flash หรือเงินทุนตนเอง ขาดทุนจากการปิดสถานะ ค่า gas MEV และผู้ชำระบัญชีคู่แข่ง
- ทดสอบมาตรการควบคุมและภาวะล้มเหลว ได้แก่ แหล่งอิสระ cardinality ของ TWAP เพดาน กลไกตัดวงจร อำนาจหยุดชั่วคราว timelock แหล่งสำรองที่ล้าสมัยหรือแตกต่าง การสูญเสียผู้รายงานหรือกุญแจ sequencer L2 หยุดทำงาน ช่องว่างราคาที่เกิดขึ้นจริง และพฤติกรรมแบบ fail-open เทียบกับ fail-closed
- ติดตามและกระทบยอดรอบฟีดที่เป็นมาตรฐาน การเปลี่ยนพร็อกซีและการกำหนดค่า ความแตกต่างระหว่างแหล่ง การดำเนินการของโปรโตคอล การชำระบัญชี หนี้เสีย และการตัดสินใจหยุดหรือกู้คืน ทำการวิเคราะห์ซ้ำเมื่อสภาพคล่อง การจดทะเบียน การอัปเกรด หรือภาวะตลาดเปลี่ยนไป
การอ่านราคา spot จาก AMM มักเปลี่ยนได้ภายในธุรกรรมเดียว ราคาเฉลี่ยถ่วงน้ำหนักตามเวลาอาจเพิ่มต้นทุนเพราะต้องคงอิทธิพลไว้หลายจุดสังเกต แต่ความปลอดภัยขึ้นอยู่กับวิธีคำนวณจริงว่าเป็นค่าเฉลี่ยเลขคณิตหรืออิง tick ตลอดจนหน้าต่าง cardinality ของจุดสังเกต การกระจายสภาพคล่อง และการควบคุมบล็อก ค่ามัธยฐานอาจตัดค่าผิดปกติบางส่วนได้ แต่ตลาดต้นทางที่สัมพันธ์กันหรือการสูญเสียองค์ประชุมยังทำลายความปลอดภัยหรือความพร้อมใช้งานได้ การตั้งค่า heartbeat และความเบี่ยงเบนกำหนดว่าเมื่อใดฟีดบางประเภทจะเผยแพร่ข้อมูล แต่สัญญาผู้ใช้ข้อมูลยังต้องมีนโยบายความใหม่และความถูกต้องของตนเอง
ตัวอย่างคำนวณ
- ราคา spot ของพูลผลคูณคงที่ ไม่คิดค่าธรรมเนียมในพูลที่มี
1,000,000 ABCและ1,000,000 USDCจึงได้k = 10^12ราคา marginal เป้าหมาย9 USDC/ABCต้องมีเงินสำรอง3,000,000 USDCและ333,333.333333 ABCผู้ซื้อใส่2,000,000 USDCและรับ666,666.666667 ABCราคา marginal สุดท้ายคือ3,000,000 / 333,333.333333 = 9ส่วนราคาดำเนินการเฉลี่ยคือ2,000,000 / 666,666.666667 = 3 USDC/ABCในทางกลับกัน การใส่5,000,000 USDCทำให้เหลือเงินสำรอง6,000,000และ166,666.666667จึงได้ราคา marginal36ไม่ใช่9ค่าธรรมเนียมจริง อาร์บิทราจ สภาพคล่องแบบกระจุกตัว และการปิดสถานะจะเปลี่ยนบัญชีนี้ - วิธีคำนวณ TWAP ในจุดสังเกตหนึ่งนาทีที่ยาวเท่ากันสิบจุด มีราคาเก้าจุดที่
100และหนึ่งจุดที่160TWAP เลขคณิตเพื่อการสอนคือ(9 * 100 + 160) / 10 = 106สูงกว่า 100 เพียง6%แม้ราคา spot สุดท้ายสูงกว่า60%หากต้องการให้ค่าเฉลี่ยเลขคณิตนี้เป็น130ขณะที่อีกเก้าจุดยังเป็น 100 จุดที่ถูกบิดเบือนต้องเป็น400ค่าเฉลี่ย tick ของ Uniswap v3 เป็นค่าเฉลี่ยเรขาคณิต ไม่ใช่ตัวอย่างเลขคณิตนี้ สัญญาผู้ใช้ข้อมูลจึงต้องจำลองวิธีที่ deployment ใช้จริง - ค่ามัธยฐานและองค์ประชุม จุดสังเกตที่ปรับหน่วยแล้วเจ็ดค่าเป็น
[99, 100, 100, 101, 101, 500, 600]ค่ามัธยฐานคือ101รายงานสุดขั้วสองค่าจึงไม่ดึงผลออกจากกลุ่มค่าปกติ หากการยอมรับต้องมีรายงานที่ทำงานอยู่ห้ารายและผู้รายงานที่ถูกต้องสามราย offline จะเหลือเพียง4 < 5ความทนทานต่อค่าผิดปกติไม่ได้รับประกันความพร้อมใช้งาน และพฤติกรรมของแหล่งสำรองจึงเป็นส่วนหนึ่งของแบบจำลองความปลอดภัย - ข้อมูลล้าสมัยและการชำระบัญชีที่ไม่ถูกต้อง ฟีดที่มีทศนิยมแปดหลักคืนค่าดิบ
140,000,000,000หรือ1,400แต่อายุข้อมูลคือ17 minutesขณะที่ผู้ใช้ข้อมูลกำหนดสูงสุด15 minutesจึงต้องปฏิเสธค่านี้ หากยังใช้ค่าล้าสมัยกับ10 ETHเกณฑ์ชำระบัญชี75%และหนี้12,000health factor จะเป็น10 * 1,400 * 0.75 / 12,000 = 0.875แต่ที่ราคาปัจจุบัน2,000จะเป็น1.25การแก้ราคาในภายหลังไม่ย้อนคืนการชำระบัญชีที่เสร็จแล้ว
ความเสี่ยง
- ใช้เชน สินทรัพย์ ฟีด พร็อกซี พูล หรือที่อยู่สัญญาผู้ใช้ข้อมูลผิด
- กลับทิศสินทรัพย์ฐานกับสินทรัพย์อ้างอิง หรือใช้หน่วยราคาไม่สอดคล้องกัน
- ปรับทศนิยมของฟีด โทเค็น และ fixed-point ภายในผิด
- ยอมรับข้อมูลล้าสมัย หรือเข้าใจ heartbeat และตัวกระตุ้นความเบี่ยงเบนว่าเป็นหลักประกันความใหม่
- ยอมรับรอบที่ไม่สมบูรณ์ สถานะไม่ถูกต้อง หรือคำตอบศูนย์ ติดลบ ถูกจำกัด หรืออยู่นอกช่วง
- ราคา spot จากตลาดเดียวที่สภาพคล่องต่ำควบคุมความเสี่ยงขนาดใหญ่ของโปรโตคอล
- หน้าต่าง TWAP สั้นเกินไป มีจุดสังเกตน้อย ถ่วงน้ำหนักผิด หรืออ่านกลับทิศ
- เข้าใจ cardinality การเริ่มต้น การประมาณค่าระหว่างจุด หรือพฤติกรรมแหล่งสำรองผิด
- สภาพคล่องแบบกระจุกตัวหรือ just-in-time ทำให้มูลค่าพูลที่แสดงไม่สะท้อนต้นทุนโจมตี
- ฟีดหลายตัวใช้ตลาด ผู้ให้บริการข้อมูล ผู้ดำเนินงาน กุญแจ หรือระบบควบคุมเดียวกัน
- ผู้รายงาน ตลาด API ผู้ลงนาม เครือข่าย หรือองค์ประชุมล้มเหลวจนไม่มีการอัปเดตหรือความถูกต้อง
- sequencer L2 หยุดทำงาน หรือไม่มีระยะผ่อนผันหลังฟื้นตัวที่ถูกต้อง
- แหล่งสำรองล้าสมัย อ้างอิงวน มีความสัมพันธ์ ปรับสเกลต่างกัน หรือมีความหมายไม่เข้ากัน
- สภาพคล่องแบบ flash และ composability แบบอะตอมทำให้อิทธิพลชั่วคราวนำไปใช้ทำกำไรได้
- ลำดับการอัปเดตออราเคิล front-running sandwich back-running หรือ MEV จากการชำระบัญชีเปลี่ยนผลตอบแทน
- ปัจจัยหลักประกัน เกณฑ์ชำระบัญชี เพดาน โบนัส และสภาพคล่องที่มีอยู่ขยายผลจากข้อผิดพลาดเล็กน้อย
- การเจาะระบบกำกับดูแล ผู้ดูแล guardian multisig หรือกุญแจลงนามเปลี่ยนเส้นทางความเชื่อถือ
- ข้อผิดพลาดในพร็อกซี ตัวรวมผล อะแดปเตอร์ การอัปเกรด storage หรือการกำหนดค่าเลือกค่าผิด
- กลไกตัดวงจรหรือตรรกะแบบ fail-closed ระงับการกู้ ชำระคืน หรือชำระบัญชีที่ถูกต้องในภาวะตึงตัว
- การหยุด การกู้คืน การกระทบยอดบัญชี การจัดสรรหนี้เสีย หรือการจำกัดผลกระทบข้ามโปรโตคอลล้มเหลว
ความเข้าใจผิดที่พบบ่อย
- “การโจมตีออราเคิลทุกครั้งคือการเจาะเครือข่ายออราเคิล” ความล้มเหลวจำนวนมากอาศัยแหล่งที่สภาพคล่องต่ำ ค่าล้าสมัย หน่วยผิด อะแดปเตอร์ไม่ปลอดภัย หรือตรรกะผู้ใช้ข้อมูล ขณะที่เครือข่ายรายงานทำงานตามค่าที่กำหนด
- “ฟีดหลายตัวหรือฟีดแบบกระจายศูนย์รับประกันราคาที่ถูกต้อง” ยังต้องมีความเป็นอิสระ คุณภาพแหล่ง องค์ประชุม ความใหม่ หน่วย การรวมผล และการตรวจสอบของสัญญาผู้ใช้ข้อมูล
- “TWAP ทำให้การบิดเบือนเป็นไปไม่ได้” TWAP เปลี่ยนระยะเวลาและต้นทุนของอิทธิพล แต่หน้าต่างที่อ่อน จุดสังเกตน้อย สภาพคล่องต่ำ หรือการควบคุมบล็อกยังถูกโจมตีได้
- “การห้าม flash loan แก้ความเสี่ยงออราเคิล” flash loan เป็นเพียงแหล่งเงินทุนหนึ่ง เงินทุนตนเอง เครดิต การกู้ข้ามโปรโตคอล การเจาะผู้รายงาน และการกำหนดค่าผิดยังคงอยู่
- “เมื่อราคาฟื้นตัว ความเสียหายจะถูกย้อนคืน” การกู้ การสร้าง การแลกคืน การชำระราคา และการชำระบัญชีที่เป็นมาตรฐานยังมีผล เว้นแต่โปรโตคอลจะมีกระบวนการกู้คืนที่ได้รับอนุญาตแยกต่างหาก
หัวข้อที่เกี่ยวข้อง
แหล่งที่มา
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (เข้าถึงเมื่อ: 2026-08-13)
- Chainlink Data Feeds - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- Data Feeds API Reference - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- L2 Sequencer Uptime Feeds - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- Uniswap v2 Core - Uniswap Labs (เข้าถึงเมื่อ: 2026-08-13)
- Price Oracles - Uniswap Developers (เข้าถึงเมื่อ: 2026-08-13)
- Oracles - Aave Protocol Documentation (เข้าถึงเมื่อ: 2026-08-13)
- Flash Loans - Aave Protocol Documentation (เข้าถึงเมื่อ: 2026-08-13)