ប្លុក

បកប្រែដោយស្វ័យប្រវត្តិ · អានជាភាសាអង់គ្លេស

SSO Module 2 - ភាពងាយរងគ្រោះនៃកិច្ចសន្យាឆ្លាតវៃ៖ ការសិក្សាស៊ីជម្រៅអំពីការវាយប្រហារបែប Reentrancy

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

ដោយ Markos Mebellis

SSO Module 2 - ភាពងាយរងគ្រោះនៃកិច្ចសន្យាឆ្លាតវៃ៖ ការសិក្សាស៊ីជម្រៅអំពីការវាយប្រហារបែប Reentrancy
នៅលើទំព័រនេះ

កិច្ចសន្យាឆ្លាតវៃកំពុងធ្វើបដិវត្តន៍ឧស្សាហកម្មសកលដោយសារប្រសិទ្ធភាព តម្លាភាព និងលក្ខណៈមិនអាចកែប្រែបានរបស់ពួកវា។ ប៉ុន្តែ ការរចនាបែបបើកចំហ និងស្វ័យប្រវត្តិរបស់ពួកវាក៏បង្ហាញពួកវាឱ្យប្រឈមនឹងហានិភ័យផងដែរ។ ដើម្បីបង្កើនសក្តានុពលរបស់ពួកវាឱ្យអតិបរមា ខណៈកាត់បន្ថយការគំរាមកំហែង វាជាការសំខាន់ក្នុងការយល់ដឹងពីភាពងាយរងគ្រោះ និងផ្លូវវាយប្រហារដែលអាចកើតមានរបស់ពួកវា។ ការបង្កើត និងថែទាំកិច្ចសន្យាទាំងនេះទាមទារការយកចិត្តទុកដាក់ដោយប្រុងប្រយ័ត្ន និងការអនុវត្តតាមការអនុវត្តល្អបំផុត។ អត្ថបទនេះសិក្សាស៊ីជម្រៅអំពីភាពងាយរងគ្រោះទូទៅ ដោយបង្ហាញឧទាហរណ៍ជាមួយករណីជាក់ស្តែង ដើម្បីបង្កើនការយល់ដឹង។ តោះមើលអត្ថបទខាងក្រោម ដែលផ្តល់ដោយ 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:

  1. ត្រូវប្រកាន់ខ្ជាប់នូវគំរូ check-effect-interaction ជានិច្ច។
  2. ប្រើប្រាស់ការការពារ re-entry សម្រាប់ប្រតិបត្តិការសំខាន់ៗទាំងអស់។
  3. ដោះស្រាយការហៅខាងក្រៅគ្រប់ពេលដោយប្រុងប្រយ័ត្ន។

ការលើសចំនួនគត់:

នៅពេលការគណនាលើសពីដែនកំណត់ វានឹងលើសចំនួន ដែលជាញឹកញាប់នាំឱ្យមានតម្លៃតូចខ្លាំង ឬធំខ្លាំង។

ការវាយប្រហារជាឧទាហរណ៍:

  • **BeautyChain (2018)**អ្នកវាយប្រហារបានយក BEC ចំនួន 10^58 តាមរយៈការលើសចំនួនគត់ ដោយបានបញ្ចេញទឹកប្រាក់ដ៏គួរឱ្យភ្ញាក់ផ្អើលចំនួន 900 លានដុល្លារ។
  • **Poolz (2023)**បណ្តាលឱ្យបាត់បង់ប្រហែល 665,000 ដុល្លារនៅទូទាំង Ethereum, Binance និង Polygon នៅលើខ្សែសង្វាក់។

វិធានការប្រឆាំងការលើសចំនួនគត់:

  1. ប្រើប្រាស់វិធីសាស្ត្រគណនាប្រកបដោយសុវត្ថិភាព ដូចជាបណ្ណាល័យ safeMath។
  2. ផ្តល់អាទិភាពដល់ការត្រួតពិនិត្យដែនកំណត់ ដើម្បីបញ្ជាក់ថាលទ្ធផលនៅក្នុងជួរ។
  3. អនុម័តកំណែ Solidity compiler 0.8.0 ឬខ្ពស់ជាងនេះ សម្រាប់ការរកឃើញ overflow ដែលមានស្រាប់ក្នុងខ្លួន។

ការគ្រប់គ្រងការចូលប្រើ:
ភាពងាយរងគ្រោះផ្នែកគ្រប់គ្រងការចូលប្រើកើតឡើងពីការខ្វះខាតនូវការរឹតបន្តឹងការចូលប្រើដ៏តឹងរ៉ឹងលើមុខងារដែលគ្រប់គ្រងប្រតិបត្តិការសំខាន់ៗ។

  • ការវាយប្រហារសំខាន់ៗ:
  • DAOMaker (2021): ចំនួនប្រហែល $4M ដ៏ច្រើនត្រូវបានគេលួចយកទៅ បន្ទាប់ពី init មុខងារត្រូវបានទុកឱ្យងាយរងគ្រោះ។
  • GymNetwork (2022): អ្នកឆ្លៀតឱកាសបានទាញយកប្រយោជន៍ពីការមើលរំលងការផ្ទៀងផ្ទាត់អត្តសញ្ញាណនៅក្នុង depositFromOtherContract() ដែលអនុញ្ញាតឱ្យបង្កើនសមតុល្យដោយខុសច្បាប់ដោយគ្មានការបង់ប្រាក់ពិតប្រាកដ។ ការខាតបង់? ប្រហែល 2,475.91 WBNB។
  • Tempdao (2023): វិធីសាស្ត្រធូរស្រាលក្នុងការគ្រប់គ្រងការចូលប្រើសម្រាប់មុខងារ migrateStake បាននាំឱ្យខាតបង់លើសពី 2.34 លានដុល្លារ។

