ทำไมความปลอดภัยของสัญญาอัจฉริยะจึงต่างจากความปลอดภัยของซอฟต์แวร์ทั่วไป?

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

ลองนึกถึงสตูดิโอสมมติชื่อ ลาร์กสเปอร์ แล็บส์ ซึ่งมีสมาชิกสี่คน กำลังสร้างระบบกองเงินออมแบบง่ายที่สมาชิกฝากเงินและถอนส่วนของตนได้ โคฟี นักพัฒนา เขียนบันทึกตรวจทานก่อนนำระบบขึ้นใช้งานว่า: 'withdraw ส่งเงินก่อนแล้วค่อยตั้งยอดคงเหลือเป็น 0 setFee เปิดให้ทุกคนเรียกใช้ จะจำกัดสิทธิ์ทีหลัง ใช้คอมไพเลอร์รุ่นเก่าตามบทสอน อ่านราคาโทเคนรางวัลจากพูลซื้อขายขนาดเล็กเพียงแห่งเดียว การทดสอบ: ลองฝาก + ถอนด้วยตัวเองครั้งเดียว ใช้งานได้' ทุกบรรทัดเป็นช่องโหว่ประเภทที่รู้จักกันอยู่แล้ว

ช่องโหว่ของสัญญาอัจฉริยะที่พบบ่อยที่สุดมีอะไรบ้าง?

ช่องโหว่ของสัญญาอัจฉริยะที่พบบ่อยที่สุดคือข้อบกพร่องในการควบคุมสิทธิ์เข้าถึง การบิดเบือนข้อมูลจากออราเคิลราคา ข้อผิดพลาดทางตรรกะ การไม่ตรวจสอบข้อมูลนำเข้า และการเรียกเข้าซ้ำ ซึ่งอยู่ในอันดับต้น ๆ ของ OWASP Smart Contract Top 10 ประจำปี 2025 ส่วน Ethereum.org ก็ครอบคลุมช่องโหว่หลักประเภทเดียวกัน

การเรียกเข้าซ้ำ

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

การควบคุมการเข้าถึง

ฟังก์ชันที่มีความอ่อนไหวแต่ใครก็เรียกใช้ได้ ฟังก์ชัน setFee แบบสาธารณะของ Kofi เปิดให้คนที่ไม่เกี่ยวข้องเปลี่ยนค่าธรรมเนียมได้ Ethereum.org อธิบายรูปแบบต่าง ๆ เช่น บทบาทเจ้าของ การควบคุมสิทธิ์เข้าถึงตามบทบาท และการอนุมัติด้วยหลายลายเซ็น

จำนวนเต็มล้นเกินและต่ำกว่าขอบเขต

การคำนวณที่ค่าเกินขีดจำกัดแล้ววนกลับ ทำให้ยอดคงเหลือที่ต่ำกว่าศูนย์กลายเป็นตัวเลขมหาศาล Ethereum.org ระบุว่า Solidity 0.8.0 และรุ่นที่ใหม่กว่าจะปฏิเสธกรณีนี้ตามค่าเริ่มต้น ส่วนโค้ดรุ่นเก่าต้องเพิ่มการตรวจสอบไว้อย่างชัดเจน นี่จึงเป็นเหตุผลว่าทำไมคอมไพเลอร์รุ่นเก่าของโคฟีจึงสำคัญ

การบิดเบือนออราเคิล

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

ข้อผิดพลาดด้านตรรกะและการตรวจสอบความถูกต้อง

กฎที่ไม่ตรงกับการออกแบบที่ตั้งใจไว้ หรือข้อมูลนำเข้าที่ไม่เคยได้รับการตรวจสอบ เช่น จำนวนเงินเป็นศูนย์หรือที่อยู่ที่ไม่คาดคิด

ทีมทดสอบและตรวจสอบสัญญาอัจฉริยะกันอย่างไร?

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

1. การทดสอบหน่วยย่อยและการทดสอบคุณสมบัติ

เขียนการทดสอบสำหรับทุกฟังก์ชัน รวมถึงกรณีโจมตี เช่น ผู้รับที่เรียกกลับเข้ามาในฟังก์ชันเดิม การทดสอบแบบฟัซซิงจะทดลองข้อมูลนำเข้าแบบสุ่มหลายพันชุดโดยอัตโนมัติ

2. การวิเคราะห์โค้ดโดยไม่เรียกใช้งาน

Ethereum.org ระบุชื่อเครื่องมือ เช่น Slither, Mythril และ Aderyn ซึ่งสแกนโค้ดเพื่อหารูปแบบที่ทราบว่ามีความเสี่ยง.

3. ทดสอบเครือข่าย

นำไปใช้งานบนเครือข่ายทดสอบสาธารณะก่อนใช้เครือข่ายหลัก Ethereum.org แนะนำให้ใช้ Sepolia สำหรับพัฒนาแอปพลิเคชันและสัญญาอัจฉริยะ โดยอีเธอร์บนเครือข่ายทดสอบถูกออกแบบมาให้ไม่มีมูลค่าจริง จึงไม่เสียเงินเมื่อเกิดข้อผิดพลาด

4. การตรวจทานโดยผู้ร่วมวิชาชีพและคลังที่ผ่านการตรวจสอบ

ใช้การควบคุมเวอร์ชัน ให้ผู้ตรวจทานอิสระตรวจทุกการเปลี่ยนแปลง และใช้ไลบรารีที่ผ่านการตรวจทานอย่างรอบคอบ เช่น OpenZeppelin Contracts แทนการเขียนระบบควบคุมการเข้าถึงขึ้นใหม่ทั้งหมด

5. การตรวจสอบ การให้รางวัลแจ้งช่องโหว่ และการเฝ้าระวัง

การตรวจสอบโดยผู้ตรวจสอบอิสระช่วยเพิ่มความรอบคอบ แต่ดังที่ ethereum.org ระบุไว้ การตรวจสอบไม่ได้พบข้อบกพร่องทุกจุด โครงการให้รางวัลค้นหาข้อบกพร่อง ฟังก์ชันหยุดทำงานฉุกเฉิน และการเฝ้าติดตามเหตุการณ์ช่วยดูแลความเสี่ยงที่ยังเหลืออยู่

การตรวจสอบความปลอดภัยแบบที่ยังไม่ดีและแบบที่ปรับปรุงแล้วมีลักษณะอย่างไร?

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

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

ข้อผิดพลาดที่พบบ่อยด้านความปลอดภัยของสัญญาอัจฉริยะมีอะไรบ้าง?

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

บทเรียนนี้อยู่ในส่วนใดของ Tosheo.ai?

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

แหล่งข้อมูลและขอบเขต

ethereum.org, ความปลอดภัยของสัญญาอัจฉริยะ (ตรวจสอบเมื่อ 19 October 2026) ↗

OWASP ความเสี่ยง 10 อันดับแรกของสัญญาอัจฉริยะ ปี 2025 (ตรวจสอบเมื่อ 19 ตุลาคม 2026) ↗

ethereum.org, เครือข่ายและเครือข่ายทดสอบ (ตรวจสอบเมื่อ 19 October 2026) ↗