26 มิ.ย. 2022 เวลา 02:30 • คริปโทเคอร์เรนซี
Harmony : DeFi จอมปลอม
Decentralized In Name Only (DINO)
Governance In Name Only (GINO)
1
เมื่อวานนั่งพยายามทำความเข้าใจเกี่ยวกับการแฮ็กของ Harmony Protocol ในที่สุดก็พอปะติดปะต่อภาพได้ เลยขอนำมาเล่าให้ฟังว่า DeFI บางตัว มันช่างไร้ประโยชน์ และหลอกลวงเช่นไร
ก่อนอื่น เริ่มจากว่า Harmony Protocol มี bridge ของ Ethereum ที่ชื่อว่า Horizon Bridge ซึ่งทำการ bridge สินทรัพย์จากเชนของ Ethereum, Binance, Bitcoin เข้าไปยัง Platform ของ Harmony ซึ่งอ้างว่าเป็นเชนที่สามารถทำงานได้เร็ว และรองรับปริมาณธุรกรรมได้สูง
ซึ่งวิธีการทำงานของ bridge ในลักษณะนี้ มันเหมือนกับการเอาสินทรัพย์ไปฝากกับ Smart Contract ของ Horizon Bridge เอาไว้ ซึ่งสินทรัพย์นี้จะถูกล็อกเอาไว้ โดยผู้ฝากก็จะได้รับ token ของเชน Harmony และสามารถทำธุรกรรมในนั้นได้
  • Harmony Bridge ทำงานอย่างไร?
Harmony Bridge มีชิ้นส่วน 2 ชื้นหลัก คือ
  • 1.
    มี smart contract หลายตัวทำงานในแต่ละเชน ทำหน้าที่ในการควบคุมปริมาณเหรียญ รวมไปถึงการ lock token
  • 2.
    มีกลุ่มของ validator ที่คอยฟังรายการธุรกรรมต่าง ๆ ที่เกิดขึ้นในแต่ละ smart contract เวลาที่คนเอาสินทรัพย์มา lock ไว้ในเชน validator ทั้งหลายใน pool ก็จะตรวจสอบธุรกรรมเหล่านี้ แล้วก็จะส่งรายการนี้ไปยัง Harmony chain เพื่อที่จะสร้าง token ในจำนวนเท่ากัน
ในทางกลับกันหากมีการ burn เหรียญในเชนของ Harmony เกิดขึ้น ธุรกรรมก็จะถูกตรวจสอบโดย validator ใน pool และส่งรายการดังกล่าวไปยังเชนอื่น ๆ เพื่อทำการปล่อยเหรียญที่ lock ไว้ออกมา
  • Harmony Bridge มีปัญหาตรงไหน?
จุดหลักของปัญหา คือ ส่วนที่ทำหน้าที่ในการ lock และ unlock เหรียญ​เพราะเวลา lock เหรียญ เหรียญจะเข้ามาอยู่ใน pool กลาง ซึ่งถูกควบคุมโดย smart contract ทันที ซึ่งกลไกในการปล่อยเหรียญเป็นระบบที่รวมศูนย์ (centralized) มาก ๆ
Roadmap
เพื่อให้ไม่สับสน ผมขออธิบายเฉพาะส่วนที่เกี่ยวข้องกับการ hack Ethereum token (Ether) ในฝั่งของ Ethereum เท่านั้น ซึ่งเชนอื่นก็จะมีการทำงานในลักษณะที่คล้ายกัน
เริ่มต้นจากสัญญาแรกคือ EthManager ซึ่งทำหน้าที่ lock และ unlock Ethereum token และเมื่อมีคน call method เหล่านี้ ก็จะมีการส่ง event ออกไปข้างนอก
ส่วนสัญญาที่สองคือ MultiSigWallet ทำหน้าที่เป็นเหมือนสมุดเซ็นของผู้บริหาร จะมี method หลักสี่อันคือ Submission, Confirm, Execution ซึ่งกำหนดไว้ว่าต้องมีลายเซ็น 2 ลายเซ็นจาก 4 ลายเซ็น แล้วระบบจะทำการอนุมัติรายการนั่นเอง
และสัญญาที่สามเป็นสัญญาที่ชื่อ BridgedToken ซึ่งเป็นสัญญา HRC20 ของ Harmony ซึ่งมีคำสั่งหลักที่เกี่ยวข้องคือ mint และ burn นั่นเอง
แต่สัญญาสามตัวนี้ไม่ได้ทำงานด้วยกันเองโดยตรง ระบบอาศัยโปรแกรมที่คอยฟัง event ที่เกิดขึ้นจาก smart contract เหล่านี้ และทำงานตาม event ที่เกิดขึ้น ซึ่งฟังดูดี แต่ตรงนี้แหล่ะที่เกิดความเป็น centralized เกิดขึ้น เพราะแปลว่าใครที่เข้าถึงโปรแกรมนี้ จะสามารถโจมตีการทำงานได้ทันที ซึ่งเรียกว่าเป็นจุดตายก็เป็นได้
ส่วนสิ่งที่เกิดขึ้น ตอนนี้ยังไม่แน่ชัด แต่มีรายการธุรกรรมที่เกิดขึ้นแปลก ๆ ใน MultiSigWallet contract ซึ่งผมจะขอยกเฉพาะธุรกรรมแรกเท่านั้น ดังนี้
  • 1.
    ในธุรกรรม (ซึ่งน่าจะถูกคนร้ายแฮ็ก) มีการส่งคำสั่ง submitTransaction เข้ามาและทำการ confirmTransaction ด้วยตนเองใน block 15012639
  • 2.
    ในธุรกรรม มีอีกเจ้าของหนึ่ง (0x812d8622C6F3c45959439e7ede3C580dA06f8f25) เข้ามา confirm ใน block 15012646 ทำให้ได้ลายเซ็นครบ และรายการธุรกรรมก็ถูก execute ทันที ทำให้เกิดการ unlock เหรียญ และโอนเงิน 13,100 ETH ไปให้บัญชีของ Exploiter ขึ้น