ភាពងាយរងគ្រោះផ្នែកគ្រប់គ្រងការចូលប្រើ

  • ការពិពណ៌នា: ភាពងាយរងគ្រោះដែលកើតឡើងដោយសារយន្តការកំណត់ដែនកំណត់មិនគ្រប់គ្រាន់ដែលគ្រប់គ្រងការចូលប្រើ និងសិទ្ធិសម្រាប់ប្រតិបត្តិការជាក់លាក់នៅក្នុងប្រព័ន្ធ។

វិធានការបង្ការ:

  1. ការត្រួតពិនិត្យសិទ្ធិយ៉ាងតឹងរ៉ឹង: ត្រូវអនុវត្តពិធីការអនុញ្ញាតយ៉ាងតឹងរ៉ឹងសម្រាប់មុខងារ ជាពិសេសអ្នកដែលគ្រប់គ្រងប្រតិបត្តិការរសើប។
  2. យន្តការហត្ថលេខាពហុគុណ: សម្រាប់កិច្ចការដែលត្រូវការការសម្រេចចិត្តរួមគ្នា សូមប្រើពិធីការហត្ថលេខាពហុគុណដែលត្រូវការការអនុម័តច្រើនមុនពេលអនុវត្តប្រតិបត្តិការរសើប។

វ៉ិចទ័រវាយប្រហារទូទៅ

  • ការពិពណ៌នា: វិធីសាស្ត្រ ឬឆានែលផ្សេងៗដែលអ្នកវាយប្រហារប្រើប្រាស់ដើម្បីកេងយកភាពងាយរងគ្រោះនៅក្នុងប្រព័ន្ធ ជាពិសេសនៅក្នុង smart contract។

ឧទាហរណ៍គួរឱ្យកត់សម្គាល់:

  • ការវាយប្រហារបែប FlashLoan: កេងយកមុខងារខ្ចីប្រាក់ភ្លាមៗរបស់ប្រព័ន្ធហិរញ្ញវត្ថុវិមជ្ឈការ ដើម្បីអនុវត្តសកម្មភាពព្យាបាទ។
  • ការរត់មុន (Front-Running): អ្នកវាយប្រហារដឹងអំពីប្រតិបត្តិការដែលកំពុងរង់ចាំរបស់អ្នកប្រើប្រាស់ផ្សេង ហើយធ្វើសកម្មភាពលើវាដោយផ្តល់ថ្លៃ gas ខ្ពស់ជាង។

ការវាយប្រហារបែប FlashLoan

  • ការពិពណ៌នា: ទោះបីជាមិនមែនជាការវាយប្រហារដោយធម្មជាតិក៏ដោយ FlashLoan គឺជាមុខងារ DeFi ដែលអនុញ្ញាតឱ្យអ្នកប្រើប្រាស់ខ្ចីប្រាក់ចំនួនច្រើនភ្លាមៗដោយគ្មានវត្ថុបញ្ចាំ។ វាត្រូវបានកេងប្រវ័ញ្ចដោយសារកំហុសឡូជីខលក្នុងអន្តរកម្ម និងទំនាក់ទំនងនៃកិច្ចសន្យា។

ការវាយប្រហារគួរឱ្យកត់សម្គាល់:

  1. Harves Finance (2020.10.26): បណ្តាលឱ្យខាតបង់ 38 លានដុល្លារ។
  2. InverseFinance (2022.6.16): បណ្តាលឱ្យខាតបង់ 53.2445 WBTC និង 99,976.29 USDT។
  3. NewFreeDAO (2022.9.8): បានដក 4,481 WBNB ដែលស្មើនឹងប្រហែល $1.25 លាន។
  4. Lodestar (2022.12.11): ត្រូវបានកេងប្រវ័ញ្ចតាមរយៈការរៀបចំតម្លៃ oracle។
  5. 0vix (2023.4.28): បណ្តាលឱ្យខាតបង់ $2 លាននៅលើខ្សែសង្វាក់ Polygon។

អនុសាសន៍បង្ការ:

  1. ស្គាល់លក្ខណៈ Flashloan ក្នុងអំឡុងពេលអភិវឌ្ឍគម្រោង។
  2. សម្រាប់ការកំណត់តម្លៃត្រឹមត្រូវ សូមប្រើមធ្យមភាគទម្ងន់ពេលវេលា ឬ oracle ច្រើន។

