ที่มาของต้นฉบับ: Beosin
วันที่ 9 มิถุนายน Anthropic ได้เปิดตัวเวอร์ชันสาธารณะของ Claude Fable 5 อย่างเป็นทางการ โดยก่อนหน้านี้ Mythos มีความสามารถโดดเด่นในการค้นหาช่องโหว่ด้านความปลอดภัย และสามารถระบุช่องโหว่ที่ซ่อนอยู่ภายในระบบได้อย่างรวดเร็ว ทำให้ได้รับความสนใจอย่างมากในวงการความปลอดภัยทางไซเบอร์
เหตุการณ์ล่าสุดของ Zcash เป็นตัวอย่างที่ชัดเจนของการใช้ AI ในการค้นหาช่องโหว่ของบล็อกเชน นักวิจัยด้านความปลอดภัย Taylor Hornby ใช้โมเดล Anthropic Claude Opus 4.8 ในการค้นพบช่องโหว่ด้านความสมบูรณ์ของ Orchard Privacy Pool ที่ซ่อนอยู่นานสี่ปี ซึ่งการตรวจสอบด้วยมือหลายครั้งก่อนหน้านี้ไม่สามารถตรวจพบได้ ช่องโหว่นี้สามารถสร้าง ZEC เทียมที่ไม่ถูกตรวจจับได้ไม่จำกัดในทางทฤษฎี ส่งผลให้ราคา ZEC ร่วงลงกว่า 40%
ปัจจุบัน AI แสดงประสิทธิภาพอันน่าทึ่งในด้านการจับคู่รหัสและการกรองเบื้องต้นแบบจำนวนมาก การผสานรวม AI เข้ากับกระบวนการตรวจสอบความปลอดภัยของบล็อกเชนและสัญญาอัจฉริยะกำลังกลายเป็นแนวโน้มในอุตสาหกรรมความปลอดภัย Web3 บทความนี้จะวิเคราะห์ข้อได้เปรียบและข้อจำกัดของ AI ในการตรวจสอบสัญญาอัจฉริยะ โดยอิงจากกรณีศึกษาช่องโหว่จริงและผลการทดสอบของ Fable 5
สถานการณ์ข้อได้เปรียบของการตรวจสอบโดย AI
กรณีศึกษา: การชนกันของช่องจัดเก็บ
สัญญาฉบับนี้ใช้ส่วนประกอบต่อไปนี้สองอย่างพร้อมกัน:
1. การแมปรางวัลที่กำหนดเอง (ใช้บันทึกรางวัลที่ผู้ใช้สามารถรับได้)
2. ReentrancyGuard ของไลบรารี Solady (ป้องกันการโจมตีแบบซ้ำซ้อน)
แต่การจัดวางการจัดเก็บของสองส่วนประกอบเกิดการขัดแย้ง
ในกรณีของ Solady ReentrancyGuard เพื่อการปรับแต่ง gas ให้สูงสุด จึงใช้ช่องการจัดเก็บที่คงที่และมีหมายเลขต่ำ (มักได้มาจากการคำนวณเฉพาะเพื่อให้ได้ slot ที่ใกล้ค่าคงที่) ตรรกะทั่วไปของ modifier nonReentrant คือ:
// รุ่นที่เรียบง่าย modifier nonReentrant() { // เมื่อเริ่มต้น ให้เขียนค่า guard slot เป็น 0xff...ff (ค่า Sentinel) assembly { if eq(sload(REENTRANCY_GUARD_SLOT), 2) { revert(...) } // 2 หมายถึงถูกล็อก sstore(REENTRANCY_GUARD_SLOT, 2) // ถูกล็อก } _; // กู้คืนเมื่อฟังก์ชันเสร็จสิ้น assembly { sstore(REENTRANCY_GUARD_SLOT, 1) }}
การกำหนดค่าการให้รางวัลแบบกำหนดเอง:
mapping(address => uint256) public rewards;
เนื่องจากกฎการจัดวางการจัดเก็บของ Solidity (slot แรกของ mapping จะถูกคำนวณจากตำแหน่งที่ประกาศ) slot แรกของ rewards mapping จึงตรงกับ slot ป้องกันคงที่ของ ReentrancyGuard อย่างสมบูรณ์
ขั้นตอนการโจมตี (ขั้นตอนละเอียด):
1. ผู้โจมตีเรียกใช้ฟังก์ชัน getReward()
2. ตัวแก้ไข nonReentrant ถูกกระตุ้น ทำให้ guard slot ถูกเขียนเป็น 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (ทั้งหมดเป็น 1)
3. สัญญาอัจฉริยะอ่าน rewards[ที่อยู่ของผู้โจมตี] ต่อมา — แต่เนื่องจากเกิดการชนกันของสโลต มันจึงอ่านค่า 0xff...ff ซึ่งเป็นค่าขนาดใหญ่มากจาก guard slot
4. สัญญาเชื่อว่า “มีรางวัลจำนวนมาก” จึงโอน ETH นี้ให้ผู้โจมตี พร้อมพยายามล้างค่า rewards[ผู้โจมตี] ออก (แต่กลับเขียนกลับไปยัง slot ป้องกันเดิม)
5. เนื่องจาก modifier จะคืนค่า slot เมื่อฟังก์ชันสิ้นสุด ผู้โจมตีจึงสามารถเรียก getReward() อีกครั้งเพื่อทำซ้ำกระบวนการ
6. ผู้โจมตีเรียกใช้ซ้ำ 200 ครั้ง โดยแต่ละครั้งสามารถดึง ETH จำนวนคงที่ได้สำเร็จ จนกระทั่ง ETH ที่สามารถดึงได้ในสัญญาถูกดึงหมด
สิ่งที่ควรสังเกตคือ นี่ไม่ใช่การโจมตีแบบ “reentrancy attack” ในความหมายแบบดั้งเดิม แต่เป็นการใช้ประโยชน์จากกลไกป้องกันของ ReentrancyGuard ที่ถูกพลิกกลับโดยการชนกันของข้อมูลจัดเก็บ ทำให้เกิดช่องโหว่ที่สามารถรับรางวัลได้ไม่จำกัด การตรวจสอบด้วยมือมักไม่ได้เจาะลึกทีละบรรทัดเพื่อวิเคราะห์โครงสร้างการจัดเก็บของไลบรารีภายนอก แต่ AI สามารถเปรียบเทียบเวอร์ชันไลบรารีและแมปตำแหน่งการจัดเก็บอย่างแม่นยำในทันที ทำให้สามารถตรวจจับช่องโหว่ประเภท “การชนกันที่ซ่อนเร้น” ได้โดยตรง
สถานการณ์ข้อเสียของการตรวจสอบโดย AI
Fable 5 ในการตรวจจับช่องโหว่ประเภทสัญญาเดียว ไวยากรณ์โค้ดบริสุทธิ์ และการจัดเก็บระดับพื้นฐาน มีประสิทธิภาพดีเยี่ยม แต่เมื่อเผชิญกับความหมายการรวมกันข้ามโปรโตคอลและการโจมตีแบบรวมสัญญาหลายแห่ง ยังคงมีข้อจำกัดชัดเจน เราได้ใช้เวอร์ชันล่าสุดที่เปิดเผยของ Fable 5 เพื่อทดสอบซ้ำสัญญาที่เกี่ยวข้องกับเหตุการณ์การโจมตี Curve LlamaLend sDOLA ผลลัพธ์ยืนยันปัญหานี้
การตรวจสอบครั้งนี้เกี่ยวข้องกับรายการสัญญา: crvUSD Controller.vy, sDOLA.sol, ERC4626.sol และสัญญาชุดอื่นๆ แต่ Fable 5 ไม่สามารถระบุความเสี่ยงหลักที่เกี่ยวข้องกับการโจมตีครั้งนี้:


