SSO Module 2 - ភាពងាយរងគ្រោះនៃកិច្ចសន្យាឆ្លាតវៃ៖ ការសិក្សាស៊ីជម្រៅអំពីការវាយប្រហារបែប Reentrancy
កិច្ចសន្យាឆ្លាតវៃផ្តល់តម្លាភាព ប៉ុន្តែមានហានិភ័យ។ អត្ថបទនេះបង្ហាញពីភាពងាយរងគ្រោះដូចជា Reentrancy ដោយមានការបាត់បង់ 150 លានដុល្លាររបស់ DAO ជាករណី។ Integer Overflow បាននាំឱ្យ BeautyChain ខាតបង់ 900 លានដុល្លារ។ DAOMaker បាត់បង់ 4 លានដុល្លារដោយសារកំហុស Access Control។ FlashLoan Attacks បានធ្វើឱ្យ Harves Finance ខាតបង់ 38 លានដុល្លារ។
ដោយ Markos Mebellis

នៅលើទំព័រនេះ
កិច្ចសន្យាឆ្លាតវៃកំពុងធ្វើបដិវត្តន៍ឧស្សាហកម្មសកលដោយសារប្រសិទ្ធភាព តម្លាភាព និងលក្ខណៈមិនអាចកែប្រែបានរបស់ពួកវា។ ប៉ុន្តែ ការរចនាបែបបើកចំហ និងស្វ័យប្រវត្តិរបស់ពួកវាក៏បង្ហាញពួកវាឱ្យប្រឈមនឹងហានិភ័យផងដែរ។ ដើម្បីបង្កើនសក្តានុពលរបស់ពួកវាឱ្យអតិបរមា ខណៈកាត់បន្ថយការគំរាមកំហែង វាជាការសំខាន់ក្នុងការយល់ដឹងពីភាពងាយរងគ្រោះ និងផ្លូវវាយប្រហារដែលអាចកើតមានរបស់ពួកវា។ ការបង្កើត និងថែទាំកិច្ចសន្យាទាំងនេះទាមទារការយកចិត្តទុកដាក់ដោយប្រុងប្រយ័ត្ន និងការអនុវត្តតាមការអនុវត្តល្អបំផុត។ អត្ថបទនេះសិក្សាស៊ីជម្រៅអំពីភាពងាយរងគ្រោះទូទៅ ដោយបង្ហាញឧទាហរណ៍ជាមួយករណីជាក់ស្តែង ដើម្បីបង្កើនការយល់ដឹង។ តោះមើលអត្ថបទខាងក្រោម ដែលផ្តល់ដោយ Salus Security។
ភាពងាយរងគ្រោះសំខាន់ៗ៖
**Reentrancy៖** នៅទីនេះ អ្នកវាយប្រហារទាញយកប្រយោជន៍ពីចន្លោះប្រហោង ដោយចូលម្តងទៀតទៅក្នុងមុខងារ មុនពេលប្រតិបត្តិការសំខាន់ៗបញ្ចប់ ឬតម្លៃត្រូវបានធ្វើបច្ចុប្បន្នភាព។
Reentrancy លើមុខងារតែមួយ៖ នេះកើតឡើងនៅពេលដែលកិច្ចសន្យាធ្វើអន្តរកម្មជាមួយកិច្ចសន្យាបោកប្រាស់ ដែលអនុញ្ញាតឱ្យវាចូលម្តងទៀតទៅក្នុងមុខងារមួយ។ ឧទាហរណ៍ កិច្ចសន្យាព្យាបាទអាចចូលម្តងទៀតជាបន្តបន្ទាប់ទៅក្នុងមុខងារ 'withdrawBalance' ដោយបឺតយក ether បន្ថែមទៀត មុនពេលសមតុល្យត្រូវបានធ្វើបច្ចុប្បន្នភាព។
ការវាយប្រហារគួរឱ្យកត់សម្គាល់៖
- The DAO (2016)៖ បន្ទាប់ពីប្រមូលបាន 150 លានដុល្លារ វាត្រូវបានហេកដោយសារភាពងាយរងគ្រោះក្នុងកូដ។ នេះបាននាំឱ្យមានការបែកបាក់ក្នុងបណ្តាញ Ethereum។
- PolyDex (2021)៖ បាត់បង់ 500k ដោយសារការវាយប្រហារ reentrancy លើ PLX Locker Smart Contract។
- Bacon Protocol (2022)៖ រងការខាតបង់ 1M ពីកំហុស reentrancy ក្នុងមុខងារ lend()។
- Lendf.Me (2020)៖ បាត់បង់ប្រហែល 24.7 លានដុល្លារក្នុងគ្រីបតូខេនស៊ីជាច្រើនប្រភេទ។
**Cross-Function Reentrancy:** កើតឡើងពីស្ថានភាពរួមគ្នារវាងមុខងារផ្សេងៗគ្នា និងការការពារការចូលឡើងវិញខ្សោយ។ ឧទាហរណ៍ 'balances' ខាងលើបង្ហាញថា ទោះបីជា 'withdrawAll' មានការការពារក៏ដោយ ក៏អ្នកវាយប្រហារនៅតែអាចកេងប្រវ័ញ្ចមុខងារ 'transfer' បាន។
ឧប្បត្តិហេតុដ៏ល្បីល្បាញ៖
- DFX Finance (2022)៖ បាត់បង់ជាង 7 លានដុល្លារ ដោយសារការវាយប្រហារដែលកេងប្រវ័ញ្ចមុខងារមួយដែលគ្មានការការពារការចូលឡើងវិញ។
- Hundred Finance (2022)៖ បាត់បង់ប្រហែល 6.5 លានដុល្លារ បន្ទាប់ពីការវាយប្រហារបែប reentrancy បានកេងប្រវ័ញ្ចមុខងារ borrowFresh។
- Fei Protocol (2022)៖ បាត់បង់ប្រហែល 80 លានដុល្លារពីការវាយប្រហារដោយប្រើប្រាស់ចន្លោះប្រហោង Reentrancy។
**Cross-Contract Reentrancy:** លទ្ធផលមកពីស្ថានភាពរួមគ្នានៅទូទាំងកុងត្រាផ្សេងៗគ្នា និងលំដាប់នៃការកែប្រែអថេរខុស។ ទោះបីជាមុខងារមានការការពារក៏ដោយ មុខងារផ្សេងទៀត ដូចជា 'burnAccount' នៅតែអាចត្រូវបានកេងប្រវ័ញ្ច។
ការវាយប្រហារសំខាន់ៗ៖
- Rari Capital (2021)៖ បាត់បង់ប្រហែល 10 លានដុល្លារ (~2600 ETH) ក្នុងរយៈពេលតិចជាងមួយម៉ោង។
- ValueDefi (2021)៖ បាត់បង់ 5345.314 WBNB ដោយសារការគណនាភាគហ៊ុនមិនត្រឹមត្រូវ ដែលពឹងផ្អែកលើទិន្នន័យខាងក្រៅ។
Read-Only Reentrancy:
Read-only reentrancy កេងប្រវ័ញ្ចមុខងារមួយ ដែលទោះបីមិនផ្លាស់ប្តូរស្ថានភាពកុងត្រា ក៏អាចបង្កើតលទ្ធផលខុសនៅពេលស្ថានភាពមិនស៊ីសង្វាក់គ្នា។
ការវាយប្រហារគួរឱ្យកត់សម្គាល់:
- QuickSwap (2022): អ្នកកេងប្រវ័ញ្ចបានប្រើប្រាស់ flash loan ខុសដើម្បីកែតម្រូវតម្លៃ spot នៃទ្រព្យសកម្ម ដោយបន្លំយក 138 ETH និង 700 MATIC។ នេះអាចធ្វើទៅបានដោយសារកំហុសនៅក្នុង Curve LP oracle។
- dForce (2023): កំហុស read-only reentrancy មាននៅក្នុងកូដដែលចូលប្រើ price oracle នៅលើខ្សែសង្វាក់ Arbitrum និង Optimism ជាមួយ Curve Finance។
- Sentimente (2023): ការវាយប្រហារដែលកេងប្រវ័ញ្ចកំហុស read-only reentrancy បាននាំឱ្យមានការលួច 1 លានដុល្លារ។ សំណាងល្អ 90% ត្រូវបានប្រគល់មកវិញដោយជនល្មើស។
- Sturdy (2023): បាត់បង់ប្រហែល 442 ETH ដោយសារបញ្ហា read-only reentrancy របស់ Balancer ដែលតម្លៃរបស់ B-stETH-STABLE ត្រូវបានកែប្រែ។
ការការពារភាពងាយរងគ្រោះ Reentrancy:
- ត្រូវប្រកាន់ខ្ជាប់នូវគំរូ check-effect-interaction ជានិច្ច។
- ប្រើប្រាស់ការការពារ re-entry សម្រាប់ប្រតិបត្តិការសំខាន់ៗទាំងអស់។
- ដោះស្រាយការហៅខាងក្រៅគ្រប់ពេលដោយប្រុងប្រយ័ត្ន។
ការលើសចំនួនគត់:
នៅពេលការគណនាលើសពីដែនកំណត់ វានឹងលើសចំនួន ដែលជាញឹកញាប់នាំឱ្យមានតម្លៃតូចខ្លាំង ឬធំខ្លាំង។
ការវាយប្រហារជាឧទាហរណ៍:
- **BeautyChain (2018)**អ្នកវាយប្រហារបានយក BEC ចំនួន 10^58 តាមរយៈការលើសចំនួនគត់ ដោយបានបញ្ចេញទឹកប្រាក់ដ៏គួរឱ្យភ្ញាក់ផ្អើលចំនួន 900 លានដុល្លារ។
- **Poolz (2023)**បណ្តាលឱ្យបាត់បង់ប្រហែល 665,000 ដុល្លារនៅទូទាំង Ethereum, Binance និង Polygon នៅលើខ្សែសង្វាក់។
វិធានការប្រឆាំងការលើសចំនួនគត់:
- ប្រើប្រាស់វិធីសាស្ត្រគណនាប្រកបដោយសុវត្ថិភាព ដូចជាបណ្ណាល័យ safeMath។
- ផ្តល់អាទិភាពដល់ការត្រួតពិនិត្យដែនកំណត់ ដើម្បីបញ្ជាក់ថាលទ្ធផលនៅក្នុងជួរ។
- អនុម័តកំណែ Solidity compiler 0.8.0 ឬខ្ពស់ជាងនេះ សម្រាប់ការរកឃើញ overflow ដែលមានស្រាប់ក្នុងខ្លួន។
ការគ្រប់គ្រងការចូលប្រើ:
ភាពងាយរងគ្រោះផ្នែកគ្រប់គ្រងការចូលប្រើកើតឡើងពីការខ្វះខាតនូវការរឹតបន្តឹងការចូលប្រើដ៏តឹងរ៉ឹងលើមុខងារដែលគ្រប់គ្រងប្រតិបត្តិការសំខាន់ៗ។
- ការវាយប្រហារសំខាន់ៗ:
- DAOMaker (2021): ចំនួនប្រហែល $4M ដ៏ច្រើនត្រូវបានគេលួចយកទៅ បន្ទាប់ពី
initមុខងារត្រូវបានទុកឱ្យងាយរងគ្រោះ។ - GymNetwork (2022): អ្នកឆ្លៀតឱកាសបានទាញយកប្រយោជន៍ពីការមើលរំលងការផ្ទៀងផ្ទាត់អត្តសញ្ញាណនៅក្នុង depositFromOtherContract() ដែលអនុញ្ញាតឱ្យបង្កើនសមតុល្យដោយខុសច្បាប់ដោយគ្មានការបង់ប្រាក់ពិតប្រាកដ។ ការខាតបង់? ប្រហែល 2,475.91 WBNB។
- Tempdao (2023): វិធីសាស្ត្រធូរស្រាលក្នុងការគ្រប់គ្រងការចូលប្រើសម្រាប់មុខងារ migrateStake បាននាំឱ្យខាតបង់លើសពី 2.34 លានដុល្លារ។
ភាពងាយរងគ្រោះផ្នែកគ្រប់គ្រងការចូលប្រើ
- ការពិពណ៌នា: ភាពងាយរងគ្រោះដែលកើតឡើងដោយសារយន្តការកំណត់ដែនកំណត់មិនគ្រប់គ្រាន់ដែលគ្រប់គ្រងការចូលប្រើ និងសិទ្ធិសម្រាប់ប្រតិបត្តិការជាក់លាក់នៅក្នុងប្រព័ន្ធ។
វិធានការបង្ការ:
- ការត្រួតពិនិត្យសិទ្ធិយ៉ាងតឹងរ៉ឹង: ត្រូវអនុវត្តពិធីការអនុញ្ញាតយ៉ាងតឹងរ៉ឹងសម្រាប់មុខងារ ជាពិសេសអ្នកដែលគ្រប់គ្រងប្រតិបត្តិការរសើប។
- យន្តការហត្ថលេខាពហុគុណ: សម្រាប់កិច្ចការដែលត្រូវការការសម្រេចចិត្តរួមគ្នា សូមប្រើពិធីការហត្ថលេខាពហុគុណដែលត្រូវការការអនុម័តច្រើនមុនពេលអនុវត្តប្រតិបត្តិការរសើប។
វ៉ិចទ័រវាយប្រហារទូទៅ
- ការពិពណ៌នា: វិធីសាស្ត្រ ឬឆានែលផ្សេងៗដែលអ្នកវាយប្រហារប្រើប្រាស់ដើម្បីកេងយកភាពងាយរងគ្រោះនៅក្នុងប្រព័ន្ធ ជាពិសេសនៅក្នុង smart contract។
ឧទាហរណ៍គួរឱ្យកត់សម្គាល់:
- ការវាយប្រហារបែប FlashLoan: កេងយកមុខងារខ្ចីប្រាក់ភ្លាមៗរបស់ប្រព័ន្ធហិរញ្ញវត្ថុវិមជ្ឈការ ដើម្បីអនុវត្តសកម្មភាពព្យាបាទ។
- ការរត់មុន (Front-Running): អ្នកវាយប្រហារដឹងអំពីប្រតិបត្តិការដែលកំពុងរង់ចាំរបស់អ្នកប្រើប្រាស់ផ្សេង ហើយធ្វើសកម្មភាពលើវាដោយផ្តល់ថ្លៃ gas ខ្ពស់ជាង។
ការវាយប្រហារបែប FlashLoan
- ការពិពណ៌នា: ទោះបីជាមិនមែនជាការវាយប្រហារដោយធម្មជាតិក៏ដោយ FlashLoan គឺជាមុខងារ DeFi ដែលអនុញ្ញាតឱ្យអ្នកប្រើប្រាស់ខ្ចីប្រាក់ចំនួនច្រើនភ្លាមៗដោយគ្មានវត្ថុបញ្ចាំ។ វាត្រូវបានកេងប្រវ័ញ្ចដោយសារកំហុសឡូជីខលក្នុងអន្តរកម្ម និងទំនាក់ទំនងនៃកិច្ចសន្យា។
ការវាយប្រហារគួរឱ្យកត់សម្គាល់:
- Harves Finance (2020.10.26): បណ្តាលឱ្យខាតបង់ 38 លានដុល្លារ។
- InverseFinance (2022.6.16): បណ្តាលឱ្យខាតបង់ 53.2445 WBTC និង 99,976.29 USDT។
- NewFreeDAO (2022.9.8): បានដក 4,481 WBNB ដែលស្មើនឹងប្រហែល $1.25 លាន។
- Lodestar (2022.12.11): ត្រូវបានកេងប្រវ័ញ្ចតាមរយៈការរៀបចំតម្លៃ oracle។
- 0vix (2023.4.28): បណ្តាលឱ្យខាតបង់ $2 លាននៅលើខ្សែសង្វាក់ Polygon។
អនុសាសន៍បង្ការ:
- ស្គាល់លក្ខណៈ Flashloan ក្នុងអំឡុងពេលអភិវឌ្ឍគម្រោង។
- សម្រាប់ការកំណត់តម្លៃត្រឹមត្រូវ សូមប្រើមធ្យមភាគទម្ងន់ពេលវេលា ឬ oracle ច្រើន។
ការរត់មុន
- ការពិពណ៌នា: អ្នកវាយប្រហារទទួលបានដំណឹងអំពីប្រតិបត្តិការរបស់អ្នកប្រើប្រាស់ផ្សេងទៀតពី memPool ហើយទាញយកអត្ថប្រយោជន៍ពីវាដោយផ្តល់ថ្លៃហ្គាសខ្ពស់ជាង។
ការវាយប្រហារគួរឱ្យកត់សម្គាល់:
- Sushi Badger Digg (2021.1.25): បណ្តាលឱ្យខាតបង់ 81.68 ETH។
- Sushiswap Ape-ETH pool (2022.5.17): អ្នកវាយប្រហារទទួលបានផលចំណេញប្រហែល 0.3 ETH។
- Uniswap (2023.4.2): បណ្តាលឱ្យខាតបង់ប្រហែល 25 លានដុល្លារតាមរយៈការវាយប្រហារបែបសាំងវិច។
អនុសាសន៍បង្ការ:
- ប្រើការការពារការរអិលតម្លៃនៅពេលធ្វើពាណិជ្ជកម្ម។
- អនុវត្តការជួញដូរក្នុងអំឡុងពេលមិនមែនម៉ោងកំពូល ជាពិសេសនៅក្នុងទីផ្សារដែលប្រែប្រួលខ្លាំង។
- ប្រើ FlashBot rpc ដោយ 1inch ដើម្បីផ្ញើការជួញដូរដោយផ្ទាល់ទៅអ្នកជីក ដោយឆ្លងកាត់ memPool។
សេចក្តីសង្ខេប
អបអរសាទរ! អ្នកបានបញ្ចប់ម៉ូឌុល 2 - ភាពងាយរងគ្រោះនៃកិច្ចសន្យាឆ្លាតវៃ៖ ការសិក្សាស៊ីជម្រៅអំពីការវាយប្រហារបែប Reentrancy និងការកេងប្រវ័ញ្ចទូទៅ
តោះពិនិត្យមើលអ្វីដែលអ្នកបានរៀន៖
ភាពងាយរងគ្រោះដោយការហៅចូលឡើងវិញ - អ្នកវាយប្រហារឆ្លៀតឱកាសចន្លោះប្រហោង ដោយហៅចូលអនុគមន៍ឡើងវិញ មុនពេលពួកវាបញ្ចប់ពេញលេញ។
- ការហៅចូលឡើងវិញលើអនុគមន៍តែមួយ៖ កុងត្រាបោកប្រាស់មួយហៅចូលអនុគមន៍ក្នុងកុងត្រាមួយផ្សេងទៀតឡើងវិញ។
- ការហៅចូលឡើងវិញឆ្លងអនុគមន៍៖ ស្ថានភាពរួមគ្នារវាងអនុគមន៍ផ្សេងៗត្រូវបានឆ្លៀតឱកាស ដោយសារការការពារការហៅចូលឡើងវិញមិនល្អ។
- ការហៅចូលឡើងវិញឆ្លងកុងត្រា៖ ការកេងប្រវ័ញ្ចស្ថានភាពរួមគ្នានៅទូទាំងកិច្ចសន្យាផ្សេងៗគ្នា។
- ការចូលឡើងវិញបែបអានតែប៉ុណ្ណោះ៖ ការកេងប្រវ័ញ្ចមុខងារដែលបង្កើតលទ្ធផលខុស នៅពេលស្ថានភាពមិនស៊ីសង្វាក់គ្នា។
ការលើសចំនួនគត់ - ការគណនាលើសពីដែនកំណត់ដែលបានកំណត់ ដែលបណ្តាលឱ្យមានតម្លៃខ្លាំង។
ចន្លោះប្រហោងគ្រប់គ្រងការចូលប្រើ - កើតឡើងពីការខ្វះខាតដែនកំណត់ការចូលប្រើដ៏តឹងរ៉ឹងលើមុខងារសំខាន់ៗ។
វិធីវាយប្រហារទូទៅ - វិធីសាស្ត្រដែលអ្នកវាយប្រហារប្រើប្រាស់ដើម្បីកេងប្រវ័ញ្ចចន្លោះប្រហោងនៃប្រព័ន្ធ។
**FlashLoan Attack** - មុខងារ DeFi ដែលអនុញ្ញាតឱ្យខ្ចីប្រាក់ចំនួនធំភ្លាមៗដោយគ្មានវត្ថុបញ្ចាំ ប៉ុន្តែត្រូវបានកេងប្រវ័ញ្ចដោយសារកំហុសឡូជីខល។
ការវាយប្រហារបែប Front-running- អ្នកវាយប្រហារដឹងអំពីប្រតិបត្តិការដែលកំពុងរង់ចាំ ហើយទាញយកផលប្រយោជន៍ដោយផ្តល់ថ្លៃ gas ខ្ពស់ជាង។
អត្ថបទនេះត្រូវបាននាំមកជូនអ្នកដោយ៖