งงกันไหมครับว่าเกิดอะไรขึ้นตรง step นี้ การที่ต้องมีลายเซ็น 2 อันทำไมไม่ช่วยป้องกันปัญหานี้ล่ะ?
ตรงนี้ คนอื่นคิดว่าทั้งสองบัญชีถูก exploit แต่ผมคิดว่าเป็นเพียงบัญชีแรกเท่านั้นที่ถูก exploit ส่วนบัญชีหลังเพียงทำหน้าที่เซ็นโดยไม่ดูอะไร
หากให้เปรียบเทียบกับโลกจริง ผมขอยกเคสของ Essilor ซึ่ง CFO ถูกหลอกให้รักและโอนเงินให้ เกิดความเสียหายกว่า 6 พันล้านบาท ซึ่งการอนุมัติการโอนเงินก็ต้องใช้ลายเซ็น 2 อันเช่นกัน คือ CFO และหัวหน้าฝ่ายบุคคล ซึ่งในเคสนี้ CFO เป็นคนสร้างรายการ และอนุมัติเองหนึ่งลายเซ็น ส่วนหัวหน้าฝ่ายบุคคลก็เซ็นอีกหนึ่งลายเซ็น
ซึ่งเป็นการ cross check กันเพื่อป้องกันการทุจริต แต่ป้องกันอะไรไม่ได้ เพราะเขาอ้างว่า เขาเซ็นแบบไม่ได้ดูรายละเอียด
ในเคสของ Harmony ก็เช่นกัน ลายเซ็นที่ 2 เป็นลายเซ็นที่เกิดขึ้นจากโปรแกรมที่คอยฟังว่า มีธุรกรรมอะไรใหม่ ๆ และทำหน้าที่อนุมัติธุรกรรมเหล่านั้น โดยไม่ได้ดูว่ามันคืออะไร (เรียกแบบบ้าน ๆ ว่า หลับหูหลับตาเซ็น) ส่วน validator ที่ว่ามี ผมก็เดาเอาว่า ก็หลับหูหลับตาอนุมัติเช่นกัน มีกี่ลายเซ็นก็ไม่มีประโยชน์ เปลืองค่า gas เปล่า ๆ
ดังนั้น การโจมตีจึงอาศัยการโจมตีเพียงจุดเดียวเท่านั้น ใครที่มีกุญแจส่วนตัว (private key) ของเจ้าของคนแรกก็สามารถที่จะโอนเงินที่มีอยู่ออกได้แล้ว
แย่ยิ่งไปกว่านั้น บัญชีเดียวกันนี้ดันถูกใช้ในทุก ๆ เชนที่เป็น Ethereum-compatible ดังนั้นพอบัญชีนี้ถูก compromised เหรียญจึงถูก drain ออกจากทุก ๆ เชนที่เกี่ยวข้องในเวลาใกล้ ๆ กันหมดเลย ทำให้เกิดความเสียหายมาก
นี่น่าจะเป็นตัวอย่างที่ดีว่า การใช้ smart contract นั้น แทบไม่มีประโยชน์ใด ๆ เลย เป็นการทำระบบให้ซับซ้อนผ่าน smart contract เท่านั้นเอง พอต้องพึ่ง smart contract หลาย ๆ ตัว ก็เท่ากับการเพิ่มจุดที่สามารถโจมตีได้เท่านั้นเอง
ในการทำงานแบบ centralized นั้น เราสามารถที่จะปกป้องระบบการทำงานได้ง่ายดาย เช่นมีการออกแบบระบบ network / firewall ต่าง ๆ ให้ปลอดภัย มีระบบอนุมัติที่ชัดเจน มีการตรวจสอบที่ชัดเจน มีอำนาจอนุมัติที่ชัดเจน มีเอกสารประกอบการอนุมัติที่ชัดเจน ทำให้ลดความเสี่ยงไปได้มาก
แต่ในโลก decentralized แบบไร้สาระแบบนี้ มันช่างไม่แตกต่างกับการเอาสมุดเซ็นเอกสารไปวางไว้ในตลาด ใครอยากทำอะไรก็ใส่ธุรกรรมลงไป และปลอมลายเซ็นของเจ้าหน้าที่คนหนึ่ง ก็สามารถโกงเงินได้แล้ว แถมยังแทบจับมือใครดมไม่ได้ ยิ่งไปกว่านั้น ดีไม่ดี คนที่โกงอาจจะเป็นคนในก็คงไม่แปลกอะไร!
แล้วนักลงทุนจะไปเรียกร้องเอากับใครได้ คงทำได้แค่เพียงโทษตัวเองว่า โง่เองที่ไปเล่นกับไฟ 🔥!
โฆษณา