เหตุการณ์นี้เป็นช่องโหว่แบบรวมโปรโตคอลแบบคลาสสิก รหัสสัญญาเดียวไม่มีปัญหาด้านไวยากรณ์หรือตรรกะ แต่ผู้โจมตีใช้การเชื่อมโยงระหว่างโปรโตคอลหลายตัวเพื่อสร้างเส้นทางการโจมตี:
1. ใช้เครื่องมือสินเชื่อแบบฟ้าแลบเพื่อจัดการราคาในสระของ Curve และลดราคาสินทรัพย์ของ sDOLA (ส่วนแบ่งคลัง ERC-4626) อย่างไม่เป็นธรรม;
2. ตำแหน่งกู้ยืมจำนวนมากที่ใช้ sDOLA เป็นหลักประกันได้รับผลกระทบจากขีดจำกัดการถูกยึดคืน;
3. ผู้โจมตีดำเนินการปิดตำแหน่งเป็นจำนวนมากเพื่อทำกำไร
ช่องโหว่ประเภทนี้เกิดขึ้นจากการรวมกันของโปรโตคอล DeFi หลายตัว ซึ่งทดสอบความสามารถในการวิเคราะห์แบบรวมของ AI/ผู้เชี่ยวชาญด้านการตรวจสอบ โดยพิจารณาจากธุรกิจโดยรวมและแบบจำลองเศรษฐกิจของโปรโตคอล ปัจจุบันการตรวจสอบด้วย AI ยังมีข้อจำกัดในด้านความหมายของการรวมกันข้ามโปรโตคอล
ข้อสรุป
จากการทดสอบด้วยกรณีศึกษาจริง พบว่า Fable 5 สามารถค้นพบช่องโหว่ที่ซ่อนอยู่ซึ่งการตรวจสอบด้วยมืออาจละเลยได้ ในสถานการณ์ที่เป็นมาตรฐานและละเอียด เช่น ความขัดแย้งของช่องจัดเก็บ ช่องโหว่รูปแบบโค้ด ข้อบกพร่องเชิงตรรกะของสัญญาเดียว และการกรองโค้ดแบบเป็นกลุ่ม อย่างไรก็ตาม เมื่อเผชิญกับการรวมกันของความหมายข้ามโปรโตคอล แบบจำลองเศรษฐกิจของ DeFi การโจมตีที่เชื่อมโยงหลายสัญญา และช่องโหว่เชิงตรรกะทางธุรกิจที่ซับซ้อน ระบบยังไม่สามารถเข้าใจแก่นแท้ของระบบนิเวศบนบล็อกเชนหรือค้นหาเส้นทางการโจมตีแบบรวมกันได้ ซึ่งส่วนนี้ยังคงต้องให้ผู้เชี่ยวชาญด้านการตรวจสอบความปลอดภัยเป็นผู้วิเคราะห์หลัก
ในงานตรวจสอบประจำวัน Beosin ได้สร้างกระบวนการตรวจสอบที่สุกงอมโดยการร่วมมือระหว่าง AI กับผู้เชี่ยวชาญด้านความปลอดภัย ซึ่งไม่เพียงแต่เพิ่มประสิทธิภาพการตรวจสอบอย่างมาก แต่ยังสามารถค้นพบความเสี่ยงด้านรายละเอียดที่อาจเกิดขึ้นและช่องโหว่ทางตรรกะธุรกิจที่ซับซ้อนได้ดียิ่งขึ้น ทำให้งานตรวจสอบมีประสิทธิภาพ ครอบคลุม และลึกซึ้งยิ่งขึ้น