ការរត់មុន

  • ការពិពណ៌នា: អ្នកវាយប្រហារទទួលបានដំណឹងអំពីប្រតិបត្តិការរបស់អ្នកប្រើប្រាស់ផ្សេងទៀតពី memPool ហើយទាញយកអត្ថប្រយោជន៍ពីវាដោយផ្តល់ថ្លៃហ្គាសខ្ពស់ជាង។

ការវាយប្រហារគួរឱ្យកត់សម្គាល់:

  1. Sushi Badger Digg (2021.1.25): បណ្តាលឱ្យខាតបង់ 81.68 ETH។
  2. Sushiswap Ape-ETH pool (2022.5.17): អ្នកវាយប្រហារទទួលបានផលចំណេញប្រហែល 0.3 ETH។
  3. Uniswap (2023.4.2): បណ្តាលឱ្យខាតបង់ប្រហែល 25 លានដុល្លារតាមរយៈការវាយប្រហារបែបសាំងវិច។

អនុសាសន៍បង្ការ:

  1. ប្រើការការពារការរអិលតម្លៃនៅពេលធ្វើពាណិជ្ជកម្ម។
  2. អនុវត្តការជួញដូរក្នុងអំឡុងពេលមិនមែនម៉ោងកំពូល ជាពិសេសនៅក្នុងទីផ្សារដែលប្រែប្រួលខ្លាំង។
  3. ប្រើ FlashBot rpc ដោយ 1inch ដើម្បីផ្ញើការជួញដូរដោយផ្ទាល់ទៅអ្នកជីក ដោយឆ្លងកាត់ memPool។

សេចក្តីសង្ខេប

អបអរសាទរ! អ្នកបានបញ្ចប់ម៉ូឌុល 2 - ភាពងាយរងគ្រោះនៃកិច្ចសន្យាឆ្លាតវៃ៖ ការសិក្សាស៊ីជម្រៅអំពីការវាយប្រហារបែប Reentrancy និងការកេងប្រវ័ញ្ចទូទៅ

តោះពិនិត្យមើលអ្វីដែលអ្នកបានរៀន៖

ភាពងាយរងគ្រោះដោយការហៅចូលឡើងវិញ - អ្នកវាយប្រហារឆ្លៀតឱកាសចន្លោះប្រហោង ដោយហៅចូលអនុគមន៍ឡើងវិញ មុនពេលពួកវាបញ្ចប់ពេញលេញ។

  • ការហៅចូលឡើងវិញលើអនុគមន៍តែមួយ៖ កុងត្រាបោកប្រាស់មួយហៅចូលអនុគមន៍ក្នុងកុងត្រាមួយផ្សេងទៀតឡើងវិញ។
  • ការហៅចូលឡើងវិញឆ្លងអនុគមន៍៖ ស្ថានភាពរួមគ្នារវាងអនុគមន៍ផ្សេងៗត្រូវបានឆ្លៀតឱកាស ដោយសារការការពារការហៅចូលឡើងវិញមិនល្អ។
  • ការហៅចូលឡើងវិញឆ្លងកុងត្រា៖ ការកេងប្រវ័ញ្ចស្ថានភាពរួមគ្នានៅទូទាំងកិច្ចសន្យាផ្សេងៗគ្នា។
  • ការចូលឡើងវិញបែបអានតែប៉ុណ្ណោះ៖ ការកេងប្រវ័ញ្ចមុខងារដែលបង្កើតលទ្ធផលខុស នៅពេលស្ថានភាពមិនស៊ីសង្វាក់គ្នា។

ការលើសចំនួនគត់ - ការគណនាលើសពីដែនកំណត់ដែលបានកំណត់ ដែលបណ្តាលឱ្យមានតម្លៃខ្លាំង។

ចន្លោះប្រហោងគ្រប់គ្រងការចូលប្រើ - កើតឡើងពីការខ្វះខាតដែនកំណត់ការចូលប្រើដ៏តឹងរ៉ឹងលើមុខងារសំខាន់ៗ។

វិធីវាយប្រហារទូទៅ - វិធីសាស្ត្រដែលអ្នកវាយប្រហារប្រើប្រាស់ដើម្បីកេងប្រវ័ញ្ចចន្លោះប្រហោងនៃប្រព័ន្ធ។

**FlashLoan Attack** - មុខងារ DeFi ដែលអនុញ្ញាតឱ្យខ្ចីប្រាក់ចំនួនធំភ្លាមៗដោយគ្មានវត្ថុបញ្ចាំ ប៉ុន្តែត្រូវបានកេងប្រវ័ញ្ចដោយសារកំហុសឡូជីខល។

ការវាយប្រហារបែប Front-running- អ្នកវាយប្រហារដឹងអំពីប្រតិបត្តិការដែលកំពុងរង់ចាំ ហើយទាញយកផលប្រយោជន៍ដោយផ្តល់ថ្លៃ gas ខ្ពស់ជាង។

អត្ថបទនេះត្រូវបាននាំមកជូនអ្នកដោយ៖

សេចក្តីសង្ខេប — រូបភាពបង្ហាញ